@garygentry/feature-forge 0.3.5 → 0.3.7
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/README.md +1 -1
- package/adapters/GENERATION-REPORT.md +20 -0
- package/adapters/claude/.claude-plugin/plugin.json +16 -0
- package/adapters/claude/.feature-forge-bundle.json +1 -1
- package/adapters/claude/agents/forge-verifier.md +16 -5
- package/adapters/claude/references/forge-config-schema.json +5 -5
- package/adapters/claude/references/portable-root.md +20 -16
- package/adapters/claude/references/preflight-and-self-heal.md +183 -0
- package/adapters/claude/references/process-overview.md +1 -1
- package/adapters/claude/references/ralph-loop-contract.md +12 -8
- package/adapters/claude/references/select-outcome.md +138 -0
- package/adapters/claude/references/shared-conventions.md +176 -23
- package/adapters/claude/references/skill-frontmatter.schema.json +3 -1
- package/adapters/claude/references/stack-resolution.md +1 -1
- package/adapters/claude/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/references/templates/root-hygiene/AGENTS.md +14 -0
- package/adapters/claude/references/templates/root-hygiene/CLAUDE.md +14 -0
- package/adapters/claude/references/templates/specs-hygiene/AGENTS.md +3 -1
- package/adapters/claude/references/templates/specs-hygiene/CLAUDE.md +2 -1
- package/adapters/claude/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/claude/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/claude/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/claude/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/claude/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/claude/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/claude/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/claude/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/claude/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/claude/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/claude/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/claude/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/claude/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/claude/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/claude/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/claude/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/claude/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/claude/references/verify-state.md +98 -0
- package/adapters/claude/scripts/forge-bootstrap.py +23 -2
- package/adapters/claude/scripts/forge-root.sh +104 -21
- package/adapters/claude/scripts/forge-session.py +620 -6969
- package/adapters/claude/scripts/forge_session/__init__.py +11 -0
- package/adapters/claude/scripts/forge_session/_common.py +1566 -0
- package/adapters/claude/scripts/forge_session/_doctor_util.py +218 -0
- package/adapters/claude/scripts/forge_session/cli.py +1067 -0
- package/adapters/claude/scripts/forge_session/decisions.py +355 -0
- package/adapters/claude/scripts/forge_session/discover.py +472 -0
- package/adapters/claude/scripts/forge_session/doctor.py +2144 -0
- package/adapters/claude/scripts/forge_session/exit.py +1081 -0
- package/adapters/claude/scripts/forge_session/outcomes.py +574 -0
- package/adapters/claude/scripts/forge_session/routes.py +1162 -0
- package/adapters/claude/scripts/forge_session/state.py +1479 -0
- package/adapters/claude/scripts/forge_session/topology.py +443 -0
- package/adapters/claude/skills/forge/SKILL.md +7 -7
- package/adapters/claude/skills/forge/references/process-overview.md +1 -1
- package/adapters/claude/skills/forge/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-0-epic/SKILL.md +7 -7
- package/adapters/claude/skills/forge-0-epic/references/edit-mode.md +9 -5
- package/adapters/claude/skills/forge-0-epic/references/epic-manifest-subcommands.md +6 -1
- package/adapters/claude/skills/forge-0-epic/references/portable-root.md +20 -16
- package/adapters/claude/skills/forge-0-epic/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-1-prd/SKILL.md +7 -7
- package/adapters/claude/skills/forge-1-prd/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-2-tech/SKILL.md +7 -7
- package/adapters/claude/skills/forge-2-tech/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-2-tech/references/stack-resolution.md +1 -1
- package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-3-specs/SKILL.md +5 -5
- package/adapters/claude/skills/forge-3-specs/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-4-backlog/SKILL.md +16 -8
- package/adapters/claude/skills/forge-4-backlog/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-4-backlog/references/verify-state.md +98 -0
- package/adapters/claude/skills/forge-5-loop/SKILL.md +36 -41
- package/adapters/claude/skills/forge-5-loop/references/agent-selection.md +4 -0
- package/adapters/claude/skills/forge-5-loop/references/preflight-and-self-heal.md +183 -0
- package/adapters/claude/skills/forge-5-loop/references/ralph-loop-contract.md +12 -8
- package/adapters/claude/skills/forge-5-loop/references/recovery-procedure.md +10 -0
- package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +17 -7
- package/adapters/claude/skills/forge-5-loop/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-5-loop/references/verify-state.md +98 -0
- package/adapters/claude/skills/forge-6-docs/SKILL.md +21 -14
- package/adapters/claude/skills/forge-6-docs/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-6-docs/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-6-docs/references/verify-state.md +98 -0
- package/adapters/claude/skills/forge-bootstrap/SKILL.md +19 -10
- package/adapters/claude/skills/forge-bootstrap/references/shared-conventions.md +572 -0
- package/adapters/claude/skills/forge-fix/SKILL.md +15 -18
- package/adapters/claude/skills/forge-fix/references/select-outcome.md +138 -0
- package/adapters/claude/skills/forge-fix/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-guide/SKILL.md +87 -1
- package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +5 -5
- package/adapters/claude/skills/forge-guide/references/preflight-and-self-heal.md +183 -0
- package/adapters/claude/skills/forge-guide/references/process-overview.md +1 -1
- package/adapters/claude/skills/forge-guide/references/ralph-loop-contract.md +12 -8
- package/adapters/claude/skills/forge-guide/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-guide/references/stack-resolution.md +1 -1
- package/adapters/claude/skills/forge-init/SKILL.md +58 -7
- package/adapters/claude/skills/forge-init/references/preflight-and-self-heal.md +183 -0
- package/adapters/claude/skills/forge-init/references/shared-conventions.md +572 -0
- package/adapters/claude/skills/forge-verify/SKILL.md +25 -26
- package/adapters/claude/skills/forge-verify/references/findings-template.md +8 -8
- package/adapters/claude/skills/forge-verify/references/select-outcome.md +138 -0
- package/adapters/claude/skills/forge-verify/references/shared-conventions.md +176 -23
- package/adapters/claude/skills/forge-verify/references/stage-exit-protocol.md +19 -4
- package/adapters/claude/skills/forge-verify/references/verification-checklists/epic.md +1 -1
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/claude/skills/forge-verify/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/codex/.feature-forge-bundle.json +1 -1
- package/adapters/codex/agents/forge-researcher.toml +1 -1
- package/adapters/codex/agents/forge-verifier.toml +17 -6
- package/adapters/codex/references/forge-config-schema.json +7 -7
- package/adapters/codex/references/portable-root.md +20 -16
- package/adapters/codex/references/preflight-and-self-heal.md +183 -0
- package/adapters/codex/references/process-overview.md +10 -10
- package/adapters/codex/references/ralph-loop-contract.md +12 -8
- package/adapters/codex/references/select-outcome.md +138 -0
- package/adapters/codex/references/shared-conventions.md +189 -36
- package/adapters/codex/references/skill-frontmatter.schema.json +3 -1
- package/adapters/codex/references/stack-resolution.md +1 -1
- package/adapters/codex/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/references/templates/root-hygiene/AGENTS.md +14 -0
- package/adapters/codex/references/templates/root-hygiene/CLAUDE.md +14 -0
- package/adapters/codex/references/templates/specs-hygiene/AGENTS.md +3 -1
- package/adapters/codex/references/templates/specs-hygiene/CLAUDE.md +2 -1
- package/adapters/codex/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/codex/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/codex/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/codex/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/codex/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/codex/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/codex/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/codex/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/codex/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/codex/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/codex/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/codex/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/codex/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/codex/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/codex/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/codex/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/codex/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/codex/references/verify-state.md +98 -0
- package/adapters/codex/scripts/forge-bootstrap.py +23 -2
- package/adapters/codex/scripts/forge-root.sh +104 -21
- package/adapters/codex/scripts/forge-session.py +620 -6969
- package/adapters/codex/scripts/forge_session/__init__.py +11 -0
- package/adapters/codex/scripts/forge_session/_common.py +1566 -0
- package/adapters/codex/scripts/forge_session/_doctor_util.py +218 -0
- package/adapters/codex/scripts/forge_session/cli.py +1067 -0
- package/adapters/codex/scripts/forge_session/decisions.py +355 -0
- package/adapters/codex/scripts/forge_session/discover.py +472 -0
- package/adapters/codex/scripts/forge_session/doctor.py +2144 -0
- package/adapters/codex/scripts/forge_session/exit.py +1081 -0
- package/adapters/codex/scripts/forge_session/outcomes.py +574 -0
- package/adapters/codex/scripts/forge_session/routes.py +1162 -0
- package/adapters/codex/scripts/forge_session/state.py +1479 -0
- package/adapters/codex/scripts/forge_session/topology.py +443 -0
- package/adapters/codex/skills/forge/SKILL.md +40 -40
- package/adapters/codex/skills/forge/references/process-overview.md +10 -10
- package/adapters/codex/skills/forge/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-0-epic/SKILL.md +15 -15
- package/adapters/codex/skills/forge-0-epic/references/edit-mode.md +14 -10
- package/adapters/codex/skills/forge-0-epic/references/epic-manifest-subcommands.md +8 -3
- package/adapters/codex/skills/forge-0-epic/references/portable-root.md +20 -16
- package/adapters/codex/skills/forge-0-epic/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-1-prd/SKILL.md +15 -15
- package/adapters/codex/skills/forge-1-prd/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-2-tech/SKILL.md +15 -15
- package/adapters/codex/skills/forge-2-tech/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-2-tech/references/stack-resolution.md +1 -1
- package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-3-specs/SKILL.md +10 -10
- package/adapters/codex/skills/forge-3-specs/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-4-backlog/SKILL.md +19 -11
- package/adapters/codex/skills/forge-4-backlog/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-4-backlog/references/verify-state.md +98 -0
- package/adapters/codex/skills/forge-5-loop/SKILL.md +48 -53
- package/adapters/codex/skills/forge-5-loop/references/agent-selection.md +5 -1
- package/adapters/codex/skills/forge-5-loop/references/preflight-and-self-heal.md +183 -0
- package/adapters/codex/skills/forge-5-loop/references/ralph-loop-contract.md +12 -8
- package/adapters/codex/skills/forge-5-loop/references/recovery-procedure.md +14 -4
- package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +20 -10
- package/adapters/codex/skills/forge-5-loop/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-5-loop/references/verify-state.md +98 -0
- package/adapters/codex/skills/forge-6-docs/SKILL.md +27 -20
- package/adapters/codex/skills/forge-6-docs/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-6-docs/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-6-docs/references/verify-state.md +98 -0
- package/adapters/codex/skills/forge-bootstrap/SKILL.md +23 -15
- package/adapters/codex/skills/forge-bootstrap/references/shared-conventions.md +572 -0
- package/adapters/codex/skills/forge-bootstrap/references/templates/hygiene/CLAUDE.md +2 -2
- package/adapters/codex/skills/forge-fix/SKILL.md +27 -30
- package/adapters/codex/skills/forge-fix/references/select-outcome.md +138 -0
- package/adapters/codex/skills/forge-fix/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-guide/SKILL.md +84 -7
- package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +7 -7
- package/adapters/codex/skills/forge-guide/references/preflight-and-self-heal.md +183 -0
- package/adapters/codex/skills/forge-guide/references/process-overview.md +10 -10
- package/adapters/codex/skills/forge-guide/references/ralph-loop-contract.md +12 -8
- package/adapters/codex/skills/forge-guide/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-guide/references/stack-resolution.md +1 -1
- package/adapters/codex/skills/forge-init/SKILL.md +62 -12
- package/adapters/codex/skills/forge-init/references/preflight-and-self-heal.md +183 -0
- package/adapters/codex/skills/forge-init/references/shared-conventions.md +572 -0
- package/adapters/codex/skills/forge-verify/SKILL.md +32 -33
- package/adapters/codex/skills/forge-verify/references/findings-template.md +8 -8
- package/adapters/codex/skills/forge-verify/references/select-outcome.md +138 -0
- package/adapters/codex/skills/forge-verify/references/shared-conventions.md +189 -36
- package/adapters/codex/skills/forge-verify/references/stage-exit-protocol.md +22 -7
- package/adapters/codex/skills/forge-verify/references/verification-checklists/epic.md +2 -2
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/codex/skills/forge-verify/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/copilot/.feature-forge-bundle.json +1 -1
- package/adapters/copilot/agents/forge-researcher.md +1 -1
- package/adapters/copilot/agents/forge-verifier.md +17 -6
- package/adapters/copilot/references/forge-config-schema.json +7 -7
- package/adapters/copilot/references/portable-root.md +20 -16
- package/adapters/copilot/references/preflight-and-self-heal.md +183 -0
- package/adapters/copilot/references/process-overview.md +10 -10
- package/adapters/copilot/references/ralph-loop-contract.md +12 -8
- package/adapters/copilot/references/select-outcome.md +138 -0
- package/adapters/copilot/references/shared-conventions.md +189 -36
- package/adapters/copilot/references/skill-frontmatter.schema.json +3 -1
- package/adapters/copilot/references/stack-resolution.md +1 -1
- package/adapters/copilot/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/references/templates/root-hygiene/AGENTS.md +14 -0
- package/adapters/copilot/references/templates/root-hygiene/CLAUDE.md +14 -0
- package/adapters/copilot/references/templates/specs-hygiene/AGENTS.md +3 -1
- package/adapters/copilot/references/templates/specs-hygiene/CLAUDE.md +2 -1
- package/adapters/copilot/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/copilot/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/copilot/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/copilot/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/copilot/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/copilot/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/copilot/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/copilot/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/copilot/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/copilot/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/copilot/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/copilot/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/copilot/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/copilot/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/copilot/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/copilot/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/copilot/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/copilot/references/verify-state.md +98 -0
- package/adapters/copilot/scripts/forge-bootstrap.py +23 -2
- package/adapters/copilot/scripts/forge-root.sh +104 -21
- package/adapters/copilot/scripts/forge-session.py +620 -6969
- package/adapters/copilot/scripts/forge_session/__init__.py +11 -0
- package/adapters/copilot/scripts/forge_session/_common.py +1566 -0
- package/adapters/copilot/scripts/forge_session/_doctor_util.py +218 -0
- package/adapters/copilot/scripts/forge_session/cli.py +1067 -0
- package/adapters/copilot/scripts/forge_session/decisions.py +355 -0
- package/adapters/copilot/scripts/forge_session/discover.py +472 -0
- package/adapters/copilot/scripts/forge_session/doctor.py +2144 -0
- package/adapters/copilot/scripts/forge_session/exit.py +1081 -0
- package/adapters/copilot/scripts/forge_session/outcomes.py +574 -0
- package/adapters/copilot/scripts/forge_session/routes.py +1162 -0
- package/adapters/copilot/scripts/forge_session/state.py +1479 -0
- package/adapters/copilot/scripts/forge_session/topology.py +443 -0
- package/adapters/copilot/skills/forge/forge.md +40 -40
- package/adapters/copilot/skills/forge/references/process-overview.md +10 -10
- package/adapters/copilot/skills/forge/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-0-epic/forge-0-epic.md +15 -15
- package/adapters/copilot/skills/forge-0-epic/references/edit-mode.md +14 -10
- package/adapters/copilot/skills/forge-0-epic/references/epic-manifest-subcommands.md +8 -3
- package/adapters/copilot/skills/forge-0-epic/references/portable-root.md +20 -16
- package/adapters/copilot/skills/forge-0-epic/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +15 -15
- package/adapters/copilot/skills/forge-1-prd/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +15 -15
- package/adapters/copilot/skills/forge-2-tech/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-2-tech/references/stack-resolution.md +1 -1
- package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +10 -10
- package/adapters/copilot/skills/forge-3-specs/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +19 -11
- package/adapters/copilot/skills/forge-4-backlog/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-4-backlog/references/verify-state.md +98 -0
- package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +48 -53
- package/adapters/copilot/skills/forge-5-loop/references/agent-selection.md +5 -1
- package/adapters/copilot/skills/forge-5-loop/references/preflight-and-self-heal.md +183 -0
- package/adapters/copilot/skills/forge-5-loop/references/ralph-loop-contract.md +12 -8
- package/adapters/copilot/skills/forge-5-loop/references/recovery-procedure.md +14 -4
- package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +20 -10
- package/adapters/copilot/skills/forge-5-loop/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-5-loop/references/verify-state.md +98 -0
- package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +27 -20
- package/adapters/copilot/skills/forge-6-docs/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-6-docs/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-6-docs/references/verify-state.md +98 -0
- package/adapters/copilot/skills/forge-bootstrap/forge-bootstrap.md +23 -15
- package/adapters/copilot/skills/forge-bootstrap/references/shared-conventions.md +572 -0
- package/adapters/copilot/skills/forge-bootstrap/references/templates/hygiene/CLAUDE.md +2 -2
- package/adapters/copilot/skills/forge-fix/forge-fix.md +27 -30
- package/adapters/copilot/skills/forge-fix/references/select-outcome.md +138 -0
- package/adapters/copilot/skills/forge-fix/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-guide/forge-guide.md +84 -7
- package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +7 -7
- package/adapters/copilot/skills/forge-guide/references/preflight-and-self-heal.md +183 -0
- package/adapters/copilot/skills/forge-guide/references/process-overview.md +10 -10
- package/adapters/copilot/skills/forge-guide/references/ralph-loop-contract.md +12 -8
- package/adapters/copilot/skills/forge-guide/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-guide/references/stack-resolution.md +1 -1
- package/adapters/copilot/skills/forge-init/forge-init.md +62 -12
- package/adapters/copilot/skills/forge-init/references/preflight-and-self-heal.md +183 -0
- package/adapters/copilot/skills/forge-init/references/shared-conventions.md +572 -0
- package/adapters/copilot/skills/forge-verify/forge-verify.md +32 -33
- package/adapters/copilot/skills/forge-verify/references/findings-template.md +8 -8
- package/adapters/copilot/skills/forge-verify/references/select-outcome.md +138 -0
- package/adapters/copilot/skills/forge-verify/references/shared-conventions.md +189 -36
- package/adapters/copilot/skills/forge-verify/references/stage-exit-protocol.md +22 -7
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/epic.md +2 -2
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/copilot/skills/forge-verify/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/cursor/.feature-forge-bundle.json +1 -1
- package/adapters/cursor/agents/forge-researcher.mdc +1 -1
- package/adapters/cursor/agents/forge-verifier.mdc +17 -6
- package/adapters/cursor/references/forge-config-schema.json +7 -7
- package/adapters/cursor/references/portable-root.md +20 -16
- package/adapters/cursor/references/preflight-and-self-heal.md +183 -0
- package/adapters/cursor/references/process-overview.md +10 -10
- package/adapters/cursor/references/ralph-loop-contract.md +12 -8
- package/adapters/cursor/references/select-outcome.md +138 -0
- package/adapters/cursor/references/shared-conventions.md +189 -36
- package/adapters/cursor/references/skill-frontmatter.schema.json +3 -1
- package/adapters/cursor/references/stack-resolution.md +1 -1
- package/adapters/cursor/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/references/templates/root-hygiene/AGENTS.md +14 -0
- package/adapters/cursor/references/templates/root-hygiene/CLAUDE.md +14 -0
- package/adapters/cursor/references/templates/specs-hygiene/AGENTS.md +3 -1
- package/adapters/cursor/references/templates/specs-hygiene/CLAUDE.md +2 -1
- package/adapters/cursor/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/cursor/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/cursor/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/cursor/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/cursor/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/cursor/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/cursor/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/cursor/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/cursor/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/cursor/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/cursor/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/cursor/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/cursor/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/cursor/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/cursor/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/cursor/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/cursor/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/cursor/references/verify-state.md +98 -0
- package/adapters/cursor/scripts/forge-bootstrap.py +23 -2
- package/adapters/cursor/scripts/forge-root.sh +104 -21
- package/adapters/cursor/scripts/forge-session.py +620 -6969
- package/adapters/cursor/scripts/forge_session/__init__.py +11 -0
- package/adapters/cursor/scripts/forge_session/_common.py +1566 -0
- package/adapters/cursor/scripts/forge_session/_doctor_util.py +218 -0
- package/adapters/cursor/scripts/forge_session/cli.py +1067 -0
- package/adapters/cursor/scripts/forge_session/decisions.py +355 -0
- package/adapters/cursor/scripts/forge_session/discover.py +472 -0
- package/adapters/cursor/scripts/forge_session/doctor.py +2144 -0
- package/adapters/cursor/scripts/forge_session/exit.py +1081 -0
- package/adapters/cursor/scripts/forge_session/outcomes.py +574 -0
- package/adapters/cursor/scripts/forge_session/routes.py +1162 -0
- package/adapters/cursor/scripts/forge_session/state.py +1479 -0
- package/adapters/cursor/scripts/forge_session/topology.py +443 -0
- package/adapters/cursor/skills/forge/forge.mdc +40 -40
- package/adapters/cursor/skills/forge/references/process-overview.md +10 -10
- package/adapters/cursor/skills/forge/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-0-epic/forge-0-epic.mdc +15 -15
- package/adapters/cursor/skills/forge-0-epic/references/edit-mode.md +14 -10
- package/adapters/cursor/skills/forge-0-epic/references/epic-manifest-subcommands.md +8 -3
- package/adapters/cursor/skills/forge-0-epic/references/portable-root.md +20 -16
- package/adapters/cursor/skills/forge-0-epic/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +15 -15
- package/adapters/cursor/skills/forge-1-prd/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +15 -15
- package/adapters/cursor/skills/forge-2-tech/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-2-tech/references/stack-resolution.md +1 -1
- package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +10 -10
- package/adapters/cursor/skills/forge-3-specs/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +19 -11
- package/adapters/cursor/skills/forge-4-backlog/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-4-backlog/references/verify-state.md +98 -0
- package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +48 -53
- package/adapters/cursor/skills/forge-5-loop/references/agent-selection.md +5 -1
- package/adapters/cursor/skills/forge-5-loop/references/preflight-and-self-heal.md +183 -0
- package/adapters/cursor/skills/forge-5-loop/references/ralph-loop-contract.md +12 -8
- package/adapters/cursor/skills/forge-5-loop/references/recovery-procedure.md +14 -4
- package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +20 -10
- package/adapters/cursor/skills/forge-5-loop/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-5-loop/references/verify-state.md +98 -0
- package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +27 -20
- package/adapters/cursor/skills/forge-6-docs/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-6-docs/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-6-docs/references/verify-state.md +98 -0
- package/adapters/cursor/skills/forge-bootstrap/forge-bootstrap.mdc +23 -15
- package/adapters/cursor/skills/forge-bootstrap/references/shared-conventions.md +572 -0
- package/adapters/cursor/skills/forge-bootstrap/references/templates/hygiene/CLAUDE.md +2 -2
- package/adapters/cursor/skills/forge-fix/forge-fix.mdc +27 -30
- package/adapters/cursor/skills/forge-fix/references/select-outcome.md +138 -0
- package/adapters/cursor/skills/forge-fix/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-guide/forge-guide.mdc +84 -7
- package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +7 -7
- package/adapters/cursor/skills/forge-guide/references/preflight-and-self-heal.md +183 -0
- package/adapters/cursor/skills/forge-guide/references/process-overview.md +10 -10
- package/adapters/cursor/skills/forge-guide/references/ralph-loop-contract.md +12 -8
- package/adapters/cursor/skills/forge-guide/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-guide/references/stack-resolution.md +1 -1
- package/adapters/cursor/skills/forge-init/forge-init.mdc +62 -12
- package/adapters/cursor/skills/forge-init/references/preflight-and-self-heal.md +183 -0
- package/adapters/cursor/skills/forge-init/references/shared-conventions.md +572 -0
- package/adapters/cursor/skills/forge-verify/forge-verify.mdc +32 -33
- package/adapters/cursor/skills/forge-verify/references/findings-template.md +8 -8
- package/adapters/cursor/skills/forge-verify/references/select-outcome.md +138 -0
- package/adapters/cursor/skills/forge-verify/references/shared-conventions.md +189 -36
- package/adapters/cursor/skills/forge-verify/references/stage-exit-protocol.md +22 -7
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/epic.md +2 -2
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/cursor/skills/forge-verify/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/gemini/.feature-forge-bundle.json +1 -1
- package/adapters/gemini/agents/forge-researcher.md +1 -1
- package/adapters/gemini/agents/forge-verifier.md +17 -6
- package/adapters/gemini/gemini-extension.json +13 -13
- package/adapters/gemini/references/forge-config-schema.json +7 -7
- package/adapters/gemini/references/portable-root.md +20 -16
- package/adapters/gemini/references/preflight-and-self-heal.md +183 -0
- package/adapters/gemini/references/process-overview.md +10 -10
- package/adapters/gemini/references/ralph-loop-contract.md +12 -8
- package/adapters/gemini/references/select-outcome.md +138 -0
- package/adapters/gemini/references/shared-conventions.md +189 -36
- package/adapters/gemini/references/skill-frontmatter.schema.json +3 -1
- package/adapters/gemini/references/stack-resolution.md +1 -1
- package/adapters/gemini/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/references/templates/root-hygiene/AGENTS.md +14 -0
- package/adapters/gemini/references/templates/root-hygiene/CLAUDE.md +14 -0
- package/adapters/gemini/references/templates/specs-hygiene/AGENTS.md +3 -1
- package/adapters/gemini/references/templates/specs-hygiene/CLAUDE.md +2 -1
- package/adapters/gemini/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/gemini/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/gemini/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/gemini/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/gemini/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/gemini/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/gemini/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/gemini/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/gemini/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/gemini/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/gemini/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/gemini/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/gemini/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/gemini/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/gemini/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/gemini/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/gemini/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/gemini/references/verify-state.md +98 -0
- package/adapters/gemini/scripts/forge-bootstrap.py +23 -2
- package/adapters/gemini/scripts/forge-root.sh +104 -21
- package/adapters/gemini/scripts/forge-session.py +620 -6969
- package/adapters/gemini/scripts/forge_session/__init__.py +11 -0
- package/adapters/gemini/scripts/forge_session/_common.py +1566 -0
- package/adapters/gemini/scripts/forge_session/_doctor_util.py +218 -0
- package/adapters/gemini/scripts/forge_session/cli.py +1067 -0
- package/adapters/gemini/scripts/forge_session/decisions.py +355 -0
- package/adapters/gemini/scripts/forge_session/discover.py +472 -0
- package/adapters/gemini/scripts/forge_session/doctor.py +2144 -0
- package/adapters/gemini/scripts/forge_session/exit.py +1081 -0
- package/adapters/gemini/scripts/forge_session/outcomes.py +574 -0
- package/adapters/gemini/scripts/forge_session/routes.py +1162 -0
- package/adapters/gemini/scripts/forge_session/state.py +1479 -0
- package/adapters/gemini/scripts/forge_session/topology.py +443 -0
- package/adapters/gemini/skills/forge/forge.md +40 -40
- package/adapters/gemini/skills/forge/references/process-overview.md +10 -10
- package/adapters/gemini/skills/forge/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-0-epic/forge-0-epic.md +15 -15
- package/adapters/gemini/skills/forge-0-epic/references/edit-mode.md +14 -10
- package/adapters/gemini/skills/forge-0-epic/references/epic-manifest-subcommands.md +8 -3
- package/adapters/gemini/skills/forge-0-epic/references/portable-root.md +20 -16
- package/adapters/gemini/skills/forge-0-epic/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +15 -15
- package/adapters/gemini/skills/forge-1-prd/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +15 -15
- package/adapters/gemini/skills/forge-2-tech/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-2-tech/references/stack-resolution.md +1 -1
- package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +10 -10
- package/adapters/gemini/skills/forge-3-specs/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +19 -11
- package/adapters/gemini/skills/forge-4-backlog/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-4-backlog/references/verify-state.md +98 -0
- package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +48 -53
- package/adapters/gemini/skills/forge-5-loop/references/agent-selection.md +5 -1
- package/adapters/gemini/skills/forge-5-loop/references/preflight-and-self-heal.md +183 -0
- package/adapters/gemini/skills/forge-5-loop/references/ralph-loop-contract.md +12 -8
- package/adapters/gemini/skills/forge-5-loop/references/recovery-procedure.md +14 -4
- package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +20 -10
- package/adapters/gemini/skills/forge-5-loop/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-5-loop/references/verify-state.md +98 -0
- package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +27 -20
- package/adapters/gemini/skills/forge-6-docs/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-6-docs/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-6-docs/references/verify-state.md +98 -0
- package/adapters/gemini/skills/forge-bootstrap/forge-bootstrap.md +23 -15
- package/adapters/gemini/skills/forge-bootstrap/references/shared-conventions.md +572 -0
- package/adapters/gemini/skills/forge-bootstrap/references/templates/hygiene/CLAUDE.md +2 -2
- package/adapters/gemini/skills/forge-fix/forge-fix.md +27 -30
- package/adapters/gemini/skills/forge-fix/references/select-outcome.md +138 -0
- package/adapters/gemini/skills/forge-fix/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-guide/forge-guide.md +84 -7
- package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +7 -7
- package/adapters/gemini/skills/forge-guide/references/preflight-and-self-heal.md +183 -0
- package/adapters/gemini/skills/forge-guide/references/process-overview.md +10 -10
- package/adapters/gemini/skills/forge-guide/references/ralph-loop-contract.md +12 -8
- package/adapters/gemini/skills/forge-guide/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-guide/references/stack-resolution.md +1 -1
- package/adapters/gemini/skills/forge-init/forge-init.md +62 -12
- package/adapters/gemini/skills/forge-init/references/preflight-and-self-heal.md +183 -0
- package/adapters/gemini/skills/forge-init/references/shared-conventions.md +572 -0
- package/adapters/gemini/skills/forge-verify/forge-verify.md +32 -33
- package/adapters/gemini/skills/forge-verify/references/findings-template.md +8 -8
- package/adapters/gemini/skills/forge-verify/references/select-outcome.md +138 -0
- package/adapters/gemini/skills/forge-verify/references/shared-conventions.md +189 -36
- package/adapters/gemini/skills/forge-verify/references/stage-exit-protocol.md +22 -7
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/epic.md +2 -2
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/gemini/skills/forge-verify/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/pi/.feature-forge-bundle.json +1 -1
- package/adapters/pi/agents/forge-verifier.md +16 -5
- package/adapters/pi/extensions/forge-invocation-args/README.md +106 -0
- package/adapters/pi/extensions/forge-invocation-args/index.ts +31 -0
- package/adapters/pi/extensions/forge-invocation-args/wiring.ts +172 -0
- package/adapters/pi/extensions/forge-loop-supervisor/events.ts +90 -0
- package/adapters/pi/extensions/forge-loop-supervisor/index.ts +114 -0
- package/adapters/pi/extensions/forge-loop-supervisor/registry.ts +137 -0
- package/adapters/pi/extensions/forge-loop-supervisor/supervisor.ts +185 -0
- package/adapters/pi/extensions/forge-loop-supervisor/tailer.ts +137 -0
- package/adapters/pi/extensions/forge-loop-supervisor/types.ts +87 -0
- package/adapters/pi/extensions/forge-loop-supervisor/wiring.ts +423 -0
- package/adapters/pi/package.json +3 -1
- package/adapters/pi/references/forge-config-schema.json +5 -5
- package/adapters/pi/references/portable-root.md +20 -16
- package/adapters/pi/references/preflight-and-self-heal.md +183 -0
- package/adapters/pi/references/ralph-loop-contract.md +12 -8
- package/adapters/pi/references/select-outcome.md +138 -0
- package/adapters/pi/references/shared-conventions.md +176 -23
- package/adapters/pi/references/skill-frontmatter.schema.json +3 -1
- package/adapters/pi/references/stack-resolution.md +1 -1
- package/adapters/pi/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/references/templates/root-hygiene/AGENTS.md +14 -0
- package/adapters/pi/references/templates/root-hygiene/CLAUDE.md +14 -0
- package/adapters/pi/references/templates/specs-hygiene/AGENTS.md +3 -1
- package/adapters/pi/references/templates/specs-hygiene/CLAUDE.md +2 -1
- package/adapters/pi/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/pi/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/pi/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/pi/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/pi/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/pi/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/pi/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/pi/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/pi/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/pi/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/pi/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/pi/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/pi/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/pi/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/pi/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/pi/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/pi/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/adapters/pi/references/verify-state.md +98 -0
- package/adapters/pi/scripts/forge-bootstrap.py +23 -2
- package/adapters/pi/scripts/forge-root.sh +104 -21
- package/adapters/pi/scripts/forge-session.py +620 -6969
- package/adapters/pi/scripts/forge_session/__init__.py +11 -0
- package/adapters/pi/scripts/forge_session/_common.py +1566 -0
- package/adapters/pi/scripts/forge_session/_doctor_util.py +218 -0
- package/adapters/pi/scripts/forge_session/cli.py +1067 -0
- package/adapters/pi/scripts/forge_session/decisions.py +355 -0
- package/adapters/pi/scripts/forge_session/discover.py +472 -0
- package/adapters/pi/scripts/forge_session/doctor.py +2144 -0
- package/adapters/pi/scripts/forge_session/exit.py +1081 -0
- package/adapters/pi/scripts/forge_session/outcomes.py +574 -0
- package/adapters/pi/scripts/forge_session/routes.py +1162 -0
- package/adapters/pi/scripts/forge_session/state.py +1479 -0
- package/adapters/pi/scripts/forge_session/topology.py +443 -0
- package/adapters/pi/skills/forge/SKILL.md +13 -9
- package/adapters/pi/skills/forge/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-0-epic/SKILL.md +13 -9
- package/adapters/pi/skills/forge-0-epic/references/edit-mode.md +9 -5
- package/adapters/pi/skills/forge-0-epic/references/epic-manifest-subcommands.md +6 -1
- package/adapters/pi/skills/forge-0-epic/references/portable-root.md +20 -16
- package/adapters/pi/skills/forge-0-epic/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-0-epic/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-1-prd/SKILL.md +13 -9
- package/adapters/pi/skills/forge-1-prd/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-1-prd/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-2-tech/SKILL.md +12 -8
- package/adapters/pi/skills/forge-2-tech/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-2-tech/references/stack-resolution.md +1 -1
- package/adapters/pi/skills/forge-2-tech/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-3-specs/SKILL.md +11 -7
- package/adapters/pi/skills/forge-3-specs/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-3-specs/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-4-backlog/SKILL.md +22 -10
- package/adapters/pi/skills/forge-4-backlog/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-4-backlog/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-4-backlog/references/verify-state.md +98 -0
- package/adapters/pi/skills/forge-5-loop/SKILL.md +47 -45
- package/adapters/pi/skills/forge-5-loop/references/agent-selection.md +4 -0
- package/adapters/pi/skills/forge-5-loop/references/preflight-and-self-heal.md +183 -0
- package/adapters/pi/skills/forge-5-loop/references/ralph-loop-contract.md +12 -8
- package/adapters/pi/skills/forge-5-loop/references/recovery-procedure.md +10 -0
- package/adapters/pi/skills/forge-5-loop/references/runner-contract.md +22 -9
- package/adapters/pi/skills/forge-5-loop/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-5-loop/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-5-loop/references/verify-state.md +98 -0
- package/adapters/pi/skills/forge-6-docs/SKILL.md +27 -16
- package/adapters/pi/skills/forge-6-docs/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-6-docs/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-6-docs/references/verify-state.md +98 -0
- package/adapters/pi/skills/forge-bootstrap/SKILL.md +24 -12
- package/adapters/pi/skills/forge-bootstrap/references/shared-conventions.md +572 -0
- package/adapters/pi/skills/forge-fix/SKILL.md +21 -20
- package/adapters/pi/skills/forge-fix/references/select-outcome.md +138 -0
- package/adapters/pi/skills/forge-fix/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-fix/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-guide/SKILL.md +83 -2
- package/adapters/pi/skills/forge-guide/references/forge-config-schema.json +5 -5
- package/adapters/pi/skills/forge-guide/references/preflight-and-self-heal.md +183 -0
- package/adapters/pi/skills/forge-guide/references/ralph-loop-contract.md +12 -8
- package/adapters/pi/skills/forge-guide/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-guide/references/stack-resolution.md +1 -1
- package/adapters/pi/skills/forge-init/SKILL.md +63 -9
- package/adapters/pi/skills/forge-init/references/preflight-and-self-heal.md +183 -0
- package/adapters/pi/skills/forge-init/references/shared-conventions.md +572 -0
- package/adapters/pi/skills/forge-verify/SKILL.md +26 -23
- package/adapters/pi/skills/forge-verify/references/findings-template.md +7 -7
- package/adapters/pi/skills/forge-verify/references/select-outcome.md +138 -0
- package/adapters/pi/skills/forge-verify/references/shared-conventions.md +176 -23
- package/adapters/pi/skills/forge-verify/references/stage-exit-protocol.md +19 -4
- package/adapters/pi/skills/forge-verify/references/verification-checklists/epic.md +1 -1
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/MEMORY.md +35 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_absence_claims.md +36 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_carveout_sibling_semantics.md +34 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_deviation_judgment.md +36 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_enum_vocabulary_ripple.md +43 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_extend_the_existing.md +31 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_guard_substitution_detection.md +34 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_mechanical_rewrite_damage.md +30 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_postfix_reverify.md +82 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_proximity_window_guards.md +26 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_scratch_root_probes.md +40 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_self_referential_control.md +26 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_sibling_docstring_sweep.md +28 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_spec_literals_are_claims.md +45 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_stale_counts_after_split.md +36 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_test_count_units.md +20 -0
- package/adapters/pi/skills/forge-verify/references/verifier-patterns/pattern_vacuous_self_reading_tests.md +32 -0
- package/dist/manifest.d.ts +1 -1
- package/dist/rauf.d.ts +3 -3
- package/dist/rauf.js +2 -2
- package/dist/source.d.ts +5 -2
- package/dist/source.js +5 -2
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -74,7 +74,7 @@ Claude Code users can alternatively install via the plugin marketplace:
|
|
|
74
74
|
|
|
75
75
|
The default loop runner is [**rauf**](https://github.com/garygentry/rauf), published as
|
|
76
76
|
[`@garygentry/rauf`](https://www.npmjs.com/package/@garygentry/rauf). The installer runs a
|
|
77
|
-
read-only resolvability preflight on the pin (`@garygentry/rauf@0.
|
|
77
|
+
read-only resolvability preflight on the pin (`@garygentry/rauf@0.16.0`) and records it; pass
|
|
78
78
|
`--skip-rauf` to defer the check (e.g. offline installs). Install the rauf CLI itself with
|
|
79
79
|
`npx @garygentry/rauf` or its
|
|
80
80
|
[binary script](https://github.com/garygentry/rauf#install). See the
|
|
@@ -32,8 +32,12 @@ _No dropped constructs — every canonical construct is representable in this ag
|
|
|
32
32
|
| `skills/forge-5-loop/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
33
33
|
| `skills/forge-6-docs/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
34
34
|
| `skills/forge-bootstrap/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
35
|
+
| `skills/forge-bootstrap/SKILL.md` | `disable-model-invocation` | no Codex skill-frontmatter skill-governance field (TQ-1) |
|
|
35
36
|
| `skills/forge-fix/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
37
|
+
| `skills/forge-guide/SKILL.md` | `allowed-tools` | no Codex skill-frontmatter skill-governance field (TQ-1) |
|
|
36
38
|
| `skills/forge-guide/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
39
|
+
| `skills/forge-guide/SKILL.md` | `disallowed-tools` | no Codex skill-frontmatter skill-governance field (TQ-1) |
|
|
40
|
+
| `skills/forge-init/SKILL.md` | `disable-model-invocation` | no Codex skill-frontmatter skill-governance field (TQ-1) |
|
|
37
41
|
| `skills/forge-verify/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
38
42
|
| `skills/forge/SKILL.md` | `argument-hint` | no confirmed Codex invocation-hint field (TQ-1) |
|
|
39
43
|
|
|
@@ -61,8 +65,12 @@ _No dropped constructs — every canonical construct is representable in this ag
|
|
|
61
65
|
| `skills/forge-5-loop/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
62
66
|
| `skills/forge-6-docs/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
63
67
|
| `skills/forge-bootstrap/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
68
|
+
| `skills/forge-bootstrap/SKILL.md` | `disable-model-invocation` | no Copilot skill-frontmatter skill-governance field (TQ-1) |
|
|
64
69
|
| `skills/forge-fix/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
70
|
+
| `skills/forge-guide/SKILL.md` | `allowed-tools` | no Copilot skill-frontmatter skill-governance field (TQ-1) |
|
|
65
71
|
| `skills/forge-guide/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
72
|
+
| `skills/forge-guide/SKILL.md` | `disallowed-tools` | no Copilot skill-frontmatter skill-governance field (TQ-1) |
|
|
73
|
+
| `skills/forge-init/SKILL.md` | `disable-model-invocation` | no Copilot skill-frontmatter skill-governance field (TQ-1) |
|
|
66
74
|
| `skills/forge-verify/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
67
75
|
| `skills/forge/SKILL.md` | `argument-hint` | no known Copilot invocation-hint field (TQ-1) |
|
|
68
76
|
|
|
@@ -90,8 +98,12 @@ _No dropped constructs — every canonical construct is representable in this ag
|
|
|
90
98
|
| `skills/forge-5-loop/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
91
99
|
| `skills/forge-6-docs/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
92
100
|
| `skills/forge-bootstrap/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
101
|
+
| `skills/forge-bootstrap/SKILL.md` | `disable-model-invocation` | no Cursor .mdc skill-governance field |
|
|
93
102
|
| `skills/forge-fix/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
103
|
+
| `skills/forge-guide/SKILL.md` | `allowed-tools` | no Cursor .mdc skill-governance field |
|
|
94
104
|
| `skills/forge-guide/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
105
|
+
| `skills/forge-guide/SKILL.md` | `disallowed-tools` | no Cursor .mdc skill-governance field |
|
|
106
|
+
| `skills/forge-init/SKILL.md` | `disable-model-invocation` | no Cursor .mdc skill-governance field |
|
|
95
107
|
| `skills/forge-verify/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
96
108
|
| `skills/forge/SKILL.md` | `argument-hint` | no Cursor .mdc invocation-hint field |
|
|
97
109
|
|
|
@@ -119,8 +131,12 @@ _No dropped constructs — every canonical construct is representable in this ag
|
|
|
119
131
|
| `skills/forge-5-loop/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
120
132
|
| `skills/forge-6-docs/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
121
133
|
| `skills/forge-bootstrap/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
134
|
+
| `skills/forge-bootstrap/SKILL.md` | `disable-model-invocation` | no Gemini skill-frontmatter skill-governance field (TQ-1) |
|
|
122
135
|
| `skills/forge-fix/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
136
|
+
| `skills/forge-guide/SKILL.md` | `allowed-tools` | no Gemini skill-frontmatter skill-governance field (TQ-1) |
|
|
123
137
|
| `skills/forge-guide/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
138
|
+
| `skills/forge-guide/SKILL.md` | `disallowed-tools` | no Gemini skill-frontmatter skill-governance field (TQ-1) |
|
|
139
|
+
| `skills/forge-init/SKILL.md` | `disable-model-invocation` | no Gemini skill-frontmatter skill-governance field (TQ-1) |
|
|
124
140
|
| `skills/forge-verify/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
125
141
|
| `skills/forge/SKILL.md` | `argument-hint` | Gemini manifest hint field unconfirmed (TQ-1) |
|
|
126
142
|
|
|
@@ -139,8 +155,12 @@ _No dropped constructs — every canonical construct is representable in this ag
|
|
|
139
155
|
| `skills/forge-5-loop/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
140
156
|
| `skills/forge-6-docs/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
141
157
|
| `skills/forge-bootstrap/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
158
|
+
| `skills/forge-bootstrap/SKILL.md` | `disable-model-invocation` | no Pi skill-frontmatter skill-governance field |
|
|
142
159
|
| `skills/forge-fix/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
160
|
+
| `skills/forge-guide/SKILL.md` | `allowed-tools` | no Pi skill-frontmatter skill-governance field |
|
|
143
161
|
| `skills/forge-guide/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
162
|
+
| `skills/forge-guide/SKILL.md` | `disallowed-tools` | no Pi skill-frontmatter skill-governance field |
|
|
163
|
+
| `skills/forge-init/SKILL.md` | `disable-model-invocation` | no Pi skill-frontmatter skill-governance field |
|
|
144
164
|
| `skills/forge-verify/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
145
165
|
| `skills/forge/SKILL.md` | `argument-hint` | Pi skills have no invocation-hint field |
|
|
146
166
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "feature-forge",
|
|
3
|
+
"version": "0.20.0",
|
|
4
|
+
"description": "End-to-end feature development pipeline: PRD → tech spec → implementation specs → backlog → documentation, with verification gates, pipeline state tracking, and specialized subagents for verification and codebase research.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Gary Gentry"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [
|
|
9
|
+
"pipeline",
|
|
10
|
+
"prd",
|
|
11
|
+
"specs",
|
|
12
|
+
"backlog",
|
|
13
|
+
"documentation",
|
|
14
|
+
"verification"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -25,10 +25,11 @@ You have READ-ONLY access. You cannot and should not modify any files. Your outp
|
|
|
25
25
|
## How You Work
|
|
26
26
|
|
|
27
27
|
1. Read the pipeline state file to understand what stage the feature is at
|
|
28
|
-
2.
|
|
29
|
-
3.
|
|
30
|
-
4.
|
|
31
|
-
5.
|
|
28
|
+
2. Read the shipped verifier-patterns index — `references/verifier-patterns/MEMORY.md` — and open the patterns your dispatched mode makes relevant. These are the versioned, reviewed heuristics that ship with the pipeline (see "Using Your Memory" for how they relate to your per-project memory).
|
|
29
|
+
3. Load all relevant artifacts for the current verification mode
|
|
30
|
+
4. Read **only your dispatched mode's checklist** — `references/verification-checklists/{mode}.md` (the parent's dispatch prompt names your `{mode}`) — and execute every check in it. Do **not** read the other five mode files or `references/findings-template.md`; those are for other modes and for the parent orchestrator respectively.
|
|
31
|
+
5. Return structured findings as your response in the Output Format specified below
|
|
32
|
+
6. Generate a fix plan suitable for a fresh agent to execute
|
|
32
33
|
|
|
33
34
|
## Scoped / Parallel Operation
|
|
34
35
|
|
|
@@ -44,7 +45,17 @@ For large spec suites (>8 documents), process verification in phases: load share
|
|
|
44
45
|
|
|
45
46
|
## Using Your Memory
|
|
46
47
|
|
|
47
|
-
You
|
|
48
|
+
You draw on two distinct layers, and they must not be confused:
|
|
49
|
+
|
|
50
|
+
- **Shipped verifier patterns** (`references/verifier-patterns/`) — versioned, reviewed
|
|
51
|
+
heuristics that ship with the pipeline to every project. Read the index
|
|
52
|
+
(`references/verifier-patterns/MEMORY.md`) on start. **Treat these as read-only** — they
|
|
53
|
+
are canon, not your scratch memory; a genuinely new, general heuristic worth shipping is
|
|
54
|
+
a change proposed in review, not something you write here at run time.
|
|
55
|
+
- **Per-project memory** (`memory: project`, below) — your own accumulating notes about
|
|
56
|
+
*this* project's specific blind spots, conventions, and confirmed false positives.
|
|
57
|
+
|
|
58
|
+
You have persistent per-project memory in your `MEMORY.md` file. Use it to track:
|
|
48
59
|
|
|
49
60
|
- **Recurring patterns**: If you keep finding the same type of gap across features, note it. Over time you'll learn this project's blind spots.
|
|
50
61
|
- **Project conventions**: As you review more specs, capture conventions that should be consistent (naming patterns, error handling approaches, test strategies).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"title": "Feature Forge Configuration",
|
|
4
|
-
"description": "Project-level configuration for the feature-forge plugin. Place as forge.config.json in your project root.",
|
|
4
|
+
"description": "Project-level configuration for the feature-forge plugin. Place as forge.config.json in your project root. An optional gitignored forge.config.local.json alongside it is deep-merged over the committed file (local wins) so machine-local facts — e.g. loopRunner.bin, contextWindowTokens — live outside version control; FEATURE_FORGE_LOOP_RUNNER_BIN overrides loopRunner.bin above both.",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"properties": {
|
|
7
7
|
"specsDir": {
|
|
@@ -235,8 +235,8 @@
|
|
|
235
235
|
},
|
|
236
236
|
"installHint": {
|
|
237
237
|
"type": "string",
|
|
238
|
-
"default": "Provision rauf for a multi-agent setup with the cross-agent installer: `npx @garygentry/feature-forge install` (records the pinned @garygentry/rauf@0.
|
|
239
|
-
"description": "Shown when the runner BINARY is missing or too old (version gate fails, minRunnerVersion floor) — how to obtain/upgrade the CLI itself. Names two distinct binary-provisioning paths: (1) the cross-agent installer (`npx @garygentry/feature-forge install`, the multi-agent provisioning path that pins @garygentry/rauf@0.
|
|
238
|
+
"default": "Provision rauf for a multi-agent setup with the cross-agent installer: `npx @garygentry/feature-forge install` (records the pinned @garygentry/rauf@0.16.0 default). Or install/upgrade just the rauf CLI: `npx @garygentry/rauf@0.16.0 --version`, or `curl -fsSL https://raw.githubusercontent.com/garygentry/rauf/main/scripts/install-binary.sh | bash`.",
|
|
239
|
+
"description": "Shown when the runner BINARY is missing or too old (version gate fails, minRunnerVersion floor) — how to obtain/upgrade the CLI itself. Names two distinct binary-provisioning paths: (1) the cross-agent installer (`npx @garygentry/feature-forge install`, the multi-agent provisioning path that pins @garygentry/rauf@0.16.0), and (2) the direct rauf-CLI install/upgrade one-liner. Distinct from setupHint (which installs per-project artifacts); a version-gate failure is ALWAYS this hint, never setupHint."
|
|
240
240
|
},
|
|
241
241
|
"schemaVersion": {
|
|
242
242
|
"type": "string",
|
|
@@ -245,8 +245,8 @@
|
|
|
245
245
|
},
|
|
246
246
|
"minRunnerVersion": {
|
|
247
247
|
"type": "string",
|
|
248
|
-
"default": "0.
|
|
249
|
-
"description": "Minimum runner version (semver). 0.
|
|
248
|
+
"default": "0.14.0",
|
|
249
|
+
"description": "Minimum runner version (semver). 0.14.0 is the CAPABILITY FLOOR the shipped stage actually depends on — it is the version needed for full post-run needs-human recovery: rauf 0.14's `backlog answer` injects a recorded answer into the next iteration (RECOVERY_MIN_RUNNER_VERSION in forge-session.py). Below it, recovery silently degrades to `backlog unblock` (answer not injected) and large Codex prompts retain the pre-0.14 argv-size (E2BIG) failure mode. Earlier surfaces are subsumed: 0.6.0 first shipped the coding-agent selection surface (--agent flag, `agents` availability probe, preset registry consumed by agentArgument/agentsProbeCommand); 0.5.0 added unified exit codes, `loop run --detached`, the explicit `review` signal, and versioned events.ndjson. Flooring at 0.14.0 guarantees a successful gate implies the recovery + agent surfaces both exist. The floor is distinct from the installer's `RAUF_PIN` (installHint) — the pin may sit ahead of the floor when a newer rauf ships nothing this floor's dependents need; it only rises when rauf ships a surface a shipped stage actually depends on. forge-5 enforces the floor via versionCommand before any loop side-effects."
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
}
|
|
@@ -12,7 +12,7 @@ against the fenced block here, byte-for-byte.
|
|
|
12
12
|
## Canonical bootstrap prelude
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
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')"
|
|
15
|
+
R="$(bash -c '[ -z "${FEATURE_FORGE_ROOT:-}" ] || [ -x "$FEATURE_FORGE_ROOT/scripts/forge-root.sh" ] || { echo "feature-forge: FEATURE_FORGE_ROOT=$FEATURE_FORGE_ROOT has no scripts/forge-root.sh" >&2; exit 2; }; for d in "${FEATURE_FORGE_ROOT:-}" "${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')"
|
|
16
16
|
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
17
17
|
```
|
|
18
18
|
|
|
@@ -24,24 +24,27 @@ makes several calls, add the prelude once and reuse `$R` for each. A fresh block
|
|
|
24
24
|
prelude (per-block re-resolution). Worked example:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
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')"
|
|
27
|
+
R="$(bash -c '[ -z "${FEATURE_FORGE_ROOT:-}" ] || [ -x "$FEATURE_FORGE_ROOT/scripts/forge-root.sh" ] || { echo "feature-forge: FEATURE_FORGE_ROOT=$FEATURE_FORGE_ROOT has no scripts/forge-root.sh" >&2; exit 2; }; for d in "${FEATURE_FORGE_ROOT:-}" "${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')"
|
|
28
28
|
[ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; }
|
|
29
29
|
python3 "$R/scripts/epic-manifest.py" render-status "{epic}" --specs-dir "{specsDir}" --json
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## Invariants (do NOT "fix" these)
|
|
33
33
|
|
|
34
|
-
1. **
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
34
|
+
1. **Explicit `FEATURE_FORGE_ROOT` override first, then the Claude env hint, then paths.** The
|
|
35
|
+
prelude opens with a guard: if `FEATURE_FORGE_ROOT` is set but carries no
|
|
36
|
+
`scripts/forge-root.sh`, it fails loudly (`exit 2`) instead of silently falling back to
|
|
37
|
+
discovery — an operator override that does not resolve is an error, not a hint (the same rule
|
|
38
|
+
`forge-root.sh` Step 0 applies). The `for d in …` list then leads with the `FEATURE_FORGE_ROOT`
|
|
39
|
+
env var in default-empty `:-` form (the host-neutral operator override, honored on every agent)
|
|
40
|
+
followed by the `CLAUDE_PLUGIN_ROOT` env var in the same form (the exact bundle dir Claude
|
|
41
|
+
exports in every marketplace/plugin session), then the directory-path candidates. Both env hints
|
|
42
|
+
give exact, glob-free resolution; when unset each expands to empty and is harmlessly skipped, so
|
|
43
|
+
other hosts fall through to the path candidates unchanged. `CLAUDE_PLUGIN_ROOT` remains the **one
|
|
44
|
+
sanctioned** appearance of that vendor variable in canonical surfaces: spec-purity rule 3 allows
|
|
45
|
+
it by stripping the byte-pinned prelude
|
|
46
|
+
before its residual-var scan (so a stray var anywhere else — including the default-empty form —
|
|
47
|
+
still fails). The exact literal is shown only in the fenced prelude above and audited in
|
|
45
48
|
`vendor-construct-inventory.md`.
|
|
46
49
|
2. **First-discoverable-resolver-wins.** The `exec` inside the `$(…)` command substitution means
|
|
47
50
|
the loop stops at the first directory holding an executable `forge-root.sh` and delegates ALL
|
|
@@ -64,8 +67,9 @@ python3 "$R/scripts/epic-manifest.py" render-status "{epic}" --specs-dir "{specs
|
|
|
64
67
|
|
|
65
68
|
The prelude delegates to [`scripts/forge-root.sh`](../scripts/forge-root.sh) — the portable
|
|
66
69
|
skill/plugin-root resolver. It takes no arguments, prints the absolute plugin root to stdout and
|
|
67
|
-
exits `0`, or writes an actionable message to stderr and exits
|
|
68
|
-
self-location → candidate-root probe →
|
|
69
|
-
and never sources or executes a discovered
|
|
70
|
+
exits `0`, or writes an actionable message to stderr and exits non-zero. It resolves the root by
|
|
71
|
+
explicit `FEATURE_FORGE_ROOT` override (Step 0) → self-location → candidate-root probe →
|
|
72
|
+
`CLAUDE_PLUGIN_ROOT` fallback → actionable failure, and never sources or executes a discovered
|
|
73
|
+
path — it only ever prints a directory string. The
|
|
70
74
|
spec-purity checker (rule 5) enforces that every prelude occurrence across the canon is
|
|
71
75
|
byte-identical to the fenced block in this file.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Preflight & Self-Heal Procedure
|
|
2
|
+
|
|
3
|
+
The named procedure that turns "the environment is missing/stale/misconfigured" into a
|
|
4
|
+
clear stop or a scripted, consented repair — instead of a cryptic mid-run failure or a
|
|
5
|
+
silent unasked mutation. It runs whenever a skill gates on `doctor`'s structured
|
|
6
|
+
`checks[]` (`roadmap/self-healing-resilience.md` §5.2); today that is `forge-5-loop`'s
|
|
7
|
+
gates 1c/1d (`skills/forge-5-loop/SKILL.md`), which resolve the loop runner **before**
|
|
8
|
+
touching it, `forge-init`'s install preflight (`skills/forge-init/SKILL.md`), where
|
|
9
|
+
neither check is a stop, and `forge-guide --doctor` (`skills/forge-guide/SKILL.md`), the
|
|
10
|
+
operator-facing repair surface, which gates nothing at all. All three are callers, not
|
|
11
|
+
the procedure's scope: any skill that gates on `checks[]` follows it in full. Its seven
|
|
12
|
+
ordered steps: **enumerate → cluster → consolidated prompts → record → apply → prove →
|
|
13
|
+
return**.
|
|
14
|
+
|
|
15
|
+
## 1. Scope and the failure rule
|
|
16
|
+
|
|
17
|
+
**Input contract:** the caller has already run `doctor --json` narrowed to the `--check`
|
|
18
|
+
ids it cares about (never the full catalog inside a hard gate — an advisory check must
|
|
19
|
+
never block a launch it has no bearing on) and hands this procedure that call's `checks[]`
|
|
20
|
+
and `remedyClusters[]`. The procedure orchestrates that data; it never re-derives it and
|
|
21
|
+
never invents a remedy `doctor` did not emit (INV-4).
|
|
22
|
+
|
|
23
|
+
**The failure rule (applies to every step).** `doctor` itself never exits non-zero and
|
|
24
|
+
never raises (INV-3) — there is no non-zero exit to catch here. What *can* fail is a
|
|
25
|
+
remedy command: any remedy invocation that exits non-zero, times out, or produces
|
|
26
|
+
output the re-run in step 6 cannot confirm is surfaced **verbatim** and **STOPS** the
|
|
27
|
+
procedure with a **failed preflight** report — never reported as healed. This applies the
|
|
28
|
+
post-run recovery procedure's failure rule, narrowed to remedies (preflight has no
|
|
29
|
+
runner-answer/unblock apply mechanism of its own).
|
|
30
|
+
|
|
31
|
+
## 2. The seven steps
|
|
32
|
+
|
|
33
|
+
### Step 1 — Enumerate
|
|
34
|
+
|
|
35
|
+
- **Input:** the caller's `doctor --json` result (§1).
|
|
36
|
+
- **Decision point:** if every requested check is `ok` or `na`, there is nothing to
|
|
37
|
+
cluster, prompt, apply, or prove: **skip steps 2–6 and return `ok` with no output and
|
|
38
|
+
no prompt** (INV-2 — a fully healthy project produces zero new preflight text). This is
|
|
39
|
+
the only step whose outcome the caller checks before calling the rest of the
|
|
40
|
+
procedure at all.
|
|
41
|
+
- **Output:** the affected `checks[]` subset (`status` is `warn` or `fail`) with each
|
|
42
|
+
entry's `remedy` and `severity`.
|
|
43
|
+
|
|
44
|
+
### Step 2 — Cluster
|
|
45
|
+
|
|
46
|
+
- **Input:** the affected checks from step 1.
|
|
47
|
+
- **Mechanism:** `remedyClusters[]`, already computed by `doctor_report` (pure
|
|
48
|
+
`cluster_checks`, `scripts/forge-session.py`) — group by identical `remedy.command`,
|
|
49
|
+
most-conservative `safety` wins the merge, `remedy: null` checks are **not** clustered
|
|
50
|
+
(report-only, no prompt to build). Reuse it as-is; do not re-cluster by hand.
|
|
51
|
+
- **Output:** the final cluster set — one entry per distinct runnable remedy, each
|
|
52
|
+
carrying its `checkIds[]`, `command`, `safety`, and `description` — plus the
|
|
53
|
+
report-only set (affected checks with no `remedy` or no `remedy.command`).
|
|
54
|
+
|
|
55
|
+
### Step 3 — Consolidated prompts
|
|
56
|
+
|
|
57
|
+
- **Input:** the cluster set from step 2.
|
|
58
|
+
- **Mechanism:** one question per cluster (never one per check) via `AskUserQuestion`
|
|
59
|
+
(rung 1/2) or the ladder's rung-3 default (§4). Name the **exact remedy command**, its
|
|
60
|
+
**safety tier**, and **every member check id** the cluster covers — e.g. *"`runner-wired`
|
|
61
|
+
and `runner-legacy-layout` both resolve by running `{bin} migrate .` (local-write).
|
|
62
|
+
Run it?"*
|
|
63
|
+
- **Per the safety ladder** (`references/shared-conventions.md` § Remedy Safety Ladder):
|
|
64
|
+
a `read-only` cluster is never prompted (run it and move to step 5); `local-write` asks
|
|
65
|
+
**once per remedy class per session** — re-affirming the same `remedy.command` string a
|
|
66
|
+
second time in the same session skips straight to apply; `global-install`/`network` are
|
|
67
|
+
**never** prompted for execution — surface them as report-only advice (§5's
|
|
68
|
+
advise-only path) even though `doctor` clustered them.
|
|
69
|
+
- **Report-only set — three shapes, all print once, plainly, with no question:** checks
|
|
70
|
+
with no `remedy` at all (a corrupt manifest, an unresolvable config); a `remedy` whose
|
|
71
|
+
`command` is `null` (reinstall-only or config-edit advice with nothing to run — never
|
|
72
|
+
clustered, since `cluster_checks` skips these); and a `global-install`/`network`
|
|
73
|
+
remedy (clustered by `doctor`, but never prompted for execution here).
|
|
74
|
+
- **Output:** per cluster, one of {approved, declined, advise-only (tier forbids
|
|
75
|
+
execution), unaskable→advise-only (genuinely no way to ask and wait, §4)}.
|
|
76
|
+
|
|
77
|
+
### Step 4 — Record
|
|
78
|
+
|
|
79
|
+
- **Input:** every outcome from step 3.
|
|
80
|
+
- **Mechanism:** **output only** — a `preflight:` line per cluster, e.g.
|
|
81
|
+
`preflight: runner-wired,runner-legacy-layout → {bin} migrate . [local-write] — approved+run`.
|
|
82
|
+
The five outcome tokens are `run` (read-only, no prompt needed), `approved+run`,
|
|
83
|
+
`declined`, `advise-only` (tier forbids execution — includes the report-only,
|
|
84
|
+
null-command shape from §2 step 3), `unaskable→advise-only` (rung 3, no default
|
|
85
|
+
permits the write). **The backlog's item-keyed decision record** (the durable
|
|
86
|
+
store post-run recovery uses to survive a session boundary) **is NOT used here** — a
|
|
87
|
+
preflight remedy is environment repair, not a backlog decision, and writing one there
|
|
88
|
+
would durably attribute an environment fix to a backlog item that never asked for it.
|
|
89
|
+
- **Output:** the stated line, printed before step 5 acts on anything.
|
|
90
|
+
|
|
91
|
+
### Step 5 — Apply
|
|
92
|
+
|
|
93
|
+
- **Input:** every cluster whose step-4 outcome is `run` or `approved+run`.
|
|
94
|
+
- **Mechanism:** run `remedy.command` **verbatim** — never edited, never re-templated.
|
|
95
|
+
`doctor` already rendered every token (`{bin}`, paths) into the command string; the
|
|
96
|
+
procedure's only job is to execute exactly what was clustered.
|
|
97
|
+
- **Error:** a remedy that exits non-zero, times out, or cannot be run at all (binary
|
|
98
|
+
vanished between the check and the apply) is surfaced verbatim and **STOPS** the
|
|
99
|
+
procedure — **failed preflight**, per §1. Declined and advise-only clusters are not
|
|
100
|
+
applied at all; they proceed straight to step 7's report.
|
|
101
|
+
|
|
102
|
+
### Step 6 — Prove
|
|
103
|
+
|
|
104
|
+
- **Input:** every cluster step 5 actually applied.
|
|
105
|
+
- **Mechanism:** re-run the **identical** `doctor --json` invocation the caller made in
|
|
106
|
+
§1 (same `--check` ids, same flags) and re-read the member check ids' `status`.
|
|
107
|
+
- **Decision point:** **every** member check now `ok` → the cluster is healed, continue.
|
|
108
|
+
**Any** member still `warn`/`fail` — including a partial move where some member ids
|
|
109
|
+
flipped and others did not — is a **failed preflight**: report it, naming the healed and
|
|
110
|
+
still-failing check ids from this re-read, never from the first run's stale statuses.
|
|
111
|
+
A remedy that ran but did not prove is a failure, not a partial success — the
|
|
112
|
+
ran-but-nothing-moved shape the post-run recovery procedure also treats as a failure.
|
|
113
|
+
- **Output:** either "all affected checks now `ok` → return" or a failed-preflight report.
|
|
114
|
+
|
|
115
|
+
### Step 7 — Return
|
|
116
|
+
|
|
117
|
+
- Return the final per-check statuses (post-prove where a remedy ran, original where
|
|
118
|
+
declined/advise-only/report-only) to the caller. The procedure never selects the
|
|
119
|
+
caller's own gate outcome — `forge-5-loop`'s 1c/1d decide HARD GATE FAILURE vs. STOP vs.
|
|
120
|
+
proceed from these statuses; this reference only guarantees the statuses it returns are
|
|
121
|
+
either the original `doctor` read (nothing was touched) or a freshly proven re-read
|
|
122
|
+
(§6) — never a claim this procedure did not verify.
|
|
123
|
+
|
|
124
|
+
## 3. Safety ladder (pointer)
|
|
125
|
+
|
|
126
|
+
Every apply/prompt decision above is gated by the four-tier ladder declared once in
|
|
127
|
+
`references/shared-conventions.md` § Remedy Safety Ladder — `read-only` / `local-write` /
|
|
128
|
+
`global-install` / `network`. This reference never restates the tiers; it only names
|
|
129
|
+
which step consults them (§2 steps 3 and 5).
|
|
130
|
+
|
|
131
|
+
## 4. Rung-3 default
|
|
132
|
+
|
|
133
|
+
This is the **preflight remedies** class of the canonical Interaction Capability Ladder
|
|
134
|
+
(`references/shared-conventions.md` § Interaction Capability Ladder) — "cannot be asked"
|
|
135
|
+
(§2 step 3) means rung 3: genuinely **no way to ask and wait for a reply at all**, neither
|
|
136
|
+
a structured question tool NOR plain prose with a wait for the answer. It is **not** the
|
|
137
|
+
same as "no structured tool": a host that lacks a structured tool but can still prompt in
|
|
138
|
+
prose and wait (an interactive Codex session, per its own turn-taking rules) is rung 2,
|
|
139
|
+
not rung 3, and Step 3 asks it that way. Rung 3 fires only for a genuinely non-interactive
|
|
140
|
+
invocation (a headless `-p`/`exec`/JSON-mode run with no reply channel). Such a session
|
|
141
|
+
follows the ladder's declared default via the safety ladder's own rule: **degrade one
|
|
142
|
+
tier stricter** — a `local-write` cluster that cannot be asked is treated as
|
|
143
|
+
`advise-only` (print the command, never run it), and the outcome is recorded as
|
|
144
|
+
`unaskable→advise-only` (§2 step 4). Never silently skip the report, and never take an
|
|
145
|
+
unasked write as implied consent.
|
|
146
|
+
|
|
147
|
+
## 5. Message shapes
|
|
148
|
+
|
|
149
|
+
- **`runner-binary` / `runner-version` not `ok`** (blocking, no remedy proven) — **HARD
|
|
150
|
+
GATE FAILURE**: STOP, do not proceed to run the loop, show the failing check's own
|
|
151
|
+
`remedy.description` (and `remedy.command` when set) plus its raw `detail`/`evidence`
|
|
152
|
+
for diagnosis. **Never substitute `loopRunner.installHint` for this** — three of
|
|
153
|
+
`runner-binary`'s four warn shapes and one of `runner-version`'s are a **config fix**
|
|
154
|
+
(a customized `bin` missing while the default is on PATH points at the config, not the
|
|
155
|
+
install — G4), and `installHint` only ever describes installing the default package.
|
|
156
|
+
When the remedy's `command` is `null` (a reinstall-only or config-edit instruction),
|
|
157
|
+
there is nothing to cluster or apply — print the `remedy.description` as report-only
|
|
158
|
+
advice (§2 step 3's report-only set) and STOP regardless.
|
|
159
|
+
- **`runner-legacy-layout` warn** — STOP: *"This project is still on the legacy **Ralph**
|
|
160
|
+
layout. Run {check's `remedy.command`, e.g. `{bin} migrate .`} first (the loop runner
|
|
161
|
+
only understands `.rauf/` and `RAUF_*` signals), then re-run
|
|
162
|
+
`/feature-forge:forge-5-loop {feature}`."* Use the check's own `remedy.command` — never
|
|
163
|
+
a hardcoded `rauf migrate .` — a customized `loopRunner.bin` changes the binary name.
|
|
164
|
+
- **`runner-wired` warn** — STOP and show `loopRunner.setupHint`, e.g. *"The loop runner
|
|
165
|
+
isn't set up in this project ({preconditionFile} is missing). {setupHint}"*.
|
|
166
|
+
- A STOP lifts **only** after a permitted `local-write` remedy ran (§2 step 5) **and**
|
|
167
|
+
the re-run (§2 step 6) shows the gating check `ok` — never on the remedy's exit code
|
|
168
|
+
alone.
|
|
169
|
+
|
|
170
|
+
## 6. Failure taxonomy
|
|
171
|
+
|
|
172
|
+
| Failure | When it occurs | Reaches step 6's per-check test? | Report |
|
|
173
|
+
|---|---|---|---|
|
|
174
|
+
| **Failed apply** | A `run`/`approved+run` remedy exits non-zero, times out, or cannot start | No — stops before the test | Verbatim command output + which cluster; **failed preflight**; procedure stops |
|
|
175
|
+
| **Ran-but-not-healed** | The remedy exited 0, but the re-run still shows `warn`/`fail` for a member check | Yes — is the test failing | Healed/still-failing check ids named from the re-read; **failed preflight** |
|
|
176
|
+
| **Declined / advise-only / unaskable** | The operator declined, the tier forbids execution, or the session genuinely had no way to ask and wait (§4) | N/A — no apply attempted | Reported per §2 step 4; **not** a failure — the original `doctor` statuses stand, and the caller's gate (§2 step 7) still applies to them |
|
|
177
|
+
|
|
178
|
+
Rules: never report healed/succeeded past a failed step; a failed apply stops before the
|
|
179
|
+
per-check test, so a remedy that errored is never conflated with one that ran cleanly but
|
|
180
|
+
fixed nothing; a declined/advise-only/unaskable cluster is a normal outcome, not a
|
|
181
|
+
procedure failure — the caller's own gate still decides what an unhealed `warn`/`fail`
|
|
182
|
+
means for it (a blocking check stays a hard gate failure; an advisory one is just
|
|
183
|
+
reported).
|
|
@@ -118,7 +118,7 @@ they track the current model tier automatically.
|
|
|
118
118
|
|
|
119
119
|
### forge-verifier
|
|
120
120
|
- **Purpose:** Read-only verification of pipeline artifacts
|
|
121
|
-
- **Used by:** `forge-verify` skill (delegation via Agent tool)
|
|
121
|
+
- **Used by:** `forge-verify` skill (delegation via `Agent` tool)
|
|
122
122
|
- **Tools:** Read, Glob, Grep, Bash (read-only operations only)
|
|
123
123
|
- **Model:** Opus (judgement-heavy gap/inconsistency analysis)
|
|
124
124
|
- **Memory:** Project-scoped persistent memory — accumulates knowledge about recurring issues and project-specific patterns across sessions
|
|
@@ -156,11 +156,13 @@ to today. Degradation is **silent, not an error**, keeping alternate (non-rauf)
|
|
|
156
156
|
runners first-class. The gate condition is owned by
|
|
157
157
|
`02-config-schema-and-gating.md`.
|
|
158
158
|
|
|
159
|
-
Independently, the **version gate** floors at the runner version
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
Independently, the **version gate** floors at the runner version the stage
|
|
160
|
+
depends on. For rauf that is **0.14.0** (`loopRunner.minRunnerVersion`): the
|
|
161
|
+
version the package pins and the floor for full needs-human recovery (0.14's
|
|
162
|
+
`backlog answer`). The agent surface — the `--agent` flag, the `agents` probe,
|
|
163
|
+
and the preset agent registry — has been present since rauf 0.6.0 and is
|
|
164
|
+
subsumed by the higher floor, so a successful gate guarantees both the recovery
|
|
165
|
+
and agent surfaces exist before any run. See `## Version gating` and
|
|
164
166
|
`05-runner-discovery-version-gate.md`.
|
|
165
167
|
|
|
166
168
|
**This document — the `## Agent selection` section, the `## Per-stage agent
|
|
@@ -210,9 +212,11 @@ belongs to execution only. If you find yourself adding `--agent` near a
|
|
|
210
212
|
|
|
211
213
|
feature-forge requires a runner exposing `backlog validate` + backlog
|
|
212
214
|
`schemaVersion`, and the unified exit-code/status contract it reads. The floor is
|
|
213
|
-
now the **
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
now the **capability floor** the stage actually depends on: the version the
|
|
216
|
+
package pins and the floor for full needs-human recovery (0.14's `backlog
|
|
217
|
+
answer`). It subsumes the older agent-surface floor (the `--agent` flag, the
|
|
218
|
+
`agents` probe, and the preset agent registry, present since 0.6.0). For rauf
|
|
219
|
+
that is **0.14.0** (`loopRunner.minRunnerVersion`).
|
|
216
220
|
`forge-5-loop` runs `{bin} version --json`, semver-compares the reported version
|
|
217
221
|
against `minRunnerVersion`, and on a missing-or-too-old runner stops with
|
|
218
222
|
`loopRunner.installHint` (the CLI install/upgrade command) — **before** invoking
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# `select-outcome` — deterministic exit-outcome selection
|
|
2
|
+
|
|
3
|
+
`forge-verify` and `forge-fix` each close a run by choosing exactly one
|
|
4
|
+
`stage-exit --outcome`. That choice used to be model judgment over conversational
|
|
5
|
+
state. `forge-session.py select-outcome` derives it from the authoritative on-disk
|
|
6
|
+
record instead — the same "never eyeball the graph" move `rank-features` makes when
|
|
7
|
+
it derives `verifyGate` for the navigator (issue #276, part of the #265 guard-first
|
|
8
|
+
program).
|
|
9
|
+
|
|
10
|
+
The verb reads, never writes. It is called at the exit step, **after** the run's
|
|
11
|
+
result has already been persisted by `state-verify` and the findings document has
|
|
12
|
+
been written, so the disk state it reads is the run's own settled record.
|
|
13
|
+
|
|
14
|
+
## Synopsis
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
python3 forge-session.py select-outcome \
|
|
18
|
+
--feature F --served-stage S --skill verify|fix \
|
|
19
|
+
[--op-failure] [--user-deferred] [--decisions-open] \
|
|
20
|
+
[--specs-dir DIR] [--epic E] [--json]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`--served-stage` is one of the five verify-token production stages
|
|
24
|
+
(`forge-1-prd`, `forge-2-tech`, `forge-3-specs`, `forge-4-backlog`, `forge-5-loop`).
|
|
25
|
+
`forge-0-epic` (epic-scoped verification lives in `.epic-state.json`) and
|
|
26
|
+
`forge-6-docs` (no verify token) are **out of scope** and rejected.
|
|
27
|
+
|
|
28
|
+
Output — always `{outcome, reason, evidence: [...]}`:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"outcome": "reverify-findings",
|
|
33
|
+
"reason": "fixes were applied and a re-verify reopened blocking findings for the served stage",
|
|
34
|
+
"evidence": [
|
|
35
|
+
"forge-verify-tech status = findings-reported",
|
|
36
|
+
"latest report .verification/VERIFY-tech-2026-09-07-round2.md (round 2): 2 blocking = 1 error + 1 gap, 3 total finding(s)",
|
|
37
|
+
"round reports on disk: 2",
|
|
38
|
+
"fix progress: 1 step(s) applied; sweep 1 fixed / 0 justified / 0 false-positive"
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Outcome vocabularies
|
|
44
|
+
|
|
45
|
+
The verb chooses from exactly the branch skills' `--outcome` domains — the
|
|
46
|
+
`VerifyOutcome` and `FixOutcome` aliases in `forge-session.py`. Those aliases are
|
|
47
|
+
pinned to the tables below by `tests/test_select_outcome.py` (both directions), so the
|
|
48
|
+
enum and this reader-facing mapping can never drift. `forge-verify` and `forge-fix`
|
|
49
|
+
used to carry these tables in their SKILL bodies; issue #278 flipped the bodies to
|
|
50
|
+
call the verb and moved the tables here, their reader-facing home.
|
|
51
|
+
|
|
52
|
+
### verify
|
|
53
|
+
|
|
54
|
+
| This run's result | `--outcome` |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Zero findings — the artifacts are clean | `passed` |
|
|
57
|
+
| Advisory-only report (no `error`/`gap`), recorded `passed` with the report attached | `passed` |
|
|
58
|
+
| A report with at least one blocking finding (`error`/`gap`) was written | `findings` |
|
|
59
|
+
| The user explicitly deferred pipeline action and that skip was persisted (`state-verify --status skipped`) | `skipped` |
|
|
60
|
+
| A dispatch, check, or state write failed and needs intervention | `failed` |
|
|
61
|
+
|
|
62
|
+
### fix
|
|
63
|
+
|
|
64
|
+
| This run's result | `--outcome` | Authoritative downstream action |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| No applicable findings document or steps (Step 1.5) | `no-findings` | Re-verify while verification is still owed; otherwise the live production successor |
|
|
67
|
+
| User decisions remain unresolved (Step 3) | `decisions` | Resume `forge-fix` naming the unresolved decisions; no advancement |
|
|
68
|
+
| A fix step, validation, commit, or state write failed (Steps 4–6) | `failed` | Fix/navigator recovery; no advancement |
|
|
69
|
+
| Fixes persisted and re-verify not yet run (nested, or manual capability) | `applied` | Re-run `forge-verify` for the same served stage — re-verification is mandatory |
|
|
70
|
+
| A mandatory re-verify passed | `reverified` | The live production successor |
|
|
71
|
+
| A mandatory re-verify reopened an unresolved prior finding or a new blocking defect (clean-or-advisory-only is `reverified`) | `reverify-findings` | `forge-fix` for the same served stage |
|
|
72
|
+
| The user explicitly deferred the fix pass or the re-verify (Steps 3, 6) | `deferred` | Deterministic `forge-fix`/navigator resume; findings remain unresolved; no advancement |
|
|
73
|
+
|
|
74
|
+
## Inputs read from disk
|
|
75
|
+
|
|
76
|
+
- The served stage's `stages.forge-verify-{token}` entry in `.pipeline-state.json` —
|
|
77
|
+
its `status` is the authoritative signal, written mechanically by `state-verify`.
|
|
78
|
+
- The latest `.verification/VERIFY-{mode}-*.md` report (round-aware: `-round{N}` beats
|
|
79
|
+
the un-suffixed base file, and the newest day's newest round is "latest"). Blocking
|
|
80
|
+
counts come from the `## Findings` severities (`error`/`gap`), never from the human
|
|
81
|
+
`## Summary` line.
|
|
82
|
+
- Each report's `## Fix Progress` section — its `[APPLIED]` steps and the sweep
|
|
83
|
+
dispositions (`FIXED`/`JUSTIFIED`/`FALSE-POSITIVE`). A report carrying `[APPLIED]`
|
|
84
|
+
steps is the disk record that a fix pass ran (`fix-applied`).
|
|
85
|
+
|
|
86
|
+
## Derivation
|
|
87
|
+
|
|
88
|
+
### verify
|
|
89
|
+
|
|
90
|
+
1. `--op-failure` → **failed**.
|
|
91
|
+
2. entry `skipped` → **skipped**.
|
|
92
|
+
3. entry `findings-reported` → **findings**.
|
|
93
|
+
4. entry `passed` → **passed** (a clean report, an advisory-only report, or accepted
|
|
94
|
+
residual findings — all three are recorded `passed`).
|
|
95
|
+
5. otherwise (no terminal result recorded) → **fail closed** (exit 2).
|
|
96
|
+
|
|
97
|
+
### fix
|
|
98
|
+
|
|
99
|
+
1. `--op-failure` → **failed**.
|
|
100
|
+
2. `--user-deferred` → **deferred**.
|
|
101
|
+
3. `--decisions-open` → **decisions**.
|
|
102
|
+
4. no report for the mode → **no-findings**.
|
|
103
|
+
5. entry `findings-applied` → **applied** (a re-verify is still owed).
|
|
104
|
+
6. entry `passed` → **reverified**. A forge-fix pass reaches a `passed` served stage
|
|
105
|
+
only by re-verifying it: forge-fix Step 1.5 resolves its served stage to an
|
|
106
|
+
*unresolved* verify entry (`findings-reported`, `findings-applied`, or a pending
|
|
107
|
+
debt), never an already-resolved `passed`, so a `passed` entry at a fix exit is the
|
|
108
|
+
mandatory re-verify's own passing result. (`fix-applied` is not consulted here — it
|
|
109
|
+
reads every round on disk and so cannot tell this pass's fixes from an earlier
|
|
110
|
+
cycle's.)
|
|
111
|
+
7. entry `findings-reported` + a fix ran → **reverify-findings** (a re-verify reopened
|
|
112
|
+
findings); entry `findings-reported` + no fix ran → **fail closed** (exit 2).
|
|
113
|
+
8. any other resolved/absent entry with no fix → **no-findings**.
|
|
114
|
+
|
|
115
|
+
Two cases the issue calls out because a model tends to mis-eyeball them, and the verb
|
|
116
|
+
gets right by keying on the entry status rather than the presence of findings text:
|
|
117
|
+
|
|
118
|
+
- **A sweep whose survivors are all `FALSE-POSITIVE`.** Disposition is not a defect —
|
|
119
|
+
the entry is still `findings-applied`, so the outcome is **applied**, never `failed`.
|
|
120
|
+
- **A re-verify red on a scoped subset.** The round-2 report reopens blocking findings
|
|
121
|
+
and the entry returns to `findings-reported`, so the outcome is **reverify-findings**.
|
|
122
|
+
|
|
123
|
+
## Runtime signals
|
|
124
|
+
|
|
125
|
+
Three outcomes cannot be read off disk, because the fact that distinguishes each is
|
|
126
|
+
inherently runtime:
|
|
127
|
+
|
|
128
|
+
- **failed** — an operational failure (a dispatch, step, validation, commit, or state
|
|
129
|
+
write) leaves *no* state write, so disk shows the prior state.
|
|
130
|
+
- **deferred** — an explicit user deferral of the fix or re-verify is byte-identical on
|
|
131
|
+
disk to a nested/manual `applied` (both leave the entry at `findings-applied`).
|
|
132
|
+
- **decisions** — unresolved user decisions live in the free-prose "User Decisions
|
|
133
|
+
Required" section, which has no machine format.
|
|
134
|
+
|
|
135
|
+
The caller asserts these with `--op-failure` / `--user-deferred` / `--decisions-open`
|
|
136
|
+
(the latter two are `fix`-only). Everything else is pure disk derivation. When the disk
|
|
137
|
+
record names no terminal outcome and no signal was supplied, the verb **fails closed**
|
|
138
|
+
with `Error:` on stderr and exit 2 — it never guesses.
|