@entelligentsia/forgecli 1.0.10 → 1.0.20
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 +191 -0
- package/dist/CHANGELOG-forge-plugin.md +211 -0
- package/dist/bin/forge.js +0 -0
- package/dist/extensions/forgecli/config-layer.js.map +1 -1
- package/dist/extensions/forgecli/context-governor-compaction.d.ts +83 -0
- package/dist/extensions/forgecli/context-governor-compaction.js +302 -0
- package/dist/extensions/forgecli/context-governor-compaction.js.map +1 -0
- package/dist/extensions/forgecli/context-governor.d.ts +173 -0
- package/dist/extensions/forgecli/context-governor.js +618 -0
- package/dist/extensions/forgecli/context-governor.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/component.d.ts +105 -0
- package/dist/extensions/forgecli/dashboard/component.js +861 -0
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/register.d.ts +2 -0
- package/dist/extensions/forgecli/dashboard/register.js +31 -0
- package/dist/extensions/forgecli/dashboard/register.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/theme.d.ts +27 -0
- package/dist/extensions/forgecli/dashboard/theme.js +91 -0
- package/dist/extensions/forgecli/dashboard/theme.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/view-model.d.ts +35 -0
- package/dist/extensions/forgecli/dashboard/view-model.js +54 -0
- package/dist/extensions/forgecli/dashboard/view-model.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.js +126 -7
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js +2 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-commands.js +1 -0
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/phase4-register.js +53 -0
- package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +20 -1
- package/dist/extensions/forgecli/forge-subagent.js +23 -7
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.js +3 -1
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +3 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +37 -3
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/index.js +38 -1
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/lib/halt-advisor.d.ts +59 -0
- package/dist/extensions/forgecli/lib/halt-advisor.js +113 -0
- package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -0
- package/dist/extensions/forgecli/migration-engine.js +25 -12
- package/dist/extensions/forgecli/migration-engine.js.map +1 -1
- package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +26 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.js +213 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -0
- package/dist/extensions/forgecli/orchestrator-tree.d.ts +96 -0
- package/dist/extensions/forgecli/orchestrator-tree.js +390 -0
- package/dist/extensions/forgecli/orchestrator-tree.js.map +1 -0
- package/dist/extensions/forgecli/project-orientation.js +12 -8
- package/dist/extensions/forgecli/project-orientation.js.map +1 -1
- package/dist/extensions/forgecli/regenerate.d.ts +16 -0
- package/dist/extensions/forgecli/regenerate.js +110 -0
- package/dist/extensions/forgecli/regenerate.js.map +1 -1
- package/dist/extensions/forgecli/run-sprint.d.ts +3 -1
- package/dist/extensions/forgecli/run-sprint.js +34 -3
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +66 -1
- package/dist/extensions/forgecli/run-task.js +323 -12
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.d.ts +4 -1
- package/dist/extensions/forgecli/thread-switcher.js +118 -762
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/viewport-events.js +32 -0
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/fix-bug.md +1 -1
- package/dist/forge-payload/.base-pack/commands/run-sprint.md +1 -1
- package/dist/forge-payload/.base-pack/commands/run-task.md +1 -1
- package/dist/forge-payload/.base-pack/personas/architect.md +1 -1
- package/dist/forge-payload/.base-pack/personas/bug-fixer.md +1 -1
- package/dist/forge-payload/.base-pack/personas/collator.md +3 -3
- package/dist/forge-payload/.base-pack/personas/engineer.md +1 -1
- package/dist/forge-payload/.base-pack/personas/librarian.md +1 -1
- package/dist/forge-payload/.base-pack/personas/orchestrator.md +1 -1
- package/dist/forge-payload/.base-pack/personas/product-manager.md +1 -1
- package/dist/forge-payload/.base-pack/personas/qa-engineer.md +1 -1
- package/dist/forge-payload/.base-pack/personas/supervisor.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/progress-reporting.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +11 -2
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +6 -7
- package/dist/forge-payload/.base-pack/workflows/architect_review_sprint_completion.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/architect_sprint_intake.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/architect_sprint_plan.md +5 -5
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +4 -6
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +5 -6
- package/dist/forge-payload/.base-pack/workflows/enhance.md +5 -5
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +15 -7
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +12 -13
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +12 -6
- package/dist/forge-payload/.base-pack/workflows/review_code.md +12 -11
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +12 -11
- package/dist/forge-payload/.base-pack/workflows/sprint_retrospective.md +3 -3
- package/dist/forge-payload/.base-pack/workflows/triage.md +12 -9
- package/dist/forge-payload/.base-pack/workflows/update_implementation.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/update_plan.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +9 -9
- package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +490 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-sprint.js +416 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +608 -0
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/config.schema.json +2 -3
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/event.schema.json +16 -0
- package/dist/forge-payload/.schemas/migrations.json +359 -18
- package/dist/forge-payload/commands/health.md +29 -0
- package/dist/forge-payload/commands/rebuild.md +143 -15
- package/dist/forge-payload/commands/update.md +28 -27
- package/dist/forge-payload/hooks/preflight-session.cjs +99 -0
- package/dist/forge-payload/init/phases/phase-3-materialize.md +18 -5
- package/dist/forge-payload/integrity.json +7 -6
- package/dist/forge-payload/meta/fragments/tool-discipline.md +1 -1
- package/dist/forge-payload/meta/personas/meta-architect.md +1 -1
- package/dist/forge-payload/meta/personas/meta-bug-fixer.md +1 -1
- package/dist/forge-payload/meta/personas/meta-collator.md +7 -7
- package/dist/forge-payload/meta/personas/meta-engineer.md +1 -1
- package/dist/forge-payload/meta/personas/meta-orchestrator.md +1 -1
- package/dist/forge-payload/meta/personas/meta-supervisor.md +1 -1
- package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +2 -2
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +11 -2
- package/dist/forge-payload/meta/workflows/meta-approve.md +6 -7
- package/dist/forge-payload/meta/workflows/meta-bug-triage.md +12 -9
- package/dist/forge-payload/meta/workflows/meta-collate.md +5 -7
- package/dist/forge-payload/meta/workflows/meta-commit.md +5 -6
- package/dist/forge-payload/meta/workflows/meta-enhance.md +5 -5
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +35 -11
- package/dist/forge-payload/meta/workflows/meta-implement.md +15 -7
- package/dist/forge-payload/meta/workflows/meta-migrate.md +13 -14
- package/dist/forge-payload/meta/workflows/meta-new-sprint.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +138 -39
- package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +6 -6
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +12 -6
- package/dist/forge-payload/meta/workflows/meta-retro.md +4 -4
- package/dist/forge-payload/meta/workflows/meta-retrospective.md +4 -4
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +12 -11
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +12 -11
- package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +6 -6
- package/dist/forge-payload/meta/workflows/meta-update-implementation.md +2 -2
- package/dist/forge-payload/meta/workflows/meta-update-plan.md +2 -2
- package/dist/forge-payload/meta/workflows/meta-validate.md +9 -9
- package/dist/forge-payload/schemas/config.schema.json +2 -3
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/event.schema.json +16 -0
- package/dist/forge-payload/schemas/structure-manifest.json +75 -73
- package/dist/forge-payload/skills/refresh-kb-links/SKILL.md +14 -7
- package/dist/forge-payload/tools/banners.cjs +29 -10
- package/dist/forge-payload/tools/check-structure.cjs +88 -7
- package/dist/forge-payload/tools/collate.cjs +48 -2
- package/dist/forge-payload/tools/manage-config.cjs +5 -7
- package/dist/forge-payload/tools/parse-gates.cjs +73 -1
- package/dist/forge-payload/tools/postflight-gate.cjs +298 -0
- package/dist/forge-payload/tools/preflight-gate.cjs +47 -0
- package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -4
- package/dist/forge-payload/tools/verify-phase.cjs +17 -0
- package/package.json +2 -2
- package/dist/bin/forgecli.d.ts +0 -2
- package/dist/bin/forgecli.js +0 -6
- package/dist/bin/forgecli.js.map +0 -1
- package/dist/extensions/forgecli/config-tui/index.d.ts +0 -5
- package/dist/extensions/forgecli/config-tui/index.js +0 -5
- package/dist/extensions/forgecli/config-tui/index.js.map +0 -1
- package/dist/extensions/forgecli/loaders/persona-skill-loader.d.ts +0 -45
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js +0 -227
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +0 -1
- package/dist/extensions/forgecli/loaders/template-render.d.ts +0 -20
- package/dist/extensions/forgecli/loaders/template-render.js +0 -85
- package/dist/extensions/forgecli/loaders/template-render.js.map +0 -1
- package/dist/extensions/forgecli/loaders/workflow-loader.d.ts +0 -41
- package/dist/extensions/forgecli/loaders/workflow-loader.js +0 -164
- package/dist/extensions/forgecli/loaders/workflow-loader.js.map +0 -1
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +0 -446
- package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +0 -928
- package/dist/forge-payload/.base-pack/workflows/run_sprint.md +0 -225
|
@@ -55,8 +55,10 @@
|
|
|
55
55
|
"task-approved",
|
|
56
56
|
"task-validated",
|
|
57
57
|
"task-committed",
|
|
58
|
+
"sprint-start",
|
|
58
59
|
"sprint-complete",
|
|
59
60
|
"sprint-halted",
|
|
61
|
+
"task-dispatch",
|
|
60
62
|
"bug-fixed",
|
|
61
63
|
|
|
62
64
|
"bug-triaged", "fix-planned", "fix-review-passed", "fix-review-failed",
|
|
@@ -135,6 +137,20 @@
|
|
|
135
137
|
},
|
|
136
138
|
"then": { "required": ["bugId", "phase", "iteration"] }
|
|
137
139
|
},
|
|
140
|
+
{
|
|
141
|
+
"if": { "properties": { "type": { "const": "sprint-start" } }, "required": ["type"] },
|
|
142
|
+
"then": {
|
|
143
|
+
"required": [
|
|
144
|
+
"eventId", "sprintId", "role", "action",
|
|
145
|
+
"startTimestamp", "endTimestamp", "durationMinutes",
|
|
146
|
+
"model", "provider",
|
|
147
|
+
"taskCount"
|
|
148
|
+
],
|
|
149
|
+
"properties": {
|
|
150
|
+
"taskCount": { "type": "integer", "minimum": 0 }
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
138
154
|
{
|
|
139
155
|
"if": { "properties": { "type": { "const": "sprint-complete" } }, "required": ["type"] },
|
|
140
156
|
"then": {
|
|
@@ -1,73 +1,406 @@
|
|
|
1
1
|
{
|
|
2
|
+
"1.2.16": {
|
|
3
|
+
"version": "1.2.17",
|
|
4
|
+
"date": "2026-06-04",
|
|
5
|
+
"notes": "Fix two deterministic false-halt bugs in the S26-T19 postflight output guard, exposed on its first live firing (the guards were dormant until the v1.2.16 base-pack recompile activated them; CART-S03-T01 plan halted despite a fully successful phase). (1) Require predicates: the materialized outputs blocks use bare record paths (summaries.plan.verdict) while the gate passed state={task:record}; every bare require evaluated undefined and failed unconditionally. readField now falls back to the entity record (state.task / state.bug) after the direct walk. (2) Artifact paths: {sprint} was substituted with the bare sprintId, dropping the sprints/ segment, so artifact checks probed <engineering>/<sprintId>/<taskId> instead of <engineering>/sprints/<sprintId>/<taskId> and always reported output-missing. New buildSubstitutions() resolves {sprint} to the path segment under engineering (sprints/<id> for tasks, bugs for bug records).",
|
|
6
|
+
"target": "tools:postflight-gate",
|
|
7
|
+
"regenerate": [
|
|
8
|
+
"tools"
|
|
9
|
+
],
|
|
10
|
+
"breaking": false,
|
|
11
|
+
"manual": [
|
|
12
|
+
"Run /forge:update, then /forge:rebuild tools to re-vendor .forge/tools/postflight-gate.cjs. Without this, every phase with an outputs block halts with output-missing/require-failed despite succeeding."
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
"1.2.15": {
|
|
16
|
+
"version": "1.2.16",
|
|
17
|
+
"date": "2026-06-04",
|
|
18
|
+
"notes": "Remove phase-side review-iteration self-limiting (forge-engineering#34). The standalone-invocation fallback in the review/validate workflows read maxReviewIterations from .forge/config.json — a redundant protection layer that produced a Key-not-found error on every review phase and, worse, worked against the recovery model: loop budgeting belongs solely to the orchestrator (run-task PHASE_PIPELINE maxIterations), exhaustion escalates to a human, and a deliberate human standalone re-run IS the escape hatch for stuck items — a phase consulting its own cap can refuse exactly that. The workflows now treat user-invoked runs as iteration 1 with no limit and never read an iteration cap from config; orchestrated runs keep taking N-of-M from the Review Loop Context block injected by the orchestrator.",
|
|
19
|
+
"target": "workflows:review_plan workflows:review_code workflows:validate_task",
|
|
20
|
+
"regenerate": [
|
|
21
|
+
"workflows"
|
|
22
|
+
],
|
|
23
|
+
"breaking": false,
|
|
24
|
+
"manual": [
|
|
25
|
+
"Run /forge:update, then /forge:rebuild workflows to refresh .forge/workflows/ (review_plan.md, review_code.md, validate_task.md). Prompt-text only — no tool or schema change."
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"1.2.14": {
|
|
29
|
+
"version": "1.2.15",
|
|
30
|
+
"date": "2026-06-03",
|
|
31
|
+
"notes": "COST_REPORT now accounts incomplete (aborted/failed) phase attempts. forge-cli >=1.0.16 emits phase events with verdict aborted (user cancel) / failed (halt-on-failure) carrying the provider-billed tokens of incomplete attempts; previously those tokens were invisible (the CART-S02-T03 baseline under-counted by 259,950 tokens across two aborted plan passes — husk events with no token data). collate.cjs adds an Incomplete Passes section to COST_REPORT listing each aborted/failed attempt (task, phase, outcome, tokens); Per-Task/Per-Role/Model-Split totals already sum verdict-agnostically, so the previously-missing spend now lands in the totals automatically once events arrive.",
|
|
32
|
+
"target": "tools:collate",
|
|
33
|
+
"regenerate": [
|
|
34
|
+
"tools"
|
|
35
|
+
],
|
|
36
|
+
"breaking": false,
|
|
37
|
+
"manual": [
|
|
38
|
+
"Run /forge:update, then /forge:rebuild tools to re-vendor .forge/tools/collate.cjs. Report-layer only — no schema change; older forge-cli versions simply produce no incomplete-pass events."
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"1.2.13": {
|
|
42
|
+
"version": "1.2.14",
|
|
43
|
+
"date": "2026-06-03",
|
|
44
|
+
"notes": "Correct the set-summary / set-bug-summary call signature in the review and triage workflows. meta-review-implementation.md, meta-review-plan.md, and meta-bug-triage.md documented a forge_store invocation with named entity/id/phase fields (forge_store({ command:'set-summary', entity:'task', id:'{taskId}', phase:'code_review' })) — but the forge_store tool schema accepts only { command, args[] }. Subagents handed the non-existent named form mis-built args, landing the record id in the phase slot; the phase-ownership guard rejected it ('expected summary key code_review'), summaries.code_review was never written, and the orchestrator halted the task as 'verdict missing'. All sites now use the canonical positional form forge_store({ command:'set-summary', args:['{taskId}', 'code_review'] }) with a one-line signature reminder; the _fragments/store-cli-verbs.md cheat-sheet documents the forge_store { command, args[] } shape and the 'id in both slots' failure. Also fixed a forge_store read call in meta-bug-triage.md that used the same invalid named form.",
|
|
45
|
+
"target": "workflows:review_code workflows:review_plan workflows:bug-triage",
|
|
46
|
+
"regenerate": [
|
|
47
|
+
"workflows"
|
|
48
|
+
],
|
|
49
|
+
"breaking": false,
|
|
50
|
+
"manual": [
|
|
51
|
+
"Run /forge:update, then /forge:rebuild workflows to refresh .forge/workflows/ (review_code.md, review_plan.md, triage.md, and the store-cli-verbs fragment) with the corrected set-summary signature. Prompt-text only — no tool or schema change."
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"1.2.12": {
|
|
55
|
+
"version": "1.2.13",
|
|
56
|
+
"date": "2026-06-03",
|
|
57
|
+
"notes": "Deterministic post-phase exit guard (FORGE-S26-T19). New parseOutputs() export in parse-gates.cjs handles ```outputs phase=X``` fence blocks with closed grammar (artifact + require directives; unknown throws). New postflight-gate.cjs evaluator runs post-phase; returns { phase, reasonCode, detail, remediation } with new output-missing and output-stub reasonCodes; no LLM in path. forge-cli run-task.ts now calls runPostflightGate() after runForgeSubagent returns and before FSM advance; on UNSATISFIED halts + calls existing runHaltAdvisor. wfl-run-task.js gets a #22 parity-seam comment. meta-plan-task.md and meta-implement.md: prose Tier-2 self-check replaced by declarative outputs blocks + thin pointer reminders.",
|
|
58
|
+
"target": "tools:parse-gates tools:postflight-gate",
|
|
59
|
+
"regenerate": [
|
|
60
|
+
"workflows"
|
|
61
|
+
],
|
|
62
|
+
"breaking": false,
|
|
63
|
+
"manual": [
|
|
64
|
+
"Run /forge:rebuild to pick up updated meta-workflow changes (meta-plan-task.md, meta-implement.md now include declarative outputs blocks). postflight-gate.cjs is additive — no-op for workflows without outputs blocks."
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"1.2.11": {
|
|
68
|
+
"version": "1.2.12",
|
|
69
|
+
"date": "2026-06-03",
|
|
70
|
+
"notes": "Rebuild/republish bump — no functional source change from 1.2.11. Cut to ship a fresh plugin manifest + integrity hashes and a corresponding forge-cli 1.0.12 build/install. Carries the 1.2.11 halt-recovery-advisor payload (FORGE-S26-T18) unchanged.",
|
|
71
|
+
"target": "release:rebuild",
|
|
72
|
+
"regenerate": [],
|
|
73
|
+
"breaking": false,
|
|
74
|
+
"manual": []
|
|
75
|
+
},
|
|
76
|
+
"1.2.10": {
|
|
77
|
+
"version": "1.2.11",
|
|
78
|
+
"date": "2026-06-03",
|
|
79
|
+
"notes": "Halt-recovery advisor (FORGE-S26-T18). preflight-gate.cjs now emits structured JSON on stdout on gate failure: { phase, reasonCode, detail, remediation }. reasonCode values: artifact-missing, predecessor-verdict-missing, illegal-status, tool-error. Both LLM orchestrators (meta-orchestrate.md, meta-fix-bug.md) parse and render the structured failure instead of raw stderr. forge-cli run-task and fix-bug upgraded to runPreflightGateWithData() which returns structured failure alongside the PreflightResult enum; on halt, the CLI spawns a read-only halt-recovery advisor subagent on the advisorModel config slot (or getAvailable()[0] fallback). New optional advisorModel field added to forge-cli layered config (L1 global / L2 project). Post-phase self-check guards added to meta-plan-task.md and meta-implement.md (Tier 2) to prevent false complete events when a phase subagent silently fails to write its primary output.",
|
|
80
|
+
"target": "tools:preflight-gate",
|
|
81
|
+
"regenerate": [
|
|
82
|
+
"workflows"
|
|
83
|
+
],
|
|
84
|
+
"breaking": false,
|
|
85
|
+
"manual": [
|
|
86
|
+
"Run /forge:rebuild to pick up updated meta-workflow changes (meta-orchestrate.md, meta-fix-bug.md, meta-plan-task.md, meta-implement.md). The structured JSON stdout from preflight-gate.cjs is additive — orchestrators that do not parse it still receive human-readable stderr and exit 1."
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"1.2.9": {
|
|
90
|
+
"version": "1.2.10",
|
|
91
|
+
"date": "2026-06-03",
|
|
92
|
+
"notes": "Fix incomplete .forge/tools/ vendored closure. generate-tools.md and rebuild.md copied tools via `*.cjs` globs only, silently skipping the two `.js` lib helpers (lib/result.js, lib/validate.js) and the top-level list-skills.js. Because store-cli.cjs does a top-level require('./lib/validate.js') and collate.cjs requires './lib/result.js', a freshly vendored .forge/tools/ left store-cli.cjs dead-on-arrival (ENOENT) and broke KB collation. Latent since the vendored-tools model landed; S29 made it fatal by moving tool execution off $FORGE_ROOT/tools/ onto the vendored copy. Both vendoring sites now copy `.cjs` and `.js` (find -maxdepth 1, excludes __tests__/) and record both in the generation manifest. New regression guard tools/__tests__/vendored-tools-closure.test.cjs ties the documented copy extensions to the actual require()-closure.",
|
|
93
|
+
"target": "tools:vendor-closure",
|
|
94
|
+
"regenerate": [
|
|
95
|
+
"tools"
|
|
96
|
+
],
|
|
97
|
+
"breaking": false,
|
|
98
|
+
"manual": [
|
|
99
|
+
"Run /forge:rebuild tools to re-vendor .forge/tools/ with the complete closure. Existing projects vendored by v1.2.4–v1.2.9 are missing .forge/tools/lib/result.js, .forge/tools/lib/validate.js, and .forge/tools/list-skills.js — store-cli and KB collation are broken until this re-vendor runs."
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"1.2.8": {
|
|
103
|
+
"version": "1.2.9",
|
|
104
|
+
"date": "2026-06-03",
|
|
105
|
+
"notes": "Finish the FORGE_ROOT retirement in the workflow/persona layer (vendored-path scope). Remove the vestigial 'Resolve FORGE_ROOT (config.paths.forgeRoot)' preamble bullet from meta-approve/review-plan/review-implementation/validate/commit/plan-task/implement/bug-triage (the gate calls already use node .forge/tools/preflight-gate.cjs). Switch persona identity banners to node .forge/tools/banners.cjs <id> at the generator (build-base-pack.cjs identityBlock) and in the three base-pack-only personas (librarian/orchestrator/product-manager); drop the broken paths.forgeRoot resolution. meta-collate/collator now invoke node .forge/tools/collate.cjs directly. meta-migrate resolves the plugin root from CLAUDE_PLUGIN_ROOT (plugin-side reads of init/base-pack are not vendored). Stale paths.forgeRoot doc references removed from store-cli.spec.md, meta-enhance config_fields, and tool-discipline.md. paths.forgeRoot is intentionally retained as a maintained convenience field (written by check-update.cjs) for skills/commands that resolve the plugin root — those are out of scope for this entry.",
|
|
106
|
+
"target": "workflows:forge-root-residual-cleanup",
|
|
107
|
+
"regenerate": [
|
|
108
|
+
"workflows",
|
|
109
|
+
"personas"
|
|
110
|
+
],
|
|
111
|
+
"breaking": false,
|
|
112
|
+
"manual": [
|
|
113
|
+
"Run /forge:rebuild workflows personas to regenerate the updated workflow and persona files. The vendored banners/collate invocations require .forge/tools/ to be present — run /forge:rebuild tools first if it is absent (see the 1.2.7 migration)."
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"1.2.7": {
|
|
117
|
+
"version": "1.2.8",
|
|
118
|
+
"date": "2026-06-03",
|
|
119
|
+
"notes": "Remove all $FORGE_ROOT references from init/smoke-test.md. Switch tool exec check to node .forge/tools/validate-store.cjs, generation-manifest stamp to node .forge/tools/generation-manifest.cjs, version read to .forge/tools/.forge-tools-version, distribution detection to the distribution field in .forge-tools-version, and remove the forgeRoot field from update-check-cache.json stamp. Smoke-test runs only at init time — existing projects are not affected.",
|
|
120
|
+
"target": "init:smoke-test",
|
|
121
|
+
"regenerate": [
|
|
122
|
+
"init"
|
|
123
|
+
],
|
|
124
|
+
"breaking": false,
|
|
125
|
+
"manual": [
|
|
126
|
+
"Re-run /forge:init on new projects to pick up the updated smoke-test. Existing projects are unaffected — smoke-test runs only once at init time."
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
"1.2.6": {
|
|
130
|
+
"version": "1.2.7",
|
|
131
|
+
"date": "2026-06-02",
|
|
132
|
+
"notes": "Remove paths.forgeRoot from config.schema.json required[] and properties. forge-preflight.cjs now resolves plugin root via forgeRef-based cache scan (mirrors manage-config.cjs Priority 2) instead of reading config.paths.forgeRoot. manage-config.cjs resolve-forge-root drops Priority 3 (forgeRoot fallback). generate-tools.md drops Step 1 (forgeRoot write). update.md removes forgeRoot refresh from Step 4 config section and fixes tools regenerate category to invoke /forge:rebuild tools instead of running schema refresh inline.",
|
|
133
|
+
"target": "config:forgeRoot",
|
|
134
|
+
"regenerate": [
|
|
135
|
+
"tools"
|
|
136
|
+
],
|
|
137
|
+
"breaking": false,
|
|
138
|
+
"manual": [
|
|
139
|
+
"Run /forge:rebuild tools to re-vendor .forge/tools/ on existing projects. Projects that have never run /forge:rebuild tools will have .forge/tools/ absent until this step."
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"1.2.5": {
|
|
143
|
+
"version": "1.2.6",
|
|
144
|
+
"date": "2026-06-02",
|
|
145
|
+
"notes": "Add vendored-tools integrity and staleness check to /forge:health. Exports checkToolsVersion(projectRoot) from check-structure.cjs: reads .forge/tools/.forge-tools-version marker and paths.forgeRef from config, returns { present, vendoredVersion, activeVersion, stale, reason }. generate-tools.md Step 2c now writes .forge/tools/.forge-tools-version after the tool copy loop. rebuild.md tools category now re-writes the marker after re-copy. health.md gains step 8b (vendored tools presence + staleness check, emitting 〇/△/× with /forge:rebuild tools recommendation). Closes the integrity gap for existing projects that ran /forge:rebuild tools in v1.2.4 without the marker.",
|
|
146
|
+
"target": "tools:health",
|
|
147
|
+
"regenerate": [
|
|
148
|
+
"tools"
|
|
149
|
+
],
|
|
150
|
+
"breaking": false,
|
|
151
|
+
"manual": [
|
|
152
|
+
"Run /forge:update, then /forge:rebuild tools to write .forge/tools/.forge-tools-version. Until this runs, /forge:health will report 'stale (marker absent)' — non-breaking."
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
"1.2.4": {
|
|
156
|
+
"version": "1.2.5",
|
|
157
|
+
"date": "2026-06-02",
|
|
158
|
+
"notes": "Rewrite all ~159 node \"$FORGE_ROOT/tools/X.cjs\" call-sites in meta/workflows/*.md, meta/workflows/_fragments/*.md, and wfl-*.js drivers to use the fixed project-relative form node .forge/tools/X.cjs. Delete the FORGE_ROOT export preamble from all three JS drivers (wfl-run-task.js, wfl-run-sprint.js, wfl-fix-bug.js). Tools are now vendored in .forge/tools/ (added in v1.2.4), so no subagent needs to resolve a plugin root path at runtime. Drift test guard updated: asserts no $FORGE_ROOT remains in any driver source. Existing projects must regenerate workflows and workflows-js to pick up the new paths.",
|
|
159
|
+
"target": "workflows:*",
|
|
160
|
+
"regenerate": [
|
|
161
|
+
"workflows",
|
|
162
|
+
"workflows-js"
|
|
163
|
+
],
|
|
164
|
+
"breaking": false,
|
|
165
|
+
"manual": [
|
|
166
|
+
"Run /forge:update, then run /forge:rebuild tools (if not done in v1.2.4 step), then /forge:rebuild workflows and /forge:rebuild workflows-js. Tools must be vendored in .forge/tools/ before running the rewritten workflows."
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"1.2.3": {
|
|
170
|
+
"version": "1.2.4",
|
|
171
|
+
"date": "2026-06-02",
|
|
172
|
+
"notes": "Add tools vendor category: copy plugin tools/*.cjs + tools/lib/*.cjs into .forge/tools/ at init and rebuild, mirroring the existing schemas copy. Adds tools namespace to structure-manifest.json (via build-manifest.cjs TOOLS_FILES constant), Step 2b to generate-tools.md (init copy), and tools/tools:<filename> category to rebuild.md (verbatim re-copy from $FORGE_ROOT/tools/). check-structure.cjs validateManifest now maps the tools namespace to forgeRoot/tools/ with recursive lib/ enumeration. Foundation for FORGE-S29 call-site rewrite (T02+). No existing call-sites changed in this task.",
|
|
173
|
+
"target": "tools",
|
|
174
|
+
"regenerate": [
|
|
175
|
+
"tools"
|
|
176
|
+
],
|
|
177
|
+
"breaking": false,
|
|
178
|
+
"manual": [
|
|
179
|
+
"Run /forge:update, then /forge:rebuild tools to materialise .forge/tools/."
|
|
180
|
+
]
|
|
181
|
+
},
|
|
182
|
+
"1.2.2": {
|
|
183
|
+
"version": "1.2.3",
|
|
184
|
+
"date": "2026-06-02",
|
|
185
|
+
"notes": "Harden FORGE_ROOT / .forge/config.json resolution in the packaged JS workflow drivers. A friction trace of a real /fix-bug run showed phase subagents repeatedly probing ../.forge/config.json (the PARENT directory — 5 of 11 subagents) and one invoking `node \"$FORGE_ROOT/tools/preflight-gate.cjs\"` with an unexported $FORGE_ROOT that expands to '' → '/tools/preflight-gate.cjs' (Cannot find module). Root cause: the per-phase subagent prompt preamble said only 'Resolve FORGE_ROOT from .forge/config.json paths.forgeRoot' — no cwd anchor and no instruction to export $FORGE_ROOT, even though every subsequent command used $FORGE_ROOT as a shell variable. Replaced all ~23 preamble sites across wfl-run-task.js / wfl-run-sprint.js / wfl-fix-bug.js with a directive that (a) anchors the config to ./.forge/config.json in the current working directory ('never a parent directory'), (b) tells the agent to EXPORT FORGE_ROOT, and (c) STOPs if $FORGE_ROOT is empty or $FORGE_ROOT/tools is missing. Added a regression guard in workflows-js-drift.test.cjs. Prompt-text only — no orchestration-logic change.",
|
|
186
|
+
"target": "workflows-js:wfl-run-task",
|
|
187
|
+
"regenerate": [
|
|
188
|
+
"workflows-js:wfl-run-task",
|
|
189
|
+
"workflows-js:wfl-run-sprint",
|
|
190
|
+
"workflows-js:wfl-fix-bug"
|
|
191
|
+
],
|
|
192
|
+
"breaking": false,
|
|
193
|
+
"manual": [
|
|
194
|
+
"Run /forge:update, then /forge:rebuild workflows-js to refresh .claude/workflows/wfl-*.js."
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
"1.2.1": {
|
|
198
|
+
"version": "1.2.2",
|
|
199
|
+
"date": "2026-06-02",
|
|
200
|
+
"notes": "Fix three orchestration-logic edge-case bugs in the packaged JS workflow drivers (found by an adversarial review of the v1.2.1 packaged workflows). (S1) wfl-run-sprint.js re-dispatch passed { taskId, resumeFrom } but wfl:run-task parses only the task id, so resumeFrom was silently dropped — removed the misleading arg; the retry is a clean re-dispatch that resumes from store state. (S2) wfl-run-sprint.js treated a skipped child as non-terminal, so a legitimately `blocked` task (waiting on a dependency) was re-dispatched and then force-escalated; a skipped child is now terminal-acceptable. (F1) wfl-fix-bug.js had no null guard on the finalize dispatch — a skipped/errored finalize fell through and the run was reported bugStatus:'fixed', escalated:false even though collate + the finalize gate never ran; it now escalates on a null finalize while preserving bugStatus:'fixed'. Added text-contract regression guards in workflows-js-drift.test.cjs. Deferred (tracked for a follow-up): revision-counter/eventId attribution (wfl-run-task), count-bucket taxonomy + full-parallel dependency ordering (wfl-run-sprint), and two MINORs in wfl-fix-bug (phase('Pipeline') grouping, escalateBug bugId).",
|
|
201
|
+
"target": "workflows-js:wfl-run-sprint",
|
|
202
|
+
"regenerate": [
|
|
203
|
+
"workflows-js:wfl-run-sprint",
|
|
204
|
+
"workflows-js:wfl-fix-bug"
|
|
205
|
+
],
|
|
206
|
+
"breaking": false,
|
|
207
|
+
"manual": [
|
|
208
|
+
"Run /forge:update, then /forge:rebuild workflows-js to refresh .claude/workflows/wfl-run-sprint.js and wfl-fix-bug.js."
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
"1.2.0": {
|
|
212
|
+
"version": "1.2.1",
|
|
213
|
+
"date": "2026-06-02",
|
|
214
|
+
"notes": "Fix wfl-fix-bug.js invalid meta. The fix-bug JS driver declared its meta with `desc:` and `steps:` instead of `description:` and `phases:`, so the Workflow runtime rejected it ('meta.description must be a non-empty string') and the named-workflow registry silently skipped it — /forge:fix-bug (and any /<prefix>:fix-bug) could never launch wfl:fix-bug. This shipped latent since the driver was authored and was exposed by the v1.2.0 orchestration-prose retirement, which removed the fix_bug.md fallback. Renamed desc->description and steps->phases (adding the Resolve phase) to match wfl-run-task.js / wfl-run-sprint.js. Added a meta-contract regression guard (workflows-js-drift.test.cjs) that asserts every JS driver exposes name + non-empty description + phases.",
|
|
215
|
+
"target": "workflows-js:wfl-fix-bug",
|
|
216
|
+
"regenerate": [
|
|
217
|
+
"workflows-js:wfl-fix-bug"
|
|
218
|
+
],
|
|
219
|
+
"breaking": false,
|
|
220
|
+
"manual": [
|
|
221
|
+
"Run /forge:update to receive the fix, then /forge:rebuild workflows-js to refresh .claude/workflows/wfl-fix-bug.js. /<prefix>:fix-bug will then launch wfl:fix-bug correctly."
|
|
222
|
+
]
|
|
223
|
+
},
|
|
224
|
+
"1.1.2": {
|
|
225
|
+
"version": "1.2.0",
|
|
226
|
+
"date": "2026-06-02",
|
|
227
|
+
"notes": "Retire LLM orchestration prose. The deterministic JS drivers (.claude/workflows/wfl-run-task.js, wfl-run-sprint.js, wfl-fix-bug.js — category workflows-js) are now the only orchestration truth; /forge:run-task, /forge:run-sprint and /forge:fix-bug already dispatch to them via workflow(wfl:*). The prose orchestrators orchestrate_task.md, run_sprint.md and fix_bug.md are no longer built into the base-pack, no longer generated into .forge/workflows/, and no longer tested (the orchestrators-retired and orchestrator-base-pack-parity drift tests are removed; only the JS drivers are tested). meta-orchestrate.md and meta-fix-bug.md are kept in meta/ as reference specs only. build-base-pack and build-manifest drop the three workflow mappings; workflow-gen-plan.json goes 16->15; the rebuild orchestration-generation step and generate-orchestration.md rulebook are removed. The three retired prose files are added to /forge:update's delete-workflow scan so existing projects have the orphaned .forge/workflows/orchestrate_task.md, run_sprint.md and fix_bug.md removed (rebuild only regenerates and clears manifest entries; it does not delete files on disk).",
|
|
228
|
+
"target": "workflows-js:wfl-run-task",
|
|
229
|
+
"regenerate": [
|
|
230
|
+
"workflows",
|
|
231
|
+
"workflows-js"
|
|
232
|
+
],
|
|
233
|
+
"breaking": false,
|
|
234
|
+
"manual": [
|
|
235
|
+
"Run /forge:update — it removes the retired orchestrate_task.md / run_sprint.md / fix_bug.md from .forge/workflows/ via its delete-workflow scan (prompts before deleting any you have hand-edited).",
|
|
236
|
+
"Orchestration now runs through .claude/workflows/wfl-*.js — no action needed for /forge:run-task, /forge:run-sprint, or /forge:fix-bug."
|
|
237
|
+
]
|
|
238
|
+
},
|
|
239
|
+
"1.1.1": {
|
|
240
|
+
"version": "1.1.2",
|
|
241
|
+
"date": "2026-06-02",
|
|
242
|
+
"notes": "v1.1.2 — Fix collate.cjs resolveTaskDir: when a task store record's `path` field points at a file inside the task directory (e.g. .../FORGE-S22-T04/PLAN.md) rather than the directory itself, Case 1 returned basename('PLAN.md') instead of the task dir. Downstream, collate's existsSync(sprintDir/PLAN.md) check failed and the task's INDEX.md was silently never generated. Case 1 now verifies its candidate is a real directory on disk and otherwise falls through to the filesystem scan (which resolves the dir by taskId). Symptom: 18 task INDEX.md files across FORGE-S22/S23 were missing despite valid store records.",
|
|
243
|
+
"target": "tools:collate",
|
|
244
|
+
"regenerate": [
|
|
245
|
+
"tools:collate"
|
|
246
|
+
],
|
|
247
|
+
"breaking": false,
|
|
248
|
+
"manual": [
|
|
249
|
+
"Run /forge:update to receive the fixed collate tool.",
|
|
250
|
+
"After update, run /forge:collate (or /forge:rebuild) to regenerate any task INDEX.md files that were skipped."
|
|
251
|
+
]
|
|
252
|
+
},
|
|
253
|
+
"1.1.0": {
|
|
254
|
+
"version": "1.1.1",
|
|
255
|
+
"date": "2026-06-02",
|
|
256
|
+
"notes": "v1.1.1 — LOW-polish orchestration parity (FORGE-S28-T09). #19: emitSkip() agent helper emits a task-dispatch/action:skip event when the pre-task SKIP_STATUS guard fires, giving the event log a complete accounting of every task. #20: writeback step added to the hardcoded default pipeline prompt in wfl-run-task.js (orchestrate_task.md §3 full default: …approve → writeback → commit, writeback→update_implementation.md). #21: structural-limitation comment documents Progress-Monitor IPC as a host-layer concern (JS driver has no shell access, so the Pi/forge-cli TS layer must open the pipe). #22: BANNER_MAP constants added to both wfl-run-task.js and wfl-run-sprint.js; wfl-run-task phase-start log line now shows the persona label. #23: wfl-run-sprint.js adds an agent step to transition sprint status to 'active' before the wave loop begins, mirroring run_sprint.md Step 1. Also fixes pre-existing forge/package.json test regression (accidental 'dependencies' field removed; placeholder-coverage no-npm test passes).",
|
|
257
|
+
"target": "workflows-js:wfl-run-task",
|
|
258
|
+
"regenerate": [
|
|
259
|
+
"workflows-js:wfl-run-task",
|
|
260
|
+
"workflows-js:wfl-run-sprint"
|
|
261
|
+
],
|
|
262
|
+
"breaking": false,
|
|
263
|
+
"manual": [
|
|
264
|
+
"Run /forge:update to receive the updated JS workflow orchestrators.",
|
|
265
|
+
"After update, run /forge:rebuild workflows-js to regenerate .claude/workflows/wfl-*.js in your project."
|
|
266
|
+
]
|
|
267
|
+
},
|
|
268
|
+
"1.0.11": {
|
|
269
|
+
"version": "1.1.0",
|
|
270
|
+
"date": "2026-06-02",
|
|
271
|
+
"notes": "v1.1.0 — (1) New rebuild/update surface for the JS orchestration workflows: workflows-js is now a first-class /forge:rebuild category (verbatim copy of .claude/workflows/*.js from base-pack, no LLM/placeholder substitution) and a recognised /forge:update regenerate target; build-manifest.cjs declares a workflows-js namespace so /forge:health and check-structure cover .claude/workflows/*.js. Previously these files were materialised only at /forge:init and had no regeneration path. (2) Fix FORGE-BUG-041: wfl-run-task.js emitRetryEvent/mergeSidecar passed schema:{type:'string'} to agent(), an invalid StructuredOutput input_schema (Anthropic requires type:'object'); the subagent could never call StructuredOutput so the workflow threw after the nudge limit — every wfl:run-task task escalated immediately after its plan phase. Dropped the invalid schema option from both calls. With (1) in place, /forge:update now auto-delivers this fix via the workflows-js:wfl-run-task regenerate target.",
|
|
272
|
+
"target": "workflows-js:wfl-run-task",
|
|
273
|
+
"regenerate": [
|
|
274
|
+
"workflows-js:wfl-run-task"
|
|
275
|
+
],
|
|
276
|
+
"breaking": false,
|
|
277
|
+
"manual": []
|
|
278
|
+
},
|
|
279
|
+
"1.0.10": {
|
|
280
|
+
"version": "1.0.11",
|
|
281
|
+
"date": "2026-05-31",
|
|
282
|
+
"notes": "v1.0.11 — Orchestration waste reduction (FORGE-S27 Track A, shipped tasks A1/A3/A4/NH1/NH2). New forge-preflight.cjs aggregates deterministic pre-dispatch glue into a single blob read, eliminating ~20 hand-run round-trips from the orchestrator preamble. New preflight-session.cjs SessionStart hook pre-warms the blob for run-task/fix-bug/run-sprint. banners.cjs gains --quiet flag; orchestrate_task loop uses it so verbose banner output does not accrete in the transcript. meta-orchestrate.md state-ledger compaction discipline: /compact retains the one-line [checkpoint] ledger and sheds raw tool output. meta-fix-bug.md: A1+A3 treatment ported (preflight cross-ref, --quiet flag, spurious cost bullet removed). token-forensics.cjs: message.id-dedup harness for correct through-model token accounting. A2 (context-pack/forge-compress port) remains escalated and is not included in this release.",
|
|
283
|
+
"target": "tools:forge-preflight",
|
|
284
|
+
"regenerate": [
|
|
285
|
+
"tools:forge-preflight",
|
|
286
|
+
"hooks:preflight-session",
|
|
287
|
+
"workflows:orchestrate_task",
|
|
288
|
+
"workflows:fix_bug",
|
|
289
|
+
"tools:banners",
|
|
290
|
+
"tools:token-forensics"
|
|
291
|
+
],
|
|
292
|
+
"breaking": false,
|
|
293
|
+
"manual": [
|
|
294
|
+
"Run /forge:update to copy the updated tools and hooks into your project."
|
|
295
|
+
]
|
|
296
|
+
},
|
|
2
297
|
"1.0.9": {
|
|
3
298
|
"version": "1.0.10",
|
|
4
299
|
"date": "2026-05-31",
|
|
5
300
|
"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
301
|
"target": "tools:store-cli",
|
|
7
|
-
"regenerate": [
|
|
302
|
+
"regenerate": [
|
|
303
|
+
"tools"
|
|
304
|
+
],
|
|
8
305
|
"breaking": false,
|
|
9
|
-
"manual": [
|
|
306
|
+
"manual": [
|
|
307
|
+
"Run /forge:update to copy the updated tools into your project."
|
|
308
|
+
]
|
|
10
309
|
},
|
|
11
310
|
"1.0.8": {
|
|
12
311
|
"version": "1.0.9",
|
|
13
312
|
"date": "2026-05-31",
|
|
14
313
|
"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
314
|
"target": "tools:store-cli",
|
|
16
|
-
"regenerate": [
|
|
315
|
+
"regenerate": [
|
|
316
|
+
"tools"
|
|
317
|
+
],
|
|
17
318
|
"breaking": false,
|
|
18
|
-
"manual": [
|
|
319
|
+
"manual": [
|
|
320
|
+
"Run /forge:update to copy the updated tools into your project."
|
|
321
|
+
]
|
|
19
322
|
},
|
|
20
323
|
"1.0.7": {
|
|
21
324
|
"version": "1.0.8",
|
|
22
325
|
"date": "2026-05-31",
|
|
23
326
|
"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
327
|
"target": "tools:artifact-store",
|
|
25
|
-
"regenerate": [
|
|
328
|
+
"regenerate": [
|
|
329
|
+
"tools"
|
|
330
|
+
],
|
|
26
331
|
"breaking": false,
|
|
27
|
-
"manual": [
|
|
332
|
+
"manual": [
|
|
333
|
+
"Run /forge:update to copy the updated tools into your project."
|
|
334
|
+
]
|
|
28
335
|
},
|
|
29
336
|
"1.0.6": {
|
|
30
337
|
"version": "1.0.7",
|
|
31
338
|
"date": "2026-05-31",
|
|
32
339
|
"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
340
|
"target": "tools:artifact,tools:artifact-store,schemas:task,schemas:bug,schemas:sprint",
|
|
34
|
-
"regenerate": [
|
|
341
|
+
"regenerate": [
|
|
342
|
+
"tools",
|
|
343
|
+
"schemas"
|
|
344
|
+
],
|
|
35
345
|
"breaking": false,
|
|
36
|
-
"manual": [
|
|
346
|
+
"manual": [
|
|
347
|
+
"Run /forge:update to copy the updated tools and schemas into your project."
|
|
348
|
+
]
|
|
37
349
|
},
|
|
38
350
|
"1.0.5": {
|
|
39
351
|
"version": "1.0.6",
|
|
40
352
|
"date": "2026-05-31",
|
|
41
353
|
"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
354
|
"target": "workflows:orchestrate_task,workflows:commit,workflows:collate",
|
|
43
|
-
"regenerate": [
|
|
355
|
+
"regenerate": [
|
|
356
|
+
"workflows:orchestrate_task",
|
|
357
|
+
"workflows:commit",
|
|
358
|
+
"workflows:collate"
|
|
359
|
+
],
|
|
44
360
|
"breaking": false,
|
|
45
|
-
"manual": [
|
|
361
|
+
"manual": [
|
|
362
|
+
"Run /forge:update to copy the updated workflows into your project."
|
|
363
|
+
]
|
|
46
364
|
},
|
|
47
365
|
"1.0.4": {
|
|
48
366
|
"version": "1.0.5",
|
|
49
367
|
"date": "2026-05-31",
|
|
50
368
|
"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
369
|
"target": "tools:store-cli,tools:artifact,tools:artifact-kinds,workflows:implement_plan,workflows:validate_task,workflows:approve_task,workflows:triage",
|
|
52
|
-
"regenerate": [
|
|
370
|
+
"regenerate": [
|
|
371
|
+
"tools",
|
|
372
|
+
"workflows:implement_plan",
|
|
373
|
+
"workflows:validate_task",
|
|
374
|
+
"workflows:approve_task",
|
|
375
|
+
"workflows:triage"
|
|
376
|
+
],
|
|
53
377
|
"breaking": false,
|
|
54
|
-
"manual": [
|
|
378
|
+
"manual": [
|
|
379
|
+
"Run /forge:update to copy the updated tools and workflows into your project."
|
|
380
|
+
]
|
|
55
381
|
},
|
|
56
382
|
"1.0.3": {
|
|
57
383
|
"version": "1.0.4",
|
|
58
384
|
"date": "2026-05-30",
|
|
59
385
|
"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
386
|
"target": "tools:preflight-gate,tools:store-query",
|
|
61
|
-
"regenerate": [
|
|
387
|
+
"regenerate": [
|
|
388
|
+
"tools"
|
|
389
|
+
],
|
|
62
390
|
"breaking": false,
|
|
63
|
-
"manual": [
|
|
391
|
+
"manual": [
|
|
392
|
+
"Run /forge:update to copy the updated tools into your project."
|
|
393
|
+
]
|
|
64
394
|
},
|
|
65
395
|
"1.0.2": {
|
|
66
396
|
"version": "1.0.3",
|
|
67
397
|
"date": "2026-05-28",
|
|
68
398
|
"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
399
|
"target": "workflows:triage,workflows:fix_bug",
|
|
70
|
-
"regenerate": [
|
|
400
|
+
"regenerate": [
|
|
401
|
+
"workflows:triage",
|
|
402
|
+
"workflows:fix_bug"
|
|
403
|
+
],
|
|
71
404
|
"breaking": false,
|
|
72
405
|
"manual": []
|
|
73
406
|
},
|
|
@@ -76,7 +409,9 @@
|
|
|
76
409
|
"date": "2026-05-27",
|
|
77
410
|
"notes": "v1.0.2 — deprecated command cleanup + init bug fixes. Redirect stubs removed (old command names are now unknown). paths.commands uses project prefix. artifact.cjs strips trailing filenames from store path. Deprecated command references replaced across all meta sources.",
|
|
78
411
|
"target": "commands,init:phases,init:sdlc-init,tools:artifact",
|
|
79
|
-
"regenerate": [
|
|
412
|
+
"regenerate": [
|
|
413
|
+
"commands"
|
|
414
|
+
],
|
|
80
415
|
"breaking": false,
|
|
81
416
|
"manual": [
|
|
82
417
|
"Deprecated command redirect stubs removed. Old names (sprint-intake, sprint-plan, retrospective, regenerate, store-query, store-repair, quiz-agent, calibrate, update-tools, migrate, materialize) are now unknown commands. See docs/migration/v0-to-v1.md for the mapping.",
|
|
@@ -88,7 +423,9 @@
|
|
|
88
423
|
"date": "2026-05-27",
|
|
89
424
|
"notes": "v1.0.1 — init phase decomposition (FORGE-S26-T17). New shared verify-phase.cjs tool; sdlc-init.md rewritten as thin orchestrator; per-phase prompt files extracted to init/phases/.",
|
|
90
425
|
"target": "tools:verify-phase,init:phases",
|
|
91
|
-
"regenerate": [
|
|
426
|
+
"regenerate": [
|
|
427
|
+
"tools"
|
|
428
|
+
],
|
|
92
429
|
"breaking": false,
|
|
93
430
|
"manual": []
|
|
94
431
|
},
|
|
@@ -97,7 +434,11 @@
|
|
|
97
434
|
"date": "2026-05-26",
|
|
98
435
|
"notes": "v1.0.0 — v1.0 DevX Overhaul (FORGE-S26). 7 command renames, 6 command removals, fast-mode dead code removal, health --fix, rebuild --enrich, init --migrate, pipeline step guards, revision loop visibility, post-init welcome, Tomoshibi enhancements, forge:status plugin command, v1.0 documentation restructure.",
|
|
99
436
|
"target": "commands:new-sprint,commands:plan-sprint,commands:retro,commands:rebuild,commands:search,commands:repair,commands:check-agent,commands:calibrate,commands:enhance,commands:migrate,commands:materialize,commands:update-tools,commands:collate,commands:status,workflows:orchestrate_task,workflows:plan_task,workflows:implement_plan,workflows:fix_bug,config:mode",
|
|
100
|
-
"regenerate": [
|
|
437
|
+
"regenerate": [
|
|
438
|
+
"commands",
|
|
439
|
+
"workflows",
|
|
440
|
+
"tools"
|
|
441
|
+
],
|
|
101
442
|
"breaking": true,
|
|
102
443
|
"manual": [
|
|
103
444
|
"Removed commands: /forge:update-tools, /forge:materialize, /forge:enhance, /forge:calibrate, /forge:migrate, /forge:collate (user surface). Use /forge:update for schema refresh, /forge:rebuild --enrich for enhancement, /forge:health --fix for calibration, /forge:init --migrate for migration.",
|
|
@@ -26,6 +26,7 @@ Assess the health and currency of the project's SDLC knowledge base.
|
|
|
26
26
|
| **Concepts freshness** | `docs/concepts/*.md` pages older than `forge/meta/store-schema/` updates |
|
|
27
27
|
| **Context pack freshness** | `source_hash` in `.forge/cache/context-pack.json` vs. current hash of `engineering/architecture/*.md` |
|
|
28
28
|
| **Plugin integrity** | Plugin command and agent files modified since last release hash was recorded |
|
|
29
|
+
| **Vendored tools** | `.forge/tools/` present, file set matches structure-manifest, and version marker matches active plugin version |
|
|
29
30
|
|
|
30
31
|
## How to run
|
|
31
32
|
|
|
@@ -116,6 +117,32 @@ cd "$PROJECT_ROOT" && node "$FORGE_ROOT/tools/..."
|
|
|
116
117
|
If the tool is absent (file not found), skip this check silently.
|
|
117
118
|
Note: custom `paths.*` overrides in `.forge/config.json` are respected by
|
|
118
119
|
check-structure.cjs. Projects using default paths will see no difference.
|
|
120
|
+
8b. Check vendored tools integrity and staleness:
|
|
121
|
+
```sh
|
|
122
|
+
node -e "
|
|
123
|
+
const { checkToolsVersion } = require('$FORGE_ROOT/tools/check-structure.cjs');
|
|
124
|
+
const result = checkToolsVersion('$PROJECT_ROOT');
|
|
125
|
+
console.log(JSON.stringify(result));
|
|
126
|
+
"
|
|
127
|
+
```
|
|
128
|
+
Also read the structure-manifest to get the expected tools file count and count
|
|
129
|
+
how many are currently present in `.forge/tools/`:
|
|
130
|
+
```sh
|
|
131
|
+
cd "$PROJECT_ROOT" && node "$FORGE_ROOT/tools/check-structure.cjs" --path "$PROJECT_ROOT"
|
|
132
|
+
```
|
|
133
|
+
(The tools namespace output from the above `check-structure.cjs` call in step 8 already
|
|
134
|
+
covers file presence/completeness — use that result here for the tools namespace row.)
|
|
135
|
+
|
|
136
|
+
Based on the `checkToolsVersion` result and the tools namespace from step 8:
|
|
137
|
+
- If `.forge/tools/` is absent or the tools namespace shows missing files:
|
|
138
|
+
> × Vendored tools — missing or incomplete (N/M files present) — run `/forge:rebuild tools`
|
|
139
|
+
- If `.forge/tools/` is present and files are complete, but `stale=true`:
|
|
140
|
+
- If `reason='marker-absent'`:
|
|
141
|
+
> △ Vendored tools — stale (version marker absent; active: <activeVersion>) — run `/forge:rebuild tools`
|
|
142
|
+
- If `reason='version-mismatch'`:
|
|
143
|
+
> △ Vendored tools — stale (vendored: <vendoredVersion>, active: <activeVersion>) — run `/forge:rebuild tools`
|
|
144
|
+
- If present, complete, and `stale=false`:
|
|
145
|
+
> 〇 Vendored tools — <N>/<M> files present, version <vendoredVersion>
|
|
119
146
|
9. Check skill gaps: run `node "$FORGE_ROOT/tools/list-skills.js"` to get the live
|
|
120
147
|
installed skill list from `~/.claude/plugins/installed_plugins.json` (source of
|
|
121
148
|
truth — not the config, which can be stale). Read `$FORGE_ROOT/meta/skill-recommendations.md`,
|
|
@@ -199,6 +226,7 @@ After step 16, emit a pass/fail summary grid. One row per check category; substi
|
|
|
199
226
|
| Store integrity | 〇 |
|
|
200
227
|
| Modified generated files | 〇 |
|
|
201
228
|
| Generated file structure | 〇 |
|
|
229
|
+
| Vendored tools | 〇 |
|
|
202
230
|
| Plugin integrity | 〇 |
|
|
203
231
|
| Persona pack freshness | △ |
|
|
204
232
|
| Context pack freshness | 〇 |
|
|
@@ -221,6 +249,7 @@ After the summary grid, emit a "Recommended Actions" section only if one or more
|
|
|
221
249
|
| Store integrity errors | `/forge:repair` |
|
|
222
250
|
| Modified generated files | `/forge:rebuild` |
|
|
223
251
|
| Missing generated files | `/forge:update` |
|
|
252
|
+
| Vendored tools missing / stale | `/forge:rebuild tools` |
|
|
224
253
|
| Plugin integrity modified | `/forge:update` |
|
|
225
254
|
| Persona pack missing / stale | `/forge:rebuild` |
|
|
226
255
|
| Context pack missing / stale | `/forge:rebuild` |
|