mindforge-cc 11.9.2 → 11.9.4

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.
Files changed (95) hide show
  1. package/.agent/CLAUDE.md +37 -13
  2. package/.agent/hooks/mindforge-block-no-verify.js +61 -13
  3. package/.agent/hooks/mindforge-config-protection.js +82 -3
  4. package/.agent/hooks/mindforge-context-monitor.js +1 -1
  5. package/.agent/hooks/mindforge-workflow-guard.js +2 -2
  6. package/.agent/hooks/run-with-flags.js +190 -20
  7. package/.agent/mindforge/browse.md +2 -2
  8. package/.agent/mindforge/checkpoint.md +1 -1
  9. package/.agent/mindforge/harness-audit.md +1 -1
  10. package/.agent/mindforge/orch-add-feature.md +1 -1
  11. package/.agent/mindforge/orch-build-mvp.md +1 -1
  12. package/.agent/mindforge/orch-change-feature.md +1 -1
  13. package/.agent/mindforge/orch-fix-defect.md +1 -1
  14. package/.agent/mindforge/orch-refine-code.md +1 -1
  15. package/.agent/mindforge/qa.md +2 -2
  16. package/.claude/CLAUDE.md +37 -13
  17. package/.claude/commands/mindforge/browse.md +2 -2
  18. package/.claude/commands/mindforge/checkpoint.md +1 -1
  19. package/.claude/commands/mindforge/harness-audit.md +1 -1
  20. package/.claude/commands/mindforge/orch-add-feature.md +1 -1
  21. package/.claude/commands/mindforge/orch-build-mvp.md +1 -1
  22. package/.claude/commands/mindforge/orch-change-feature.md +1 -1
  23. package/.claude/commands/mindforge/orch-fix-defect.md +1 -1
  24. package/.claude/commands/mindforge/orch-refine-code.md +1 -1
  25. package/.claude/commands/mindforge/qa.md +2 -2
  26. package/.mindforge/MINDFORGE-SCHEMA.json +1 -1
  27. package/.mindforge/config.json +3 -3
  28. package/.mindforge/engine/autonomous/headless-adapter.md +9 -2
  29. package/.mindforge/engine/temporal-protocol.md +2 -2
  30. package/.mindforge/governance/change-classifier.md +20 -4
  31. package/.mindforge/skills/agent-architecture-audit/SKILL.md +2 -2
  32. package/.mindforge/skills/orch-pipeline/SKILL.md +4 -4
  33. package/CHANGELOG.md +357 -0
  34. package/MINDFORGE.md +13 -6
  35. package/README.md +49 -30
  36. package/RELEASENOTES.md +65 -2
  37. package/SECURITY.md +22 -3
  38. package/bin/autonomous/auto-runner.js +65 -2
  39. package/bin/change-classifier.js +151 -16
  40. package/bin/dashboard/api-router.js +18 -38
  41. package/bin/dashboard/frontend/app.js +429 -0
  42. package/bin/dashboard/frontend/index.html +13 -406
  43. package/bin/dashboard/metrics-aggregator.js +52 -23
  44. package/bin/dashboard/server.js +160 -1
  45. package/bin/dashboard/sse-bridge.js +11 -8
  46. package/bin/engine/sre-manager.js +1 -1
  47. package/bin/engine/temporal-cli.js +56 -6
  48. package/bin/engine/verification-runner.js +134 -17
  49. package/bin/engine/verify-cli.js +25 -7
  50. package/bin/governance/approval-record.js +147 -0
  51. package/bin/governance/approve.js +24 -8
  52. package/bin/governance/policy-engine.js +33 -3
  53. package/bin/governance/policy-gate-hardened.js +36 -1
  54. package/bin/governance/verify-approvals.js +175 -0
  55. package/bin/harness-audit.js +224 -10
  56. package/bin/hooks/instinct-capture-hook.js +12 -4
  57. package/bin/install.js +63 -3
  58. package/bin/installer/harness-adapter-compliance.js +339 -28
  59. package/bin/installer/hook-registration.js +547 -0
  60. package/bin/installer-core.js +481 -65
  61. package/bin/learning/instinct-cli.js +7 -0
  62. package/bin/memory/vector-hub.js +196 -13
  63. package/bin/migrations/0.6.0-to-1.0.0.js +30 -25
  64. package/bin/migrations/1.0.0-to-2.0.0.js +22 -23
  65. package/bin/mindforge-cli.js +67 -6
  66. package/bin/models/cost-tracker.js +104 -6
  67. package/bin/models/model-client.js +6 -1
  68. package/bin/revops/debt-monitor.js +57 -13
  69. package/bin/security/trust-gate-hook.js +50 -6
  70. package/bin/skill-validator.js +6 -1
  71. package/bin/skills-builder/skill-scorer.js +46 -6
  72. package/bin/updater/self-update.js +6 -1
  73. package/bin/updater/version-comparator.js +21 -1
  74. package/bin/utils/mindforge-version.js +99 -0
  75. package/bin/utils/redact-secrets.js +106 -0
  76. package/bin/validate-config.js +42 -2
  77. package/bin/wizard/setup-wizard.js +4 -1
  78. package/bin/wizard/theme.js +9 -1
  79. package/changelogs/index.json +11 -9
  80. package/changelogs/v11.9.3.md +204 -0
  81. package/changelogs/v11.9.4.md +155 -0
  82. package/docs/References/config-reference.md +5 -2
  83. package/docs/References/sdk-api.md +1 -1
  84. package/docs/Templates/Codebase/architecture.md +1 -1
  85. package/docs/commands-reference.md +4 -5
  86. package/docs/faq.md +25 -5
  87. package/docs/getting-started.md +10 -4
  88. package/docs/sdk-reference.md +15 -7
  89. package/docs/troubleshooting.md +65 -6
  90. package/docs/user-guide.md +14 -14
  91. package/examples/sdk-integration/README.md +1 -1
  92. package/package.json +8 -3
  93. package/subagents/.claude-plugin/marketplace.json +1 -1
  94. package/.mindforge/memory/sync-manifest.json +0 -6
  95. package/bin/dashboard/approval-handler.js +0 -136
@@ -34,7 +34,7 @@ with `$ARGUMENTS` as the request and `operation = add-feature`. The engine will:
34
34
  3. TDD each task via `mindforge-tdd_extended` (new failing tests → green), then
35
35
  `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
36
36
  if a security trigger is touched).
37
- 4. Commit as conventional `feat(...)` commits, each writing a Merkle-linked
37
+ 4. Commit as conventional `feat(...)` commits, each writing a hash-chained
38
38
  AUDIT.jsonl entry. → **GATE 2** (confirm before commit).
39
39
 
40
40
  Honor both gates — do not write implementation before Gate 1, do not commit
@@ -42,7 +42,7 @@ with `$ARGUMENTS` as the doc path and `operation = build-mvp` (default floor:
42
42
  > the orch-pipeline skill.
43
43
  4. `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
44
44
  on any security-trigger slice), then commit the scaffold and each slice as
45
- separate conventional `feat(...)` commits, each writing a Merkle-linked
45
+ separate conventional `feat(...)` commits, each writing a hash-chained
46
46
  AUDIT.jsonl entry. → **GATE 2**.
47
47
 
48
48
  If `$ARGUMENTS` is empty, ask the user for the path to the design/spec doc.
@@ -36,7 +36,7 @@ with `$ARGUMENTS` as the request and `operation = change-feature`. The engine wi
36
36
  first is what makes this a tweak, not a fix.)
37
37
  4. `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
38
38
  on a security trigger), then commit as conventional `feat(...)` / `refactor(...)`
39
- + Merkle-linked AUDIT.jsonl entry. → **GATE 2**.
39
+ + hash-chained AUDIT.jsonl entry. → **GATE 2**.
40
40
 
41
41
  Use this only when the feature **works** but should behave differently — not for
42
42
  bugs (`/mindforge:orch-fix-defect`) or net-new capability
@@ -33,7 +33,7 @@ with `$ARGUMENTS` as the request and `operation = fix-defect`. The engine will:
33
33
  this a fix, not a tweak.)
34
34
  3. `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
35
35
  if the defect sits in a sensitive path).
36
- 4. Commit as a conventional `fix(...)` commit + Merkle-linked AUDIT.jsonl entry.
36
+ 4. Commit as a conventional `fix(...)` commit + hash-chained AUDIT.jsonl entry.
37
37
  → **GATE 2** (confirm before commit).
38
38
 
39
39
  Use this only when behavior is **broken/wrong** — not for intentional changes
@@ -35,7 +35,7 @@ with `$ARGUMENTS` as the request and `operation = refine-code`. The engine will:
35
35
  — the existing suite proves behavior is unchanged). Dead-code/dup sweeps
36
36
  delegate to `/mindforge:de-slop`.
37
37
  4. `/mindforge:review`, then commit as `refactor(...)` (the diff must be
38
- behavior-neutral) + Merkle-linked AUDIT.jsonl entry. → **GATE 2**.
38
+ behavior-neutral) + hash-chained AUDIT.jsonl entry. → **GATE 2**.
39
39
 
40
40
  Use this only when behavior must **not** change. If behavior should change at
41
41
  all, use `/mindforge:orch-change-feature` or `/mindforge:orch-fix-defect`.
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: @mindforge qa [--phase N] [--auto]
2
+ description: /mindforge:qa [--phase N] [--auto]
3
3
  ---
4
4
 
5
5
  # /mindforge:qa
6
6
 
7
7
  ## Usage
8
- `@mindforge qa [--phase N] [--auto]`
8
+ `/mindforge:qa [--phase N] [--auto]`
9
9
 
10
10
  ## Description
11
11
  Runs systematic visual QA on UI surfaces changed in the current phase.
package/.claude/CLAUDE.md CHANGED
@@ -25,25 +25,37 @@ You are a **Dynamic Multi-Agent Swarm (Agentic Mesh)**. Your mission is to execu
25
25
 
26
26
  ## 🛠️ CORE PROTOCOLS (The "How")
27
27
 
28
+ > **These are protocols you follow, not modules you call.** `SwarmController`, `PersonaFactory`
29
+ > and `WaveExecutor` are role names in the specs under `.mindforge/engine/`, not importable code —
30
+ > there is no file by any of those names. Every step below is something you do by reasoning and by
31
+ > using your own tools. Where a real executable exists, it is named with its path.
32
+
28
33
  ### 1. Swarm Dynamic Orchestration (V4)
29
34
  **IF** task complexity/impact is high **OR** cross-disciplinary logic is required:
30
- 1. Invoke `SwarmController` and activate `mindforge-swarm-execution`.
35
+ 1. Adopt the swarm-orchestration protocol described in `.mindforge/engine/`.
31
36
  2. Spawn task-specific ephemeral specialist cluster (AIEngineering, Security, etc.).
32
- 3. Inject knowledge patches via `PersonaFactory` (Context7).
33
- 4. Execute parallel mesh waves via `WaveExecutor` guided by `mindforge-parallel-mesh_extended`.
37
+ 3. Load the relevant persona brief from `.mindforge/personas/` before each specialist acts.
38
+ 4. Execute parallel mesh waves, consolidating dependent work before independent work.
34
39
  5. Consolidate mesh findings into a single `SWARM-SUMMARY`.
35
40
 
36
41
  ### 2. The Sharded Memory Loop (SRD)
37
42
  **IF** context ≥ 70% **OR** starting a new task:
38
- 1. Initialize `shard-controller.js`.
39
- 2. Rotate context per the Tri-Tier strategy (Hot/Warm/Cold).
40
- 3. Inject only sharded relevant data into the active buffer.
43
+ 1. Rotate context per the Tri-Tier strategy (Hot/Warm/Cold) yourself — this is an advisory
44
+ discipline, not an automated step.
45
+ 2. Inject only sharded relevant data into the active buffer.
46
+ 3. Re-read the current phase's plan rather than carrying stale detail forward.
41
47
 
42
48
  ### 3. The Adversarial Decision Loop (ADS)
43
49
  **BEFORE** committing any architectural change:
44
- 1. Spawn Red-Team/Blue-Team debate contexts.
45
- 2. Run `soul-engine.js` on the proposed diff.
46
- 3. **STOP** if SOUL Score < `[MIN_SOUL_SCORE]` from MINDFORGE.md.
50
+ 1. Spawn Red-Team/Blue-Team debate contexts and argue the change against itself.
51
+ 2. Score the proposal on impact, leverage, reversibility, effort, risk and cost.
52
+ 3. **STOP** if the resulting SOUL Score < `[MIN_SOUL_SCORE]` from MINDFORGE.md.
53
+
54
+ ADS is a reasoning protocol you run, not a command. Do not look for a script: measured, the two
55
+ scripts this section used to name (soul-engine.js and shard-controller.js) do not exist
56
+ anywhere in the package. The nearest real implementation, `runADSSynthesis()` in
57
+ `bin/review/ads-engine.js`, is a library with a single internal caller, exposes no CLI, and takes
58
+ `{phaseNum, goal, context, sessionId}` rather than a diff, so it cannot be invoked here either.
47
59
 
48
60
  ### 4. Standard Extended Protocols (Quality Gates)
49
61
  **MANDATORY**: For specific workflows, activate the corresponding `_extended` protocol:
@@ -78,18 +90,26 @@ Prioritize based on `[REACTIVE_MODE]` in MINDFORGE.md. These are the **Quality g
78
90
  - [ ] **AgRevOps Check**: Verify ROI trends and Security Health Score via `/api/revops`.
79
91
  - [ ] **PLAN-FIRST RULE**: Never code without a verified XML plan.
80
92
  - [ ] **Verify First**: Never task-complete without successful `<verify>` output.
81
- - [ ] **Audit Always**: Write a JSONL entry for every significant session event. All entries must be Merkle-linked.
93
+ - [ ] **Audit Always**: Write a JSONL entry for every significant session event. The result is a hash-chained append-only audit log (SHA-256 back-links): each entry sets `previous_hash` to the prior entry's `_hash`.
82
94
 
83
95
  ---
84
96
 
85
97
  ## ⚡ COMMAND SUITE
86
98
 
99
+ Every entry below has a backing command file, checked by `tests/protocol-claims.test.js`. Two that
100
+ did not (the brainstorming and history entries) are gone: neither existed in
101
+ `.claude/commands/mindforge/` or `.agent/mindforge/` (both hold exactly 221 files, so this was not
102
+ a mirror gap), and neither had a near-match to correct to. Temporal history is reachable, just not
103
+ as a slash command, so it is named as what it actually is.
104
+
87
105
  - `/mindforge:next` — Primary auto-discovery.
88
106
  - `/mindforge:auto` — Reactive engine start.
89
- - `/mindforge:brainstorming` — Creative & architectural exploration.
90
- - `/mindforge:history` — Temporal Hub access.
107
+ - `/mindforge:plan-phase` — Plan the next phase before writing code.
108
+ - `/mindforge:verify-phase` — Verify the phase against its plan.
91
109
  - `/mindforge:status` — Project health & sharding state.
92
110
  - `/mindforge:audit` — Day 4 governance access.
111
+ - `mindforge temporal <status|cleanup|inject>` — reasoning-history access (a CLI command, not a
112
+ slash command).
93
113
 
94
114
  ---
95
115
 
@@ -109,7 +129,11 @@ Adopt the Principal AI persona. Be instruction-dense, unambiguous, and architect
109
129
 
110
130
  **Source of Truth Hierarchy**:
111
131
 
112
- 1. SOUL.md (Sovereign Identity — Behavioral OS)
132
+ 1. SOUL.md (Sovereign Identity — Behavioral OS). **Not shipped in the package**, and generated
133
+ locally rather than installed: `bin/memory/identity-synthesizer.js` creates and evolves it. If
134
+ your project has no SOUL.md, this entry is vacant and authority passes to MINDFORGE.md — do not
135
+ infer its contents. The prompt-defense baseline it carries is reproduced verbatim at the top of
136
+ this file, so that part reaches you either way.
113
137
  2. MINDFORGE.md (Parameter Registry)
114
138
  3. .agent/CLAUDE.md (Protocols)
115
139
  4. `.mindforge/` (Framework Binary Logic)
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: "@mindforge browse <url | action>"
2
+ description: "/mindforge:browse <url | action>"
3
3
  ---
4
4
 
5
5
  # /mindforge:browse
6
6
 
7
7
  ## Usage
8
- `@mindforge browse <url | action>`
8
+ `/mindforge:browse <url | action>`
9
9
 
10
10
  ## Description
11
11
  Controls the persistent MindForge browser daemon.
@@ -61,7 +61,7 @@ Remove old checkpoints, keeping the last 5.
61
61
 
62
62
  ## AUDIT linkage
63
63
 
64
- Each create/verify optionally writes a Merkle-linked AUDIT.jsonl entry:
64
+ Each create/verify optionally writes a hash-chained AUDIT.jsonl entry:
65
65
 
66
66
  ```json
67
67
  { "event": "checkpoint_created", "name": "core-done", "sha": "abc1234", "tests_pass_rate": 1.0, "coverage": 0.0 }
@@ -31,7 +31,7 @@ LLM layer judges *whether it matters here* and proposes the highest-leverage fix
31
31
 
32
32
  ## Step 3 — Report + AUDIT entry
33
33
 
34
- Summarize the scorecard, then write a Merkle-linked AUDIT.jsonl entry:
34
+ Summarize the scorecard, then write a hash-chained AUDIT.jsonl entry:
35
35
 
36
36
  ```json
37
37
  {
@@ -34,7 +34,7 @@ with `$ARGUMENTS` as the request and `operation = add-feature`. The engine will:
34
34
  3. TDD each task via `mindforge-tdd_extended` (new failing tests → green), then
35
35
  `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
36
36
  if a security trigger is touched).
37
- 4. Commit as conventional `feat(...)` commits, each writing a Merkle-linked
37
+ 4. Commit as conventional `feat(...)` commits, each writing a hash-chained
38
38
  AUDIT.jsonl entry. → **GATE 2** (confirm before commit).
39
39
 
40
40
  Honor both gates — do not write implementation before Gate 1, do not commit
@@ -42,7 +42,7 @@ with `$ARGUMENTS` as the doc path and `operation = build-mvp` (default floor:
42
42
  > the orch-pipeline skill.
43
43
  4. `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
44
44
  on any security-trigger slice), then commit the scaffold and each slice as
45
- separate conventional `feat(...)` commits, each writing a Merkle-linked
45
+ separate conventional `feat(...)` commits, each writing a hash-chained
46
46
  AUDIT.jsonl entry. → **GATE 2**.
47
47
 
48
48
  If `$ARGUMENTS` is empty, ask the user for the path to the design/spec doc.
@@ -36,7 +36,7 @@ with `$ARGUMENTS` as the request and `operation = change-feature`. The engine wi
36
36
  first is what makes this a tweak, not a fix.)
37
37
  4. `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
38
38
  on a security trigger), then commit as conventional `feat(...)` / `refactor(...)`
39
- + Merkle-linked AUDIT.jsonl entry. → **GATE 2**.
39
+ + hash-chained AUDIT.jsonl entry. → **GATE 2**.
40
40
 
41
41
  Use this only when the feature **works** but should behave differently — not for
42
42
  bugs (`/mindforge:orch-fix-defect`) or net-new capability
@@ -33,7 +33,7 @@ with `$ARGUMENTS` as the request and `operation = fix-defect`. The engine will:
33
33
  this a fix, not a tweak.)
34
34
  3. `/mindforge:review` (+ the `quick.md` security auto-trigger / `security-reviewer`
35
35
  if the defect sits in a sensitive path).
36
- 4. Commit as a conventional `fix(...)` commit + Merkle-linked AUDIT.jsonl entry.
36
+ 4. Commit as a conventional `fix(...)` commit + hash-chained AUDIT.jsonl entry.
37
37
  → **GATE 2** (confirm before commit).
38
38
 
39
39
  Use this only when behavior is **broken/wrong** — not for intentional changes
@@ -35,7 +35,7 @@ with `$ARGUMENTS` as the request and `operation = refine-code`. The engine will:
35
35
  — the existing suite proves behavior is unchanged). Dead-code/dup sweeps
36
36
  delegate to `/mindforge:de-slop`.
37
37
  4. `/mindforge:review`, then commit as `refactor(...)` (the diff must be
38
- behavior-neutral) + Merkle-linked AUDIT.jsonl entry. → **GATE 2**.
38
+ behavior-neutral) + hash-chained AUDIT.jsonl entry. → **GATE 2**.
39
39
 
40
40
  Use this only when behavior must **not** change. If behavior should change at
41
41
  all, use `/mindforge:orch-change-feature` or `/mindforge:orch-fix-defect`.
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: "@mindforge qa [--phase N] [--auto]"
2
+ description: "/mindforge:qa [--phase N] [--auto]"
3
3
  ---
4
4
 
5
5
  # /mindforge:qa
6
6
 
7
7
  ## Usage
8
- `@mindforge qa [--phase N] [--auto]`
8
+ `/mindforge:qa [--phase N] [--auto]`
9
9
 
10
10
  ## Description
11
11
  Runs systematic visual QA on UI surfaces changed in the current phase.
@@ -85,7 +85,7 @@
85
85
  },
86
86
  "COST_HARD_LIMIT_USD": {
87
87
  "type": "number", "minimum": 0, "maximum": 10000,
88
- "description": "Daily hard cost limit in USD. DECLARED BUT NOT ENFORCED as of 11.9.2: bin/models/cost-tracker.js reads MODEL_COST_HARD_LIMIT_USD, which this registry does not declare, so preflight() returns early and no cap is applied. Do not treat this as a spend control. Tracked as COST-02."
88
+ "description": "Daily hard cost limit in USD. ENFORCED as of 11.9.3 (COST-02): bin/models/cost-tracker.js preflight() throws COST_LIMIT_REACHED once today's ledger spend plus the call estimate reaches this value, and bin/models/model-client.js re-throws it. 0 disables the cap, and so does omitting the key (it is `recommended`, not `required`) an upgrade never rewrites an existing MINDFORGE.md. A present-but-unparseable value throws COST_LIMIT_MISCONFIGURED rather than silently running uncapped."
89
89
  },
90
90
  "ADS_DEBATE_ROUNDS": {
91
91
  "type": "number", "minimum": 1, "maximum": 10,
@@ -1,11 +1,11 @@
1
1
  {
2
- "version": "11.9.2",
2
+ "version": "11.9.4",
3
3
  "environment": "development",
4
4
  "governance": {
5
5
  "drift_threshold": 0.75,
6
6
  "critical_drift_threshold": 0.5,
7
7
  "res_threshold": 0.8,
8
- "active_did": "did:mindforge:766e07ac-8f56-4840-be61-316b90bbed35"
8
+ "active_did": ""
9
9
  },
10
10
  "revops": {
11
11
  "market_registry": {
@@ -71,7 +71,7 @@
71
71
  },
72
72
  "mesh": {
73
73
  "_node_id_note": "Set node_id to a unique value per node in multi-node deployments. auto = hostname-derived.",
74
- "node_id": "beta-node",
74
+ "node_id": "auto",
75
75
  "peers": []
76
76
  },
77
77
  "ase": {
@@ -46,8 +46,15 @@ Typical GitHub Action setup:
46
46
  ```yaml
47
47
  steps:
48
48
  - uses: actions/checkout@v4
49
- - name: Run MindForge Auto
50
- run: npx mindforge auto --phase 3 --headless
49
+ - name: Run MindForge headless
50
+ # `npx --package=mindforge-cc` PINS the package. Bare `npx mindforge` resolves to an UNRELATED
51
+ # third-party package on the public registry (mindforge@1.0.21, maintainer william@mindforge.ai) —
52
+ # not this project, whose npm name is mindforge-cc. In a fresh runner there is no local bin to
53
+ # shadow it, so npx fetches and unpacks that package, runs any install scripts it has, and then
54
+ # fails with "could not determine executable to run" because it exposes no `mindforge` bin.
55
+ # Measured both forms: the pinned one exits 0 with mindforge-cc in the npx cache; the bare one
56
+ # exits 1 after downloading someone else's package into a job holding MINDFORGE_TOKEN.
57
+ run: npx --yes --package=mindforge-cc mindforge headless --phase 3
51
58
  env:
52
59
  MINDFORGE_TOKEN: ${{ secrets.MINDFORGE_TOKEN }}
53
60
  AUTO_PUSH_ON_WAVE_COMPLETE: true
@@ -10,7 +10,7 @@ Temporal Vision enables high-fidelity "Time-Travel Debugging" by snapshotting th
10
10
  - `task_completed`
11
11
  - `hindsight_injected`
12
12
  2. **Persistence**: Snapshots are stored in `.planning/history/[audit_id]/`.
13
- 3. **Retention**: The system retains snapshots for the current milestone. Completed milestones should be archived or purged using `/mindforge:temporal --cleanup`.
13
+ 3. **Retention**: The system retains snapshots for the current milestone. Completed milestones should be archived or purged using `mindforge temporal cleanup`.
14
14
 
15
15
  ## Hindsight Injection Protocol
16
16
  Hindsight Injection is a powerful tool and must be used according to these safety rules:
@@ -37,4 +37,4 @@ Hindsight Injection is a powerful tool and must be used according to these safet
37
37
  ## Common Operations
38
38
  - `GET /api/temporal/history`: View the timeline.
39
39
  - `POST /api/temporal/inject`: Perform hindsight repair.
40
- - `/mindforge:temporal --status`: Check history size and snapshot count.
40
+ - `mindforge temporal status`: Check history size and snapshot count.
@@ -44,9 +44,25 @@ Scan the actual diff content, not only filenames, for patterns such as:
44
44
  This protects against security-critical code being added to innocuous filenames
45
45
  like `src/utils/helper.ts`.
46
46
 
47
- ### Signal C — AUDIT history patterns
48
- If the current phase has a recent HIGH or CRITICAL `security_finding`, the next
49
- change in that phase is elevated to Tier 3 automatically.
47
+ ### Signal C — AUDIT history patterns (SPECIFIED, NOT IMPLEMENTED)
48
+ Intended behaviour: if the current phase has a recent HIGH or CRITICAL
49
+ `security_finding`, the next change in that phase is elevated to Tier 3
50
+ automatically.
51
+
52
+ **This signal does not exist in `bin/change-classifier.js`.** It is recorded here
53
+ as a design intent, not as a live protection, because it would read from
54
+ `.planning/AUDIT.jsonl` — which is gitignored (`.gitignore:81`), untracked, and
55
+ absent from `package.json` `files[]`. That file therefore does not exist in the
56
+ fresh clone the classifier actually runs in
57
+ (`.github/workflows/control-plane.yml`). Implementing it against a source that is
58
+ structurally unavailable at the point of enforcement would produce a signal that
59
+ silently never fires — the same defect class as the Signal B gap above, where 13
60
+ of the 19 documented patterns were specified and absent.
61
+
62
+ The `security_finding` event itself is real and carries `severity`: see
63
+ `bin/dashboard/metrics-aggregator.js:160` and `bin/revops/debt-monitor.js:23`,
64
+ both of which read it from a local audit log. Enabling Signal C needs a decision
65
+ about how phase history reaches CI, not merely classifier code.
50
66
 
51
67
  ## Classification audit entry
52
68
  Record why the tier was selected:
@@ -56,7 +72,7 @@ Record why the tier was selected:
56
72
  "event": "change_classified",
57
73
  "tier": 3,
58
74
  "classification_reason": "code pattern: jwt.sign found in src/utils/helper.ts",
59
- "signals_checked": ["file_path", "code_content", "audit_history"],
75
+ "signals_checked": ["file_path", "code_content"],
60
76
  "signal_triggered": "code_content",
61
77
  "pattern_matched": "jwt.sign"
62
78
  }
@@ -79,7 +79,7 @@ audit has a real target, not an abstraction.
79
79
  | 9 | Answer shaping | SWARM-SUMMARY consolidation | Format corruption in the final response |
80
80
  | 10 | Platform rendering | Dashboard (localhost:7339) / CLI / API transport | Transport-layer mutation of a valid answer |
81
81
  | 11 | Hidden repair loops | soul-engine ADS rewrite + Temporal hindsight regeneration | Silent fallback/retry running a second LLM pass |
82
- | 12 | Persistence | auto-state.json + Merkle audit log | Expired state or cached artifacts reused as live evidence |
82
+ | 12 | Persistence | auto-state.json + hash-chained audit log | Expired state or cached artifacts reused as live evidence |
83
83
 
84
84
  ### Common Failure Patterns
85
85
 
@@ -148,7 +148,7 @@ Define what you're auditing:
148
148
  Gather evidence from the codebase:
149
149
  - **Source code** — swarm loop, hooks_route tool router, shard admission, prompt
150
150
  assembly across the source-of-truth hierarchy
151
- - **Logs** — NexusTracer session traces, Merkle-linked AUDIT entries, tool-call
151
+ - **Logs** — NexusTracer session traces, hash-chained AUDIT entries, tool-call
152
152
  records
153
153
  - **Config** — MINDFORGE.md parameters, tool schemas, PersonaFactory patches,
154
154
  provider settings
@@ -128,7 +128,7 @@ Each phase delegates — it does not do the work inline.
128
128
  and `security-auditor` / `penetration-tester` whenever the diff touches a
129
129
  security trigger.
130
130
  - **6. Commit** — conventional commits (`feat:` / `fix:` / `refactor:` / …), one
131
- per logical chunk, **+ a Merkle-linked AUDIT.jsonl entry per commit**. → **GATE 2.**
131
+ per logical chunk, **+ a hash-chained AUDIT.jsonl entry per commit**. → **GATE 2.**
132
132
 
133
133
  ---
134
134
 
@@ -166,7 +166,7 @@ This family is **gated, not autonomous**:
166
166
  work, the manual security overhead is completed here before approval.
167
167
  2. **GATE 2 — before Commit.** Present the diff summary and proposed conventional
168
168
  commit messages; do not commit until the user confirms. Each confirmed commit
169
- writes a Merkle-linked AUDIT.jsonl entry (below).
169
+ writes a hash-chained AUDIT.jsonl entry (below).
170
170
 
171
171
  Everything between the gates flows without stopping.
172
172
 
@@ -227,7 +227,7 @@ On user confirmation at Gate 2, for **each** logical commit:
227
227
 
228
228
  1. Commit with a **conventional** message scoped to one logical change:
229
229
  `feat(<scope>): …` / `fix(<scope>): …` / `refactor(<scope>): …` / etc.
230
- 2. Append a **Merkle-linked** AUDIT.jsonl entry to `.planning/AUDIT.jsonl`. Each
230
+ 2. Append a **hash-chained** AUDIT.jsonl entry to `.planning/AUDIT.jsonl`. Each
231
231
  entry sets `previous_hash` to the prior entry's `_hash` and computes its own
232
232
  `_hash` (per `.mindforge/audit/AUDIT-SCHEMA.md`):
233
233
 
@@ -263,7 +263,7 @@ On user confirmation at Gate 2, for **each** logical commit:
263
263
  security trigger was touched; `/mindforge:security-scan` passed PRE-COMMIT
264
264
  with no unaddressed Medium+ findings.
265
265
  - [ ] Commits are conventional and scoped to one logical change.
266
- - [ ] Each commit wrote a Merkle-linked AUDIT.jsonl entry (`previous_hash`/`_hash`).
266
+ - [ ] Each commit wrote a hash-chained AUDIT.jsonl entry (`previous_hash`/`_hash`).
267
267
  - [ ] New / changed behavior has tests; coverage ≥ 80%.
268
268
 
269
269
  ---