@entelligentsia/forgecli 1.0.2 → 1.0.10
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 +67 -0
- package/README.md +2 -1
- package/dist/CHANGELOG-forge-plugin.md +124 -0
- package/dist/CHANGELOG-pi.md +94 -0
- package/dist/extensions/forgecli/audience-gate.js +1 -1
- package/dist/extensions/forgecli/audience-gate.js.map +1 -1
- package/dist/extensions/forgecli/fix-bug.d.ts +1 -2
- package/dist/extensions/forgecli/fix-bug.js +678 -609
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js +42 -7
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +17 -0
- package/dist/extensions/forgecli/forge-subagent.js +31 -12
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +6 -0
- package/dist/extensions/forgecli/forge-tools.js +71 -8
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/run-task.js +461 -391
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +12 -0
- package/dist/extensions/forgecli/session-registry.js +23 -0
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/subagent/caller-context.d.ts +35 -11
- package/dist/extensions/forgecli/subagent/caller-context.js +49 -21
- package/dist/extensions/forgecli/subagent/caller-context.js.map +1 -1
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.d.ts +66 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js +66 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js.map +1 -0
- package/dist/extensions/forgecli/subagent/phase-guard.d.ts +34 -0
- package/dist/extensions/forgecli/subagent/phase-guard.js +149 -0
- package/dist/extensions/forgecli/subagent/phase-guard.js.map +1 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.d.ts +2 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js +39 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js.map +1 -0
- package/dist/extensions/forgecli/thread-switcher.js +2 -2
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/viewport-events.d.ts +4 -0
- package/dist/extensions/forgecli/viewport-events.js +18 -1
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +12 -2
- package/dist/extensions/forgecli/viewport-renderer.js +8 -6
- package/dist/extensions/forgecli/viewport-renderer.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +18 -3
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +4 -5
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +2 -3
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +10 -28
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -2
- package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +41 -47
- package/dist/forge-payload/.base-pack/workflows/triage.md +190 -0
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +2 -3
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/_defs/locator.schema.json +13 -0
- package/dist/forge-payload/.schemas/bug.schema.json +1 -0
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/migrations.json +72 -0
- package/dist/forge-payload/.schemas/sprint.schema.json +1 -0
- package/dist/forge-payload/.schemas/task.schema.json +1 -0
- package/dist/forge-payload/integrity.json +3 -3
- package/dist/forge-payload/meta/fragments/tool-discipline.md +21 -2
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +18 -3
- package/dist/forge-payload/meta/workflows/meta-approve.md +4 -5
- package/dist/forge-payload/meta/workflows/meta-bug-triage.md +210 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-commit.md +2 -3
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +10 -28
- package/dist/forge-payload/meta/workflows/meta-implement.md +3 -2
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +41 -47
- package/dist/forge-payload/meta/workflows/meta-validate.md +2 -3
- package/dist/forge-payload/schemas/_defs/locator.schema.json +13 -0
- package/dist/forge-payload/schemas/bug.schema.json +1 -0
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/sprint.schema.json +1 -0
- package/dist/forge-payload/schemas/structure-manifest.json +22 -2
- package/dist/forge-payload/schemas/task.schema.json +1 -0
- package/dist/forge-payload/tools/artifact-store.cjs +242 -0
- package/dist/forge-payload/tools/artifact.cjs +69 -100
- package/dist/forge-payload/tools/lib/artifact-kinds.cjs +95 -0
- package/dist/forge-payload/tools/lib/store-nlp.cjs +6 -0
- package/dist/forge-payload/tools/lib/store-query-exec.cjs +39 -5
- package/dist/forge-payload/tools/lib/suggest.cjs +2 -1
- package/dist/forge-payload/tools/preflight-gate.cjs +55 -5
- package/dist/forge-payload/tools/store-cli.cjs +50 -15
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +5 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +81 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +19 -24
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +14 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +22 -8
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +374 -122
- 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 +424 -232
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +38 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +21 -12
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +6 -10
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js +5 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +3 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +2 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.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 +159 -78
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +16 -11
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +4 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +6 -10
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/stream.js +14 -2
- package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +14 -4
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js +34 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts +9 -7
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +8 -7
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts +10 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +179 -79
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +94 -0
- package/node_modules/@earendil-works/pi-coding-agent/README.md +9 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +27 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +15 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +5 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +28 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +18 -24
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +8 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +7 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +65 -13
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts +9 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js +134 -11
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +10 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts +6 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +75 -28
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +14 -9
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +0 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.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 +7 -10
- 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/find.d.ts.map +1 -1
- 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.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 -7
- 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/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +6 -7
- 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/render-utils.d.ts +5 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js +17 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.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 +5 -6
- 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/index.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +69 -16
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js +118 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +1 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +2 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +59 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +10 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.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 +3 -1
- 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/modes/rpc/rpc-types.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js +13 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +13 -10
- package/node_modules/@earendil-works/pi-coding-agent/docs/development.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +12 -6
- package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +25 -12
- package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +13 -5
- package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +2 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/session-format.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/sessions.md +8 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +7 -3
- package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/tui.md +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +9 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/README.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- 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/index.ts +54 -3
- 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/git-merge-and-resolve.ts +115 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/input-transform-streaming.ts +39 -0
- 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 +443 -61
- package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
- package/node_modules/@earendil-works/pi-tui/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +24 -83
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js +7 -55
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +7 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +12 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +1 -1
- 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 +34 -7
- 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 +33 -10
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +172 -37
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +6 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.js +27 -15
- package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts +25 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js +96 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/node_modules/@entelligentsia/forge-compress/LICENSE +21 -0
- package/node_modules/@entelligentsia/forge-compress/README.md +85 -0
- package/node_modules/@entelligentsia/forge-compress/dist/compressor.d.ts +6 -0
- package/node_modules/@entelligentsia/forge-compress/dist/compressor.js +137 -0
- package/node_modules/@entelligentsia/forge-compress/dist/entropy.d.ts +3 -0
- package/node_modules/@entelligentsia/forge-compress/dist/entropy.js +99 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/entity.d.ts +8 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/entity.js +149 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/index.d.ts +7 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/index.js +4 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/markdown.d.ts +5 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/markdown.js +92 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/query.d.ts +7 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/query.js +60 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/validate.d.ts +1 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/validate.js +82 -0
- package/node_modules/@entelligentsia/forge-compress/dist/index.d.ts +6 -0
- package/node_modules/@entelligentsia/forge-compress/dist/index.js +5 -0
- package/node_modules/@entelligentsia/forge-compress/dist/progressive.d.ts +1 -0
- package/node_modules/@entelligentsia/forge-compress/dist/progressive.js +108 -0
- package/node_modules/@entelligentsia/forge-compress/dist/strip.d.ts +4 -0
- package/node_modules/@entelligentsia/forge-compress/dist/strip.js +55 -0
- package/node_modules/@entelligentsia/forge-compress/dist/tokens.d.ts +2 -0
- package/node_modules/@entelligentsia/forge-compress/dist/tokens.js +17 -0
- package/node_modules/@entelligentsia/forge-compress/package.json +45 -0
- package/node_modules/@entelligentsia/forge-compress/src/__tests__/compress.test.ts +409 -0
- package/node_modules/@entelligentsia/forge-compress/src/compressor.ts +147 -0
- package/node_modules/@entelligentsia/forge-compress/src/entropy.ts +105 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/entity.ts +184 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/index.ts +10 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/markdown.ts +122 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/query.ts +105 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/validate.ts +86 -0
- package/node_modules/@entelligentsia/forge-compress/src/index.ts +22 -0
- package/node_modules/@entelligentsia/forge-compress/src/progressive.ts +123 -0
- package/node_modules/@entelligentsia/forge-compress/src/strip.ts +58 -0
- package/node_modules/@entelligentsia/forge-compress/src/tokens.ts +19 -0
- package/node_modules/@mariozechner/clipboard/Cargo.toml +3 -3
- package/node_modules/@mariozechner/clipboard/index.d.ts +34 -20
- package/node_modules/@mariozechner/clipboard/index.js +546 -257
- package/node_modules/@mariozechner/clipboard/package.json +5 -6
- package/node_modules/@mariozechner/clipboard/package.json.prepack-backup +14 -14
- package/node_modules/@mariozechner/clipboard/src/lib.rs +4 -9
- package/node_modules/@mariozechner/clipboard-linux-x64-gnu/clipboard.linux-x64-gnu.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-gnu/package.json +2 -2
- package/package.json +11 -16
- package/dist/forge-payload/.base-pack/commands/quiz-agent.md +0 -6
- package/dist/forge-payload/.base-pack/commands/retrospective.md +0 -6
- package/dist/forge-payload/.base-pack/commands/sprint-intake.md +0 -6
- package/dist/forge-payload/.base-pack/commands/sprint-plan.md +0 -6
- package/dist/forge-payload/commands/calibrate.md +0 -10
- package/dist/forge-payload/commands/materialize.md +0 -119
- package/dist/forge-payload/commands/migrate.md +0 -12
- package/dist/forge-payload/commands/quiz-agent.md +0 -6
- package/dist/forge-payload/commands/regenerate.md +0 -6
- package/dist/forge-payload/commands/store-query.md +0 -6
- package/dist/forge-payload/commands/store-repair.md +0 -6
- package/dist/forge-payload/commands/update-tools.md +0 -10
- package/dist/forge-payload/meta/templates/meta-retrospective.md +0 -28
- package/dist/forge-payload/tools/prompts/sprint-plan-prompt.md +0 -70
- package/dist/forge-payload/tools/schemas/task-list.schema.json +0 -53
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +0 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +0 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +0 -20
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +0 -92
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +0 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +0 -42
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +0 -10
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +0 -31
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +0 -30
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +0 -170
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +0 -26
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +0 -90
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +0 -1
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/clipboard.linux-x64-musl.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
|
@@ -1,4 +1,76 @@
|
|
|
1
1
|
{
|
|
2
|
+
"1.0.9": {
|
|
3
|
+
"version": "1.0.10",
|
|
4
|
+
"date": "2026-05-31",
|
|
5
|
+
"notes": "v1.0.10 — set-summary self-resolve hardening. When the JSON file is omitted, set-summary/set-bug-summary resolve the CANONICAL sidecar name (e.g. VALIDATION-SUMMARY.json) from the phase→kind map. If that file is missing but a near-name summary sidecar exists in the same dir (e.g. an agent wrote VALIDATE-SUMMARY.json via the Write tool instead of forge_artifact's canonical name), the error now surfaces the near-name file and points at the canonical write path (forge_artifact artifact:\"<kind>\"), instead of a silent 'file not found' dead-end. Surfaced by cartographer CART-S01-T01 validate, where the QA subagent wrote a non-canonical sidecar and the verdict never reached the store (orchestrator then correctly escalated via read-verdict). No behavior change when the canonical file is present.",
|
|
6
|
+
"target": "tools:store-cli",
|
|
7
|
+
"regenerate": ["tools"],
|
|
8
|
+
"breaking": false,
|
|
9
|
+
"manual": ["Run /forge:update to copy the updated tools into your project."]
|
|
10
|
+
},
|
|
11
|
+
"1.0.8": {
|
|
12
|
+
"version": "1.0.9",
|
|
13
|
+
"date": "2026-05-31",
|
|
14
|
+
"notes": "v1.0.9 — store-cli suggestion drift-map: add create→write. Agents reach for REST-style `create <entity>`, but store-cli has no `create` verb (records are written with `write`), and create→write is beyond Levenshtein ≤2 so only the curated drift-map can surface it. `store-cli create sprint` now emits `Unknown command: create (Did you mean \"write\"?)`. Pure error-message UX improvement; no behavior change for valid commands. Observed on cartographer sprint-init dogfooding.",
|
|
15
|
+
"target": "tools:store-cli",
|
|
16
|
+
"regenerate": ["tools"],
|
|
17
|
+
"breaking": false,
|
|
18
|
+
"manual": ["Run /forge:update to copy the updated tools into your project."]
|
|
19
|
+
},
|
|
20
|
+
"1.0.7": {
|
|
21
|
+
"version": "1.0.8",
|
|
22
|
+
"date": "2026-05-31",
|
|
23
|
+
"notes": "v1.0.8 — artifact-resolution Phase 4 (issue #111). ArtifactStore gains a backend registry: artifactStore.register(backend, impl) and per-call routing by the handle's `backend` (default 'fs'). Adding a storage backend is now implementing the six-method interface and registering it — no prompt or call-site changes (the acceptance criterion). Ships MemArtifactImpl, a complete synchronous in-memory reference backend, as the canonical template for real S3/CMS/DB providers. Per the ADR sync constraint, a networked impl is sync-bound for in-process callers and reachable async-internally only through the forge-cli subprocess surface — so no live remote backend is bundled. tools-only; no schema, workflow, or store-layout changes.",
|
|
24
|
+
"target": "tools:artifact-store",
|
|
25
|
+
"regenerate": ["tools"],
|
|
26
|
+
"breaking": false,
|
|
27
|
+
"manual": ["Run /forge:update to copy the updated tools into your project."]
|
|
28
|
+
},
|
|
29
|
+
"1.0.6": {
|
|
30
|
+
"version": "1.0.7",
|
|
31
|
+
"date": "2026-05-31",
|
|
32
|
+
"notes": "v1.0.7 — artifact-resolution Phase 3 (issue #111). Introduces the ArtifactStore/FsArtifactImpl provider seam (tools/artifact-store.cjs), mirroring the store.cjs Store/FSImpl pattern: a backend-agnostic, synchronous facade (read/write/exists/url/list/delete) delegating to a swappable impl, default-wired to the filesystem. artifact.cjs is now a thin CLI over the facade and gains exists/url/delete subcommands; entity-dir resolution moved into artifact-store.cjs (re-exported for back-compat). Records gain an optional backend-agnostic locator {backend,ref} (schemas/_defs/locator.schema.json, $ref'd from task/bug/sprint); record.path stays REQUIRED as the read-time alias (the resolver derives {backend:'fs',ref:path} when locator is absent), so legacy records work unchanged and no store rewrite is forced. Concepts docs (task.md/bug.md) updated. Materialization of locator into stored records is deferred — the alias covers it. No FSM/lifecycle or store-layout changes.",
|
|
33
|
+
"target": "tools:artifact,tools:artifact-store,schemas:task,schemas:bug,schemas:sprint",
|
|
34
|
+
"regenerate": ["tools", "schemas"],
|
|
35
|
+
"breaking": false,
|
|
36
|
+
"manual": ["Run /forge:update to copy the updated tools and schemas into your project."]
|
|
37
|
+
},
|
|
38
|
+
"1.0.5": {
|
|
39
|
+
"version": "1.0.6",
|
|
40
|
+
"date": "2026-05-31",
|
|
41
|
+
"notes": "v1.0.6 — artifact-resolution Phase 2 (issue #111). (1) The orchestrator's Verdict Detection no longer reads a markdown review artifact via the removed parse-verdict.cjs — meta-orchestrate.md was the last reference to that deleted tool, which would have crashed the verdict step. It now reads the verdict from the store record via read-verdict.cjs (--phase <role> --task|--bug <id>), branching on the stdout token; no artifact path is constructed. (2) Removed the stale verdict-source table that hard-coded {sprintDir}/{taskDir} markdown paths. (3) meta-commit reads ARCHITECT_APPROVAL by kind via forge_artifact instead of a built path; meta-collate anchors WRITEBACK-SUMMARY on the sprint record's path. (4) Documented canonical artifact addressing + the placeholder-token glossary in the store-cli-verbs fragment (rename-unsafe: tools parse the literal tokens). No schema or store-layout changes.",
|
|
42
|
+
"target": "workflows:orchestrate_task,workflows:commit,workflows:collate",
|
|
43
|
+
"regenerate": ["workflows:orchestrate_task", "workflows:commit", "workflows:collate"],
|
|
44
|
+
"breaking": false,
|
|
45
|
+
"manual": ["Run /forge:update to copy the updated workflows into your project."]
|
|
46
|
+
},
|
|
47
|
+
"1.0.4": {
|
|
48
|
+
"version": "1.0.5",
|
|
49
|
+
"date": "2026-05-31",
|
|
50
|
+
"notes": "v1.0.5 — artifact-resolution Phase 1 (issue #111). set-summary / set-bug-summary now self-resolve the phase-summary sidecar from the store record's path: the JSON file argument is optional and the call collapses to `set-summary <id> <phase>`. This fixes the 2-arg arity failure (plan-phase set-summary previously exited 1 with Usage) and removes the hand-built `engineering/sprints/{sprint}/{task}/…-SUMMARY.json` paths from the implement/validate/approve/bug-triage workflows, which broke on non-default on-disk layouts. New canonical kind registry tools/lib/artifact-kinds.cjs (ARTIFACT_CATALOG + bug-mode overrides + phase→kind map) is now the single source consumed by artifact.cjs and store-cli.cjs. No schema or store-layout changes; the explicit jsonFile form remains accepted for back-compat.",
|
|
51
|
+
"target": "tools:store-cli,tools:artifact,tools:artifact-kinds,workflows:implement_plan,workflows:validate_task,workflows:approve_task,workflows:triage",
|
|
52
|
+
"regenerate": ["tools", "workflows:implement_plan", "workflows:validate_task", "workflows:approve_task", "workflows:triage"],
|
|
53
|
+
"breaking": false,
|
|
54
|
+
"manual": ["Run /forge:update to copy the updated tools and workflows into your project."]
|
|
55
|
+
},
|
|
56
|
+
"1.0.3": {
|
|
57
|
+
"version": "1.0.4",
|
|
58
|
+
"date": "2026-05-30",
|
|
59
|
+
"notes": "v1.0.4 — two store/path tool fixes. (1) preflight-gate.cjs now derives {sprint}/{task} from the store record's task.path instead of reconstructing sprints/{sprintId}/{taskId}/, fixing false 'artifact missing' halts on projects whose on-disk layout differs from the default (legacy sprint_NN_*/tasks/ trees and tasks/-nested dirs). (2) The store-query NLP path no longer degrades an explicit-ID query into a full-store scan: the parser keeps primary=tasks when a follow-word ('with sprint'/'with feature') accompanies an anchored task ID, and the engine re-routes a stripped anchored ID to its entity and applies a default result cap (new 'truncated' flag) so unbounded listings never dump the whole store. No schema, workflow, or store-layout changes.",
|
|
60
|
+
"target": "tools:preflight-gate,tools:store-query",
|
|
61
|
+
"regenerate": ["tools"],
|
|
62
|
+
"breaking": false,
|
|
63
|
+
"manual": ["Run /forge:update to copy the updated tools into your project."]
|
|
64
|
+
},
|
|
65
|
+
"1.0.2": {
|
|
66
|
+
"version": "1.0.3",
|
|
67
|
+
"date": "2026-05-28",
|
|
68
|
+
"notes": "v1.0.3 — FORGE-BUG-040 (GH-110) fix. /forge:fix-bug now runs each phase as a phase-scoped subagent: triage uses the new triage.md workflow, plan-fix uses plan_task.md (bug-mode), implement uses implement_plan.md (bug-mode). Previously all three pointed at fix_bug.md (orchestrator-only body), causing the triage subagent to execute the entire lifecycle in one phase. Bug schema, transitions, and store layout are unchanged.",
|
|
69
|
+
"target": "workflows:triage,workflows:fix_bug",
|
|
70
|
+
"regenerate": ["workflows:triage", "workflows:fix_bug"],
|
|
71
|
+
"breaking": false,
|
|
72
|
+
"manual": []
|
|
73
|
+
},
|
|
2
74
|
"1.0.1": {
|
|
3
75
|
"version": "1.0.2",
|
|
4
76
|
"date": "2026-05-27",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"createdAt": { "type": "string", "format": "date-time" },
|
|
21
21
|
"completedAt": { "type": "string", "format": "date-time" },
|
|
22
22
|
"path": { "type": "string" },
|
|
23
|
+
"locator": { "$ref": "_defs/locator.schema.json" },
|
|
23
24
|
"humanEstimates": { "type": "object" },
|
|
24
25
|
"features": { "type": "array", "items": { "type": "string" } }
|
|
25
26
|
},
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
]
|
|
20
20
|
},
|
|
21
21
|
"path": { "type": "string" },
|
|
22
|
+
"locator": { "$ref": "_defs/locator.schema.json" },
|
|
22
23
|
"estimate": { "type": "string", "enum": ["S", "M", "L", "XL"] },
|
|
23
24
|
"dependencies": { "type": "array", "items": { "type": "string" } },
|
|
24
25
|
"knowledgeUpdates": { "type": "array" },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
3
|
-
"generated": "2026-05-
|
|
2
|
+
"version": "1.0.10",
|
|
3
|
+
"generated": "2026-05-31",
|
|
4
4
|
"note": "Tamper-evident only. Authoritative source: /forge:update from remote.",
|
|
5
5
|
"files": {
|
|
6
6
|
"commands/add-pipeline.md": "529a2fc01be49815efa2cf1147528827ff1bfc12ce2ac8663b5a3a9781f8682e",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"schemas/transitions/bug.json": "27b17da42d1cebffbd4f61ab3dcd432a0017aa71997d548ed80d22c2fc3fad6a",
|
|
30
30
|
"schemas/transitions/sprint.json": "2e0a629396e687b0ca88e1814ac3e35d84533a5d55b25237ab67feddce3c9deb",
|
|
31
31
|
"schemas/transitions/task.json": "4c71849747baa0d585756e57c56325ff6219c078178374e60815dff91e25e3e7",
|
|
32
|
-
"schemas/enum-catalog.json": "
|
|
32
|
+
"schemas/enum-catalog.json": "fe6c4b9d0b326a22ccbe2d2e6b8ea81c4f81ea827b9b46507a214cbeffcd45d3",
|
|
33
33
|
"tools/verify-integrity.cjs": "3ec3c970dd3d7c3001f8f373bcc40556803eadd2fc2afafb14f1c232cba4cc3f"
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
## Forge Tool Discipline
|
|
2
2
|
|
|
3
3
|
All forge_* tools wrap local .cjs scripts via direct exec — deterministic, no LLM,
|
|
4
|
-
no agent loop.
|
|
4
|
+
no agent loop. Use them for all Forge-managed data — never bypass with god tools.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
### Data boundaries — off-limits to `read`, `cat`, `bash`, `grep`
|
|
7
|
+
|
|
8
|
+
These paths contain Forge-managed data. Never access them with generic tools.
|
|
9
|
+
|
|
10
|
+
| Path | Owned by | Use instead |
|
|
11
|
+
|------|----------|-------------|
|
|
12
|
+
| `.forge/store/**` | Store | `forge_store`, `forge_store_query` |
|
|
13
|
+
| `{paths.engineering}/**/` task/bug/sprint dirs | Artifacts | `forge_artifact read` (covers all 15 artifact types) |
|
|
14
|
+
| `{paths.engineering}/**/INDEX.md` | KB | `forge_store_query` or `forge_collate` |
|
|
15
|
+
| `{paths.engineering}/MASTER_INDEX.md` | KB | `forge_store_query` or `forge_collate` |
|
|
16
|
+
|
|
17
|
+
`{paths.engineering}` is the project's KB folder name from `.forge/config.json`
|
|
18
|
+
(default: `engineering`). Never hardcode it.
|
|
19
|
+
|
|
20
|
+
Source files (`.py`, `.ts`, `.js`, etc.), persona `.md`, workflow `.md`, and
|
|
21
|
+
project config outside `.forge/store/` are fine to `read`/`grep` directly.
|
|
22
|
+
|
|
23
|
+
### Tool routing
|
|
24
|
+
|
|
25
|
+
- **Store CRUD:** call `forge_store` (named tool). Canonical write is 2-positional:
|
|
7
26
|
`{command:"write", args:["<entity>","<json>"]}`. The id lives INSIDE the json
|
|
8
27
|
(e.g. `{"sprintId":"X-S01","title":"...","status":"planning","taskIds":[],"createdAt":"..."}`).
|
|
9
28
|
DO NOT pass id as a separate arg — `["sprint","X-S01","<json>"]` (3-arg) FAILS.
|
|
@@ -32,14 +32,29 @@ Notes for subagents:
|
|
|
32
32
|
The three-arg form `update-status task {taskId} {value}` is WRONG and will
|
|
33
33
|
error. Always include `status` between the id and the value.
|
|
34
34
|
- **`emit`** appends an event. There is no `append-event` / `add-event`.
|
|
35
|
-
- **`set-summary
|
|
36
|
-
|
|
35
|
+
- **`set-summary <id> <phase>`** / **`set-bug-summary <id> <phase>`** link a
|
|
36
|
+
phase summary onto the entity record. The JSON-file argument is **optional**:
|
|
37
|
+
when omitted, the sidecar is auto-resolved from the record's `path` plus the
|
|
38
|
+
canonical phase→filename map (so `set-summary {taskId} validation` just works).
|
|
39
|
+
Never pass a hand-built `engineering/sprints/.../…-SUMMARY.json` path. Do not
|
|
40
|
+
inline summaries into the entity via `write`.
|
|
37
41
|
- **Artifact I/O:** Use `forge_artifact` for ALL phase artifact reads and writes
|
|
38
42
|
(PLAN.md, PROGRESS.md, *-SUMMARY.json, CODE_REVIEW.md, etc.). Never construct
|
|
39
43
|
artifact file paths manually — the tool resolves paths from entity IDs and
|
|
40
44
|
validates JSON summary schemas on write. After writing a summary JSON via
|
|
41
|
-
`forge_artifact`, link it to the store record via `forge_store set-summary
|
|
45
|
+
`forge_artifact`, link it to the store record via `forge_store set-summary {id} {phase}` (no path).
|
|
42
46
|
Example: `forge_artifact({ command:"write", entity:"task", entityId:"{taskId}", artifact:"progress", content:"..." })`
|
|
47
|
+
- **Artifact addressing (canonical) — never reconstruct a path.** Address an
|
|
48
|
+
artifact by `(entity, entityId, kind)` via `forge_artifact`, or read the
|
|
49
|
+
entity's `path` field from the store record. The on-disk directory is owned by
|
|
50
|
+
the record's `path`, NOT by any id template. Token glossary:
|
|
51
|
+
- `{sprintId}` / `{taskId}` / `{bugId}` — the **store record filenames**
|
|
52
|
+
(`.forge/store/<kind>s/<id>.json`); deterministic and safe to use as IDs.
|
|
53
|
+
- `{sprint}` / `{task}` / `{bug}` — runtime path-template substitutions used by
|
|
54
|
+
the **preflight gate**, derived from the record's `path` (not the bare ID).
|
|
55
|
+
- The engineering artifact directory always comes from `record.path`.
|
|
56
|
+
These spellings are parsed literally by tools (`preflight-gate.cjs`,
|
|
57
|
+
`collate.cjs`) — do not invent new spellings or rename them in prose.
|
|
43
58
|
- If you need a verb not on this list, run
|
|
44
59
|
`node "$FORGE_ROOT/tools/store-cli.cjs" --help` before improvising.
|
|
45
60
|
- If you supply an unknown verb, entity type, enum value, or field name,
|
|
@@ -103,15 +103,14 @@ The Architect gives final sign-off on a completed task after Supervisor approval
|
|
|
103
103
|
"artifact_ref":"ARCHITECT_APPROVAL.md"
|
|
104
104
|
}
|
|
105
105
|
```
|
|
106
|
-
- Call (task mode) — optional for tasks, since `task.status` is the canonical signal
|
|
106
|
+
- Call (task mode) — optional for tasks, since `task.status` is the canonical signal.
|
|
107
|
+
The sidecar path is auto-resolved from the record's `path` — never pass it:
|
|
107
108
|
```
|
|
108
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {taskId} approve
|
|
109
|
-
engineering/sprints/{sprint}/{task}/APPROVE-SUMMARY.json
|
|
109
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {taskId} approve
|
|
110
110
|
```
|
|
111
111
|
Or (bug mode) — REQUIRED for bugs, this is the canonical verdict signal:
|
|
112
112
|
```
|
|
113
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" set-bug-summary {bugId} approve
|
|
114
|
-
engineering/bugs/{bugDir}/APPROVE-SUMMARY.json
|
|
113
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-bug-summary {bugId} approve
|
|
115
114
|
```
|
|
116
115
|
- In bug mode, if the set-bug-summary call exits non-zero, fix the sidecar JSON and retry. Do not return without a valid summary — the downstream commit gate has no other way to read the approval verdict.
|
|
117
116
|
```
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
---
|
|
2
|
+
requirements:
|
|
3
|
+
reasoning: High
|
|
4
|
+
context: Medium
|
|
5
|
+
speed: Medium
|
|
6
|
+
audience: subagent
|
|
7
|
+
phase: triage
|
|
8
|
+
context:
|
|
9
|
+
architecture: false
|
|
10
|
+
prior_summaries: delta
|
|
11
|
+
persona: summary
|
|
12
|
+
master_index: false
|
|
13
|
+
diff_mode: false
|
|
14
|
+
deps:
|
|
15
|
+
personas: [bug-fixer]
|
|
16
|
+
skills: [bug-fixer, generic]
|
|
17
|
+
templates: []
|
|
18
|
+
sub_workflows: []
|
|
19
|
+
kb_docs: [architecture/stack.md]
|
|
20
|
+
config_fields: [commands.test, paths.engineering]
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# 🍂 Meta-Workflow: Bug Triage
|
|
24
|
+
|
|
25
|
+
## Purpose
|
|
26
|
+
|
|
27
|
+
The Bug Fixer reproduces a reported bug, confirms root cause, decides the
|
|
28
|
+
fix route (Path A short-circuit vs Path B full loop), and writes the
|
|
29
|
+
triage artifact + summary. This is the **first phase** of `/forge:fix-bug`
|
|
30
|
+
and the only phase that records the route decision read by the orchestrator
|
|
31
|
+
(`meta-fix-bug.md`) to select `phases_A` vs `phases_B`.
|
|
32
|
+
|
|
33
|
+
<!-- See _fragments/iron-laws.md for Iron Laws section structure guidance -->
|
|
34
|
+
## Iron Laws
|
|
35
|
+
|
|
36
|
+
- Reproduce the bug before deciding anything. A bug without a confirmed
|
|
37
|
+
reproduction has no business going to plan-fix or implement.
|
|
38
|
+
- Read `.forge/personas/bug-fixer.md` first; print the persona identity
|
|
39
|
+
line (emoji, name, tagline) to stdout before any other tool use.
|
|
40
|
+
- All store I/O via `forge_store` (or `node "$FORGE_ROOT/tools/store-cli.cjs"`).
|
|
41
|
+
Never edit `.forge/store/*.json` directly.
|
|
42
|
+
- **Triage NEVER writes `bug.status`.** The orchestrator (`meta-fix-bug.md`)
|
|
43
|
+
owns the `reported → triaged` and `triaged → in-progress` transitions.
|
|
44
|
+
Writing `bug.status` from this workflow violates `meta-fix-bug.md
|
|
45
|
+
§ Iron Laws #2` (parallel to `meta-review-plan.md`'s "Supervisor NEVER
|
|
46
|
+
writes entity status" rule).
|
|
47
|
+
- Triage is a **single phase**. Do NOT call `forge_preflight` with any
|
|
48
|
+
other `--phase` value. Do NOT call `forge_store update-status`,
|
|
49
|
+
`set-bug-summary` for any non-triage phase, or `forge_store emit`.
|
|
50
|
+
These are orchestrator-owned or other-phase-owned actions. The
|
|
51
|
+
phase-ownership guard in forge-cli will reject violations at the tool
|
|
52
|
+
layer, but the Iron Law names the rule.
|
|
53
|
+
|
|
54
|
+
## Store-Write Verification
|
|
55
|
+
|
|
56
|
+
<!-- See _fragments/store-write-verification.md for the canonical block content -->
|
|
57
|
+
|
|
58
|
+
## Algorithm
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
0. Pre-flight Gate Check:
|
|
63
|
+
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
64
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase triage --bug {bugId}`
|
|
65
|
+
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed.
|
|
66
|
+
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
67
|
+
- Exit 0 → continue.
|
|
68
|
+
|
|
69
|
+
1. Load Context:
|
|
70
|
+
- Read `.forge/personas/bug-fixer.md` first; print the persona identity
|
|
71
|
+
line to stdout before any other tool use.
|
|
72
|
+
- Read the bug record:
|
|
73
|
+
`forge_store({ command:"read", entity:"bug", id:"{bugId}" })`
|
|
74
|
+
- Read business domain docs relevant to the reported symptom.
|
|
75
|
+
- store-cli verbs: `read` | `list` | `write` | `emit` |
|
|
76
|
+
`update-status` | `set-summary` | `set-bug-summary` | `describe` |
|
|
77
|
+
`nlp` | `query` | `delete` — there is no `get`/`set`/`find`. See
|
|
78
|
+
`_fragments/store-cli-verbs.md` for full notes.
|
|
79
|
+
|
|
80
|
+
2. Reproduce:
|
|
81
|
+
- Construct a minimal reproduction: a failing test, a short script,
|
|
82
|
+
or a documented manual sequence that triggers the reported symptom.
|
|
83
|
+
- If reproduction cannot be achieved with the information in the bug
|
|
84
|
+
record, write what was tried in TRIAGE.md, set the route to "B"
|
|
85
|
+
(any uncertainty defaults to Path B), and continue to root-cause
|
|
86
|
+
research with the reporter's narrative as the working hypothesis.
|
|
87
|
+
|
|
88
|
+
3. Root-Cause Research:
|
|
89
|
+
- Read the code paths implicated by the reproduction.
|
|
90
|
+
- Confirm (or revise) the reporter's stated root cause via direct
|
|
91
|
+
inspection of source files and tests.
|
|
92
|
+
- Note collateral damage: which other call sites, schemas, or
|
|
93
|
+
workflows share the defective shape.
|
|
94
|
+
|
|
95
|
+
4. Path A / Path B Eligibility:
|
|
96
|
+
- Apply the criteria in § "Path A / Path B Eligibility" below.
|
|
97
|
+
- Record the route decision and the explicit enumeration of each
|
|
98
|
+
criterion in the findings section of the triage summary.
|
|
99
|
+
|
|
100
|
+
5. Write Triage Artifacts:
|
|
101
|
+
- Write the triage artifact (markdown narrative):
|
|
102
|
+
`forge_artifact({ command:"write", entity:"bug", entityId:"{bugId}",
|
|
103
|
+
artifact:"triage", content:"<markdown>" })`
|
|
104
|
+
- Write the triage-summary sidecar (JSON shape below):
|
|
105
|
+
`forge_artifact({ command:"write", entity:"bug", entityId:"{bugId}",
|
|
106
|
+
artifact:"triage-summary", content:"<JSON>" })`
|
|
107
|
+
|
|
108
|
+
6. Finalize:
|
|
109
|
+
- **No status write.** The orchestrator (`meta-fix-bug.md`) writes the
|
|
110
|
+
`reported → triaged` and `triaged → in-progress` transitions on
|
|
111
|
+
return. Writing `bug.status` from this workflow is forbidden by
|
|
112
|
+
Iron Laws above and is rejected by the phase-ownership guard.
|
|
113
|
+
- **Do NOT emit a phase event yourself.** The orchestrator owns event
|
|
114
|
+
emission — it composes the canonical event from runtime telemetry
|
|
115
|
+
(model, provider, tokens, wall times) plus the SUMMARY you write
|
|
116
|
+
in the next step.
|
|
117
|
+
|
|
118
|
+
7. Emit Summary Sidecar:
|
|
119
|
+
- The JSON written in step 5 MUST have this shape (the `route` field
|
|
120
|
+
is required; allowed values: `"A"` or `"B"`):
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"objective": "Triage FORGE-BUG-NNN — reproduce, locate, decide route.",
|
|
125
|
+
"key_changes": ["<up to 12 bullets, 200 chars each — findings or actions>"],
|
|
126
|
+
"findings": [
|
|
127
|
+
"Root cause: <one line>",
|
|
128
|
+
"Reproduction: <one line>",
|
|
129
|
+
"Route decision: A | B",
|
|
130
|
+
"Rationale: <one line>"
|
|
131
|
+
],
|
|
132
|
+
"verdict": "n/a",
|
|
133
|
+
"written_at": "<current ISO 8601 timestamp>",
|
|
134
|
+
"artifact_ref":"TRIAGE.md",
|
|
135
|
+
"route": "A"
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
- Call:
|
|
140
|
+
```
|
|
141
|
+
forge_store({ command:"set-bug-summary", entity:"bug",
|
|
142
|
+
id:"{bugId}", phase:"triage" })
|
|
143
|
+
// sidecar path auto-resolved from the bug record's `path` — never pass it
|
|
144
|
+
```
|
|
145
|
+
- If the set-bug-summary call exits non-zero, fix the sidecar JSON
|
|
146
|
+
and retry (up to 3 attempts per the Store-Write Verification rule).
|
|
147
|
+
Do not proceed without a valid summary.
|
|
148
|
+
|
|
149
|
+
> **Field-naming caution — runtime-tested.** The route field is named
|
|
150
|
+
> `route`, never `path`. The bug schema's top-level `path` field is the
|
|
151
|
+
> bug's **artifact directory** (e.g. `engineering/bugs/EMG-BUG-001-...`).
|
|
152
|
+
> Conflating the two caused EMBERGLOW-BUG-001 (v0.44.0 first run) to land
|
|
153
|
+
> its `TRIAGE.md` under `.forge/store/bugs/` instead of `engineering/bugs/`.
|
|
154
|
+
> Triage MUST NOT touch `bug.path` — that field is set at bug creation
|
|
155
|
+
> and never modified by triage.
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Path A / Path B Eligibility
|
|
159
|
+
|
|
160
|
+
Path A is **eligible only when ALL** of the following hold. The triage
|
|
161
|
+
summary `findings` array MUST enumerate each criterion explicitly with a
|
|
162
|
+
pass/fail mark, so reviewers can audit the decision:
|
|
163
|
+
|
|
164
|
+
- `bug.severity ∈ {minor}`
|
|
165
|
+
- Fix is contained in a single file
|
|
166
|
+
- Estimated diff ≤ ~20 lines (judgement call; one screen)
|
|
167
|
+
- No schema, API, migration, security, or build-system change
|
|
168
|
+
- A regression test is obvious from the reproduction script (single short
|
|
169
|
+
test case, no new fixtures, no test-harness change)
|
|
170
|
+
|
|
171
|
+
If any criterion fails, the triage subagent MUST select Path B.
|
|
172
|
+
|
|
173
|
+
**Path B is the default.** Any uncertainty resolves to Path B. It runs the
|
|
174
|
+
same plan/review/implement/review/approve/commit shape as
|
|
175
|
+
`meta-orchestrate.md`. Picking Path A under uncertainty is the documented
|
|
176
|
+
failure mode (over-eager short-circuit).
|
|
177
|
+
|
|
178
|
+
## Triage Artifact Contents (TRIAGE.md)
|
|
179
|
+
|
|
180
|
+
The narrative artifact MUST contain:
|
|
181
|
+
|
|
182
|
+
1. **Reported symptom** — one paragraph summarising the bug report.
|
|
183
|
+
2. **Reproduction** — exact steps, commands, or test case that triggers
|
|
184
|
+
the symptom; copy of the failing output.
|
|
185
|
+
3. **Root cause** — one or two paragraphs naming the defective code path,
|
|
186
|
+
schema, or workflow. Cite file paths and line numbers.
|
|
187
|
+
4. **Path A / Path B enumeration** — for each criterion above, mark
|
|
188
|
+
pass/fail with one-line evidence.
|
|
189
|
+
5. **Route decision and rationale** — the chosen route and the
|
|
190
|
+
single-sentence justification.
|
|
191
|
+
6. **Collateral findings** — any related shapes, call sites, or
|
|
192
|
+
workflows that share the defective pattern (filed as follow-ups in
|
|
193
|
+
the commit phase, not fixed here).
|
|
194
|
+
|
|
195
|
+
<!-- See _fragments/generation-instructions.md for Generation Instructions template -->
|
|
196
|
+
## Generation Instructions
|
|
197
|
+
|
|
198
|
+
- The generated `triage.md` MUST include all four markers required by
|
|
199
|
+
`forge-cli/src/extensions/forgecli/lib/manifest-checker.ts §
|
|
200
|
+
checkMaterialization`: (1) `## Store-Write Verification` heading;
|
|
201
|
+
(2) `## Iron Laws` heading; (3) literal `forge_store` token in body;
|
|
202
|
+
(4) `.forge/personas/bug-fixer.md` referenced in body.
|
|
203
|
+
- Token Reporting: `_fragments/finalize.md` — wire via `file_ref:`.
|
|
204
|
+
- Event Emission: orchestrator-owned; this workflow MUST NOT call
|
|
205
|
+
`forge_store emit` for phase events.
|
|
206
|
+
|
|
207
|
+
## Friction Emit
|
|
208
|
+
|
|
209
|
+
Emit `type:friction` `{workflow:triage, persona:bug-fixer, issue}` per
|
|
210
|
+
`_fragments/friction-emit.md`.
|
|
@@ -72,7 +72,7 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
72
72
|
|
|
73
73
|
4. Finalize:
|
|
74
74
|
- **Do NOT emit a phase event yourself.** The orchestrator (or kickoff handler) owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
75
|
-
- Write `WRITEBACK-SUMMARY.json` to the sprint directory (`engineering/sprints/{sprintId}/`
|
|
75
|
+
- Write `WRITEBACK-SUMMARY.json` to the sprint's artifact directory — use the sprint record's `path` field (read it from the store), not a reconstructed `engineering/sprints/{sprintId}/` template — with the following shape:
|
|
76
76
|
```json
|
|
77
77
|
{
|
|
78
78
|
"objective": "<one sentence — what views were regenerated>",
|
|
@@ -62,9 +62,8 @@ Seal a completed and approved task by committing its artifacts to the VCS and up
|
|
|
62
62
|
|
|
63
63
|
1. Load Context:
|
|
64
64
|
- Read the record manifest (task or bug, per entity_kind).
|
|
65
|
-
- Read ARCHITECT_APPROVAL.md
|
|
66
|
-
|
|
67
|
-
- Bug mode: `engineering/bugs/{bugDir}/ARCHITECT_APPROVAL.md`
|
|
65
|
+
- Read ARCHITECT_APPROVAL.md by kind — never construct the path:
|
|
66
|
+
`forge_artifact({ command:"read", entity:"{entity_kind}", entityId:"{record_id}", artifact:"architect-approval" })`
|
|
68
67
|
|
|
69
68
|
2. Staging:
|
|
70
69
|
- Stage all record-related artifacts and the code changes:
|
|
@@ -31,7 +31,7 @@ Phases`):
|
|
|
31
31
|
|
|
32
32
|
| Phase | Role | Persona | Workflow | Path A | Path B |
|
|
33
33
|
|---|---|---|---|---|---|
|
|
34
|
-
| triage | `triage` | bug-fixer |
|
|
34
|
+
| triage | `triage` | bug-fixer | `triage.md` | yes | yes |
|
|
35
35
|
| plan-fix | `plan` | engineer | `plan_task.md` (bug-mode) | no | yes |
|
|
36
36
|
| review-plan | `review-plan` | supervisor | `review_plan.md` | no | yes |
|
|
37
37
|
| implement | `implement` | engineer | `implement_plan.md` (bug-mode) | yes | yes |
|
|
@@ -101,24 +101,11 @@ The `route` field is required. Allowed values: `"A"` or `"B"`.
|
|
|
101
101
|
> Triage subagents MUST NOT touch `bug.path` — that field is set at bug
|
|
102
102
|
> creation and never modified by triage.
|
|
103
103
|
|
|
104
|
-
### Path A
|
|
104
|
+
### Path A / Path B eligibility
|
|
105
105
|
|
|
106
|
-
Path A
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- `bug.severity ∈ {minor}`
|
|
110
|
-
- Fix is contained in a single file
|
|
111
|
-
- Estimated diff ≤ ~20 lines (judgement call; one screen)
|
|
112
|
-
- No schema, API, migration, security, or build-system change
|
|
113
|
-
- A regression test is obvious from the reproduction script (single short
|
|
114
|
-
test case, no new fixtures, no test-harness change)
|
|
115
|
-
|
|
116
|
-
If any criterion fails, the triage subagent MUST select Path B.
|
|
117
|
-
|
|
118
|
-
### Path B — full loop (default)
|
|
119
|
-
|
|
120
|
-
Path B runs the same plan/review/implement/review/approve/commit shape as
|
|
121
|
-
`meta-orchestrate.md`. It is the default. Any uncertainty defaults Path B.
|
|
106
|
+
See `triage.md § Path A / Path B Eligibility` for the criteria the triage
|
|
107
|
+
subagent applies. The criteria are single-sourced in the triage workflow;
|
|
108
|
+
this orchestrator only reads the resulting `summaries.triage.route` value.
|
|
122
109
|
|
|
123
110
|
### Pipeline selection by path
|
|
124
111
|
|
|
@@ -164,16 +151,11 @@ Differences are confined to the **triage** step and the **path branch**.
|
|
|
164
151
|
b. If .forge/store/bugs/{BUG_ID}.json does NOT exist, write a fresh record
|
|
165
152
|
via store-cli with status="reported".
|
|
166
153
|
c. Read the now-guaranteed record.
|
|
167
|
-
- Spawn the triage subagent (persona: bug-fixer).
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
forge_artifact({ command:"write", entity:"bug", entityId:"{bugId}", artifact:"triage", content:"<markdown>" })
|
|
173
|
-
• Write triage-summary artifact (JSON shape documented in § Triage Judgement):
|
|
174
|
-
forge_artifact({ command:"write", entity:"bug", entityId:"{bugId}", artifact:"triage-summary", content:"<JSON>" })
|
|
175
|
-
• Call set-bug-summary {bugId} triage via forge_store:
|
|
176
|
-
forge_store({ command:"set-bug-summary", bugId:"{bugId}", phase:"triage", file:"TRIAGE-SUMMARY.json" })
|
|
154
|
+
- Spawn the triage subagent (workflow: `triage.md`, persona: bug-fixer).
|
|
155
|
+
It MUST write `TRIAGE.md` + `TRIAGE-SUMMARY.json` with a `route` field
|
|
156
|
+
(`"A"` or `"B"`) and call `set-bug-summary {bugId} triage` per
|
|
157
|
+
`triage.md`. The triage workflow is `audience: subagent`, `phase: triage`;
|
|
158
|
+
the orchestrator MUST NOT pass any other workflow body to this subagent.
|
|
177
159
|
- On return, orchestrator transitions status:
|
|
178
160
|
store-cli update-status bug {bugId} status triaged
|
|
179
161
|
store-cli update-status bug {bugId} status in-progress
|
|
@@ -96,9 +96,10 @@ The Engineer implements the approved plan: write code, run tests, verify, and do
|
|
|
96
96
|
JSON shape: `{"objective":"<one sentence>", "key_changes":["<up to 12 bullets>"], "verdict":"n/a", "written_at":"<ISO 8601>", "artifact_ref":"PROGRESS.md"}`
|
|
97
97
|
The tool validates required fields automatically — fix and retry if it rejects.
|
|
98
98
|
- Then link sidecar to store (task mode):
|
|
99
|
-
`forge_store({ command:"set-summary", args:["{taskId}", "implementation"
|
|
99
|
+
`forge_store({ command:"set-summary", args:["{taskId}", "implementation"] })`
|
|
100
100
|
Or (bug mode):
|
|
101
|
-
`forge_store({ command:"set-bug-summary", args:["{bugId}", "implementation"
|
|
101
|
+
`forge_store({ command:"set-bug-summary", args:["{bugId}", "implementation"] })`
|
|
102
|
+
The sidecar path is auto-resolved from the record's `path` — never pass it.
|
|
102
103
|
```
|
|
103
104
|
|
|
104
105
|
<!-- See _fragments/iron-laws.md for Iron Laws section structure guidance -->
|