@entelligentsia/forgecli 0.20.3 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/README.md +31 -33
- package/dist/CHANGELOG-forge-plugin.md +118 -0
- package/dist/CHANGELOG-pi.md +24 -1
- package/dist/bin/forgecli.d.ts +2 -0
- package/dist/bin/forgecli.js +6 -0
- package/dist/bin/forgecli.js.map +1 -0
- package/dist/extensions/forgecli/add-pipeline.js +1 -1
- package/dist/extensions/forgecli/add-pipeline.js.map +1 -1
- package/dist/extensions/forgecli/add-task.js +1 -1
- package/dist/extensions/forgecli/add-task.js.map +1 -1
- package/dist/extensions/forgecli/approve.js +17 -2
- package/dist/extensions/forgecli/approve.js.map +1 -1
- package/dist/extensions/forgecli/calibrate.js +11 -8
- package/dist/extensions/forgecli/calibrate.js.map +1 -1
- package/dist/extensions/forgecli/collate.js +1 -1
- package/dist/extensions/forgecli/collate.js.map +1 -1
- package/dist/extensions/forgecli/commit.js +17 -2
- package/dist/extensions/forgecli/commit.js.map +1 -1
- package/dist/extensions/forgecli/enhance.js +1 -1
- package/dist/extensions/forgecli/enhance.js.map +1 -1
- package/dist/extensions/forgecli/fix-bug.d.ts +1 -1
- package/dist/extensions/forgecli/fix-bug.js +14 -6
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.d.ts +6 -8
- package/dist/extensions/forgecli/forge-artifact-tool.js +80 -195
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-commands.js +57 -18
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/phase4-register.js +6 -7
- package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/run-phases.d.ts +4 -0
- package/dist/extensions/forgecli/forge-init/run-phases.js +304 -0
- package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -0
- package/dist/extensions/forgecli/forge-init/verifiers.d.ts +14 -5
- package/dist/extensions/forgecli/forge-init/verifiers.js +79 -62
- package/dist/extensions/forgecli/forge-init/verifiers.js.map +1 -1
- package/dist/extensions/forgecli/forge-init.js +131 -76
- package/dist/extensions/forgecli/forge-init.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +9 -0
- package/dist/extensions/forgecli/forge-subagent.js +11 -6
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +28 -4
- package/dist/extensions/forgecli/forge-tools.js +122 -73
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/health-check.js +3 -3
- package/dist/extensions/forgecli/health-check.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -1
- package/dist/extensions/forgecli/hooks/check-update.d.ts +8 -0
- package/dist/extensions/forgecli/hooks/check-update.js +29 -1
- package/dist/extensions/forgecli/hooks/check-update.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-init-hook.js +6 -6
- package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js +6 -6
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
- package/dist/extensions/forgecli/hooks/triage-error.js +1 -0
- package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -1
- package/dist/extensions/forgecli/implement.js +20 -2
- package/dist/extensions/forgecli/implement.js.map +1 -1
- package/dist/extensions/forgecli/index.js +39 -32
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/lib/pipeline-guard.d.ts +41 -0
- package/dist/extensions/forgecli/lib/pipeline-guard.js +100 -0
- package/dist/extensions/forgecli/lib/pipeline-guard.js.map +1 -0
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js +2 -2
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +1 -1
- package/dist/extensions/forgecli/migrate.d.ts +3 -0
- package/dist/extensions/forgecli/migrate.js +4 -2
- package/dist/extensions/forgecli/migrate.js.map +1 -1
- package/dist/extensions/forgecli/plan.js +21 -2
- package/dist/extensions/forgecli/plan.js.map +1 -1
- package/dist/extensions/forgecli/quiz-agent.js +7 -7
- package/dist/extensions/forgecli/quiz-agent.js.map +1 -1
- package/dist/extensions/forgecli/regenerate.js +49 -18
- package/dist/extensions/forgecli/regenerate.js.map +1 -1
- package/dist/extensions/forgecli/remove-command.js +1 -1
- package/dist/extensions/forgecli/remove-command.js.map +1 -1
- package/dist/extensions/forgecli/report-bug.js +1 -1
- package/dist/extensions/forgecli/report-bug.js.map +1 -1
- package/dist/extensions/forgecli/retrospective.js +9 -9
- package/dist/extensions/forgecli/retrospective.js.map +1 -1
- package/dist/extensions/forgecli/review-code.d.ts +13 -0
- package/dist/extensions/forgecli/review-code.js +62 -3
- package/dist/extensions/forgecli/review-code.js.map +1 -1
- package/dist/extensions/forgecli/review-plan.d.ts +13 -0
- package/dist/extensions/forgecli/review-plan.js +65 -3
- package/dist/extensions/forgecli/review-plan.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +2 -1
- package/dist/extensions/forgecli/run-task.js +48 -4
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/skill-curator-subagent.d.ts +2 -1
- package/dist/extensions/forgecli/skill-curator-subagent.js +2 -1
- package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -1
- package/dist/extensions/forgecli/sprint-intake.js +6 -6
- package/dist/extensions/forgecli/sprint-intake.js.map +1 -1
- package/dist/extensions/forgecli/sprint-plan.js +9 -9
- package/dist/extensions/forgecli/sprint-plan.js.map +1 -1
- package/dist/extensions/forgecli/status-command.js +1 -1
- package/dist/extensions/forgecli/status-command.js.map +1 -1
- package/dist/extensions/forgecli/store-query.js +11 -11
- package/dist/extensions/forgecli/store-query.js.map +1 -1
- package/dist/extensions/forgecli/store-repair.js +7 -7
- package/dist/extensions/forgecli/store-repair.js.map +1 -1
- package/dist/extensions/forgecli/validate.js +17 -2
- package/dist/extensions/forgecli/validate.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/check-agent.md +22 -0
- package/dist/forge-payload/.base-pack/commands/new-sprint.md +22 -0
- package/dist/forge-payload/.base-pack/commands/plan-sprint.md +22 -0
- package/dist/forge-payload/.base-pack/commands/quiz-agent.md +2 -18
- package/dist/forge-payload/.base-pack/commands/retro.md +22 -0
- package/dist/forge-payload/.base-pack/commands/retrospective.md +2 -18
- package/dist/forge-payload/.base-pack/commands/sprint-intake.md +2 -18
- package/dist/forge-payload/.base-pack/commands/sprint-plan.md +2 -18
- package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/generation-instructions.md +4 -4
- package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +13 -1
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +12 -1
- package/dist/forge-payload/.base-pack/workflows/enhance.md +40 -10
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +14 -2
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +20 -4
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +14 -2
- package/dist/forge-payload/.base-pack/workflows/review_code.md +37 -7
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +36 -6
- package/dist/forge-payload/.base-pack/workflows/run_sprint.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +37 -7
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/config.schema.json +0 -5
- package/dist/forge-payload/.schemas/enum-catalog.json +9 -13
- package/dist/forge-payload/.schemas/migrations.json +65 -0
- package/dist/forge-payload/agents/tomoshibi.md +150 -6
- package/dist/forge-payload/commands/add-pipeline.md +1 -1
- package/dist/forge-payload/commands/add-task.md +1 -1
- package/dist/forge-payload/commands/calibrate.md +4 -350
- package/dist/forge-payload/commands/check-agent.md +38 -0
- package/dist/forge-payload/commands/config.md +3 -113
- package/dist/forge-payload/commands/enhance.md +5 -32
- package/dist/forge-payload/commands/health.md +155 -13
- package/dist/forge-payload/commands/init.md +25 -31
- package/dist/forge-payload/commands/migrate.md +6 -154
- package/dist/forge-payload/commands/quiz-agent.md +2 -34
- package/dist/forge-payload/commands/rebuild.md +664 -0
- package/dist/forge-payload/commands/regenerate.md +2 -774
- package/dist/forge-payload/commands/remove.md +10 -13
- package/dist/forge-payload/commands/repair.md +187 -0
- package/dist/forge-payload/commands/search.md +73 -0
- package/dist/forge-payload/commands/status.md +105 -0
- package/dist/forge-payload/commands/store-query.md +2 -69
- package/dist/forge-payload/commands/store-repair.md +2 -183
- package/dist/forge-payload/commands/update-tools.md +4 -50
- package/dist/forge-payload/commands/update.md +64 -58
- package/dist/forge-payload/hooks/check-update.cjs +1 -1
- package/dist/forge-payload/hooks/post-init.cjs +2 -2
- package/dist/forge-payload/hooks/post-sprint.cjs +2 -2
- package/dist/forge-payload/hooks/triage-error.cjs +11 -10
- package/dist/forge-payload/init/phases/phase-1-collect.md +138 -0
- package/dist/forge-payload/init/phases/phase-2-discover.md +127 -0
- package/dist/forge-payload/init/phases/phase-3-materialize.md +113 -0
- package/dist/forge-payload/init/phases/phase-4-register.md +159 -0
- package/dist/forge-payload/integrity.json +21 -24
- package/dist/forge-payload/meta/fragments/tool-discipline.md +22 -0
- package/dist/forge-payload/meta/templates/meta-retro.md +28 -0
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +2 -2
- package/dist/forge-payload/meta/workflows/_fragments/generation-instructions.md +4 -4
- package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-approve.md +13 -1
- package/dist/forge-payload/meta/workflows/meta-check-agent.md +138 -0
- package/dist/forge-payload/meta/workflows/meta-commit.md +12 -1
- package/dist/forge-payload/meta/workflows/meta-enhance.md +39 -9
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-implement.md +13 -1
- package/dist/forge-payload/meta/workflows/meta-migrate.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-new-sprint.md +84 -0
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +20 -4
- package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +152 -0
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +13 -1
- package/dist/forge-payload/meta/workflows/meta-retro.md +73 -0
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +37 -7
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +36 -6
- package/dist/forge-payload/meta/workflows/meta-validate.md +37 -7
- package/dist/forge-payload/schemas/config.schema.json +0 -5
- package/dist/forge-payload/schemas/enum-catalog.json +9 -13
- package/dist/forge-payload/schemas/structure-manifest.json +6 -8
- package/dist/forge-payload/tools/artifact.cjs +295 -0
- package/dist/forge-payload/tools/banners.cjs +3 -4
- package/dist/forge-payload/tools/build-context-pack.cjs +1 -1
- package/dist/forge-payload/tools/check-structure.cjs +8 -3
- package/dist/forge-payload/tools/store-cli.cjs +67 -7
- package/dist/forge-payload/tools/substitute-placeholders.cjs +1 -1
- package/dist/forge-payload/tools/verify-apply.cjs +75 -0
- package/dist/forge-payload/tools/verify-phase.cjs +259 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +0 -17
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +21 -38
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +5 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +5 -2
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +24 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js +2 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js +52 -22
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +16 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +45 -50
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +43 -81
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js +27 -12
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +2 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +3 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +37 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +9 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +20 -35
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +64 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +15 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js +14 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts +30 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js +124 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js +31 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts +7 -27
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js +75 -115
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +12 -14
- package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -5
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +3 -0
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +53 -0
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +13 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/package.json +6 -6
- package/dist/extensions/forgecli/forge-init/phase-descriptors.d.ts +0 -72
- package/dist/extensions/forgecli/forge-init/phase-descriptors.js +0 -359
- package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +0 -1
- package/dist/extensions/forgecli/forge-init/prompts.d.ts +0 -10
- package/dist/extensions/forgecli/forge-init/prompts.js +0 -91
- package/dist/extensions/forgecli/forge-init/prompts.js.map +0 -1
- package/dist/extensions/forgecli/lib/store-error-remediation.d.ts +0 -65
- package/dist/extensions/forgecli/lib/store-error-remediation.js +0 -298
- package/dist/extensions/forgecli/lib/store-error-remediation.js.map +0 -1
- package/dist/forge-payload/hooks/check-update.js +0 -378
- package/dist/forge-payload/hooks/forge-permissions.js +0 -164
- package/dist/forge-payload/hooks/triage-error.js +0 -77
- package/dist/forge-payload/hooks/validate-write.js +0 -250
|
@@ -1,187 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: store-repair
|
|
3
|
-
description:
|
|
3
|
+
description: Renamed in v1.0 — use /forge:repair
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Diagnose and repair corruption in the Forge JSON store.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
|
|
12
|
-
$ARGUMENTS
|
|
13
|
-
|
|
14
|
-
| Argument | Purpose |
|
|
15
|
-
|----------|---------|
|
|
16
|
-
| `--dry-run` | Show what would be repaired without making any changes |
|
|
17
|
-
|
|
18
|
-
## How to Run
|
|
19
|
-
|
|
20
|
-
1. Resolve the plugin root:
|
|
21
|
-
```
|
|
22
|
-
FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
2. Run the four-phase repair workflow below. If `--dry-run` is in `$ARGUMENTS`,
|
|
26
|
-
preview all changes without writing — skip Phase 2 writes and Phase 3
|
|
27
|
-
writes, and skip Phase 4 verification since nothing changed.
|
|
28
|
-
|
|
29
|
-
## Phase 1: Diagnosis
|
|
30
|
-
|
|
31
|
-
Run the deterministic validator in JSON mode:
|
|
32
|
-
|
|
33
|
-
```sh
|
|
34
|
-
node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run --json
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Parse the JSON output. Categorize each error by its `category` field:
|
|
38
|
-
|
|
39
|
-
| Category | Example | Deterministic fix? |
|
|
40
|
-
|----------|---------|--------------------|
|
|
41
|
-
| `missing-required` | `"sprintId": null` on a sprint | Yes — backfill |
|
|
42
|
-
| `type-mismatch` | `"iteration": "1"` instead of `1` | Yes — coerce |
|
|
43
|
-
| `invalid-enum` | `"status": "in-progress"` on a bug | No — needs judgment |
|
|
44
|
-
| `undeclared-field` | `"priority": "high"` on a task | No — needs judgment |
|
|
45
|
-
| `orphaned-fk` | `taskId` pointing to deleted task in event | No — needs judgment |
|
|
46
|
-
| `filename-mismatch` | Event filename != eventId | Yes — rename |
|
|
47
|
-
| `minimum-violation` | `"iteration": 0` | Yes — coerce |
|
|
48
|
-
| `orphan-directory` | Sprint dir with no sprint record | No — needs judgment |
|
|
49
|
-
| `stale-path` | `path` pointing to nonexistent dir | No — needs judgment |
|
|
50
|
-
|
|
51
|
-
## Phase 2: Auto-Fix
|
|
52
|
-
|
|
53
|
-
Run the deterministic validator with `--fix`:
|
|
54
|
-
|
|
55
|
-
```sh
|
|
56
|
-
node "$FORGE_ROOT/tools/validate-store.cjs" --fix --json
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
For dry-run, preview without writing:
|
|
60
|
-
|
|
61
|
-
```sh
|
|
62
|
-
node "$FORGE_ROOT/tools/validate-store.cjs" --fix --dry-run --json
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Report each fix to the user (entity, field, what was backfilled or nullified).
|
|
66
|
-
|
|
67
|
-
## Phase 3: LLM-Judgment Fixes
|
|
68
|
-
|
|
69
|
-
For each remaining error from Phase 1 that was not auto-fixed, apply LLM judgment:
|
|
70
|
-
|
|
71
|
-
1. **Read the corrupted record**:
|
|
72
|
-
```sh
|
|
73
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" read <entity> <id> --json
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
2. **Determine the correct value** based on schema definitions, store context, and
|
|
77
|
-
the judgment rules below.
|
|
78
|
-
|
|
79
|
-
3. **Present the proposed fix** to the user with:
|
|
80
|
-
- Entity ID and field affected
|
|
81
|
-
- Current (corrupted) value
|
|
82
|
-
- Proposed (corrected) value
|
|
83
|
-
- Reasoning
|
|
84
|
-
|
|
85
|
-
If the user declines, skip the fix and note it in the report.
|
|
86
|
-
|
|
87
|
-
4. **Apply the fix** using the appropriate command:
|
|
88
|
-
|
|
89
|
-
| Corruption Pattern | Repair Action | Command |
|
|
90
|
-
|-------------------|---------------|---------|
|
|
91
|
-
| Invalid enum value | Map to nearest valid enum | `store-cli.cjs update-status <entity> <id> <field> <value> [--force]` |
|
|
92
|
-
| Undeclared field | Remove the field by rewriting | `store-cli.cjs write <entity> '<fixed-json>'` |
|
|
93
|
-
| Type mismatch | Coerce to correct type and rewrite | `store-cli.cjs write <entity> '<fixed-json>'` |
|
|
94
|
-
| Orphaned FK | Nullify or remap to existing entity | `store-cli.cjs write <entity> '<fixed-json>'` |
|
|
95
|
-
| Dangling sprint.taskIds | Remove taskIds referencing non-existent tasks | `store-cli.cjs write sprint '<fixed-json>'` |
|
|
96
|
-
| Illegal status transition | Force-correct to valid state | `store-cli.cjs update-status <entity> <id> status <value> --force` |
|
|
97
|
-
| Stale COLLATION_STATE | Regenerate via collate | `node "$FORGE_ROOT/tools/collate.cjs"` |
|
|
98
|
-
|
|
99
|
-
### Judgment Rules: Invalid Enum Values
|
|
100
|
-
|
|
101
|
-
Map common misspellings and variant forms to canonical values:
|
|
102
|
-
|
|
103
|
-
| Entity | Field | Common Misspellings | Canonical Values |
|
|
104
|
-
|--------|-------|--------------------|------------------|
|
|
105
|
-
| Sprint | status | "in-progress" | active |
|
|
106
|
-
| Sprint | status | "done", "finished" | completed |
|
|
107
|
-
| Task | status | "in-progress" | implementing |
|
|
108
|
-
| Task | status | "in-review", "review" | review-approved |
|
|
109
|
-
| Task | status | "done", "finished" | committed |
|
|
110
|
-
| Bug | severity | "high", "critical" | critical |
|
|
111
|
-
| Bug | severity | "medium" | major |
|
|
112
|
-
| Bug | severity | "low" | minor |
|
|
113
|
-
| Bug | status | "open" | reported |
|
|
114
|
-
| Bug | status | "working" | in-progress |
|
|
115
|
-
| Feature | status | "complete", "done" | shipped |
|
|
116
|
-
|
|
117
|
-
When no reasonable mapping exists, ask the user to choose from valid values.
|
|
118
|
-
|
|
119
|
-
### Judgment Rules: Orphaned References
|
|
120
|
-
|
|
121
|
-
- **Event.taskId → deleted task**: If the event's sprintId is valid, nullify the
|
|
122
|
-
taskId. If the sprint also doesn't exist, ask the user whether to delete the
|
|
123
|
-
event or create a stub sprint.
|
|
124
|
-
- **Sprint.taskIds containing deleted task IDs**: Remove the deleted IDs from the
|
|
125
|
-
array and rewrite the sprint.
|
|
126
|
-
- **Undeclared fields**: Remove the field and rewrite. Mention the removed data in
|
|
127
|
-
the report so the user can decide whether to add it to the schema.
|
|
128
|
-
|
|
129
|
-
### Hard Rules
|
|
130
|
-
|
|
131
|
-
1. **Never fall back to direct file writes.** All repairs go through
|
|
132
|
-
`store-cli.cjs`. If it rejects a write, fix the data and retry (max 2).
|
|
133
|
-
2. **Never delete data without confirmation.** Ask the user before deleting any
|
|
134
|
-
record.
|
|
135
|
-
3. **Never skip Phase 4 verification.** Always re-run validate-store after
|
|
136
|
-
repairs.
|
|
137
|
-
4. **Preserve data priority.** Prefer corrections that retain more original data.
|
|
138
|
-
Mapping "in-progress" → "implementing" is better than resetting to "draft".
|
|
139
|
-
|
|
140
|
-
## Phase 4: Verification
|
|
141
|
-
|
|
142
|
-
Re-run the validator to confirm the store is clean:
|
|
143
|
-
|
|
144
|
-
```sh
|
|
145
|
-
node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run --json
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
If `"ok": true`, report success. If errors remain, report them as unresolved
|
|
149
|
-
with suggestions for next steps.
|
|
150
|
-
|
|
151
|
-
## Repair Report
|
|
152
|
-
|
|
153
|
-
After all phases, output a structured report:
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
# Store Repair Report
|
|
157
|
-
|
|
158
|
-
## Phase 1: Diagnosis
|
|
159
|
-
- Errors found: N
|
|
160
|
-
- Warnings found: M
|
|
161
|
-
- Categories: {breakdown by category}
|
|
162
|
-
|
|
163
|
-
## Phase 2: Auto-Fix
|
|
164
|
-
- Fixes applied: N
|
|
165
|
-
- Details: {list of each fix}
|
|
166
|
-
|
|
167
|
-
## Phase 3: LLM-Judgment Fixes
|
|
168
|
-
- Fixes proposed: N
|
|
169
|
-
- Fixes applied: M (with user approval)
|
|
170
|
-
- Fixes skipped: K (user declined)
|
|
171
|
-
- Details: {list of each proposed change with reasoning}
|
|
172
|
-
|
|
173
|
-
## Phase 4: Verification
|
|
174
|
-
- Errors remaining: N
|
|
175
|
-
- Warnings remaining: M
|
|
176
|
-
- Status: PASS / FAIL
|
|
177
|
-
|
|
178
|
-
## Unresolved Issues
|
|
179
|
-
{List of issues that could not be automatically resolved, with suggestions}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
## On Error
|
|
183
|
-
|
|
184
|
-
If `validate-store.cjs` crashes or returns unexpected output, report the error
|
|
185
|
-
and suggest running `/forge:report-bug` if it appears to be a Forge bug. Do NOT
|
|
186
|
-
attempt to continue repairs after an unexpected error in a deterministic tool —
|
|
187
|
-
the store state is unknown and further writes could cause additional corruption.
|
|
6
|
+
× /forge:store-repair was renamed to /forge:repair in v1.0.
|
|
@@ -1,56 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: update-tools
|
|
3
|
-
description:
|
|
3
|
+
description: REMOVED in v1.0 — use /forge:update instead
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /forge:update-tools
|
|
6
|
+
# /forge:update-tools — Removed
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
× `/forge:update-tools` was removed in v1.0. Schema refresh now happens automatically as part of `/forge:update`.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
are invoked directly from `$FORGE_ROOT/tools/` — they are not copied to the project.
|
|
12
|
-
This command only manages schemas.
|
|
13
|
-
|
|
14
|
-
## Locate the plugin
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Steps
|
|
21
|
-
|
|
22
|
-
### 1 — Copy schemas
|
|
23
|
-
|
|
24
|
-
Copy all JSON Schema files from `$FORGE_ROOT/schemas/` to `.forge/schemas/`.
|
|
25
|
-
Create `.forge/schemas/` if it does not exist.
|
|
26
|
-
|
|
27
|
-
```sh
|
|
28
|
-
mkdir -p .forge/schemas
|
|
29
|
-
cp "$FORGE_ROOT/schemas/"*.schema.json .forge/schemas/
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### 2 — Record hashes
|
|
33
|
-
|
|
34
|
-
Record each copied schema file in the generation manifest so health checks
|
|
35
|
-
can detect modifications:
|
|
36
|
-
|
|
37
|
-
```sh
|
|
38
|
-
for f in .forge/schemas/*.schema.json; do
|
|
39
|
-
node "$FORGE_ROOT/tools/generation-manifest.cjs" record "$f"
|
|
40
|
-
done
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### 3 — Verify
|
|
44
|
-
|
|
45
|
-
```sh
|
|
46
|
-
node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Print `〇 Schemas updated and store validation passed.` on success.
|
|
50
|
-
Print `× Validation failed — {output}` on non-zero exit.
|
|
51
|
-
|
|
52
|
-
## On error
|
|
53
|
-
|
|
54
|
-
If any step above fails unexpectedly, describe what went wrong and ask:
|
|
55
|
-
|
|
56
|
-
> "This looks like a Forge bug. Would you like to file a report to help improve it? Run `/forge:report-bug` — I'll pre-fill the report from this conversation."
|
|
10
|
+
Run `/forge:update` to refresh schemas along with other project artifacts.
|
|
@@ -95,8 +95,7 @@ node "$FORGE_ROOT/tools/banners.cjs" --subtitle "Updating Forge — checking rem
|
|
|
95
95
|
At the start of each step, emit a step header via `banners.cjs --phase`:
|
|
96
96
|
|
|
97
97
|
```sh
|
|
98
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase {N} 7 "{Step Name}" {bannerKey}
|
|
99
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
98
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase {N} 7 "{Step Name}" {bannerKey}
|
|
100
99
|
```
|
|
101
100
|
|
|
102
101
|
Step ↔ banner key map:
|
|
@@ -130,7 +129,7 @@ If `updateStatus === "pending"`:
|
|
|
130
129
|
△ Previous update is incomplete — pending migration(s): {pendingMigrations}
|
|
131
130
|
Reason: {pendingReason}
|
|
132
131
|
|
|
133
|
-
Run /forge:migrate to complete the pending migration, then re-run
|
|
132
|
+
Run /forge:init --migrate to complete the pending migration, then re-run
|
|
134
133
|
/forge:update to verify.
|
|
135
134
|
```
|
|
136
135
|
|
|
@@ -138,7 +137,7 @@ If `updateStatus === "pending"`:
|
|
|
138
137
|
were completed in the previous run. The project already has the correct
|
|
139
138
|
plugin version installed; only the migration chain remains.
|
|
140
139
|
|
|
141
|
-
3. Exit. The user runs `/forge:migrate` to complete, then re-runs `/forge:update`.
|
|
140
|
+
3. Exit. The user runs `/forge:init --migrate` to complete, then re-runs `/forge:update`.
|
|
142
141
|
|
|
143
142
|
If `updateStatus !== "pending"` (or field absent): proceed normally with Step 1.
|
|
144
143
|
|
|
@@ -147,8 +146,7 @@ If `updateStatus !== "pending"` (or field absent): proceed normally with Step 1.
|
|
|
147
146
|
## Step 1 — Check for updates
|
|
148
147
|
|
|
149
148
|
```sh
|
|
150
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 1 7 "Check for updates" north
|
|
151
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
149
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 1 7 "Check for updates" north
|
|
152
150
|
```
|
|
153
151
|
|
|
154
152
|
Read `$FORGE_ROOT/.claude-plugin/plugin.json`. Extract `"version"` → `LOCAL_VERSION`.
|
|
@@ -263,8 +261,7 @@ Now evaluate — **stop at the first matching row and follow only that row's act
|
|
|
263
261
|
## Step 2A — Plugin update available
|
|
264
262
|
|
|
265
263
|
```sh
|
|
266
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 2 7 "Plugin update available" rift
|
|
267
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
264
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 2 7 "Plugin update available" rift
|
|
268
265
|
```
|
|
269
266
|
|
|
270
267
|
> **Only reached when `REMOTE_VERSION` != `LOCAL_VERSION` (row 4 above).**
|
|
@@ -320,7 +317,7 @@ Present the update summary:
|
|
|
320
317
|
```
|
|
321
318
|
|
|
322
319
|
If no migration path can be constructed, show available notes and recommend
|
|
323
|
-
`/forge:
|
|
320
|
+
`/forge:rebuild workflows`.
|
|
324
321
|
|
|
325
322
|
Ask the user to choose. If they choose **[2]**, exit.
|
|
326
323
|
|
|
@@ -359,8 +356,7 @@ Wait for the user to confirm the install completed.
|
|
|
359
356
|
## Step 2B — Project migration pending (plugin already current)
|
|
360
357
|
|
|
361
358
|
```sh
|
|
362
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 2 7 "Apply project migrations" drift
|
|
363
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
359
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 2 7 "Apply project migrations" drift
|
|
364
360
|
```
|
|
365
361
|
|
|
366
362
|
> **Only reached from rows 2 or 3 — the plugin is already at the right version.**
|
|
@@ -420,8 +416,7 @@ Then jump to **Step 4** to execute the regeneration.
|
|
|
420
416
|
## Step 3 — Verify installation
|
|
421
417
|
|
|
422
418
|
```sh
|
|
423
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 3 7 "Verify installation" lumen
|
|
424
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
419
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 3 7 "Verify installation" lumen
|
|
425
420
|
```
|
|
426
421
|
|
|
427
422
|
After the user confirms the install:
|
|
@@ -461,8 +456,7 @@ path) — skip the re-derivation and keep the original value.
|
|
|
461
456
|
## Step 4 — Apply migrations
|
|
462
457
|
|
|
463
458
|
```sh
|
|
464
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 4 7 "Apply migrations" forge
|
|
465
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
459
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 4 7 "Apply migrations" forge
|
|
466
460
|
```
|
|
467
461
|
|
|
468
462
|
> **Sequencing note:** `paths.forgeRoot` is written at the very start of Step 4,
|
|
@@ -507,6 +501,19 @@ If the project was recently initialized and all fields are already present, the
|
|
|
507
501
|
command prints `〇 No missing fields to backfill.` and exits cleanly —
|
|
508
502
|
no changes, no side effects.
|
|
509
503
|
|
|
504
|
+
**Fix `paths.commands` prefix (v1.0.2+):** Pre-v1.0.2 projects may have
|
|
505
|
+
`paths.commands` set to `.claude/commands/forge` regardless of the project
|
|
506
|
+
prefix. Correct it to use the lowercased project prefix:
|
|
507
|
+
|
|
508
|
+
```sh
|
|
509
|
+
PREFIX=$(node -e "try{console.log(require('./.forge/config.json').project.prefix.toLowerCase())}catch{console.log('forge')}")
|
|
510
|
+
CURRENT_COMMANDS=$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.commands 2>/dev/null || echo "")
|
|
511
|
+
EXPECTED_COMMANDS=".claude/commands/$PREFIX"
|
|
512
|
+
if [ "$CURRENT_COMMANDS" != "$EXPECTED_COMMANDS" ]; then
|
|
513
|
+
node "$FORGE_ROOT/tools/manage-config.cjs" set paths.commands "$EXPECTED_COMMANDS"
|
|
514
|
+
fi
|
|
515
|
+
```
|
|
516
|
+
|
|
510
517
|
Determine the baseline version:
|
|
511
518
|
- Use `migratedFrom` from `CACHE_FILE` (set in Step 1)
|
|
512
519
|
- Or the `--from <version>` argument if provided
|
|
@@ -540,7 +547,7 @@ Walk the migration chain from baseline forward to `LOCAL_VERSION`:
|
|
|
540
547
|
- Collect the ordered list of migration steps that bridge baseline → current.
|
|
541
548
|
- If no path exists, warn:
|
|
542
549
|
> No migration path found from {baseline} to {LOCAL_VERSION}. Running
|
|
543
|
-
> `/forge:
|
|
550
|
+
> `/forge:rebuild workflows` is recommended.
|
|
544
551
|
Then exit.
|
|
545
552
|
|
|
546
553
|
Aggregate across all steps in the path, applying the dominance rule:
|
|
@@ -568,7 +575,7 @@ Execute regeneration targets in this order:
|
|
|
568
575
|
| 4 | `personas` | — (independent) | — |
|
|
569
576
|
| 5 | `commands` | Must run after `workflows` | — |
|
|
570
577
|
| 6 | `knowledge-base` sub-targets | — (independent) | — |
|
|
571
|
-
| 7 | `schemas` | — (independent) | **
|
|
578
|
+
| 7 | `schemas` | — (independent) | **Run schema refresh inline** (see Schema Refresh below). Emit: `〇 Refreshing schemas…` |
|
|
572
579
|
|
|
573
580
|
> **Known special targets — note for migration authors:** `hooks` and `schemas` are
|
|
574
581
|
> special-cased here. Future `migrations.json` entries should only use recognised
|
|
@@ -650,19 +657,37 @@ If the user declines, exit without modifying anything.
|
|
|
650
657
|
If `breaking: true`, require the user to confirm they have completed the manual
|
|
651
658
|
steps before proceeding.
|
|
652
659
|
|
|
653
|
-
For each category in the aggregated result, invoke `/forge:
|
|
660
|
+
For each category in the aggregated result, invoke `/forge:rebuild` by
|
|
654
661
|
reading and following `$FORGE_ROOT/commands/regenerate.md`:
|
|
655
|
-
- If flagged for full rebuild: invoke `/forge:
|
|
656
|
-
- If sub-targets collected: invoke `/forge:
|
|
662
|
+
- If flagged for full rebuild: invoke `/forge:rebuild <category>`
|
|
663
|
+
- If sub-targets collected: invoke `/forge:rebuild <category> <sub-target>`
|
|
657
664
|
for each sub-target in order
|
|
658
665
|
|
|
659
666
|
**Category-to-command mapping:** most categories are handled by
|
|
660
|
-
`/forge:
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
667
|
+
`/forge:rebuild`, but the `tools` and `schemas` categories are special.
|
|
668
|
+
|
|
669
|
+
When `tools` appears in the aggregated result, run the schema refresh inline
|
|
670
|
+
(see **Schema Refresh** section below) instead of invoking `/forge:rebuild tools`.
|
|
671
|
+
Tools ship with the plugin and are invoked directly via `$FORGE_ROOT/tools/`.
|
|
672
|
+
|
|
673
|
+
When `schemas` appears in the aggregated result, run the schema refresh inline
|
|
674
|
+
(same **Schema Refresh** section). Do NOT delegate to the removed `/forge:update-tools` command.
|
|
675
|
+
|
|
676
|
+
### Schema Refresh
|
|
677
|
+
|
|
678
|
+
When the migration chain includes a `schemas` or `tools` target, refresh schemas inline:
|
|
679
|
+
|
|
680
|
+
```sh
|
|
681
|
+
mkdir -p .forge/schemas
|
|
682
|
+
cp "$FORGE_ROOT/schemas/"*.schema.json .forge/schemas/
|
|
683
|
+
for f in .forge/schemas/*.schema.json; do
|
|
684
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record "$f"
|
|
685
|
+
done
|
|
686
|
+
node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
Emit `〇 Schemas updated and store validation passed.` on success.
|
|
690
|
+
Emit `× Validation failed — {output}` on non-zero exit from `validate-store.cjs`.
|
|
666
691
|
|
|
667
692
|
Run non-knowledge-base targets first (workflows, templates, commands, tools),
|
|
668
693
|
then knowledge-base sub-targets if present.
|
|
@@ -685,9 +710,9 @@ If exit 1 (gaps remain):
|
|
|
685
710
|
> △ Structure check: N file(s) still missing after migration:
|
|
686
711
|
> (list missing files)
|
|
687
712
|
>
|
|
688
|
-
> This may indicate a failed regeneration step. Re-run `/forge:
|
|
689
|
-
> for each affected namespace, or `/forge:
|
|
690
|
-
> Note: skills entries require an explicit `/forge:
|
|
713
|
+
> This may indicate a failed regeneration step. Re-run `/forge:rebuild <namespace>`
|
|
714
|
+
> for each affected namespace, or `/forge:rebuild` to rebuild all targets.
|
|
715
|
+
> Note: skills entries require an explicit `/forge:rebuild skills` — they are not
|
|
691
716
|
> included in the default regenerate run.
|
|
692
717
|
|
|
693
718
|
Do NOT block migration success on gaps — surface them as a warning only. The user
|
|
@@ -699,7 +724,7 @@ is an additional safety net.
|
|
|
699
724
|
After the structure check, if at least one regeneration target was applied (the
|
|
700
725
|
aggregated `regenerate` list was non-empty), refresh `calibrationBaseline` in
|
|
701
726
|
`.forge/config.json`. This keeps the calibration baseline in sync with the newly
|
|
702
|
-
materialized artifacts so `/forge:
|
|
727
|
+
materialized artifacts so `/forge:health --fix` does not report false drift.
|
|
703
728
|
|
|
704
729
|
Skip this step if no regeneration targets were applied (e.g. all targets were absent
|
|
705
730
|
from the migration path, or Step 4 was entered with `baseline == LOCAL_VERSION`).
|
|
@@ -798,7 +823,7 @@ ADR-S14-01 decision criteria to determine the update outcome:
|
|
|
798
823
|
- No changes to `calibrationBaseline` semantics
|
|
799
824
|
|
|
800
825
|
Concretely, a low-risk step is one where the only actions are: schema-only
|
|
801
|
-
changes (
|
|
826
|
+
changes (inline schema refresh for schemas), file-copy from base-pack
|
|
802
827
|
(templates, workflows, personas), or config-key additions with deterministic
|
|
803
828
|
defaults.
|
|
804
829
|
|
|
@@ -834,7 +859,7 @@ pass:
|
|
|
834
859
|
only performs operations that can be completed without any user prompts.
|
|
835
860
|
- **Deterministic file copies from base-pack:** if
|
|
836
861
|
`structure-versions.json` already exists (post-T05 install), the
|
|
837
|
-
deterministic path is simply running any remaining `/forge:
|
|
862
|
+
deterministic path is simply running any remaining `/forge:rebuild`
|
|
838
863
|
targets that were not already applied in the main Step 4 regeneration
|
|
839
864
|
sequence.
|
|
840
865
|
|
|
@@ -850,7 +875,7 @@ pass:
|
|
|
850
875
|
- Write `updateStatus: "pending"`, `pendingReason: "Auto-invoke failed:
|
|
851
876
|
{error description}"`, and `pendingMigrations: [list]` to
|
|
852
877
|
`.forge/update-check-cache.json`.
|
|
853
|
-
- Print: "Update Pending — auto-invoke failed. Run `/forge:migrate` to
|
|
878
|
+
- Print: "Update Pending — auto-invoke failed. Run `/forge:init --migrate` to
|
|
854
879
|
complete" with the failure details.
|
|
855
880
|
- Exit without proceeding to Steps 5-7.
|
|
856
881
|
|
|
@@ -865,7 +890,7 @@ If any step is user-affecting (and the chain was NOT auto-invoked), enter the
|
|
|
865
890
|
- Do NOT bump `calibrationBaseline.version`.
|
|
866
891
|
- Write `updateStatus: "pending"`, `pendingReason`, and `pendingMigrations` to
|
|
867
892
|
`.forge/update-check-cache.json`.
|
|
868
|
-
- Print: "Update Pending — run `/forge:migrate` to complete" with the list of
|
|
893
|
+
- Print: "Update Pending — run `/forge:init --migrate` to complete" with the list of
|
|
869
894
|
pending migrations and next steps.
|
|
870
895
|
- Exit without proceeding to Steps 5-7.
|
|
871
896
|
|
|
@@ -890,8 +915,7 @@ On the "Update Complete" path (all migrations applied,
|
|
|
890
915
|
## Step 5 — Pipeline and configuration audit
|
|
891
916
|
|
|
892
917
|
```sh
|
|
893
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 5 7 "Pipeline audit" oracle
|
|
894
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
918
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 5 7 "Pipeline audit" oracle
|
|
895
919
|
```
|
|
896
920
|
|
|
897
921
|
Runs on every update. Collects all findings first, then presents a single
|
|
@@ -1007,7 +1031,7 @@ For each file containing legacy `model:` fields, add item:
|
|
|
1007
1031
|
`type: legacy-model-field`, `required: false`,
|
|
1008
1032
|
`path: .forge/workflows/{filename}`,
|
|
1009
1033
|
`label: ".forge/workflows/{filename} — legacy model: field detected"`,
|
|
1010
|
-
`action: "Will be auto-migrated by /forge:
|
|
1034
|
+
`action: "Will be auto-migrated by /forge:rebuild workflows"`
|
|
1011
1035
|
|
|
1012
1036
|
**5b-rename — Retired command names in pipeline config.** Scan every configured
|
|
1013
1037
|
pipeline for phases that use retired built-in command names.
|
|
@@ -1153,7 +1177,7 @@ and emit:
|
|
|
1153
1177
|
[1] △ .claude/commands/supervisor.md — retired name, user edits detected.
|
|
1154
1178
|
Merge into review-plan.md before deleting. Delete old file?
|
|
1155
1179
|
[2] 〇 .forge/workflows/architect_sprint_plan.md — legacy model: field detected.
|
|
1156
|
-
Will be auto-migrated by /forge:
|
|
1180
|
+
Will be auto-migrated by /forge:rebuild workflows. No action needed.
|
|
1157
1181
|
[3] 〇 pipeline "main" phase 3 — no workflow field.
|
|
1158
1182
|
Add: "workflow": "engineering/commands/qa.md"
|
|
1159
1183
|
[4] 〇 pipeline "main" phase 4 — command file missing.
|
|
@@ -1287,8 +1311,7 @@ Proceed to **Step 6**.
|
|
|
1287
1311
|
## Step 6 — Record state and summarise
|
|
1288
1312
|
|
|
1289
1313
|
```sh
|
|
1290
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 6 7 "Record state" drift
|
|
1291
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
1314
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 6 7 "Record state" drift
|
|
1292
1315
|
```
|
|
1293
1316
|
|
|
1294
1317
|
> **Note:** `paths.forgeRoot` and `paths.forgeRef` were already written at the start
|
|
@@ -1347,29 +1370,12 @@ Print the final summary:
|
|
|
1347
1370
|
Subagent isolation: {used | bypassed (inline)}
|
|
1348
1371
|
```
|
|
1349
1372
|
|
|
1350
|
-
**Fast-mode promotion hint.** After printing the summary, read
|
|
1351
|
-
`.forge/config.json` `mode`:
|
|
1352
|
-
|
|
1353
|
-
```sh
|
|
1354
|
-
CURRENT_MODE=$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo "unset")
|
|
1355
|
-
```
|
|
1356
|
-
|
|
1357
|
-
If `CURRENT_MODE == "fast"`, also emit:
|
|
1358
|
-
|
|
1359
|
-
```
|
|
1360
|
-
〇 Migration applied in fast mode. Materialized artifacts refreshed; stubs will pick up changes on first use.
|
|
1361
|
-
〇 To fully promote: /forge:config mode full
|
|
1362
|
-
```
|
|
1363
|
-
|
|
1364
|
-
This is informational only — no behavioural change. Do not block on it.
|
|
1365
|
-
|
|
1366
1373
|
---
|
|
1367
1374
|
|
|
1368
1375
|
## Step 7 — Link KB to Agent Instruction Files
|
|
1369
1376
|
|
|
1370
1377
|
```sh
|
|
1371
|
-
node "$FORGE_ROOT/tools/banners.cjs" --phase 7 7 "Tomoshibi" lumen
|
|
1372
|
-
"$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo full)"
|
|
1378
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 7 7 "Tomoshibi" lumen
|
|
1373
1379
|
```
|
|
1374
1380
|
|
|
1375
1381
|
Invoke Tomoshibi to ensure every coding-agent instruction file in the project
|
|
@@ -162,7 +162,7 @@ if (hasForge && projectCache && projectCache.updateStatus === 'pending') {
|
|
|
162
162
|
: '(unknown)';
|
|
163
163
|
pendingStateMsg =
|
|
164
164
|
`Forge update is incomplete — pending migration(s): ${pendingMigrations}.` +
|
|
165
|
-
` Run /forge:update to continue or /forge:migrate to complete.`;
|
|
165
|
+
` Run /forge:update to continue or /forge:init --migrate to complete.`;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
const elapsed = pluginCache ? now - (pluginCache.lastCheck || 0) : Infinity;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Forge hook: post-init
|
|
5
5
|
// PostToolUse hook that fires once at the END of a successful /forge:init
|
|
6
6
|
// Phase 4 (NOT on Resume "start over" or stale-checkpoint cleanup) and
|
|
7
|
-
// invokes /forge:
|
|
7
|
+
// invokes /forge:rebuild --enrich --phase 1 --auto.
|
|
8
8
|
//
|
|
9
9
|
// Trigger detection uses a positive end-of-flow signal: the hook matches
|
|
10
10
|
// `rm -f .forge/init-progress.json` AND requires `.forge/structure-versions.json`
|
|
@@ -112,7 +112,7 @@ try {
|
|
|
112
112
|
hookSpecificOutput: {
|
|
113
113
|
hookEventName: 'PostToolUse',
|
|
114
114
|
additionalContext:
|
|
115
|
-
'Forge: /forge:init has completed Phase 4. Run /forge:
|
|
115
|
+
'Forge: /forge:init has completed Phase 4. Run /forge:rebuild --enrich --phase 1 --auto to materialise project-specific starter-pack content from the freshly captured structural snapshot.',
|
|
116
116
|
},
|
|
117
117
|
}) + '\n');
|
|
118
118
|
} catch (outputErr) { logSwallowedError('post-init:output', outputErr, process.env.CLAUDE_PLUGIN_DATA); }
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Forge hook: post-sprint
|
|
5
5
|
// PostToolUse hook that fires after a sprint retrospective completes
|
|
6
6
|
// (`collate.cjs <SPRINT_ID> --purge-events` where the ID matches the
|
|
7
|
-
// `*-S\d+` shape) and invokes /forge:
|
|
7
|
+
// `*-S\d+` shape) and invokes /forge:rebuild --enrich --phase 2.
|
|
8
8
|
//
|
|
9
9
|
// The sprint-ID shape gate ensures bug-fix invocations like
|
|
10
10
|
// `collate.cjs FORGE-B07 --purge-events` (which run after every successful
|
|
@@ -100,7 +100,7 @@ try {
|
|
|
100
100
|
hookSpecificOutput: {
|
|
101
101
|
hookEventName: 'PostToolUse',
|
|
102
102
|
additionalContext:
|
|
103
|
-
`Forge: sprint ${detectedSprintId} retrospective has completed. Run /forge:
|
|
103
|
+
`Forge: sprint ${detectedSprintId} retrospective has completed. Run /forge:rebuild --enrich --phase 2 to propose KB enhancements derived from the sprint's lessons (proposals are written for review, not auto-applied).`,
|
|
104
104
|
},
|
|
105
105
|
}) + '\n');
|
|
106
106
|
} catch (outputErr) { logSwallowedError('post-sprint:output', outputErr, process.env.CLAUDE_PLUGIN_DATA); }
|
|
@@ -24,7 +24,7 @@ const FORGE_PATTERNS = [
|
|
|
24
24
|
/engineering\/tools\//,
|
|
25
25
|
/forge:init/,
|
|
26
26
|
/forge:health/,
|
|
27
|
-
/forge:
|
|
27
|
+
/forge:rebuild/,
|
|
28
28
|
/forge:update/,
|
|
29
29
|
/forge:add-pipeline/,
|
|
30
30
|
/forge:add-task/,
|
|
@@ -33,21 +33,22 @@ const FORGE_PATTERNS = [
|
|
|
33
33
|
/forge:approve/,
|
|
34
34
|
/forge:commit/,
|
|
35
35
|
/forge:review/,
|
|
36
|
-
/forge:sprint/,
|
|
36
|
+
/forge:new-sprint/,
|
|
37
|
+
/forge:plan-sprint/,
|
|
37
38
|
/forge:run-task/,
|
|
38
39
|
/forge:run-sprint/,
|
|
39
40
|
/forge:fix-bug/,
|
|
40
|
-
/forge:
|
|
41
|
-
/forge:
|
|
41
|
+
/forge:retro/,
|
|
42
|
+
/forge:check-agent/,
|
|
42
43
|
/forge:report-bug/,
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
// forge:enhance removed in v1.0 (T03) — absorbed into forge:rebuild --enrich
|
|
45
|
+
// forge:collate removed from user-facing surface in v1.0 (T03) — internal tool only
|
|
45
46
|
/forge:validate/,
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
// forge:calibrate removed in v1.0 (T03) — absorbed into forge:health --fix (T04)
|
|
48
|
+
// forge:materialize removed in v1.0 (T03) — fast-mode eliminated in T01
|
|
48
49
|
/forge:remove/,
|
|
49
|
-
/forge:
|
|
50
|
-
/forge:
|
|
50
|
+
/forge:search/,
|
|
51
|
+
/forge:repair/,
|
|
51
52
|
/forge:store-custodian/,
|
|
52
53
|
/forge:config/,
|
|
53
54
|
/forge:ask/,
|