`phase-gate.py` (the repo-factory skill's Phase 4/5/6 completion gate, used to
decide when this project and gitseed have finished a phase) lives at
`~/.claude/skills/repo-factory/scripts/phase-gate.py` — a path that exists
only on the operator's machine. `docs/ROADMAP-TO-DONE.md` (Goal 3) records
this: "phase-gate.py lives in ~/.claude/skills/, so it is absent from the CI
runner. CI use requires vendoring. Nobody is doing it." It has always exited
non-zero on failure locally; the gap is availability, not exit-code
correctness.
Fix: publish the script to a small public mirror
(`github.com/MongLong0214/repo-factory-gate`), pinned by commit SHA + sha256,
and add `.github/workflows/phase-gate.yml` here that fetches it at that pin
and runs it — `workflow_dispatch` for Phase 4/5 (on-demand, since Phase 5's
own condition — zero open non-Backlog issues — is false for most of an active
wave by construction), automatic on release tag push for Phase 6 (its
conditions stay met once met).
Ruled out: vendoring a copy into gitseed and this repo (creates two more
copies of the gate that can drift and answer the same question differently —
exactly the defect class this repo's own #89/#90 closed for CommitLore's
trust logic); moving the gate into this repo and having the skill reference
it (inverts the dependency — a project should not own the factory's gate).
`phase-gate.py` (the repo-factory skill's Phase 4/5/6 completion gate, used to
decide when this project and gitseed have finished a phase) lives at
`~/.claude/skills/repo-factory/scripts/phase-gate.py` — a path that exists
only on the operator's machine. `docs/ROADMAP-TO-DONE.md` (Goal 3) records
this: "phase-gate.py lives in ~/.claude/skills/, so it is absent from the CI
runner. CI use requires vendoring. Nobody is doing it." It has always exited
non-zero on failure locally; the gap is availability, not exit-code
correctness.
Fix: publish the script to a small public mirror
(`github.com/MongLong0214/repo-factory-gate`), pinned by commit SHA + sha256,
and add `.github/workflows/phase-gate.yml` here that fetches it at that pin
and runs it — `workflow_dispatch` for Phase 4/5 (on-demand, since Phase 5's
own condition — zero open non-Backlog issues — is false for most of an active
wave by construction), automatic on release tag push for Phase 6 (its
conditions stay met once met).
Ruled out: vendoring a copy into gitseed and this repo (creates two more
copies of the gate that can drift and answer the same question differently —
exactly the defect class this repo's own #89/#90 closed for CommitLore's
trust logic); moving the gate into this repo and having the skill reference
it (inverts the dependency — a project should not own the factory's gate).