@garygentry/feature-forge 0.2.14 → 0.3.1
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 +6 -3
- package/adapters/GENERATION-REPORT.md +20 -0
- package/adapters/claude/.feature-forge-bundle.json +1 -1
- package/adapters/claude/agents/forge-verifier.md +1 -1
- package/adapters/claude/references/forge-config-schema.json +2 -2
- package/adapters/claude/references/pipeline-state-schema.json +1 -1
- package/adapters/claude/references/shared-conventions.md +62 -12
- package/adapters/claude/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/references/vendor-construct-inventory.md +1 -1
- package/adapters/claude/scripts/epic-manifest.py +49 -6
- package/adapters/claude/scripts/forge-root.sh +47 -3
- package/adapters/claude/scripts/forge-session.py +1179 -9
- package/adapters/claude/scripts/validate-traceability.py +6 -1
- package/adapters/claude/skills/forge/SKILL.md +11 -5
- package/adapters/claude/skills/forge/references/pipeline-state-schema.json +1 -1
- package/adapters/claude/skills/forge/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-0-epic/SKILL.md +1 -1
- package/adapters/claude/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
- package/adapters/claude/skills/forge-0-epic/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-1-prd/SKILL.md +25 -8
- package/adapters/claude/skills/forge-1-prd/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-2-tech/SKILL.md +25 -7
- package/adapters/claude/skills/forge-2-tech/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-3-specs/SKILL.md +24 -7
- package/adapters/claude/skills/forge-3-specs/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-4-backlog/SKILL.md +23 -7
- package/adapters/claude/skills/forge-4-backlog/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-5-loop/SKILL.md +25 -25
- package/adapters/claude/skills/forge-5-loop/references/agent-selection.md +116 -0
- package/adapters/claude/skills/forge-5-loop/references/runner-contract.md +14 -107
- package/adapters/claude/skills/forge-5-loop/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-6-docs/SKILL.md +11 -5
- package/adapters/claude/skills/forge-6-docs/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-fix/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-fix/references/stage-exit-protocol.md +14 -4
- package/adapters/claude/skills/forge-guide/references/forge-config-schema.json +2 -2
- package/adapters/claude/skills/forge-guide/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-verify/SKILL.md +22 -12
- package/adapters/claude/skills/forge-verify/references/findings-template.md +157 -0
- package/adapters/claude/skills/forge-verify/references/pipeline-state-schema.json +1 -1
- package/adapters/claude/skills/forge-verify/references/shared-conventions.md +62 -12
- package/adapters/claude/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
- package/adapters/claude/skills/forge-verify/references/verification-checklists/epic.md +79 -0
- package/adapters/claude/skills/forge-verify/references/verification-checklists/impl.md +48 -0
- package/adapters/claude/skills/forge-verify/references/verification-checklists/prd.md +31 -0
- package/adapters/claude/skills/forge-verify/references/verification-checklists/specs.md +64 -0
- package/adapters/claude/skills/forge-verify/references/verification-checklists/tech.md +35 -0
- package/adapters/codex/.feature-forge-bundle.json +1 -1
- package/adapters/codex/agents/forge-verifier.toml +1 -1
- package/adapters/codex/references/forge-config-schema.json +2 -2
- package/adapters/codex/references/pipeline-state-schema.json +1 -1
- package/adapters/codex/references/shared-conventions.md +62 -12
- package/adapters/codex/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/references/vendor-construct-inventory.md +1 -1
- package/adapters/codex/scripts/epic-manifest.py +49 -6
- package/adapters/codex/scripts/forge-root.sh +47 -3
- package/adapters/codex/scripts/forge-session.py +1179 -9
- package/adapters/codex/scripts/validate-traceability.py +6 -1
- package/adapters/codex/skills/forge/SKILL.md +11 -5
- package/adapters/codex/skills/forge/references/pipeline-state-schema.json +1 -1
- package/adapters/codex/skills/forge/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-0-epic/SKILL.md +1 -1
- package/adapters/codex/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
- package/adapters/codex/skills/forge-0-epic/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-1-prd/SKILL.md +25 -8
- package/adapters/codex/skills/forge-1-prd/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-2-tech/SKILL.md +25 -7
- package/adapters/codex/skills/forge-2-tech/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-3-specs/SKILL.md +24 -7
- package/adapters/codex/skills/forge-3-specs/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-4-backlog/SKILL.md +23 -7
- package/adapters/codex/skills/forge-4-backlog/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-5-loop/SKILL.md +25 -25
- package/adapters/codex/skills/forge-5-loop/references/agent-selection.md +116 -0
- package/adapters/codex/skills/forge-5-loop/references/runner-contract.md +14 -107
- package/adapters/codex/skills/forge-5-loop/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-6-docs/SKILL.md +11 -5
- package/adapters/codex/skills/forge-6-docs/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-fix/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-fix/references/stage-exit-protocol.md +14 -4
- package/adapters/codex/skills/forge-guide/references/forge-config-schema.json +2 -2
- package/adapters/codex/skills/forge-guide/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-verify/SKILL.md +22 -12
- package/adapters/codex/skills/forge-verify/references/findings-template.md +157 -0
- package/adapters/codex/skills/forge-verify/references/pipeline-state-schema.json +1 -1
- package/adapters/codex/skills/forge-verify/references/shared-conventions.md +62 -12
- package/adapters/codex/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
- package/adapters/codex/skills/forge-verify/references/verification-checklists/epic.md +79 -0
- package/adapters/codex/skills/forge-verify/references/verification-checklists/impl.md +48 -0
- package/adapters/codex/skills/forge-verify/references/verification-checklists/prd.md +31 -0
- package/adapters/codex/skills/forge-verify/references/verification-checklists/specs.md +64 -0
- package/adapters/codex/skills/forge-verify/references/verification-checklists/tech.md +35 -0
- package/adapters/copilot/.feature-forge-bundle.json +1 -1
- package/adapters/copilot/agents/forge-verifier.md +1 -1
- package/adapters/copilot/references/forge-config-schema.json +2 -2
- package/adapters/copilot/references/pipeline-state-schema.json +1 -1
- package/adapters/copilot/references/shared-conventions.md +62 -12
- package/adapters/copilot/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/references/vendor-construct-inventory.md +1 -1
- package/adapters/copilot/scripts/epic-manifest.py +49 -6
- package/adapters/copilot/scripts/forge-root.sh +47 -3
- package/adapters/copilot/scripts/forge-session.py +1179 -9
- package/adapters/copilot/scripts/validate-traceability.py +6 -1
- package/adapters/copilot/skills/forge/forge.md +11 -5
- package/adapters/copilot/skills/forge/references/pipeline-state-schema.json +1 -1
- package/adapters/copilot/skills/forge/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-0-epic/forge-0-epic.md +1 -1
- package/adapters/copilot/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
- package/adapters/copilot/skills/forge-0-epic/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-1-prd/forge-1-prd.md +25 -8
- package/adapters/copilot/skills/forge-1-prd/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-2-tech/forge-2-tech.md +25 -7
- package/adapters/copilot/skills/forge-2-tech/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-3-specs/forge-3-specs.md +24 -7
- package/adapters/copilot/skills/forge-3-specs/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-4-backlog/forge-4-backlog.md +23 -7
- package/adapters/copilot/skills/forge-4-backlog/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-5-loop/forge-5-loop.md +25 -25
- package/adapters/copilot/skills/forge-5-loop/references/agent-selection.md +116 -0
- package/adapters/copilot/skills/forge-5-loop/references/runner-contract.md +14 -107
- package/adapters/copilot/skills/forge-5-loop/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-6-docs/forge-6-docs.md +11 -5
- package/adapters/copilot/skills/forge-6-docs/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-fix/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-fix/references/stage-exit-protocol.md +14 -4
- package/adapters/copilot/skills/forge-guide/references/forge-config-schema.json +2 -2
- package/adapters/copilot/skills/forge-guide/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-verify/forge-verify.md +22 -12
- package/adapters/copilot/skills/forge-verify/references/findings-template.md +157 -0
- package/adapters/copilot/skills/forge-verify/references/pipeline-state-schema.json +1 -1
- package/adapters/copilot/skills/forge-verify/references/shared-conventions.md +62 -12
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/epic.md +79 -0
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/impl.md +48 -0
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/prd.md +31 -0
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/specs.md +64 -0
- package/adapters/copilot/skills/forge-verify/references/verification-checklists/tech.md +35 -0
- package/adapters/cursor/.feature-forge-bundle.json +1 -1
- package/adapters/cursor/agents/forge-verifier.mdc +1 -1
- package/adapters/cursor/references/forge-config-schema.json +2 -2
- package/adapters/cursor/references/pipeline-state-schema.json +1 -1
- package/adapters/cursor/references/shared-conventions.md +62 -12
- package/adapters/cursor/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/references/vendor-construct-inventory.md +1 -1
- package/adapters/cursor/scripts/epic-manifest.py +49 -6
- package/adapters/cursor/scripts/forge-root.sh +47 -3
- package/adapters/cursor/scripts/forge-session.py +1179 -9
- package/adapters/cursor/scripts/validate-traceability.py +6 -1
- package/adapters/cursor/skills/forge/forge.mdc +11 -5
- package/adapters/cursor/skills/forge/references/pipeline-state-schema.json +1 -1
- package/adapters/cursor/skills/forge/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-0-epic/forge-0-epic.mdc +1 -1
- package/adapters/cursor/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
- package/adapters/cursor/skills/forge-0-epic/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-1-prd/forge-1-prd.mdc +25 -8
- package/adapters/cursor/skills/forge-1-prd/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-2-tech/forge-2-tech.mdc +25 -7
- package/adapters/cursor/skills/forge-2-tech/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-3-specs/forge-3-specs.mdc +24 -7
- package/adapters/cursor/skills/forge-3-specs/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-4-backlog/forge-4-backlog.mdc +23 -7
- package/adapters/cursor/skills/forge-4-backlog/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-5-loop/forge-5-loop.mdc +25 -25
- package/adapters/cursor/skills/forge-5-loop/references/agent-selection.md +116 -0
- package/adapters/cursor/skills/forge-5-loop/references/runner-contract.md +14 -107
- package/adapters/cursor/skills/forge-5-loop/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-6-docs/forge-6-docs.mdc +11 -5
- package/adapters/cursor/skills/forge-6-docs/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-fix/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-fix/references/stage-exit-protocol.md +14 -4
- package/adapters/cursor/skills/forge-guide/references/forge-config-schema.json +2 -2
- package/adapters/cursor/skills/forge-guide/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-verify/forge-verify.mdc +22 -12
- package/adapters/cursor/skills/forge-verify/references/findings-template.md +157 -0
- package/adapters/cursor/skills/forge-verify/references/pipeline-state-schema.json +1 -1
- package/adapters/cursor/skills/forge-verify/references/shared-conventions.md +62 -12
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/epic.md +79 -0
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/impl.md +48 -0
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/prd.md +31 -0
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/specs.md +64 -0
- package/adapters/cursor/skills/forge-verify/references/verification-checklists/tech.md +35 -0
- package/adapters/gemini/.feature-forge-bundle.json +1 -1
- package/adapters/gemini/agents/forge-verifier.md +1 -1
- package/adapters/gemini/gemini-extension.json +1 -1
- package/adapters/gemini/references/forge-config-schema.json +2 -2
- package/adapters/gemini/references/pipeline-state-schema.json +1 -1
- package/adapters/gemini/references/shared-conventions.md +62 -12
- package/adapters/gemini/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/references/vendor-construct-inventory.md +1 -1
- package/adapters/gemini/scripts/epic-manifest.py +49 -6
- package/adapters/gemini/scripts/forge-root.sh +47 -3
- package/adapters/gemini/scripts/forge-session.py +1179 -9
- package/adapters/gemini/scripts/validate-traceability.py +6 -1
- package/adapters/gemini/skills/forge/forge.md +11 -5
- package/adapters/gemini/skills/forge/references/pipeline-state-schema.json +1 -1
- package/adapters/gemini/skills/forge/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-0-epic/forge-0-epic.md +1 -1
- package/adapters/gemini/skills/forge-0-epic/references/pipeline-state-schema.json +1 -1
- package/adapters/gemini/skills/forge-0-epic/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-0-epic/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-1-prd/forge-1-prd.md +25 -8
- package/adapters/gemini/skills/forge-1-prd/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-1-prd/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-2-tech/forge-2-tech.md +25 -7
- package/adapters/gemini/skills/forge-2-tech/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-2-tech/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-3-specs/forge-3-specs.md +24 -7
- package/adapters/gemini/skills/forge-3-specs/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-3-specs/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-4-backlog/forge-4-backlog.md +23 -7
- package/adapters/gemini/skills/forge-4-backlog/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-4-backlog/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-5-loop/forge-5-loop.md +25 -25
- package/adapters/gemini/skills/forge-5-loop/references/agent-selection.md +116 -0
- package/adapters/gemini/skills/forge-5-loop/references/runner-contract.md +14 -107
- package/adapters/gemini/skills/forge-5-loop/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-5-loop/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-6-docs/forge-6-docs.md +11 -5
- package/adapters/gemini/skills/forge-6-docs/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-fix/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-fix/references/stage-exit-protocol.md +14 -4
- package/adapters/gemini/skills/forge-guide/references/forge-config-schema.json +2 -2
- package/adapters/gemini/skills/forge-guide/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-verify/forge-verify.md +22 -12
- package/adapters/gemini/skills/forge-verify/references/findings-template.md +157 -0
- package/adapters/gemini/skills/forge-verify/references/pipeline-state-schema.json +1 -1
- package/adapters/gemini/skills/forge-verify/references/shared-conventions.md +62 -12
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/epic.md +79 -0
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/impl.md +48 -0
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/prd.md +31 -0
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/specs.md +64 -0
- package/adapters/gemini/skills/forge-verify/references/verification-checklists/tech.md +35 -0
- package/adapters/pi/.feature-forge-bundle.json +6 -0
- package/adapters/pi/agents/forge-researcher.md +139 -0
- package/adapters/pi/agents/forge-spec-writer.md +116 -0
- package/adapters/pi/agents/forge-verifier.md +126 -0
- package/adapters/pi/extensions/ask-user-question/LICENSE +21 -0
- package/adapters/pi/extensions/ask-user-question/README.md +91 -0
- package/adapters/pi/extensions/ask-user-question/ask-user-question.ts +298 -0
- package/adapters/pi/extensions/ask-user-question/config.ts +78 -0
- package/adapters/pi/extensions/ask-user-question/events.ts +57 -0
- package/adapters/pi/extensions/ask-user-question/index.ts +61 -0
- package/adapters/pi/extensions/ask-user-question/locales/de.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/en.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/es.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/fr.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/pt-BR.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/pt.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/ru.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/uk.json +27 -0
- package/adapters/pi/extensions/ask-user-question/locales/zh.json +29 -0
- package/adapters/pi/extensions/ask-user-question/reconcile.ts +49 -0
- package/adapters/pi/extensions/ask-user-question/rpc-fallback.ts +168 -0
- package/adapters/pi/extensions/ask-user-question/state/build-questionnaire.ts +302 -0
- package/adapters/pi/extensions/ask-user-question/state/i18n-bridge.ts +53 -0
- package/adapters/pi/extensions/ask-user-question/state/key-router.ts +277 -0
- package/adapters/pi/extensions/ask-user-question/state/questionnaire-session.ts +234 -0
- package/adapters/pi/extensions/ask-user-question/state/row-intent.ts +145 -0
- package/adapters/pi/extensions/ask-user-question/state/selectors/contract.ts +26 -0
- package/adapters/pi/extensions/ask-user-question/state/selectors/derivations.ts +42 -0
- package/adapters/pi/extensions/ask-user-question/state/selectors/focus.ts +19 -0
- package/adapters/pi/extensions/ask-user-question/state/selectors/projections.ts +101 -0
- package/adapters/pi/extensions/ask-user-question/state/state-reducer.ts +292 -0
- package/adapters/pi/extensions/ask-user-question/state/state.ts +55 -0
- package/adapters/pi/extensions/ask-user-question/tool/format-answer.ts +31 -0
- package/adapters/pi/extensions/ask-user-question/tool/response-envelope.ts +49 -0
- package/adapters/pi/extensions/ask-user-question/tool/types.ts +147 -0
- package/adapters/pi/extensions/ask-user-question/tool/validate-questionnaire.ts +58 -0
- package/adapters/pi/extensions/ask-user-question/vendor-config-shim.ts +65 -0
- package/adapters/pi/extensions/ask-user-question/view/component-binding.ts +47 -0
- package/adapters/pi/extensions/ask-user-question/view/components/inline-input.ts +98 -0
- package/adapters/pi/extensions/ask-user-question/view/components/multi-select-view.ts +193 -0
- package/adapters/pi/extensions/ask-user-question/view/components/option-list-view.ts +70 -0
- package/adapters/pi/extensions/ask-user-question/view/components/preview/markdown-content-cache.ts +79 -0
- package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-block-renderer.ts +111 -0
- package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-box-renderer.ts +88 -0
- package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-layout-decider.ts +202 -0
- package/adapters/pi/extensions/ask-user-question/view/components/preview/preview-pane.ts +228 -0
- package/adapters/pi/extensions/ask-user-question/view/components/submit-picker.ts +67 -0
- package/adapters/pi/extensions/ask-user-question/view/components/tab-bar.ts +59 -0
- package/adapters/pi/extensions/ask-user-question/view/components/wrapping-select.ts +293 -0
- package/adapters/pi/extensions/ask-user-question/view/dialog-builder.ts +224 -0
- package/adapters/pi/extensions/ask-user-question/view/props-adapter.ts +125 -0
- package/adapters/pi/extensions/ask-user-question/view/stateful-view.ts +26 -0
- package/adapters/pi/extensions/ask-user-question/view/tab-components.ts +18 -0
- package/adapters/pi/extensions/ask-user-question/view/tab-content-strategy.ts +252 -0
- package/adapters/pi/package.json +26 -0
- package/adapters/pi/references/epic-manifest-schema.json +125 -0
- package/adapters/{claude/skills/forge-5-loop → pi}/references/forge-config-schema.json +4 -4
- package/adapters/{claude/skills/forge-1-prd → pi}/references/pipeline-state-schema.json +1 -1
- package/adapters/pi/references/portable-root.md +71 -0
- package/adapters/pi/references/process-overview.md +143 -0
- package/adapters/pi/references/ralph-loop-contract.md +221 -0
- package/adapters/pi/references/shared-conventions.md +345 -0
- package/adapters/pi/references/skill-frontmatter.schema.json +17 -0
- package/adapters/pi/references/stack-resolution.md +54 -0
- package/adapters/pi/references/stacks/_generic.md +111 -0
- package/adapters/pi/references/stacks/go.md +157 -0
- package/adapters/pi/references/stacks/python.md +184 -0
- package/adapters/pi/references/stacks/rust.md +170 -0
- package/adapters/pi/references/stacks/typescript.md +134 -0
- package/adapters/pi/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/references/templates/specs-hygiene/AGENTS.md +32 -0
- package/adapters/pi/references/templates/specs-hygiene/CLAUDE.md +31 -0
- package/adapters/pi/references/vendor-construct-inventory.md +50 -0
- package/adapters/pi/scripts/epic-manifest.py +1737 -0
- package/adapters/pi/scripts/forge-bootstrap.py +1070 -0
- package/adapters/pi/scripts/forge-init.sh +58 -0
- package/adapters/pi/scripts/forge-root.sh +179 -0
- package/adapters/pi/scripts/forge-session.py +3036 -0
- package/adapters/pi/scripts/validate-traceability.py +155 -0
- package/adapters/pi/skills/forge/SKILL.md +249 -0
- package/adapters/{claude/skills/forge-4-backlog → pi/skills/forge}/references/pipeline-state-schema.json +1 -1
- package/adapters/pi/skills/forge/references/process-overview.md +143 -0
- package/adapters/pi/skills/forge/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-0-epic/SKILL.md +308 -0
- package/adapters/pi/skills/forge-0-epic/references/edit-mode.md +266 -0
- package/adapters/pi/skills/forge-0-epic/references/epic-manifest-subcommands.md +75 -0
- package/adapters/{claude/skills/forge-2-tech → pi/skills/forge-0-epic}/references/pipeline-state-schema.json +1 -1
- package/adapters/pi/skills/forge-0-epic/references/portable-root.md +71 -0
- package/adapters/pi/skills/forge-0-epic/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-0-epic/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-1-prd/SKILL.md +181 -0
- package/adapters/pi/skills/forge-1-prd/references/prd-template.md +106 -0
- package/adapters/pi/skills/forge-1-prd/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-1-prd/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-2-tech/SKILL.md +243 -0
- package/adapters/pi/skills/forge-2-tech/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-2-tech/references/stack-discovery-checklist.md +95 -0
- package/adapters/pi/skills/forge-2-tech/references/stack-resolution.md +54 -0
- package/adapters/pi/skills/forge-2-tech/references/stacks/_generic.md +111 -0
- package/adapters/pi/skills/forge-2-tech/references/stacks/go.md +157 -0
- package/adapters/pi/skills/forge-2-tech/references/stacks/python.md +184 -0
- package/adapters/pi/skills/forge-2-tech/references/stacks/rust.md +170 -0
- package/adapters/pi/skills/forge-2-tech/references/stacks/typescript.md +134 -0
- package/adapters/pi/skills/forge-2-tech/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-3-specs/SKILL.md +195 -0
- package/adapters/pi/skills/forge-3-specs/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-3-specs/references/spec-archetypes.md +106 -0
- package/adapters/pi/skills/forge-3-specs/references/spec-examples.md +71 -0
- package/adapters/pi/skills/forge-3-specs/references/stacks/_generic.md +111 -0
- package/adapters/pi/skills/forge-3-specs/references/stacks/go.md +157 -0
- package/adapters/pi/skills/forge-3-specs/references/stacks/python.md +184 -0
- package/adapters/pi/skills/forge-3-specs/references/stacks/rust.md +170 -0
- package/adapters/pi/skills/forge-3-specs/references/stacks/typescript.md +134 -0
- package/adapters/pi/skills/forge-3-specs/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-4-backlog/SKILL.md +191 -0
- package/adapters/pi/skills/forge-4-backlog/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-4-backlog/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-5-loop/SKILL.md +314 -0
- package/adapters/pi/skills/forge-5-loop/references/agent-selection.md +116 -0
- package/adapters/pi/skills/forge-5-loop/references/ralph-loop-contract.md +221 -0
- package/adapters/pi/skills/forge-5-loop/references/result-reporting.md +85 -0
- package/adapters/pi/skills/forge-5-loop/references/runner-contract.md +248 -0
- package/adapters/pi/skills/forge-5-loop/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-5-loop/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-6-docs/SKILL.md +208 -0
- package/adapters/pi/skills/forge-6-docs/references/doc-conventions.md +126 -0
- package/adapters/pi/skills/forge-6-docs/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-bootstrap/SKILL.md +250 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/ci/github-actions.yml +12 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/generic/run.sh +3 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/generic/test.sh +13 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/go/go.mod +3 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/go/main.go +12 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/go/main_test.go +11 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/hygiene/AGENTS.md +35 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/hygiene/CLAUDE.md +36 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/hygiene/README.md +11 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/licenses/Apache-2.0/LICENSE +198 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/licenses/MIT/LICENSE +21 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/python/pyproject.toml +24 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/python/src/{{PKG}}/__init__.py +5 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/python/src/{{PKG}}/main.py +13 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/python/tests/test_smoke.py +8 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/rust/Cargo.toml +15 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/rust/src/lib.rs +7 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/rust/src/main.rs +5 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/rust/tests/smoke.rs +6 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/package.json +15 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/src/index.ts +4 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/test/smoke.test.ts +6 -0
- package/adapters/pi/skills/forge-bootstrap/references/templates/typescript/tsconfig.json +14 -0
- package/adapters/pi/skills/forge-fix/SKILL.md +98 -0
- package/adapters/pi/skills/forge-fix/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-fix/references/stage-exit-protocol.md +268 -0
- package/adapters/pi/skills/forge-guide/SKILL.md +192 -0
- package/adapters/{codex/skills/forge-4-backlog → pi/skills/forge-guide}/references/forge-config-schema.json +4 -4
- package/adapters/pi/skills/forge-guide/references/process-overview.md +143 -0
- package/adapters/pi/skills/forge-guide/references/ralph-loop-contract.md +221 -0
- package/adapters/pi/skills/forge-guide/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-guide/references/stack-resolution.md +54 -0
- package/adapters/pi/skills/forge-guide/references/stacks/_generic.md +111 -0
- package/adapters/pi/skills/forge-guide/references/stacks/go.md +157 -0
- package/adapters/pi/skills/forge-guide/references/stacks/python.md +184 -0
- package/adapters/pi/skills/forge-guide/references/stacks/rust.md +170 -0
- package/adapters/pi/skills/forge-guide/references/stacks/typescript.md +134 -0
- package/adapters/pi/skills/forge-init/SKILL.md +72 -0
- package/adapters/pi/skills/forge-verify/SKILL.md +283 -0
- package/adapters/pi/skills/forge-verify/references/findings-template.md +157 -0
- package/adapters/{claude/skills/forge-3-specs → pi/skills/forge-verify}/references/pipeline-state-schema.json +1 -1
- package/adapters/pi/skills/forge-verify/references/shared-conventions.md +345 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/backlog.md +97 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/epic.md +79 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/impl.md +48 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/prd.md +31 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/specs.md +64 -0
- package/adapters/pi/skills/forge-verify/references/verification-checklists/tech.md +35 -0
- package/dist/agent-targets.d.ts +1 -1
- package/dist/agent-targets.js +23 -3
- package/dist/detect.d.ts +1 -1
- package/dist/detect.js +2 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.js +2 -2
- package/dist/placements.js +5 -1
- package/dist/rauf.d.ts +4 -4
- package/dist/rauf.js +3 -3
- package/dist/types.d.ts +31 -6
- package/dist/types.js +6 -3
- package/package.json +14 -3
- package/adapters/claude/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
- package/adapters/claude/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
- package/adapters/claude/skills/forge-verify/references/verification-checklists.md +0 -477
- package/adapters/codex/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
- package/adapters/codex/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
- package/adapters/codex/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
- package/adapters/codex/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
- package/adapters/codex/skills/forge-5-loop/references/forge-config-schema.json +0 -236
- package/adapters/codex/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
- package/adapters/codex/skills/forge-verify/references/verification-checklists.md +0 -477
- package/adapters/copilot/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
- package/adapters/copilot/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
- package/adapters/copilot/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
- package/adapters/copilot/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
- package/adapters/copilot/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
- package/adapters/copilot/skills/forge-5-loop/references/forge-config-schema.json +0 -236
- package/adapters/copilot/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
- package/adapters/copilot/skills/forge-verify/references/verification-checklists.md +0 -477
- package/adapters/cursor/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
- package/adapters/cursor/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
- package/adapters/cursor/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
- package/adapters/cursor/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
- package/adapters/cursor/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
- package/adapters/cursor/skills/forge-5-loop/references/forge-config-schema.json +0 -236
- package/adapters/cursor/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
- package/adapters/cursor/skills/forge-verify/references/verification-checklists.md +0 -477
- package/adapters/gemini/skills/forge-1-prd/references/pipeline-state-schema.json +0 -191
- package/adapters/gemini/skills/forge-2-tech/references/pipeline-state-schema.json +0 -191
- package/adapters/gemini/skills/forge-3-specs/references/pipeline-state-schema.json +0 -191
- package/adapters/gemini/skills/forge-4-backlog/references/forge-config-schema.json +0 -236
- package/adapters/gemini/skills/forge-4-backlog/references/pipeline-state-schema.json +0 -191
- package/adapters/gemini/skills/forge-5-loop/references/forge-config-schema.json +0 -236
- package/adapters/gemini/skills/forge-6-docs/references/pipeline-state-schema.json +0 -191
- package/adapters/gemini/skills/forge-verify/references/verification-checklists.md +0 -477
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# PRD Verification Checklist
|
|
2
|
+
|
|
3
|
+
Detailed checklist for the **prd** verification mode, loaded by the `forge-verifier` leaf subagent dispatched for that mode. Execute EVERY check — do not skip.
|
|
4
|
+
|
|
5
|
+
> **Stack-specific details:** When a stack profile exists at `references/stacks/{stack}.md`, load it alongside this checklist for language-specific check criteria (e.g., what "valid syntax" means, what the type check command is, how module exports work).
|
|
6
|
+
|
|
7
|
+
## PRD Mode Checklist
|
|
8
|
+
|
|
9
|
+
### Completeness
|
|
10
|
+
- [ ] **CHECK-P01**: All template sections from `references/prd-template.md` are populated
|
|
11
|
+
- [ ] **CHECK-P02**: No TBD or TODO placeholders remain in the document
|
|
12
|
+
- [ ] **CHECK-P03**: Out-of-scope section exists and is specific (not just "everything else")
|
|
13
|
+
- [ ] **CHECK-P04**: Open questions section contains only actionable items (not vague concerns)
|
|
14
|
+
- [ ] **CHECK-P05**: Success criteria are measurable and verifiable
|
|
15
|
+
|
|
16
|
+
### Requirement Quality
|
|
17
|
+
- [ ] **CHECK-P06**: Every requirement has a unique ID (REQ-XXX-NN format)
|
|
18
|
+
- [ ] **CHECK-P07**: Every requirement has a priority assigned (P0/P1/P2)
|
|
19
|
+
- [ ] **CHECK-P08**: Every requirement is testable/verifiable — could you write an acceptance test for it?
|
|
20
|
+
- [ ] **CHECK-P09**: No requirements contain technology decisions (specific libraries, frameworks, or implementation choices) unless clearly labeled as constraints with justification
|
|
21
|
+
- [ ] **CHECK-P10**: User stories cover all identified actors/personas
|
|
22
|
+
|
|
23
|
+
### Non-Functional Requirements
|
|
24
|
+
- [ ] **CHECK-P11**: Non-functional requirements are quantified where applicable (latency targets, uptime SLAs, throughput minimums)
|
|
25
|
+
- [ ] **CHECK-P12**: Security requirements are explicit, not assumed
|
|
26
|
+
- [ ] **CHECK-P13**: Constraints section distinguishes mandates (must) from preferences (should/nice-to-have)
|
|
27
|
+
|
|
28
|
+
### Open-Ended Analysis
|
|
29
|
+
- [ ] **CHECK-P14**: Are there implicit requirements that should be made explicit? (e.g., assumptions about authentication, authorization, data retention)
|
|
30
|
+
- [ ] **CHECK-P15**: Are there requirement conflicts or tensions? (e.g., performance vs. completeness, simplicity vs. flexibility)
|
|
31
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Specs Verification Checklist
|
|
2
|
+
|
|
3
|
+
Detailed checklist for the **specs** verification mode, loaded by the `forge-verifier` leaf subagent dispatched for that mode. Execute EVERY check — do not skip.
|
|
4
|
+
|
|
5
|
+
> **Stack-specific details:** When a stack profile exists at `references/stacks/{stack}.md`, load it alongside this checklist for language-specific check criteria (e.g., what "valid syntax" means, what the type check command is, how module exports work).
|
|
6
|
+
|
|
7
|
+
## Specs Mode Checklist
|
|
8
|
+
|
|
9
|
+
### Requirement Coverage
|
|
10
|
+
- [ ] **CHECK-S01**: Every PRD requirement (REQ-XXX-NN) is referenced by at least one implementation spec
|
|
11
|
+
- [ ] **CHECK-S02**: Every P0 (must-have) requirement has detailed implementation guidance, not just a mention
|
|
12
|
+
- [ ] **CHECK-S03**: Every P1 requirement is at least acknowledged with an implementation approach
|
|
13
|
+
- [ ] **CHECK-S04**: No implementation spec sections exist that don't trace to a PRD requirement or tech-spec decision (orphaned specs indicate scope creep)
|
|
14
|
+
|
|
15
|
+
### Tech Spec ↔ Implementation Spec Consistency
|
|
16
|
+
- [ ] **CHECK-S05**: Every technology decision in the tech spec is reflected in the implementation specs
|
|
17
|
+
- [ ] **CHECK-S06**: Package structure in 01-architecture-layout.md matches what the tech spec describes
|
|
18
|
+
- [ ] **CHECK-S07**: Dependencies listed in the tech spec match those in the architecture spec
|
|
19
|
+
- [ ] **CHECK-S08**: No implementation spec contradicts a tech-spec decision
|
|
20
|
+
|
|
21
|
+
### Type System Integrity
|
|
22
|
+
- [ ] **CHECK-S09**: All type definitions in 00-core-definitions.md are valid syntax in the project's language (not pseudocode)
|
|
23
|
+
- [ ] **CHECK-S10**: All types referenced in other spec docs are defined in 00-core-definitions.md or an explicit external package
|
|
24
|
+
- [ ] **CHECK-S11**: Error classes form a consistent hierarchy with no gaps
|
|
25
|
+
- [ ] **CHECK-S12**: No duplicate or conflicting type definitions across documents
|
|
26
|
+
- [ ] **CHECK-S13**: Every type/interface/struct has documentation comments on every field (JSDoc, docstrings, godoc, etc.)
|
|
27
|
+
|
|
28
|
+
### Cross-Reference Consistency
|
|
29
|
+
- [ ] **CHECK-S14**: All file references between spec documents point to actual files
|
|
30
|
+
- [ ] **CHECK-S15**: Section references (e.g., "see section 3.2 of 02-provider-registry.md") point to actual sections
|
|
31
|
+
- [ ] **CHECK-S16**: Dependency ordering between spec docs is consistent (no circular dependencies)
|
|
32
|
+
- [ ] **CHECK-S17**: Import paths referenced in specs are consistent with the exports map in 01-architecture-layout.md
|
|
33
|
+
|
|
34
|
+
### Error Handling Coverage
|
|
35
|
+
- [ ] **CHECK-S18**: Every operation that can fail has an error type defined
|
|
36
|
+
- [ ] **CHECK-S19**: Error propagation is described: where errors are thrown, caught, transformed, and surfaced
|
|
37
|
+
- [ ] **CHECK-S20**: User-facing error messages are specified (not just error codes)
|
|
38
|
+
- [ ] **CHECK-S21**: Recovery behavior is described for recoverable errors
|
|
39
|
+
|
|
40
|
+
### Integration Point Completeness
|
|
41
|
+
- [ ] **CHECK-S22**: Every package listed in the tech spec's integration section has corresponding detail in the implementation specs
|
|
42
|
+
- [ ] **CHECK-S23**: For each integration: the shared types/contracts are explicitly named
|
|
43
|
+
- [ ] **CHECK-S24**: For each integration: data flow direction is clear
|
|
44
|
+
- [ ] **CHECK-S25**: If integration requires changes to existing packages, those changes are specified
|
|
45
|
+
- [ ] **CHECK-S26**: Import paths match actual package export maps
|
|
46
|
+
|
|
47
|
+
### Edge Cases and Non-Functional
|
|
48
|
+
- [ ] **CHECK-S27**: Concurrent access scenarios are addressed if relevant
|
|
49
|
+
- [ ] **CHECK-S28**: Empty/null/undefined inputs are handled
|
|
50
|
+
- [ ] **CHECK-S29**: Performance-sensitive paths are identified
|
|
51
|
+
- [ ] **CHECK-S30**: Security considerations from PRD are reflected in implementation
|
|
52
|
+
- [ ] **CHECK-S31**: Observability (logging, metrics, tracing) approach is specified if PRD requires it
|
|
53
|
+
- [ ] **CHECK-S32**: Each implementation spec has a clear "public API" section that defines what is exported vs internal
|
|
54
|
+
|
|
55
|
+
### Testing Strategy
|
|
56
|
+
- [ ] **CHECK-S33**: Testing strategy document exists
|
|
57
|
+
- [ ] **CHECK-S34**: Test approach covers unit, integration, and e2e as appropriate
|
|
58
|
+
- [ ] **CHECK-S35**: Mock/fixture strategy is defined for external dependencies
|
|
59
|
+
- [ ] **CHECK-S36**: Coverage targets are stated
|
|
60
|
+
- [ ] **CHECK-S37**: Test fixtures and mocks defined in specs align with real interface shapes from 00-core-definitions.md
|
|
61
|
+
|
|
62
|
+
### Traceability
|
|
63
|
+
- [ ] **CHECK-S38**: Build a complete traceability matrix from every REQ-XXX-NN to the spec document and section that implements it. Any REQ ID not found in at least one spec is a gap finding.
|
|
64
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Tech-Spec Verification Checklist
|
|
2
|
+
|
|
3
|
+
Detailed checklist for the **tech** verification mode, loaded by the `forge-verifier` leaf subagent dispatched for that mode. Execute EVERY check — do not skip.
|
|
4
|
+
|
|
5
|
+
> **Stack-specific details:** When a stack profile exists at `references/stacks/{stack}.md`, load it alongside this checklist for language-specific check criteria (e.g., what "valid syntax" means, what the type check command is, how module exports work).
|
|
6
|
+
|
|
7
|
+
## Tech-Spec Mode Checklist
|
|
8
|
+
|
|
9
|
+
### Requirement Traceability
|
|
10
|
+
- [ ] **CHECK-T01**: Every tech decision traces to at least one PRD requirement (REQ-XXX-NN)
|
|
11
|
+
- [ ] **CHECK-T02**: No tech decisions contradict PRD constraints
|
|
12
|
+
- [ ] **CHECK-T03**: Every P0 PRD requirement has a corresponding tech decision or is explicitly deferred with rationale
|
|
13
|
+
|
|
14
|
+
### Integration Analysis
|
|
15
|
+
- [ ] **CHECK-T04**: Integration analysis section is complete — all packages identified
|
|
16
|
+
- [ ] **CHECK-T05**: Import paths and function signatures are verified against actual source code
|
|
17
|
+
- [ ] **CHECK-T06**: For each integration point: shared types/contracts are explicitly named
|
|
18
|
+
- [ ] **CHECK-T07**: For each integration point: data flow direction is clear
|
|
19
|
+
- [ ] **CHECK-T08**: Changes required to existing packages are specified
|
|
20
|
+
|
|
21
|
+
### Design Quality
|
|
22
|
+
- [ ] **CHECK-T09**: Alternatives considered for major decisions (not just "we chose X")
|
|
23
|
+
- [ ] **CHECK-T10**: Error handling strategy is defined (error types, propagation, recovery)
|
|
24
|
+
- [ ] **CHECK-T11**: Testing approach is specified (unit, integration, e2e strategy)
|
|
25
|
+
- [ ] **CHECK-T12**: Data model aligns with PRD data requirements
|
|
26
|
+
|
|
27
|
+
### Completeness
|
|
28
|
+
- [ ] **CHECK-T13**: Package/module structure is defined with exports map
|
|
29
|
+
- [ ] **CHECK-T14**: Configuration approach is specified
|
|
30
|
+
- [ ] **CHECK-T15**: Migration/deployment considerations are addressed if applicable
|
|
31
|
+
|
|
32
|
+
### Open-Ended Analysis
|
|
33
|
+
- [ ] **CHECK-T16**: Are there integration points that could cause implementation surprises? (e.g., undocumented behavior, version incompatibilities, missing APIs)
|
|
34
|
+
- [ ] **CHECK-T17**: Are there scalability concerns unaddressed by the current design? (e.g., data growth, concurrent users, resource limits)
|
|
35
|
+
|
package/dist/agent-targets.d.ts
CHANGED
|
@@ -67,7 +67,7 @@ export declare function confidenceFor(target: AgentTarget, scope: Scope): Confid
|
|
|
67
67
|
export declare function detectAgent(id: AgentId, opts?: ResolveOpts): DetectionResult;
|
|
68
68
|
/** Options for {@link detectAgents}: {@link ResolveOpts} plus a single-agent scope (REQ-FLAG-01). */
|
|
69
69
|
export interface DetectAgentsOpts extends ResolveOpts {
|
|
70
|
-
/** Restrict detection to this one agent (`--agent/-a`). Absent ⇒ all
|
|
70
|
+
/** Restrict detection to this one agent (`--agent/-a`). Absent ⇒ all agents (REQ-DET-03). */
|
|
71
71
|
readonly only?: AgentId;
|
|
72
72
|
}
|
|
73
73
|
/**
|
package/dist/agent-targets.js
CHANGED
|
@@ -40,6 +40,24 @@ export function resolveRoots(opts) {
|
|
|
40
40
|
function scopeRootFor(scope, roots) {
|
|
41
41
|
return scope === "global" ? roots.home : roots.cwd;
|
|
42
42
|
}
|
|
43
|
+
/** Select a scope-specific config dir name, falling back to the legacy single field. */
|
|
44
|
+
function configDirNameFor(target, scope) {
|
|
45
|
+
if (scope === "global")
|
|
46
|
+
return target.globalConfigDirName ?? target.configDirName;
|
|
47
|
+
return target.projectConfigDirName ?? target.configDirName;
|
|
48
|
+
}
|
|
49
|
+
/** Select a scope-specific install base dir, falling back to the legacy single field. */
|
|
50
|
+
function installBaseDirFor(target, scope) {
|
|
51
|
+
if (scope === "global")
|
|
52
|
+
return target.globalInstallBaseDir ?? target.installBaseDir;
|
|
53
|
+
return target.projectInstallBaseDir ?? target.installBaseDir;
|
|
54
|
+
}
|
|
55
|
+
/** Select a scope-specific install subpath, falling back to the legacy single field. */
|
|
56
|
+
function installSubpathFor(target, scope) {
|
|
57
|
+
if (scope === "global")
|
|
58
|
+
return target.globalInstallSubpath ?? target.installSubpath;
|
|
59
|
+
return target.projectInstallSubpath ?? target.installSubpath;
|
|
60
|
+
}
|
|
43
61
|
/**
|
|
44
62
|
* Derive the absolute install destination for one agent under a given scope (REQ-DET-01,
|
|
45
63
|
* REQ-FLAG-02):
|
|
@@ -58,7 +76,9 @@ function scopeRootFor(scope, roots) {
|
|
|
58
76
|
export function destinationFor(target, scope, opts) {
|
|
59
77
|
const roots = resolveRoots(opts);
|
|
60
78
|
const root = scopeRootFor(scope, roots);
|
|
61
|
-
|
|
79
|
+
const installBaseDir = installBaseDirFor(target, scope);
|
|
80
|
+
const installSubpath = installSubpathFor(target, scope);
|
|
81
|
+
return path.resolve(root, installBaseDir, ...(installSubpath ? [installSubpath] : []), FEATURE_FORGE_NS);
|
|
62
82
|
}
|
|
63
83
|
/**
|
|
64
84
|
* The filesystem containment boundary every write for `target` is checked against (REQ-SEC-02):
|
|
@@ -68,7 +88,7 @@ export function destinationFor(target, scope, opts) {
|
|
|
68
88
|
*/
|
|
69
89
|
export function agentRootFor(target, scope, opts) {
|
|
70
90
|
const roots = resolveRoots(opts);
|
|
71
|
-
return path.resolve(scopeRootFor(scope, roots), target
|
|
91
|
+
return path.resolve(scopeRootFor(scope, roots), installBaseDirFor(target, scope));
|
|
72
92
|
}
|
|
73
93
|
/**
|
|
74
94
|
* The effective confidence for `target` under `scope` (A4): the per-row `projectConfidence`
|
|
@@ -95,7 +115,7 @@ export function detectAgent(id, opts) {
|
|
|
95
115
|
const roots = resolveRoots(opts);
|
|
96
116
|
const root = scopeRootFor(scope, roots);
|
|
97
117
|
// Primary signal (REQ-DET-02): presence of the config dir under the active scope root.
|
|
98
|
-
const configDir = path.resolve(root, target
|
|
118
|
+
const configDir = path.resolve(root, configDirNameFor(target, scope));
|
|
99
119
|
const detected = probeConfigDir(configDir);
|
|
100
120
|
return {
|
|
101
121
|
agent: id,
|
package/dist/detect.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import type { AgentId } from "./types.js";
|
|
|
16
16
|
* instant, REQ-PERF-01) and never creates the dir (REQ-DET-04). Any stat failure
|
|
17
17
|
* (`ENOENT` not present, `EACCES` unreadable, or a non-directory at the path) ⇒ `false`.
|
|
18
18
|
*
|
|
19
|
-
* Synchronous by design: exactly one stat per agent
|
|
19
|
+
* Synchronous by design: exactly one stat per agent, so async adds no
|
|
20
20
|
* throughput and would complicate the pure-derivation surface.
|
|
21
21
|
*/
|
|
22
22
|
export declare function probeConfigDir(configDir: string): boolean;
|
package/dist/detect.js
CHANGED
|
@@ -17,7 +17,7 @@ import { execFileSync } from "node:child_process";
|
|
|
17
17
|
* instant, REQ-PERF-01) and never creates the dir (REQ-DET-04). Any stat failure
|
|
18
18
|
* (`ENOENT` not present, `EACCES` unreadable, or a non-directory at the path) ⇒ `false`.
|
|
19
19
|
*
|
|
20
|
-
* Synchronous by design: exactly one stat per agent
|
|
20
|
+
* Synchronous by design: exactly one stat per agent, so async adds no
|
|
21
21
|
* throughput and would complicate the pure-derivation surface.
|
|
22
22
|
*/
|
|
23
23
|
export function probeConfigDir(configDir) {
|
|
@@ -34,6 +34,7 @@ const CLI_NAMES = {
|
|
|
34
34
|
codex: "codex",
|
|
35
35
|
copilot: "copilot",
|
|
36
36
|
gemini: "gemini",
|
|
37
|
+
pi: "pi",
|
|
37
38
|
// cursor: intentionally omitted — IDE/GUI agent, no canonical CLI on PATH (REQ-DET-02).
|
|
38
39
|
};
|
|
39
40
|
/** The real resolver: `which <bin>` (POSIX) / `where <bin>` (Windows). Any failure ⇒ false. */
|
package/dist/manifest.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export interface BuildManifestArgs {
|
|
|
28
28
|
readonly skills: readonly string[];
|
|
29
29
|
/** SHA-256 over the source bundle's canonical (sorted-path) file set — drift anchor (spec 03). */
|
|
30
30
|
readonly sourceHash: string;
|
|
31
|
-
/** Recorded pinned rauf coordinate (e.g. "@garygentry/rauf@0.
|
|
31
|
+
/** Recorded pinned rauf coordinate (e.g. "@garygentry/rauf@0.13.0"); `null` when `--skip-rauf` (spec 06). */
|
|
32
32
|
readonly raufPin: string | null;
|
|
33
33
|
/** Symlink mode only: the source bundle the namespace dir links to (REQ-SAFE-02). */
|
|
34
34
|
readonly link?: {
|
package/dist/manifest.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import * as fs from "node:fs";
|
|
12
12
|
import * as path from "node:path";
|
|
13
|
-
import { AGENT_TARGETS, MANIFEST_PREFIX, SCHEMA_VERSION, ok, err, READABLE_SCHEMA_VERSIONS, } from "./types.js";
|
|
13
|
+
import { AGENT_IDS, AGENT_TARGETS, MANIFEST_PREFIX, SCHEMA_VERSION, ok, err, READABLE_SCHEMA_VERSIONS, } from "./types.js";
|
|
14
14
|
import { destinationFor } from "./agent-targets.js";
|
|
15
15
|
/**
|
|
16
16
|
* Assemble an {@link InstallManifest} from an apply result (REQ-SAFE-01/03). Pure — no I/O.
|
|
@@ -146,7 +146,7 @@ export function writeManifest(p, m) {
|
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
const AGENT_IDS_SET = new Set(
|
|
149
|
+
const AGENT_IDS_SET = new Set(AGENT_IDS);
|
|
150
150
|
/** Structural validation of a parsed manifest (internal to manifest.ts). */
|
|
151
151
|
function validateManifest(x) {
|
|
152
152
|
if (typeof x !== "object" || x === null)
|
package/dist/placements.js
CHANGED
|
@@ -23,7 +23,11 @@ export function resolvePlacements(target, scope, opts) {
|
|
|
23
23
|
const roots = resolveRoots(opts);
|
|
24
24
|
const scopeRoot = scope === "global" ? roots.home : roots.cwd;
|
|
25
25
|
return (target.placements ?? []).map((spec) => {
|
|
26
|
-
|
|
26
|
+
// Scope-aware second root: pi mirrors into `~/.pi/agent/agents` (global) but `.pi/agents`
|
|
27
|
+
// (project), which one `baseDir` string cannot express. Fall back to `baseDir` for the common
|
|
28
|
+
// case (codex/copilot) where the second root is scope-invariant.
|
|
29
|
+
const baseDir = (scope === "global" ? spec.globalBaseDir : spec.projectBaseDir) ?? spec.baseDir;
|
|
30
|
+
const root = path.resolve(scopeRoot, baseDir);
|
|
27
31
|
return { kind: spec.kind, root, destination: path.resolve(root, spec.subpath), spec };
|
|
28
32
|
});
|
|
29
33
|
}
|
package/dist/rauf.d.ts
CHANGED
|
@@ -19,13 +19,13 @@ import { type Result } from "./types.js";
|
|
|
19
19
|
*
|
|
20
20
|
* Shape: `<name>@<version>` — the SCOPED package `@garygentry/rauf` (the unscoped `rauf` name is
|
|
21
21
|
* blocked by npm's similarity filter). Advanced on each feature-forge release to a new
|
|
22
|
-
* known-compatible rauf (REQ-RAUF-03). The current rauf version is 0.
|
|
22
|
+
* known-compatible rauf (REQ-RAUF-03). The current rauf version is 0.13.0.
|
|
23
23
|
*
|
|
24
|
-
* rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.
|
|
24
|
+
* rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.13.0` resolves from the npm registry, so the
|
|
25
25
|
* preflight below passes by default. (Historically this pin pointed at an unpublished package and
|
|
26
26
|
* the preflight was a designed-to-fail check — see the `--skip-rauf` escape hatch.)
|
|
27
27
|
*/
|
|
28
|
-
export declare const RAUF_PIN = "@garygentry/rauf@0.
|
|
28
|
+
export declare const RAUF_PIN = "@garygentry/rauf@0.13.0";
|
|
29
29
|
/**
|
|
30
30
|
* An injectable, READ-ONLY registry query (D1). Given a coordinate `name@version`, returns the
|
|
31
31
|
* resolved version string on success, or an `InstallerError` if it is not resolvable.
|
|
@@ -37,7 +37,7 @@ export declare const RAUF_PIN = "@garygentry/rauf@0.12.0";
|
|
|
37
37
|
* Contract: the query MUST be read-only — it MUST NOT install, MUST NOT mutate global npm
|
|
38
38
|
* state, and MUST NOT execute rauf. `npm view` satisfies this (it only reads registry metadata).
|
|
39
39
|
*
|
|
40
|
-
* @param coordinate - the `name@version` to resolve, e.g. "@garygentry/rauf@0.
|
|
40
|
+
* @param coordinate - the `name@version` to resolve, e.g. "@garygentry/rauf@0.13.0"
|
|
41
41
|
* @returns Result<string> — the resolved version on success; RAUF_UNRESOLVABLE on failure.
|
|
42
42
|
*/
|
|
43
43
|
export type RegistryQuery = (coordinate: string) => Result<string>;
|
package/dist/rauf.js
CHANGED
|
@@ -20,13 +20,13 @@ import { err, ok } from "./types.js";
|
|
|
20
20
|
*
|
|
21
21
|
* Shape: `<name>@<version>` — the SCOPED package `@garygentry/rauf` (the unscoped `rauf` name is
|
|
22
22
|
* blocked by npm's similarity filter). Advanced on each feature-forge release to a new
|
|
23
|
-
* known-compatible rauf (REQ-RAUF-03). The current rauf version is 0.
|
|
23
|
+
* known-compatible rauf (REQ-RAUF-03). The current rauf version is 0.13.0.
|
|
24
24
|
*
|
|
25
|
-
* rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.
|
|
25
|
+
* rauf is now PUBLISHED (rauf#28): `@garygentry/rauf@0.13.0` resolves from the npm registry, so the
|
|
26
26
|
* preflight below passes by default. (Historically this pin pointed at an unpublished package and
|
|
27
27
|
* the preflight was a designed-to-fail check — see the `--skip-rauf` escape hatch.)
|
|
28
28
|
*/
|
|
29
|
-
export const RAUF_PIN = "@garygentry/rauf@0.
|
|
29
|
+
export const RAUF_PIN = "@garygentry/rauf@0.13.0";
|
|
30
30
|
/**
|
|
31
31
|
* Resolvability preflight for the pinned default loop runner (D1; REQ-RAUF-01/02/03, OQ-1).
|
|
32
32
|
*
|
package/dist/types.d.ts
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* exports only; `node:` built-ins only where applicable; zero runtime dependencies.
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
|
-
* The
|
|
9
|
+
* The coding agents this installer targets (REQ-DET-01). Order is the canonical
|
|
10
10
|
* iteration order used by detection, planning, and reporting so output is deterministic.
|
|
11
11
|
*/
|
|
12
|
-
export declare const AGENT_IDS: readonly ["claude", "codex", "copilot", "cursor", "gemini"];
|
|
12
|
+
export declare const AGENT_IDS: readonly ["claude", "codex", "copilot", "cursor", "gemini", "pi"];
|
|
13
13
|
/** A supported coding-agent identifier. */
|
|
14
14
|
export type AgentId = (typeof AGENT_IDS)[number];
|
|
15
15
|
/**
|
|
@@ -60,10 +60,13 @@ export type Confidence = "confirmed" | "verified-current" | "best-known" | "unsu
|
|
|
60
60
|
export type InstallKind = "skills" | "extension" | "rules" | "instructions";
|
|
61
61
|
/**
|
|
62
62
|
* Kind of a SECONDARY install placement (A4b). The primary bundle (the `feature-forge/` namespace
|
|
63
|
-
* dir) is always present and is never a placement; placements describe extra writes
|
|
64
|
-
*
|
|
63
|
+
* dir) is always present and is never a placement; placements describe extra writes into a DIFFERENT
|
|
64
|
+
* subtree than the primary bundle (a different top-level root for codex/copilot, or a sibling dir
|
|
65
|
+
* under the same root for pi):
|
|
65
66
|
* - "mirror" — copy a subset of bundle files flat into a second dir (codex `.codex/agents/`,
|
|
66
|
-
* where Codex loads custom agents — it does not read them from `.agents/skills
|
|
67
|
+
* where Codex loads custom agents — it does not read them from `.agents/skills`;
|
|
68
|
+
* pi `~/.pi/agent/agents/` global or `.pi/agents/` project, which pi-subagents
|
|
69
|
+
* scans but does not read from the `skills/feature-forge` bundle).
|
|
67
70
|
* - "managed-block" — write/merge a sentinel-delimited block into a (possibly user-owned) instructions
|
|
68
71
|
* file (copilot `.github/copilot-instructions.md`), preserving the rest of the file.
|
|
69
72
|
*/
|
|
@@ -80,6 +83,14 @@ export interface PlacementSpec {
|
|
|
80
83
|
readonly kind: PlacementKind;
|
|
81
84
|
/** Second-root dir under the scope root, e.g. ".codex" (mirror) or ".github" (managed-block). */
|
|
82
85
|
readonly baseDir: string;
|
|
86
|
+
/**
|
|
87
|
+
* Optional global-scope override for `baseDir`, for placements whose second root differs by scope
|
|
88
|
+
* (pi: `.pi/agent` global vs `.pi` project). Mirrors {@link AgentTarget.globalInstallBaseDir}.
|
|
89
|
+
* Falls back to `baseDir` when absent.
|
|
90
|
+
*/
|
|
91
|
+
readonly globalBaseDir?: string;
|
|
92
|
+
/** Optional project-scope override for `baseDir` (see {@link globalBaseDir}); falls back to `baseDir`. */
|
|
93
|
+
readonly projectBaseDir?: string;
|
|
83
94
|
/**
|
|
84
95
|
* Path under `baseDir`. For "mirror" this is the destination DIR (e.g. "agents"); for
|
|
85
96
|
* "managed-block" this is the target FILE (e.g. "copilot-instructions.md").
|
|
@@ -111,17 +122,29 @@ export interface AgentTarget {
|
|
|
111
122
|
* e.g. ".claude", ".codex", ".cursor". Detection is `stat` on this dir, never a subprocess.
|
|
112
123
|
*/
|
|
113
124
|
readonly configDirName: string;
|
|
125
|
+
/** Optional scope-specific config dir probe. Pi uses ~/.pi/agent globally but .pi in projects. */
|
|
126
|
+
readonly globalConfigDirName?: string;
|
|
127
|
+
/** Optional scope-specific config dir probe. Pi uses ~/.pi/agent globally but .pi in projects. */
|
|
128
|
+
readonly projectConfigDirName?: string;
|
|
114
129
|
/**
|
|
115
130
|
* Top-level dir under the scope root that holds the install AND is the containment boundary
|
|
116
131
|
* every write is checked against (REQ-SEC-02). Usually equals `configDirName`; decoupled for
|
|
117
132
|
* codex (".agents") and copilot (".github").
|
|
118
133
|
*/
|
|
119
134
|
readonly installBaseDir: string;
|
|
135
|
+
/** Optional global-scope override for agents with asymmetric global/project layouts. */
|
|
136
|
+
readonly globalInstallBaseDir?: string;
|
|
137
|
+
/** Optional project-scope override for agents with asymmetric global/project layouts. */
|
|
138
|
+
readonly projectInstallBaseDir?: string;
|
|
120
139
|
/**
|
|
121
140
|
* Path under `installBaseDir` to the namespace parent, e.g. "skills" (claude/codex),
|
|
122
141
|
* "rules" (cursor), "extensions" (gemini), "" (copilot — directly under `.github`).
|
|
123
142
|
*/
|
|
124
143
|
readonly installSubpath: string;
|
|
144
|
+
/** Optional global-scope override for the namespace parent path. */
|
|
145
|
+
readonly globalInstallSubpath?: string;
|
|
146
|
+
/** Optional project-scope override for the namespace parent path. */
|
|
147
|
+
readonly projectInstallSubpath?: string;
|
|
125
148
|
/** How this agent consumes the bundle (REQ-SCALE-01; per-kind placement extended in A4b). */
|
|
126
149
|
readonly installKind: InstallKind;
|
|
127
150
|
/**
|
|
@@ -216,7 +239,7 @@ export interface InstallManifest {
|
|
|
216
239
|
readonly featureForgeVersion: string | null;
|
|
217
240
|
/** SHA-256 over the source bundle's canonical (sorted-path) file set — drift anchor (OQ-4, spec 03). */
|
|
218
241
|
readonly sourceHash: string;
|
|
219
|
-
/** Pinned rauf coordinate recorded at install, e.g. "@garygentry/rauf@0.
|
|
242
|
+
/** Pinned rauf coordinate recorded at install, e.g. "@garygentry/rauf@0.13.0"; `null` if `--skip-rauf` (spec 06). */
|
|
220
243
|
readonly raufPin: string | null;
|
|
221
244
|
/** ISO-8601 timestamps. */
|
|
222
245
|
readonly installedAt: string;
|
|
@@ -348,6 +371,8 @@ export interface RunReport {
|
|
|
348
371
|
* - cursor — `.cursor/rules/*.mdc` confirmed current (verified-current).
|
|
349
372
|
* - gemini — `~/.gemini/extensions/feature-forge` global confirmed; project scope is
|
|
350
373
|
* best-known (project extension install is not clearly documented).
|
|
374
|
+
* - pi — globally detects ~/.pi/agent and installs ~/.pi/agent/skills/feature-forge;
|
|
375
|
+
* project scope detects .pi and installs .pi/skills/feature-forge.
|
|
351
376
|
*/
|
|
352
377
|
export declare const AGENT_TARGETS: Readonly<Record<AgentId, AgentTarget>>;
|
|
353
378
|
/**
|
package/dist/types.js
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
// 1. Primitive aliases and enumerations
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
/**
|
|
12
|
-
* The
|
|
12
|
+
* The coding agents this installer targets (REQ-DET-01). Order is the canonical
|
|
13
13
|
* iteration order used by detection, planning, and reporting so output is deterministic.
|
|
14
14
|
*/
|
|
15
|
-
export const AGENT_IDS = ["claude", "codex", "copilot", "cursor", "gemini"];
|
|
15
|
+
export const AGENT_IDS = ["claude", "codex", "copilot", "cursor", "gemini", "pi"];
|
|
16
16
|
/** Process exit codes (REQ-OBS-01/03, spec 07). */
|
|
17
17
|
export const EXIT = { SUCCESS: 0, FAILURE: 1, USAGE: 2 };
|
|
18
18
|
/**
|
|
@@ -53,6 +53,8 @@ export const MANAGED_BLOCK_END = "<!-- feature-forge:managed:end -->";
|
|
|
53
53
|
* - cursor — `.cursor/rules/*.mdc` confirmed current (verified-current).
|
|
54
54
|
* - gemini — `~/.gemini/extensions/feature-forge` global confirmed; project scope is
|
|
55
55
|
* best-known (project extension install is not clearly documented).
|
|
56
|
+
* - pi — globally detects ~/.pi/agent and installs ~/.pi/agent/skills/feature-forge;
|
|
57
|
+
* project scope detects .pi and installs .pi/skills/feature-forge.
|
|
56
58
|
*/
|
|
57
59
|
export const AGENT_TARGETS = {
|
|
58
60
|
claude: { id: "claude", configDirName: ".claude", installBaseDir: ".claude", installSubpath: "skills", installKind: "skills", skillFileForm: "SKILL.md", confidence: "confirmed", docsUrl: "https://docs.claude.com/en/docs/claude-code/skills" },
|
|
@@ -60,6 +62,7 @@ export const AGENT_TARGETS = {
|
|
|
60
62
|
copilot: { id: "copilot", configDirName: ".copilot", installBaseDir: ".github", installSubpath: "", installKind: "instructions", skillFileForm: "<name>.md", confidence: "best-known", docsUrl: "https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions", placements: [{ kind: "managed-block", baseDir: ".github", subpath: "copilot-instructions.md" }] },
|
|
61
63
|
cursor: { id: "cursor", configDirName: ".cursor", installBaseDir: ".cursor", installSubpath: "rules", installKind: "rules", skillFileForm: "<name>.mdc", confidence: "verified-current", docsUrl: "https://cursor.com/docs/context/rules" },
|
|
62
64
|
gemini: { id: "gemini", configDirName: ".gemini", installBaseDir: ".gemini", installSubpath: "extensions", installKind: "extension", skillFileForm: "<name>.md", confidence: "verified-current", projectConfidence: "best-known", docsUrl: "https://github.com/google-gemini/gemini-cli/blob/main/docs/extensions/index.md" },
|
|
65
|
+
pi: { id: "pi", configDirName: ".pi", globalConfigDirName: ".pi/agent", projectConfigDirName: ".pi", installBaseDir: ".pi", globalInstallBaseDir: ".pi/agent", projectInstallBaseDir: ".pi", installSubpath: "skills", installKind: "skills", skillFileForm: "SKILL.md", confidence: "verified-current", docsUrl: "https://github.com/earendil-works/pi-coding-agent", placements: [{ kind: "mirror", baseDir: ".pi", globalBaseDir: ".pi/agent", projectBaseDir: ".pi", subpath: "agents", sourcePrefix: "agents/" }] },
|
|
63
66
|
};
|
|
64
67
|
/**
|
|
65
68
|
* Minimal integrity check (REQ-OPS-06, spec 03): a located bundle is valid iff `skills/` is a
|
|
@@ -80,7 +83,7 @@ export const BUNDLE_REQUIRED_PATHS = {
|
|
|
80
83
|
"scripts/forge-bootstrap.py",
|
|
81
84
|
],
|
|
82
85
|
/** Additional per-agent requirements. */
|
|
83
|
-
perAgent: { gemini: ["gemini-extension.json"] },
|
|
86
|
+
perAgent: { gemini: ["gemini-extension.json"], pi: ["package.json", "extensions/ask-user-question/index.ts"] },
|
|
84
87
|
};
|
|
85
88
|
/** Success constructor. */
|
|
86
89
|
export const ok = (value) => ({ ok: true, value });
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@garygentry/feature-forge",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Cross-agent installer for the feature-forge skill suite — installs the canonical forge pipeline into Claude, Codex, Copilot, Cursor, or
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "Cross-agent installer for the feature-forge skill suite — installs the canonical forge pipeline into Claude, Codex, Copilot, Cursor, Gemini, or Pi.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -38,13 +38,24 @@
|
|
|
38
38
|
"codex",
|
|
39
39
|
"copilot",
|
|
40
40
|
"cursor",
|
|
41
|
-
"gemini"
|
|
41
|
+
"gemini",
|
|
42
|
+
"pi",
|
|
43
|
+
"pi-package"
|
|
42
44
|
],
|
|
43
45
|
"publishConfig": {
|
|
44
46
|
"access": "public"
|
|
45
47
|
},
|
|
48
|
+
"pi": {
|
|
49
|
+
"skills": [
|
|
50
|
+
"./adapters/pi/skills"
|
|
51
|
+
],
|
|
52
|
+
"extensions": [
|
|
53
|
+
"./adapters/pi/extensions/ask-user-question/index.ts"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
46
56
|
"scripts": {
|
|
47
57
|
"build": "tsc -p tsconfig.json",
|
|
58
|
+
"pretest": "npm run build",
|
|
48
59
|
"test": "node --test",
|
|
49
60
|
"prepack": "npm run build && node scripts/bundle-adapters.mjs"
|
|
50
61
|
},
|