@entelligentsia/forgecli 0.10.0 → 0.11.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 +95 -0
- package/README.md +21 -3
- package/dist/CHANGELOG-forge-plugin.md +90 -0
- package/dist/bin/config.js +6 -0
- package/dist/bin/config.js.map +1 -1
- package/dist/extensions/forgecli/add-pipeline.d.ts +19 -0
- package/dist/extensions/forgecli/add-pipeline.js +143 -0
- package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/add-task.d.ts +20 -0
- package/dist/extensions/forgecli/add-task.js +154 -0
- package/dist/extensions/forgecli/add-task.js.map +1 -0
- package/dist/extensions/forgecli/calibrate.d.ts +61 -0
- package/dist/extensions/forgecli/calibrate.js +488 -0
- package/dist/extensions/forgecli/calibrate.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.d.ts +9 -1
- package/dist/extensions/forgecli/fix-bug.js +155 -45
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-commands.js +15 -22
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +16 -1
- package/dist/extensions/forgecli/forge-subagent.js +45 -8
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-update-command.d.ts +9 -0
- package/dist/extensions/forgecli/forge-update-command.js +106 -7
- package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
- package/dist/extensions/forgecli/health-check.d.ts +22 -1
- package/dist/extensions/forgecli/health-check.js +177 -4
- package/dist/extensions/forgecli/health-check.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +25 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +104 -9
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/hooks/check-update.d.ts +81 -0
- package/dist/extensions/forgecli/hooks/check-update.js +308 -0
- package/dist/extensions/forgecli/hooks/check-update.js.map +1 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.d.ts +32 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.js +119 -0
- package/dist/extensions/forgecli/hooks/forge-permissions.js.map +1 -0
- package/dist/extensions/forgecli/hooks/triage-error.d.ts +23 -0
- package/dist/extensions/forgecli/hooks/triage-error.js +62 -0
- package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -0
- package/dist/extensions/forgecli/hooks/write-guard.d.ts +28 -0
- package/dist/extensions/forgecli/hooks/write-guard.js +225 -0
- package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -0
- package/dist/extensions/forgecli/index.js +60 -0
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/init-context.d.ts +1 -1
- package/dist/extensions/forgecli/init-context.js +21 -6
- package/dist/extensions/forgecli/init-context.js.map +1 -1
- package/dist/extensions/forgecli/materialize.d.ts +16 -0
- package/dist/extensions/forgecli/materialize.js +195 -0
- package/dist/extensions/forgecli/materialize.js.map +1 -0
- package/dist/extensions/forgecli/migrate.d.ts +19 -0
- package/dist/extensions/forgecli/migrate.js +258 -0
- package/dist/extensions/forgecli/migrate.js.map +1 -0
- package/dist/extensions/forgecli/migration-engine.d.ts +111 -0
- package/dist/extensions/forgecli/migration-engine.js +533 -0
- package/dist/extensions/forgecli/migration-engine.js.map +1 -0
- package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
- package/dist/extensions/forgecli/quiz-agent.js +98 -0
- package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
- package/dist/extensions/forgecli/remove-command.d.ts +17 -0
- package/dist/extensions/forgecli/remove-command.js +124 -0
- package/dist/extensions/forgecli/remove-command.js.map +1 -0
- package/dist/extensions/forgecli/report-bug.d.ts +25 -0
- package/dist/extensions/forgecli/report-bug.js +159 -0
- package/dist/extensions/forgecli/report-bug.js.map +1 -0
- package/dist/extensions/forgecli/retrospective.d.ts +19 -0
- package/dist/extensions/forgecli/retrospective.js +156 -0
- package/dist/extensions/forgecli/retrospective.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.js +36 -3
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +9 -1
- package/dist/extensions/forgecli/run-task.js +66 -13
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +40 -2
- package/dist/extensions/forgecli/session-registry.js +71 -1
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/status-command.d.ts +19 -0
- package/dist/extensions/forgecli/status-command.js +140 -0
- package/dist/extensions/forgecli/status-command.js.map +1 -0
- package/dist/extensions/forgecli/store-query.d.ts +22 -0
- package/dist/extensions/forgecli/store-query.js +107 -0
- package/dist/extensions/forgecli/store-query.js.map +1 -0
- package/dist/extensions/forgecli/store-repair.d.ts +17 -0
- package/dist/extensions/forgecli/store-repair.js +123 -0
- package/dist/extensions/forgecli/store-repair.js.map +1 -0
- package/dist/extensions/forgecli/test-orchestrate.js +1 -0
- package/dist/extensions/forgecli/test-orchestrate.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.js +286 -41
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/transition-guard.js +7 -2
- package/dist/extensions/forgecli/transition-guard.js.map +1 -1
- package/dist/extensions/forgecli/update-tools.d.ts +23 -0
- package/dist/extensions/forgecli/update-tools.js +136 -0
- package/dist/extensions/forgecli/update-tools.js.map +1 -0
- package/dist/extensions/forgecli/viewport-events.js +10 -0
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +18 -0
- package/dist/extensions/forgecli/viewport-renderer.js +27 -0
- package/dist/extensions/forgecli/viewport-renderer.js.map +1 -1
- package/dist/extensions/forgecli/viewport-theme.js +4 -0
- package/dist/extensions/forgecli/viewport-theme.js.map +1 -1
- package/dist/extensions/forgecli/whats-new-widget.d.ts +13 -8
- package/dist/extensions/forgecli/whats-new-widget.js +111 -42
- package/dist/extensions/forgecli/whats-new-widget.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +29 -3
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +15 -8
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +327 -185
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +18 -10
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +15 -9
- package/dist/forge-payload/.base-pack/workflows/review_code.md +14 -6
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +18 -10
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/bug.schema.json +3 -2
- package/dist/forge-payload/.schemas/config.schema.json +83 -0
- package/dist/forge-payload/.schemas/migrations.json +2049 -0
- package/dist/forge-payload/commands/regenerate.md +17 -1
- package/dist/forge-payload/meta/personas/README.md +16 -0
- package/dist/forge-payload/meta/personas/meta-architect.md +70 -0
- package/dist/forge-payload/meta/personas/meta-bug-fixer.md +73 -0
- package/dist/forge-payload/meta/personas/meta-collator.md +72 -0
- package/dist/forge-payload/meta/personas/meta-engineer.md +70 -0
- package/dist/forge-payload/meta/personas/meta-orchestrator.md +71 -0
- package/dist/forge-payload/meta/personas/meta-product-manager.md +82 -0
- package/dist/forge-payload/meta/personas/meta-qa-engineer.md +91 -0
- package/dist/forge-payload/meta/personas/meta-supervisor.md +92 -0
- package/dist/forge-payload/meta/skill-recommendations.md +154 -0
- package/dist/forge-payload/meta/skills/meta-architect-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-bug-fixer-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-collator-skills.md +41 -0
- package/dist/forge-payload/meta/skills/meta-engineer-skills.md +43 -0
- package/dist/forge-payload/meta/skills/meta-generic-skills.md +58 -0
- package/dist/forge-payload/meta/skills/meta-qa-engineer-skills.md +46 -0
- package/dist/forge-payload/meta/skills/meta-supervisor-skills.md +43 -0
- package/dist/forge-payload/meta/store-schema/bug.schema.md +71 -0
- package/dist/forge-payload/meta/store-schema/event.schema.md +76 -0
- package/dist/forge-payload/meta/store-schema/feature.schema.md +65 -0
- package/dist/forge-payload/meta/store-schema/sprint.schema.md +64 -0
- package/dist/forge-payload/meta/store-schema/task.schema.md +78 -0
- package/dist/forge-payload/meta/templates/meta-code-review.md +26 -0
- package/dist/forge-payload/meta/templates/meta-plan-review.md +28 -0
- package/dist/forge-payload/meta/templates/meta-plan.md +28 -0
- package/dist/forge-payload/meta/templates/meta-progress.md +25 -0
- package/dist/forge-payload/meta/templates/meta-retrospective.md +28 -0
- package/dist/forge-payload/meta/templates/meta-sprint-manifest.md +26 -0
- package/dist/forge-payload/meta/templates/meta-sprint-requirements.md +91 -0
- package/dist/forge-payload/meta/templates/meta-task-prompt.md +26 -0
- package/dist/forge-payload/meta/tool-specs/collate.spec.md +88 -0
- package/dist/forge-payload/meta/tool-specs/generation-manifest.spec.md +139 -0
- package/dist/forge-payload/meta/tool-specs/manage-config.spec.md +143 -0
- package/dist/forge-payload/meta/tool-specs/seed-store.spec.md +91 -0
- package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +328 -0
- package/dist/forge-payload/meta/tool-specs/validate-store.spec.md +191 -0
- package/dist/forge-payload/meta/workflows/_fragments/context-injection.md +75 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +73 -0
- package/dist/forge-payload/meta/workflows/_fragments/finalize.md +13 -0
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +73 -0
- package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +38 -0
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +39 -0
- package/dist/forge-payload/meta/workflows/meta-approve.md +119 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +89 -0
- package/dist/forge-payload/meta/workflows/meta-commit.md +93 -0
- package/dist/forge-payload/meta/workflows/meta-enhance.md +286 -0
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +501 -0
- package/dist/forge-payload/meta/workflows/meta-implement.md +132 -0
- package/dist/forge-payload/meta/workflows/meta-migrate.md +455 -0
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +993 -0
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +133 -0
- package/dist/forge-payload/meta/workflows/meta-quiz-agent.md +135 -0
- package/dist/forge-payload/meta/workflows/meta-retrospective.md +65 -0
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +119 -0
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +108 -0
- package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +65 -0
- package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +147 -0
- package/dist/forge-payload/meta/workflows/meta-update-implementation.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-update-plan.md +76 -0
- package/dist/forge-payload/meta/workflows/meta-validate.md +111 -0
- package/dist/forge-payload/tools/check-structure.cjs +344 -0
- package/dist/forge-payload/tools/collate.cjs +34 -9
- package/dist/forge-payload/tools/list-skills.js +76 -0
- package/dist/forge-payload/tools/parse-gates.cjs +8 -2
- package/dist/forge-payload/tools/store-cli.cjs +56 -11
- package/dist/forge-payload/tools/store.cjs +61 -0
- package/dist/forge-payload/tools/substitute-placeholders.cjs +60 -8
- package/dist/forge-payload/tools/validate-store.cjs +6 -2
- package/dist/forge-payload/tools/verify-integrity.cjs +86 -0
- package/package.json +2 -2
|
@@ -27,7 +27,8 @@ deps:
|
|
|
27
27
|
|
|
28
28
|
0. Pre-flight Gate Check:
|
|
29
29
|
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
30
|
-
-
|
|
30
|
+
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
31
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase implement --{entity_kind} {record_id}`
|
|
31
32
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
32
33
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
33
34
|
- Exit 0 → continue.
|
|
@@ -59,15 +60,17 @@ deps:
|
|
|
59
60
|
- Tag updates: `<!-- Discovered during {TASK_ID} — {date} -->`
|
|
60
61
|
|
|
61
62
|
6. Finalize:
|
|
62
|
-
- Transitions:
|
|
63
|
-
- `planned`
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
- Transitions:
|
|
64
|
+
- **Task mode** — legal predecessors are `planned`, `plan-approved`, or `implementing`; target is `implemented`.
|
|
65
|
+
- `planned` → `implemented` (workflow-prose path — direct)
|
|
66
|
+
- `plan-approved` → `implementing` → `implemented` (supervisor-review path)
|
|
67
|
+
- Out-of-band escapes (any state): `plan-revision-required`, `code-revision-required`, `blocked`, `escalated`, `abandoned`
|
|
68
|
+
Update status: `node "$FORGE_ROOT/tools/store-cli.cjs" update-status task {taskId} status implemented`
|
|
69
|
+
- **Bug mode** — NO status write. The bug remains `in-progress` until the commit phase transitions it to `fixed`. Writing `bug.status` here violates `meta-fix-bug.md § Iron Laws #2`.
|
|
67
70
|
- **Do NOT emit a phase event yourself.** The orchestrator 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.
|
|
68
71
|
|
|
69
72
|
7. Emit Summary Sidecar:
|
|
70
|
-
- Write `IMPLEMENTATION-SUMMARY.json` to the
|
|
73
|
+
- Write `IMPLEMENTATION-SUMMARY.json` to the record's directory with the following shape:
|
|
71
74
|
```json
|
|
72
75
|
{
|
|
73
76
|
"objective": "<one sentence — what this implementation delivered>",
|
|
@@ -77,12 +80,17 @@ deps:
|
|
|
77
80
|
"artifact_ref":"PROGRESS.md"
|
|
78
81
|
}
|
|
79
82
|
```
|
|
80
|
-
- Call:
|
|
83
|
+
- Call (task mode):
|
|
81
84
|
```
|
|
82
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {
|
|
85
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {taskId} implementation \
|
|
83
86
|
engineering/sprints/{sprint}/{task}/IMPLEMENTATION-SUMMARY.json
|
|
84
87
|
```
|
|
85
|
-
|
|
88
|
+
Or (bug mode):
|
|
89
|
+
```
|
|
90
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-bug-summary {bugId} implementation \
|
|
91
|
+
engineering/bugs/{bugDir}/IMPLEMENTATION-SUMMARY.json
|
|
92
|
+
```
|
|
93
|
+
- If the set-summary call exits non-zero, fix the sidecar JSON and retry. Do not proceed without a valid summary.
|
|
86
94
|
```
|
|
87
95
|
|
|
88
96
|
## Iron Laws
|
|
@@ -27,7 +27,8 @@ deps:
|
|
|
27
27
|
|
|
28
28
|
0. Pre-flight Gate Check:
|
|
29
29
|
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
30
|
-
-
|
|
30
|
+
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
31
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase plan --{entity_kind} {record_id}`
|
|
31
32
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
32
33
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
33
34
|
- Exit 0 → continue.
|
|
@@ -64,14 +65,14 @@ deps:
|
|
|
64
65
|
- If new patterns were discovered, update architecture or business domain docs
|
|
65
66
|
|
|
66
67
|
5. Finalize:
|
|
67
|
-
- Transitions:
|
|
68
|
-
- `draft
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
- Transitions:
|
|
69
|
+
- **Task mode** — legal target from this step: `draft → planned`. Out-of-band escapes (any state): `plan-revision-required`, `code-revision-required`, `blocked`, `escalated`, `abandoned`.
|
|
70
|
+
Update status: `node "$FORGE_ROOT/tools/store-cli.cjs" update-status task {taskId} status planned`
|
|
71
|
+
- **Bug mode** — NO status write. The bug remains `in-progress` until the commit phase transitions it to `fixed`. Writing `bug.status` here violates `meta-fix-bug.md § Iron Laws #2`.
|
|
71
72
|
- **Do NOT emit a phase event yourself.** The orchestrator 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.
|
|
72
73
|
|
|
73
74
|
6. Emit Summary Sidecar:
|
|
74
|
-
- Write `PLAN-SUMMARY.json`
|
|
75
|
+
- Write `PLAN-SUMMARY.json` (task mode) or `BUG-FIX-PLAN-SUMMARY.json` (bug mode) to the record's directory. Shape:
|
|
75
76
|
```json
|
|
76
77
|
{
|
|
77
78
|
"objective": "<one sentence — what this plan sets out to build>",
|
|
@@ -81,12 +82,17 @@ deps:
|
|
|
81
82
|
"artifact_ref":"PLAN.md"
|
|
82
83
|
}
|
|
83
84
|
```
|
|
84
|
-
- Call:
|
|
85
|
+
- Call (task mode):
|
|
85
86
|
```
|
|
86
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {
|
|
87
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {taskId} plan \
|
|
87
88
|
engineering/sprints/{sprint}/{task}/PLAN-SUMMARY.json
|
|
88
89
|
```
|
|
89
|
-
|
|
90
|
+
Or (bug mode):
|
|
91
|
+
```
|
|
92
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-bug-summary {bugId} plan \
|
|
93
|
+
engineering/bugs/{bugDir}/BUG-FIX-PLAN-SUMMARY.json
|
|
94
|
+
```
|
|
95
|
+
- If the set-summary call exits non-zero, fix the sidecar JSON and retry. Do not proceed without a valid summary.
|
|
90
96
|
```
|
|
91
97
|
|
|
92
98
|
## Iron Laws
|
|
@@ -45,7 +45,8 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
45
45
|
|
|
46
46
|
0. Pre-flight Gate Check:
|
|
47
47
|
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
48
|
-
-
|
|
48
|
+
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
49
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase review-code --{entity_kind} {record_id}`
|
|
49
50
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
50
51
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
51
52
|
- Exit 0 → continue.
|
|
@@ -71,11 +72,13 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
71
72
|
- Update stack-checklist.md if new patterns or pitfalls were discovered
|
|
72
73
|
|
|
73
74
|
5. Finalize:
|
|
74
|
-
-
|
|
75
|
+
- Transitions:
|
|
76
|
+
- **Task mode** — Update status: `node "$FORGE_ROOT/tools/store-cli.cjs" update-status task {taskId} status review-approved` (if Approved) or `... status code-revision-required` (if Revision Required).
|
|
77
|
+
- **Bug mode** — NO status write. The bug remains `in-progress`. The verdict signal travels through `summaries.code_review.verdict` (read by `read-verdict.cjs § BUG_PHASE_VERDICT_SOURCE`), not `bug.status`. Writing `bug.status` here violates `meta-fix-bug.md § Iron Laws #2`.
|
|
75
78
|
- **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.
|
|
76
79
|
|
|
77
80
|
6. Emit Summary Sidecar:
|
|
78
|
-
- Write `REVIEW-IMPL-SUMMARY.json` to the
|
|
81
|
+
- Write `REVIEW-IMPL-SUMMARY.json` to the record's directory with the following shape:
|
|
79
82
|
```json
|
|
80
83
|
{
|
|
81
84
|
"objective": "<one sentence — what this review assessed>",
|
|
@@ -85,10 +88,15 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
85
88
|
"artifact_ref":"CODE_REVIEW.md"
|
|
86
89
|
}
|
|
87
90
|
```
|
|
88
|
-
- Call:
|
|
91
|
+
- Call (task mode):
|
|
89
92
|
```
|
|
90
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {
|
|
93
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {taskId} code_review \
|
|
91
94
|
engineering/sprints/{sprint}/{task}/REVIEW-IMPL-SUMMARY.json
|
|
92
95
|
```
|
|
93
|
-
|
|
96
|
+
Or (bug mode):
|
|
97
|
+
```
|
|
98
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-bug-summary {bugId} code_review \
|
|
99
|
+
engineering/bugs/{bugDir}/REVIEW-IMPL-SUMMARY.json
|
|
100
|
+
```
|
|
101
|
+
- If the set-summary call exits non-zero, fix the sidecar JSON and retry. Do not proceed without a valid summary.
|
|
94
102
|
```
|
|
@@ -46,7 +46,8 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
46
46
|
|
|
47
47
|
0. Pre-flight Gate Check:
|
|
48
48
|
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
49
|
-
-
|
|
49
|
+
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
50
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase review-plan --{entity_kind} {record_id}`
|
|
50
51
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
51
52
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
52
53
|
- Exit 0 → continue.
|
|
@@ -66,15 +67,17 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
66
67
|
- If Approved: provide any advisory notes
|
|
67
68
|
|
|
68
69
|
4. Finalize:
|
|
69
|
-
- Transitions:
|
|
70
|
-
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
- Transitions:
|
|
71
|
+
- **Task mode** — predecessor must be `planned`.
|
|
72
|
+
- Approved → `plan-approved`
|
|
73
|
+
- Revision Required → `plan-revision-required`
|
|
74
|
+
- Out-of-band escapes (any state): `code-revision-required`, `blocked`, `escalated`, `abandoned`
|
|
75
|
+
Update status: `node "$FORGE_ROOT/tools/store-cli.cjs" update-status task {taskId} status plan-approved` (if Approved) or `... status plan-revision-required` (if Revision Required)
|
|
76
|
+
- **Bug mode** — NO status write. The bug remains `in-progress`. The verdict signal travels through `summaries.review_plan.verdict` (read by `read-verdict.cjs § BUG_PHASE_VERDICT_SOURCE`), not `bug.status`. Writing `bug.status` here violates `meta-fix-bug.md § Iron Laws #2`.
|
|
74
77
|
- **Do NOT emit a phase event yourself.** The orchestrator 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
78
|
|
|
76
79
|
5. Emit Summary Sidecar:
|
|
77
|
-
- Write `REVIEW-PLAN-SUMMARY.json` to the
|
|
80
|
+
- Write `REVIEW-PLAN-SUMMARY.json` to the record's directory with the following shape:
|
|
78
81
|
```json
|
|
79
82
|
{
|
|
80
83
|
"objective": "<one sentence — what this review assessed>",
|
|
@@ -84,12 +87,17 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
84
87
|
"artifact_ref":"PLAN_REVIEW.md"
|
|
85
88
|
}
|
|
86
89
|
```
|
|
87
|
-
- Call:
|
|
90
|
+
- Call (task mode):
|
|
88
91
|
```
|
|
89
|
-
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {
|
|
92
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-summary {taskId} review_plan \
|
|
90
93
|
engineering/sprints/{sprint}/{task}/REVIEW-PLAN-SUMMARY.json
|
|
91
94
|
```
|
|
92
|
-
|
|
95
|
+
Or (bug mode):
|
|
96
|
+
```
|
|
97
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" set-bug-summary {bugId} review_plan \
|
|
98
|
+
engineering/bugs/{bugDir}/REVIEW-PLAN-SUMMARY.json
|
|
99
|
+
```
|
|
100
|
+
- If the set-summary call exits non-zero, fix the sidecar JSON and retry. Do not proceed without a valid summary.
|
|
93
101
|
```
|
|
94
102
|
|
|
95
103
|
## Generation Notes
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"title": { "type": "string" },
|
|
10
10
|
"description": { "type": "string" },
|
|
11
11
|
"severity": { "type": "string", "enum": ["critical", "major", "minor"] },
|
|
12
|
-
"status": { "type": "string", "enum": ["reported", "triaged", "in-progress", "fixed"
|
|
12
|
+
"status": { "type": "string", "enum": ["reported", "triaged", "in-progress", "fixed"] },
|
|
13
13
|
"path": { "type": "string" },
|
|
14
14
|
"rootCauseCategory": {
|
|
15
15
|
"type": "string",
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"findings": { "type": "array", "items": { "type": "string", "maxLength": 200 }, "maxItems": 12 },
|
|
48
48
|
"verdict": { "type": "string", "enum": ["approved", "revision", "n/a"] },
|
|
49
49
|
"written_at": { "type": "string", "format": "date-time" },
|
|
50
|
-
"artifact_ref":{ "type": "string", "description": "Relative path to the full artifact" }
|
|
50
|
+
"artifact_ref":{ "type": "string", "description": "Relative path to the full artifact" },
|
|
51
|
+
"route": { "type": "string", "enum": ["A", "B"], "description": "Fix-bug pipeline route decision. Only set on the triage phase summary by meta-fix-bug.md. A = short-circuit (skip plan-fix + review-plan); B = full loop (default). Optional and meaningless on non-triage phases — see meta-fix-bug.md § Triage Judgement." }
|
|
51
52
|
},
|
|
52
53
|
"additionalProperties": false
|
|
53
54
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "forge/config.schema.json",
|
|
4
|
+
"title": "ForgeConfig",
|
|
5
|
+
"description": "Schema for .forge/config.json — the per-project Forge configuration file.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["version", "project", "paths"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Config schema version (e.g. '1.0')"
|
|
12
|
+
},
|
|
13
|
+
"project": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"required": ["prefix", "name"],
|
|
16
|
+
"properties": {
|
|
17
|
+
"prefix": { "type": "string", "description": "Task ID prefix (e.g. FORGE)" },
|
|
18
|
+
"name": { "type": "string", "description": "Human-readable project name" },
|
|
19
|
+
"description": { "type": "string" }
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"stack": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"properties": {
|
|
25
|
+
"languages": { "type": "array", "items": { "type": "string" } },
|
|
26
|
+
"framework": { "type": ["string", "null"] },
|
|
27
|
+
"frontendFramework": { "type": ["string", "null"] },
|
|
28
|
+
"database": { "type": ["string", "null"] },
|
|
29
|
+
"taskQueue": { "type": ["string", "null"] },
|
|
30
|
+
"containerisation": { "type": ["string", "null"] }
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"commands": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"properties": {
|
|
36
|
+
"test": { "type": "string" },
|
|
37
|
+
"lint": { "type": "string" },
|
|
38
|
+
"syntaxCheck": {}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"paths": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"required": ["engineering", "store", "forgeRoot"],
|
|
44
|
+
"properties": {
|
|
45
|
+
"engineering": { "type": "string" },
|
|
46
|
+
"store": { "type": "string" },
|
|
47
|
+
"workflows": { "type": "string" },
|
|
48
|
+
"commands": { "type": "string" },
|
|
49
|
+
"templates": { "type": "string" },
|
|
50
|
+
"customCommands": { "type": "string" },
|
|
51
|
+
"forgeRoot": { "type": "string" },
|
|
52
|
+
"forgeRef": { "type": "string" }
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"pipeline": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"properties": {
|
|
58
|
+
"maxReviewIterations": { "type": "integer", "minimum": 1 }
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"pipelines": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"description": "Custom pipeline definitions keyed by pipeline name"
|
|
64
|
+
},
|
|
65
|
+
"installedSkills": {
|
|
66
|
+
"type": "array",
|
|
67
|
+
"items": { "type": "string" }
|
|
68
|
+
},
|
|
69
|
+
"calibrationBaseline": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"properties": {
|
|
72
|
+
"lastCalibrated": { "type": "string" },
|
|
73
|
+
"version": { "type": "string" },
|
|
74
|
+
"masterIndexHash": { "type": "string" },
|
|
75
|
+
"sprintsCovered": { "type": "array", "items": { "type": "string" } }
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"mode": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"enum": ["full", "fast"]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|