Why every Agent(isolation:"worktree") spawn broke in ork 8.30.0–8.32.0,
and the three guardrails this PR adds.
worktree-provisioner in src/hooks/src/// Generated: <timestamp> → every rebuild dirties ALL bundlesnoiseplugins/ork/hooks/dist/*.mjs is gitignored → remote installs ship NO bundles; local installs copy whatever stale dist is on diskroot causelifecycle.mjs lacks the provisioner → hook exits 0 with empty stdout → every worktree-isolated agent spawn aborts (8.30.0–8.32.0)bundle-stats.json → identical source = byte-identical distdeterministicplugins/ork/hooks/dist/ is tracked in git → marketplace installs always get the built bundlesshippedplugins/ AND src/hooks/dist/ after a fresh rebuild — on PRs and on push: maingatedcd src/hooks && npm run build.src/hooks/dist/ +
plugins/ork/hooks/dist/ — the stale committed copy differs from the fresh build and the
drift gate fails the PR.
push to main — the post-merge rebuild diverges from the
committed bundles and main goes red immediately instead of shipping a broken release.
npm run build.node_modules is missing AND
no committed dist exists, it also aborts instead of assembling an empty hooks payload.
| Guardrail | File | Failure mode it kills |
|---|---|---|
| Deterministic bundles | src/hooks/esbuild.config.mjs | Timestamp churn masking real bundle diffs |
| Tracked dist | .gitignore | Marketplace installs shipping no/stale bundles |
| Hard-fail build | scripts/build-plugins.sh | “BUILD COMPLETE” after a failed esbuild |
| Extended drift gate | .github/workflows/ci.yml, prerelease.yml | Cross-PR staleness reaching a release |