@garygentry/feature-forge 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/claude/.feature-forge-bundle.json +1 -1
- package/adapters/claude/references/epic-manifest-schema.json +6 -1
- package/adapters/claude/references/forge-config-schema.json +1 -1
- package/adapters/claude/references/pipeline-state-schema.json +4 -2
- package/adapters/claude/references/shared-conventions.md +63 -0
- package/adapters/claude/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/scripts/epic-manifest.py +413 -87
- package/adapters/claude/scripts/forge-bootstrap.py +57 -5
- package/adapters/claude/scripts/forge-session.py +3136 -139
- package/adapters/claude/scripts/validate-traceability.py +86 -5
- package/adapters/claude/skills/forge/SKILL.md +7 -6
- package/adapters/claude/skills/forge/references/pipeline-state-schema.json +4 -2
- package/adapters/claude/skills/forge/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-0-epic/SKILL.md +7 -2
- package/adapters/claude/skills/forge-0-epic/references/edit-mode.md +24 -24
- package/adapters/claude/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
- package/adapters/claude/skills/forge-0-epic/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-1-prd/SKILL.md +14 -3
- package/adapters/claude/skills/forge-1-prd/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-2-tech/SKILL.md +13 -3
- package/adapters/claude/skills/forge-2-tech/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-3-specs/SKILL.md +4 -2
- package/adapters/claude/skills/forge-3-specs/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-3-specs/references/spec-archetypes.md +9 -0
- package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-4-backlog/SKILL.md +16 -3
- package/adapters/claude/skills/forge-4-backlog/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-5-loop/SKILL.md +40 -42
- package/adapters/claude/skills/forge-5-loop/references/result-reporting.md +70 -31
- package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +4 -2
- package/adapters/claude/skills/forge-5-loop/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-6-docs/SKILL.md +48 -4
- package/adapters/claude/skills/forge-6-docs/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
- package/adapters/claude/skills/forge-fix/SKILL.md +85 -33
- package/adapters/claude/skills/forge-fix/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +344 -140
- package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +1 -1
- package/adapters/claude/skills/forge-guide/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-verify/SKILL.md +73 -41
- package/adapters/claude/skills/forge-verify/references/findings-template.md +39 -49
- package/adapters/claude/skills/forge-verify/references/shared-conventions.md +63 -0
- package/adapters/claude/skills/forge-verify/references/stage-exit-protocol.md +472 -0
- package/adapters/claude/skills/forge-verify/references/verification-checklists/epic.md +4 -3
- package/adapters/claude/skills/forge-verify/references/verification-checklists/specs.md +2 -0
- package/adapters/codex/.feature-forge-bundle.json +1 -1
- package/adapters/codex/references/epic-manifest-schema.json +6 -1
- package/adapters/codex/references/forge-config-schema.json +1 -1
- package/adapters/codex/references/pipeline-state-schema.json +4 -2
- package/adapters/codex/references/shared-conventions.md +63 -0
- package/adapters/codex/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/scripts/epic-manifest.py +413 -87
- package/adapters/codex/scripts/forge-bootstrap.py +57 -5
- package/adapters/codex/scripts/forge-session.py +3136 -139
- package/adapters/codex/scripts/validate-traceability.py +86 -5
- package/adapters/codex/skills/forge/SKILL.md +7 -6
- package/adapters/codex/skills/forge/references/pipeline-state-schema.json +4 -2
- package/adapters/codex/skills/forge/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-0-epic/SKILL.md +7 -2
- package/adapters/codex/skills/forge-0-epic/references/edit-mode.md +24 -24
- package/adapters/codex/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
- package/adapters/codex/skills/forge-0-epic/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-1-prd/SKILL.md +14 -3
- package/adapters/codex/skills/forge-1-prd/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-2-tech/SKILL.md +13 -3
- package/adapters/codex/skills/forge-2-tech/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-3-specs/SKILL.md +4 -2
- package/adapters/codex/skills/forge-3-specs/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-3-specs/references/spec-archetypes.md +9 -0
- package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-4-backlog/SKILL.md +16 -3
- package/adapters/codex/skills/forge-4-backlog/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-5-loop/SKILL.md +40 -42
- package/adapters/codex/skills/forge-5-loop/references/result-reporting.md +70 -31
- package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +4 -2
- package/adapters/codex/skills/forge-5-loop/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-6-docs/SKILL.md +48 -4
- package/adapters/codex/skills/forge-6-docs/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
- package/adapters/codex/skills/forge-fix/SKILL.md +84 -32
- package/adapters/codex/skills/forge-fix/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +344 -140
- package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +1 -1
- package/adapters/codex/skills/forge-guide/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-verify/SKILL.md +72 -40
- package/adapters/codex/skills/forge-verify/references/findings-template.md +39 -49
- package/adapters/codex/skills/forge-verify/references/shared-conventions.md +63 -0
- package/adapters/codex/skills/forge-verify/references/stage-exit-protocol.md +472 -0
- package/adapters/codex/skills/forge-verify/references/verification-checklists/epic.md +4 -3
- package/adapters/codex/skills/forge-verify/references/verification-checklists/specs.md +2 -0
- package/adapters/copilot/.feature-forge-bundle.json +1 -1
- package/adapters/copilot/references/epic-manifest-schema.json +6 -1
- package/adapters/copilot/references/forge-config-schema.json +1 -1
- package/adapters/copilot/references/pipeline-state-schema.json +4 -2
- package/adapters/copilot/references/shared-conventions.md +63 -0
- package/adapters/copilot/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/scripts/epic-manifest.py +413 -87
- package/adapters/copilot/scripts/forge-bootstrap.py +57 -5
- package/adapters/copilot/scripts/forge-session.py +3136 -139
- package/adapters/copilot/scripts/validate-traceability.py +86 -5
- package/adapters/copilot/skills/forge/forge.md +7 -6
- package/adapters/copilot/skills/forge/references/pipeline-state-schema.json +4 -2
- package/adapters/copilot/skills/forge/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-0-epic/forge-0-epic.md +7 -2
- package/adapters/copilot/skills/forge-0-epic/references/edit-mode.md +24 -24
- package/adapters/copilot/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
- package/adapters/copilot/skills/forge-0-epic/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +14 -3
- package/adapters/copilot/skills/forge-1-prd/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +13 -3
- package/adapters/copilot/skills/forge-2-tech/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +4 -2
- package/adapters/copilot/skills/forge-3-specs/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-3-specs/references/spec-archetypes.md +9 -0
- package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +16 -3
- package/adapters/copilot/skills/forge-4-backlog/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +40 -42
- package/adapters/copilot/skills/forge-5-loop/references/result-reporting.md +70 -31
- package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +4 -2
- package/adapters/copilot/skills/forge-5-loop/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +48 -4
- package/adapters/copilot/skills/forge-6-docs/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
- package/adapters/copilot/skills/forge-fix/forge-fix.md +84 -32
- package/adapters/copilot/skills/forge-fix/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +344 -140
- package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +1 -1
- package/adapters/copilot/skills/forge-guide/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-verify/forge-verify.md +72 -40
- package/adapters/copilot/skills/forge-verify/references/findings-template.md +39 -49
- package/adapters/copilot/skills/forge-verify/references/shared-conventions.md +63 -0
- package/adapters/copilot/skills/forge-verify/references/stage-exit-protocol.md +472 -0
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/epic.md +4 -3
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/specs.md +2 -0
- package/adapters/cursor/.feature-forge-bundle.json +1 -1
- package/adapters/cursor/references/epic-manifest-schema.json +6 -1
- package/adapters/cursor/references/forge-config-schema.json +1 -1
- package/adapters/cursor/references/pipeline-state-schema.json +4 -2
- package/adapters/cursor/references/shared-conventions.md +63 -0
- package/adapters/cursor/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/scripts/epic-manifest.py +413 -87
- package/adapters/cursor/scripts/forge-bootstrap.py +57 -5
- package/adapters/cursor/scripts/forge-session.py +3136 -139
- package/adapters/cursor/scripts/validate-traceability.py +86 -5
- package/adapters/cursor/skills/forge/forge.mdc +7 -6
- package/adapters/cursor/skills/forge/references/pipeline-state-schema.json +4 -2
- package/adapters/cursor/skills/forge/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-0-epic/forge-0-epic.mdc +7 -2
- package/adapters/cursor/skills/forge-0-epic/references/edit-mode.md +24 -24
- package/adapters/cursor/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
- package/adapters/cursor/skills/forge-0-epic/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +14 -3
- package/adapters/cursor/skills/forge-1-prd/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +13 -3
- package/adapters/cursor/skills/forge-2-tech/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +4 -2
- package/adapters/cursor/skills/forge-3-specs/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-3-specs/references/spec-archetypes.md +9 -0
- package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +16 -3
- package/adapters/cursor/skills/forge-4-backlog/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +40 -42
- package/adapters/cursor/skills/forge-5-loop/references/result-reporting.md +70 -31
- package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +4 -2
- package/adapters/cursor/skills/forge-5-loop/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +48 -4
- package/adapters/cursor/skills/forge-6-docs/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
- package/adapters/cursor/skills/forge-fix/forge-fix.mdc +84 -32
- package/adapters/cursor/skills/forge-fix/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +344 -140
- package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +1 -1
- package/adapters/cursor/skills/forge-guide/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-verify/forge-verify.mdc +72 -40
- package/adapters/cursor/skills/forge-verify/references/findings-template.md +39 -49
- package/adapters/cursor/skills/forge-verify/references/shared-conventions.md +63 -0
- package/adapters/cursor/skills/forge-verify/references/stage-exit-protocol.md +472 -0
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/epic.md +4 -3
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/specs.md +2 -0
- package/adapters/gemini/.feature-forge-bundle.json +1 -1
- package/adapters/gemini/gemini-extension.json +1 -1
- package/adapters/gemini/references/epic-manifest-schema.json +6 -1
- package/adapters/gemini/references/forge-config-schema.json +1 -1
- package/adapters/gemini/references/pipeline-state-schema.json +4 -2
- package/adapters/gemini/references/shared-conventions.md +63 -0
- package/adapters/gemini/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/scripts/epic-manifest.py +413 -87
- package/adapters/gemini/scripts/forge-bootstrap.py +57 -5
- package/adapters/gemini/scripts/forge-session.py +3136 -139
- package/adapters/gemini/scripts/validate-traceability.py +86 -5
- package/adapters/gemini/skills/forge/forge.md +7 -6
- package/adapters/gemini/skills/forge/references/pipeline-state-schema.json +4 -2
- package/adapters/gemini/skills/forge/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-0-epic/forge-0-epic.md +7 -2
- package/adapters/gemini/skills/forge-0-epic/references/edit-mode.md +24 -24
- package/adapters/gemini/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
- package/adapters/gemini/skills/forge-0-epic/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +14 -3
- package/adapters/gemini/skills/forge-1-prd/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +13 -3
- package/adapters/gemini/skills/forge-2-tech/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +4 -2
- package/adapters/gemini/skills/forge-3-specs/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-3-specs/references/spec-archetypes.md +9 -0
- package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +16 -3
- package/adapters/gemini/skills/forge-4-backlog/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +40 -42
- package/adapters/gemini/skills/forge-5-loop/references/result-reporting.md +70 -31
- package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +4 -2
- package/adapters/gemini/skills/forge-5-loop/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +48 -4
- package/adapters/gemini/skills/forge-6-docs/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
- package/adapters/gemini/skills/forge-fix/forge-fix.md +84 -32
- package/adapters/gemini/skills/forge-fix/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +344 -140
- package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +1 -1
- package/adapters/gemini/skills/forge-guide/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-verify/forge-verify.md +72 -40
- package/adapters/gemini/skills/forge-verify/references/findings-template.md +39 -49
- package/adapters/gemini/skills/forge-verify/references/shared-conventions.md +63 -0
- package/adapters/gemini/skills/forge-verify/references/stage-exit-protocol.md +472 -0
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/epic.md +4 -3
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/specs.md +2 -0
- package/adapters/pi/.feature-forge-bundle.json +1 -1
- package/adapters/pi/references/epic-manifest-schema.json +6 -1
- package/adapters/pi/references/forge-config-schema.json +1 -1
- package/adapters/pi/references/pipeline-state-schema.json +4 -2
- package/adapters/pi/references/shared-conventions.md +63 -0
- package/adapters/pi/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/scripts/epic-manifest.py +413 -87
- package/adapters/pi/scripts/forge-bootstrap.py +57 -5
- package/adapters/pi/scripts/forge-session.py +3136 -139
- package/adapters/pi/scripts/validate-traceability.py +86 -5
- package/adapters/pi/skills/forge/SKILL.md +7 -6
- package/adapters/pi/skills/forge/references/pipeline-state-schema.json +4 -2
- package/adapters/pi/skills/forge/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-0-epic/SKILL.md +7 -2
- package/adapters/pi/skills/forge-0-epic/references/edit-mode.md +24 -24
- package/adapters/pi/skills/forge-0-epic/references/pipeline-state-schema.json +4 -2
- package/adapters/pi/skills/forge-0-epic/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-0-epic/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-1-prd/SKILL.md +14 -3
- package/adapters/pi/skills/forge-1-prd/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-1-prd/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-2-tech/SKILL.md +13 -3
- package/adapters/pi/skills/forge-2-tech/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-2-tech/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-3-specs/SKILL.md +4 -2
- package/adapters/pi/skills/forge-3-specs/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-3-specs/references/spec-archetypes.md +9 -0
- package/adapters/pi/skills/forge-3-specs/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-4-backlog/SKILL.md +16 -3
- package/adapters/pi/skills/forge-4-backlog/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-4-backlog/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-5-loop/SKILL.md +40 -42
- package/adapters/pi/skills/forge-5-loop/references/result-reporting.md +70 -31
- package/adapters/pi/skills/forge-5-loop/references/runner-contract.md +4 -2
- package/adapters/pi/skills/forge-5-loop/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-5-loop/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-6-docs/SKILL.md +48 -4
- package/adapters/pi/skills/forge-6-docs/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-6-docs/references/stage-exit-protocol.md +472 -0
- package/adapters/pi/skills/forge-fix/SKILL.md +84 -32
- package/adapters/pi/skills/forge-fix/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-fix/references/stage-exit-protocol.md +344 -140
- package/adapters/pi/skills/forge-guide/references/forge-config-schema.json +1 -1
- package/adapters/pi/skills/forge-guide/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-verify/SKILL.md +72 -40
- package/adapters/pi/skills/forge-verify/references/findings-template.md +39 -49
- package/adapters/pi/skills/forge-verify/references/shared-conventions.md +63 -0
- package/adapters/pi/skills/forge-verify/references/stage-exit-protocol.md +472 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/epic.md +4 -3
- package/adapters/pi/skills/forge-verify/references/verification-checklists/specs.md +2 -0
- package/package.json +1 -1
- package/adapters/claude/skills/forge-verify/references/pipeline-state-schema.json +0 -191
- package/adapters/codex/skills/forge-verify/references/pipeline-state-schema.json +0 -191
- package/adapters/copilot/skills/forge-verify/references/pipeline-state-schema.json +0 -191
- package/adapters/cursor/skills/forge-verify/references/pipeline-state-schema.json +0 -191
- package/adapters/gemini/skills/forge-verify/references/pipeline-state-schema.json +0 -191
- package/adapters/pi/skills/forge-verify/references/pipeline-state-schema.json +0 -191
|
@@ -164,6 +164,7 @@ sequence, **not** a dependency ordering). Preserve the C2 order unless the user
|
|
|
164
164
|
Compose the full `epic-manifest.json` per the 00 §2 schema, setting:
|
|
165
165
|
|
|
166
166
|
- `schemaVersion`: `1`
|
|
167
|
+
- `revision`: `1` — the canonical artifact revision epic-scoped verification freshness compares against. Creation always writes `1`; every later mutation bumps it exactly once via the helper mutators. Never hand-edit it.
|
|
167
168
|
- `epic`: `"{epic}"`
|
|
168
169
|
- `description`: from C1
|
|
169
170
|
- `status`: `"active"`
|
|
@@ -247,15 +248,17 @@ now self-contained: manifest + EPIC.md + one subdirectory per member.
|
|
|
247
248
|
|
|
248
249
|
3. **Closing message — the Stage Exit Protocol.** Congratulate the user ("Epic `{epic}` created with {N} features."), then close with the Stage Exit Protocol below (single-sourced in `references/stage-exit-protocol.md`; the epic → first-PRD boundary is a full stage boundary — do not improvise a "Next steps" list). `{first-actionable-feature}` = any feature with empty `dependsOn` (or the first entry of `render-status`'s `actionable` set):
|
|
249
250
|
|
|
251
|
+
Determine `{verify-capability}` per the **Host and capability determination** section of `references/stage-exit-protocol.md`: `interactive` needs both a question mechanism and *permission* to dispatch the clean-room `forge-verifier`, and a session that merely needs consent first is still `interactive`.
|
|
252
|
+
|
|
250
253
|
**Close this stage with the Scripted Stage Exit** (contract: `references/stage-exit-protocol.md`; do not improvise a "Next steps" list). Run:
|
|
251
254
|
|
|
252
255
|
```bash
|
|
253
256
|
R="$(bash -c 'for d in "${FEATURE_FORGE_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
|
|
254
257
|
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
255
|
-
python3 "$R/scripts/forge-session.py" stage-exit --feature "{epic}" --stage forge-0-epic --next-feature "{first-actionable-feature}" --specs-dir "{specsDir}" --host generic
|
|
258
|
+
python3 "$R/scripts/forge-session.py" stage-exit --feature "{epic}" --stage forge-0-epic --next-feature "{first-actionable-feature}" --specs-dir "{specsDir}" --host generic --verify-capability "{verify-capability}"
|
|
256
259
|
```
|
|
257
260
|
|
|
258
|
-
Obey the DIRECTIVES it prints, in order
|
|
261
|
+
Obey the DIRECTIVES it prints, in the consumption order this protocol fixes: surface `invalidAutoVerifyKeys` and every `warnings` entry first; `runInStageVerify: true` → run the in-stage clean-room verify chain now (honoring `autoFixEligible`, and asking through the Standard Verify Gate first when you may not dispatch unsolicited); `verifyGate: "standard"` → present the Standard Verify Gate; `verifyGate: "manual-print"` → print the `verifyCommand` for the user and do **not** dispatch inline. Then, and only when `terminalOwnedBy` is `"self"`, **print the NEXT-STEPS block verbatim as your absolute last output — nothing after its sentinel line.** A `terminalOwnedBy: "outer"` payload carries `nextSteps: null`: return your structured result to the caller and print no terminal block at all.
|
|
259
262
|
|
|
260
263
|
---
|
|
261
264
|
|
|
@@ -274,6 +277,8 @@ EPIC.md patch rule, and the E6 Observability / Pipeline State & Commit machinery
|
|
|
274
277
|
`references/edit-mode.md`. For the exact `epic-manifest.py` mutator flag surface and
|
|
275
278
|
per-subcommand exit-code (`0`/`1`/`2`) handling, read `references/epic-manifest-subcommands.md`.
|
|
276
279
|
|
|
280
|
+
An edit-mode mutation closes through the **same** Scripted Stage Exit command Step C8 runs — there is one scripted exit for this skill, not one per branch. Only the argument differs: edit mode re-reads live epic status **after** the mutation and its commit, passes the resulting concrete member as `--next-feature`, and **omits that flag entirely** when no member is actionable (so the router hands back to the epic dashboard instead of naming a member it cannot resolve). Those substitution rules, the `render-status` failure path, and the script's member fallback warning are all in `references/edit-mode.md` — do not improvise a closing pointer here.
|
|
281
|
+
|
|
277
282
|
---
|
|
278
283
|
|
|
279
284
|
## Error Handling
|
|
@@ -163,29 +163,15 @@ For the initial creation write (C5) the skill sets `createdAt == updatedAt`.
|
|
|
163
163
|
- **Edit mode:** edits mutate the **manifest**, not member pipeline states — except the
|
|
164
164
|
newly-created subdir for `add-feature`, which follows C7 (create the member subdir + back-pointer
|
|
165
165
|
state). The skill does **not** rewrite existing members' `stages` on an edit.
|
|
166
|
-
- **`.epic-state.json` (lazily created, written by
|
|
166
|
+
- **`.epic-state.json` (lazily created, written by `state-verify`):** epic-*scoped* stage
|
|
167
167
|
entries that belong to no single member — currently only `forge-verify-epic` — are persisted in a
|
|
168
168
|
dedicated `{specsDir}/{epic}/.epic-state.json`. It holds **only** epic-scoped stage entries,
|
|
169
169
|
never derived per-feature status (so it does not violate REQ-STATE-02). `forge-0-epic` does
|
|
170
170
|
**not** create this file — no epic-scoped stage runs during creation or edit; it appears only once
|
|
171
|
-
`forge-verify` epic mode runs
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
```jsonc
|
|
177
|
-
{
|
|
178
|
-
"epic": "auth-overhaul", // matches manifest `epic`
|
|
179
|
-
"stages": {
|
|
180
|
-
"forge-verify-epic": {
|
|
181
|
-
"status": "findings-reported", // "findings-reported" | "passed" | "findings-applied"
|
|
182
|
-
"findingsFile": ".verification/VERIFY-epic-2026-06-12.md",
|
|
183
|
-
"findingsCount": 3,
|
|
184
|
-
"verifiedAt": "2026-06-12T00:00:00Z"
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
```
|
|
171
|
+
`forge-verify` epic mode runs, and that skill records the result through `state-verify --stage
|
|
172
|
+
forge-0-epic` (the sanctioned epic writer, per the Pipeline State Protocol in
|
|
173
|
+
`references/shared-conventions.md`). No skill ever hand-authors this file, and its minimal shape
|
|
174
|
+
is documented once, alongside that call, in `skills/forge-verify/references/findings-template.md`.
|
|
189
175
|
|
|
190
176
|
The git-commit step below stages the whole epic subtree, so `.epic-state.json` is captured
|
|
191
177
|
automatically when present.
|
|
@@ -210,13 +196,27 @@ follow the Git Commit Protocol in shared-conventions:
|
|
|
210
196
|
Because every mutation is committed, the git history of `epic-manifest.json` is the audit trail; no
|
|
211
197
|
separate in-manifest audit log is kept.
|
|
212
198
|
|
|
213
|
-
### Closing
|
|
199
|
+
### Closing the stage — fresh live status, then the Scripted Stage Exit
|
|
200
|
+
|
|
201
|
+
After a successful **creation**, close with Step C8's Scripted Stage Exit, exactly as specified there.
|
|
202
|
+
|
|
203
|
+
After a successful **edit-mode mutation** — the mutator returned exit `0` **and** the E6 commit above landed — confirm the change in one line (`Epic {epic} updated (<action>).`) and then close with the **same** Scripted Stage Exit. Do **not** hand-write a dashboard pointer, a "Next steps" list, or any other next command: the script owns edit-mode routing end to end, and a second hand-written command can only disagree with it.
|
|
204
|
+
|
|
205
|
+
**Read live status again first.** The E4 `render-status` snapshot is stale by the time you get here — it was taken *before* the mutation, so a member the edit just unblocked (or just blocked) is misreported, and the whole point of routing from live state is lost. Re-read it **after** the mutation and the commit:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
|
|
209
|
+
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
210
|
+
python3 "$R/scripts/epic-manifest.py" render-status "{epic}" --specs-dir "{specsDir}" --json
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Choosing the `--next-feature` argument from that **fresh** payload is the only routing decision this step makes; every other one belongs to the script:
|
|
214
214
|
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
- **`actionable` is non-empty** → `{first-actionable-feature}` is its **first** entry, a concrete member name. Pass it as `--next-feature "{first-actionable-feature}"`. The script then resolves that member's own `.pipeline-state.json` and routes to its **first incomplete production stage**, so a member whose PRD is already written resumes at tech/specs/backlog/loop/docs — it is never sent back to `forge-1-prd`. Do **not** derive that stage yourself and do **not** read the member's state to second-guess the script.
|
|
216
|
+
- **`actionable` is empty** → there is no member to hand off to. **Omit `--next-feature` entirely**; the script routes to the epic dashboard/completion view. Never substitute a stand-in for the flag value — not the literal `{first-actionable-feature}`, not the epic name, not an arbitrary member off `features[]`. An unresolved placeholder is not a member name, and the script rejects an unsafe value with exit `2`.
|
|
217
|
+
- **`render-status` exits `≥ 1`, or its payload is malformed or missing a required field** → surface every `findings[]` entry **verbatim**, then take the same no-member path: close with the epic stage exit carrying **no** `--next-feature`, so recovery lands on the epic dashboard. A failed status read is never grounds to guess a follow-up member.
|
|
217
218
|
|
|
218
|
-
|
|
219
|
-
> dashboard, or re-run `/feature-forge:forge-0-epic {epic}` to make another change.
|
|
219
|
+
**Surface the script's warnings before the block.** `warnings` is part of the directive contract. When the selected member's pipeline state is missing, unreadable, malformed, or not a member of this epic, the script emits a named warning naming that member and the recovery command, and degrades **only** to `forge-1-prd {member}` on its own. Print that warning ahead of the terminal block exactly as emitted, and leave the routing where the script put it — do **not** "correct" the fallback to a later stage you inferred, and do **not** re-read the member's state to override it.
|
|
220
220
|
|
|
221
221
|
## EPIC.md Mirror Template (creation C6 / edit E5)
|
|
222
222
|
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
"properties": {
|
|
172
172
|
"status": {
|
|
173
173
|
"type": "string",
|
|
174
|
-
"enum": ["pending", "passed", "findings-reported", "findings-applied", "skipped"]
|
|
174
|
+
"enum": ["pending", "auto-verify-pending", "passed", "findings-reported", "findings-applied", "skipped"]
|
|
175
175
|
},
|
|
176
176
|
"findingsFile": {
|
|
177
177
|
"type": ["string", "null"],
|
|
@@ -184,7 +184,9 @@
|
|
|
184
184
|
"verifiedAt": { "type": ["string", "null"], "format": "date-time" },
|
|
185
185
|
"fixedAt": { "type": ["string", "null"], "format": "date-time" },
|
|
186
186
|
"commitHash": { "type": ["string", "null"], "description": "Git commit SHA of the verify/fix artifact commit. Recorded via the two-commit Git Commit Protocol (shared-conventions.md) so it points at the artifact commit, never an orphaned amend." },
|
|
187
|
-
"verifiedStageVersion": { "type": ["integer", "null"], "description": "The production stage's `version` at the moment this verify was resolved. The navigator's freshness ledger compares it to the stage's current `version`: equal means the verify is fresh; a mismatch (artifact revised since) or an absent field (legacy state) means stale, so auto-verify re-fires. Recorded by forge-verify/forge-fix when writing a passed/findings-applied status." }
|
|
187
|
+
"verifiedStageVersion": { "type": ["integer", "null"], "description": "The production stage's `version` at the moment this verify was resolved. The navigator's freshness ledger compares it to the stage's current `version`: equal means the verify is fresh; a mismatch (artifact revised since) or an absent field (legacy state) means stale, so auto-verify re-fires. Recorded by forge-verify/forge-fix when writing a passed/findings-applied status." },
|
|
188
|
+
"scheduledAt": { "type": ["string", "null"], "format": "date-time", "description": "UTC ISO-8601 timestamp at which unattended in-stage verification was scheduled for this entry. Written alongside the `auto-verify-pending` status and DELETED (not nulled) by any terminal result, so an absent field means 'not scheduled'." },
|
|
189
|
+
"scheduledStageVersion": { "type": ["integer", "null"], "minimum": 1, "description": "The artifact revision current when verification was scheduled — the production stage's `version` for a feature, the epic manifest's `revision` for an epic. Makes rescheduling idempotent (an identical revision does not rewrite the entry) and lets a read tell debt owed on the current artifact from debt stranded on an older one. Deleted by any terminal result." }
|
|
188
190
|
}
|
|
189
191
|
}
|
|
190
192
|
}
|
|
@@ -191,6 +191,44 @@ Pipeline state is written by the `state-*` verbs of `scripts/forge-session.py`
|
|
|
191
191
|
|
|
192
192
|
If a `state-*` verb exits 2, surface the plain `Error:` line from stderr verbatim, do **not** proceed to the next step of the surrounding protocol, and do **not** hand-author the JSON as a workaround. The stage remains resumable because the entry stamp is already on disk — re-run the verb once the cause is fixed.
|
|
193
193
|
|
|
194
|
+
**The eight `state-*` verbs.** `state-enter` (Stage-Entry Guard), `state-artifact` (incremental artifact tracking), `state-complete` (Git Commit Protocol), `state-branch` (Branch Setup and Branch Reconciliation), `state-note` (the Immediate Downstream Note below, and the optional completion note at stage closure), `state-decision` (deferred decisions), `state-ecr` (epic change requests), and `state-verify` (one `forge-verify-*` verification transition — below). The `--epic` member requirement and the exit-2 failure protocol above apply to **every** one of them, `state-verify` included; no verify entry is ever hand-authored.
|
|
195
|
+
|
|
196
|
+
### `state-verify` — verification results and provenance
|
|
197
|
+
|
|
198
|
+
`state-verify` writes exactly one `stages.forge-verify-{token}` entry — the verification result for the production stage named by `--stage` — plus the top-level `updatedAt`, and nothing else. `--stage` takes the **served production stage** (`forge-0-epic` through `forge-5-loop`; `forge-6-docs` has no verification token and is rejected). Add `--epic "{epic}"` when the feature is an epic member — required, per the member rule above. Result mode passes `--status` (`auto-verify-pending`, `passed`, `findings-reported`, `findings-applied`, or `skipped`) with whatever `--findings-file`, `--findings-count`, and `--verified-stage-version` that status requires; contradictory metadata is refused before any write. `passed` may additionally carry `--findings-file` + `--findings-count` together for an **advisory-only** report (`inconsistency`/`improvement` findings only, per forge-verify's severity floor) — the stage resolves without a fix round and the report stays attached:
|
|
199
|
+
|
|
200
|
+
**`auto-verify-pending` is not a skill-facing status.** It is written by `stage-exit`'s scheduling boundary, which records the debt automatically when auto-verify is effective for a stage. The value is accepted on this CLI so the entry stays inspectable and repairable, not so a skill can hand-schedule verification: no skill body and no reference passes it, and none should. Every other status in the list is the recorded *result* of a verification that ran (or was explicitly skipped); this one records that one was *owed*.
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
|
|
204
|
+
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
205
|
+
python3 "$R/scripts/forge-session.py" state-verify \
|
|
206
|
+
--feature "{feature}" --stage "{served-production-stage}" --status "<status>" \
|
|
207
|
+
--specs-dir "{specsDir}"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Provenance follows the same two-commit sequence as `state-complete`: the result transition above writes `commitHash: null`, Commit 1 records the findings document and the state, and a second `state-verify` call records the full 40-hex hash of Commit 1 and touches nothing else (never `--amend`; an abbreviated hash is refused rather than expanded). Add `--epic "{epic}"` for an epic member — required, per the member rule above:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
|
|
214
|
+
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
215
|
+
python3 "$R/scripts/forge-session.py" state-verify \
|
|
216
|
+
--feature "{feature}" --stage "{served-production-stage}" \
|
|
217
|
+
--commit-hash "$(git rev-parse HEAD)" --specs-dir "{specsDir}"
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Epic-scoped verification is the single exception to the member rule: with `--stage forge-0-epic`, `--feature` names the **epic** and `--epic` must be absent or exactly equal to it. That call writes `{specsDir}/{epic}/.epic-state.json` and never a member's `.pipeline-state.json`, and its freshness version is the epic manifest's `revision`, never a member's stage version:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
|
|
224
|
+
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
225
|
+
python3 "$R/scripts/forge-session.py" state-verify \
|
|
226
|
+
--feature "{epic}" --stage forge-0-epic --status "<status>" \
|
|
227
|
+
--specs-dir "{specsDir}"
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
On exit 2 the verification result is **not** recorded: surface the `Error:` line verbatim, name the feature (and epic), and do not claim the verification was persisted or advance past it.
|
|
231
|
+
|
|
194
232
|
### Staleness Detection (Read-Time)
|
|
195
233
|
|
|
196
234
|
When loading upstream artifacts as prerequisites, check `basedOnVersions` in the pipeline state for this stage. If any upstream stage's current version is newer than the version recorded in `basedOnVersions`, warn the user before proceeding:
|
|
@@ -199,6 +237,31 @@ When loading upstream artifacts as prerequisites, check `basedOnVersions` in the
|
|
|
199
237
|
|
|
200
238
|
Frame the choice with its cost: re-running re-derives this stage from the current upstream (safest, but discards any hand-edits to this stage's artifacts); proceeding stale is faster but risks baking outdated assumptions into everything downstream. Recommend re-running unless the user knows the upstream change doesn't affect this stage.
|
|
201
239
|
|
|
240
|
+
## Immediate Downstream Note (Parking Lot)
|
|
241
|
+
|
|
242
|
+
When an interview raises a concern that belongs to a *later stage of this same feature*, acknowledge it and persist it **immediately, at the moment it is raised** — not at stage closure — by running `state-note` with a concise one-line statement of the concern. Add `--epic "{epic}"` when this feature is an epic member — required, per the Pipeline State Protocol above; omitting it for a member is an error and must never be allowed to fall back to a same-named flat feature.
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache/*/feature-forge/* "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')"
|
|
246
|
+
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
247
|
+
python3 "$R/scripts/forge-session.py" state-note \
|
|
248
|
+
--feature "{feature}" --note "<concise downstream concern>" \
|
|
249
|
+
--specs-dir "{specsDir}"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
`state-note` **overwrites** the single top-level `notes` string — it does not append. To preserve an earlier note, read the current `notes` value out of the feature's `.pipeline-state.json` first and pass one combined concise string in a single `--note`; never edit or round-trip the JSON by hand. This interview-time call is separate from the optional completion note offered at stage closure and must not be deferred until then — a session that ends before closure would otherwise lose the concern entirely.
|
|
253
|
+
|
|
254
|
+
On `UsageError`/exit 2, surface the `Error:` line verbatim together with the named feature (and epic) and the recovery instruction, and **stop claiming the concern was recorded** — it was not. Epic *decomposition* changes are not notes: they go through `state-ecr` into `epicChangeRequests`, never into `notes`.
|
|
255
|
+
|
|
256
|
+
## Verify Capability
|
|
257
|
+
|
|
258
|
+
Skills that close a stage pass `--verify-capability interactive|manual` to `stage-exit`. The full determination rule, the Standard Verify Gate, and the recovery path live in `references/stage-exit-protocol.md`; the two facts that are most often gotten wrong:
|
|
259
|
+
|
|
260
|
+
- **Dispatch capability is *permitted* dispatch, not a listed tool.** The question is "**may I dispatch `forge-verifier` right now**", not "is a subagent-dispatch tool in my tool surface". A session can carry a standing host instruction against dispatching subagents unless the user asked; such instructions are injected by the harness, sit outside this project's control, and outrank skill prose. Classify on permission, up front.
|
|
261
|
+
- **A consent requirement is `interactive`, not `manual`.** When dispatch is barred only *unless the user asked* and a question mechanism is available, pass `interactive`: the gate's own affirmative choice supplies the missing user request. Pass `manual` only when there is **no** question mechanism **and** **no** permitted dispatch.
|
|
262
|
+
|
|
263
|
+
A bar on unsolicited dispatch is never grounds to skip verification, and never grounds to fence the production successor while verification is unresolved. On the `runInStageVerify: true` path the emitted `verifyGate` stays `none`: reuse the Standard Verify Gate block for consent with **choice 2 omitted** (auto-verify is already effective, so "enable auto-verify going forward" is a no-op), leaving exactly two choices: *Verify now* (recommended) and *Skip for now*. The clean-room `forge-verifier` is **dispatched on the affirmative choice**, never merely printed for the user to run later; *Skip for now* is persisted as an explicit `skipped` before any advancing block.
|
|
264
|
+
|
|
202
265
|
## Branch Setup
|
|
203
266
|
|
|
204
267
|
Invoke this block at the **very start** of a pipeline entry point — `forge-1-prd` (standalone feature) and `forge-0-epic` (epic) — **before** any directory resolution or interview, so the rest of the run lands on the intended branch. `{label}` is the feature name (forge-1-prd) or epic name (forge-0-epic); `{scope}` is `feature` or `epic` correspondingly.
|