Issue #2360 — shipping hook bundles, before / after

Why every Agent(isolation:"worktree") spawn broke in ork 8.30.0–8.32.0, and the three guardrails this PR adds.

Before (the incident path)

After (this PR)

Dev edits a hook, forgets cd src/hooks && npm run build.

Before: rsync copies the stale dist into plugins/; gitignore hides it; PR merges green; users run old code.
After: CI installs hook deps, rebuilds from source, then diffs the tracked src/hooks/dist/ + plugins/ork/hooks/dist/ — the stale committed copy differs from the fresh build and the drift gate fails the PR.
Two same-day PRs; the second rebuilds plugins/ from a tree without the first PR's hook fix.

Before: per-PR self-consistency passes both; last-write-wins erases the fix on main; nothing re-checks main.
After: the drift gate also runs on push to main — the post-merge rebuild diverges from the committed bundles and main goes red immediately instead of shipping a broken release.
The hooks esbuild step errors during npm run build.

Before: warn-and-continue; script prints “BUILD COMPLETE”; stale bundles ship.
After: the build aborts with exit 1 and an explicit error; if node_modules is missing AND no committed dist exists, it also aborts instead of assembling an empty hooks payload.
GuardrailFileFailure mode it kills
Deterministic bundlessrc/hooks/esbuild.config.mjsTimestamp churn masking real bundle diffs
Tracked dist.gitignoreMarketplace installs shipping no/stale bundles
Hard-fail buildscripts/build-plugins.sh“BUILD COMPLETE” after a failed esbuild
Extended drift gate.github/workflows/ci.yml, prerelease.ymlCross-PR staleness reaching a release