mindforge-cc 11.9.8 → 12.0.0
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/.agent/mindforge/agent.md +1 -1
- package/.agent/mindforge/health.md +7 -4
- package/.agent/mindforge/help.md +9 -5
- package/.agent/mindforge/install-skill.md +8 -6
- package/.agent/mindforge/marketplace.md +6 -0
- package/.agent/mindforge/security-scan.md +9 -4
- package/.agent/mindforge/skills-index.md +1 -1
- package/.agent/mindforge/status.md +5 -4
- package/.claude/commands/mindforge/agent.md +1 -1
- package/.claude/commands/mindforge/health.md +7 -4
- package/.claude/commands/mindforge/help.md +9 -5
- package/.claude/commands/mindforge/install-skill.md +8 -6
- package/.claude/commands/mindforge/marketplace.md +6 -0
- package/.claude/commands/mindforge/security-scan.md +9 -4
- package/.claude/commands/mindforge/skills-index.md +1 -1
- package/.claude/commands/mindforge/status.md +5 -4
- package/.mindforge/config.json +1 -1
- package/.mindforge/dynamic-workflows/scripts/feature-planner.js +12 -0
- package/.mindforge/dynamic-workflows/scripts/incident-response.js +6 -0
- package/.mindforge/dynamic-workflows/scripts/onboard-codebase.js +9 -0
- package/.mindforge/dynamic-workflows/scripts/perf-optimize.js +6 -0
- package/.mindforge/dynamic-workflows/scripts/refactor-plan.js +3 -0
- package/.mindforge/dynamic-workflows/scripts/release-prep.js +9 -0
- package/.mindforge/dynamic-workflows/scripts/tdd-sprint.js +12 -0
- package/.mindforge/dynamic-workflows/scripts/verification-loop.js +9 -0
- package/.mindforge/org/skills/MANIFEST.md +32 -0
- package/.mindforge/personas/mf-executor.md +1 -1
- package/.mindforge/personas/mf-memory.md +1 -1
- package/.mindforge/personas/mf-tool.md +1 -1
- package/.mindforge/personas/swarm-templates.json +10 -20
- package/CHANGELOG.md +146 -0
- package/MINDFORGE-AGENTIC-SECURITY.md +189 -0
- package/MINDFORGE.md +2 -2
- package/README.md +136 -85
- package/RELEASENOTES.md +64 -0
- package/SECURITY.md +1 -1
- package/bin/governance/audit-verifier.js +12 -3
- package/bin/governance/config-manager.js +4 -1
- package/bin/installer/harness-adapter-compliance.js +1 -1
- package/bin/installer-core.js +74 -21
- package/bin/mindforge-cli.js +2 -2
- package/bin/security/trust-boundaries.js +12 -0
- package/bin/utils/readiness-gate.js +1 -1
- package/bin/verify-audit.js +7 -1
- package/bin/wizard/theme.js +3 -4
- package/changelogs/v11.9.9.md +59 -0
- package/changelogs/v12.0.0.md +89 -0
- package/docs/References/commands.md +2 -2
- package/docs/References/config-reference.md +20 -35
- package/docs/References/sdk-api.md +10 -4
- package/docs/References/skills-api.md +9 -7
- package/docs/commands-reference.md +2 -2
- package/docs/faq.md +2 -2
- package/docs/getting-started.md +9 -3
- package/docs/sdk-reference.md +3 -3
- package/docs/security/SECURITY.md +14 -0
- package/docs/security/ZTAI-OVERVIEW.md +53 -0
- package/docs/security/penetration-test-results.md +36 -0
- package/docs/security/threat-model.md +148 -0
- package/docs/troubleshooting.md +14 -10
- package/docs/user-guide.md +12 -8
- package/docs/usp-features.md +60 -0
- package/package.json +5 -1
- package/subagents/README.md +38 -0
- package/.agent/skills/godmode/SKILL.md +0 -396
- package/.agent/skills/godmode/references/jailbreak-templates.md +0 -128
- package/.agent/skills/godmode/references/refusal-detection.md +0 -142
|
@@ -199,6 +199,18 @@ function isHighImpact(command) {
|
|
|
199
199
|
|
|
200
200
|
// ── #14 Power-state commands ────────────────────────────────────────────
|
|
201
201
|
/\b(shutdown|reboot|halt|poweroff)\b/i,
|
|
202
|
+
|
|
203
|
+
// ── #16 Download -> chmod +x -> direct execution (dropper chain) ───────
|
|
204
|
+
// curl/wget fetches a payload, chmod +x makes it executable, then the
|
|
205
|
+
// SAME command line invokes it directly by path with no interpreter
|
|
206
|
+
// keyword in that final step — so neither #4 (pipe-to-shell) nor #5
|
|
207
|
+
// (interpreter + untrusted path) above ever see it. Requires all three
|
|
208
|
+
// in order: a curl/wget call, a chmod ... +x on that call's command
|
|
209
|
+
// segment, and a later bare invocation of an absolute, /tmp, /var/tmp,
|
|
210
|
+
// /dev/shm, or ~/-rooted path as its own command (introduced by a
|
|
211
|
+
// separator or the start of the line) — i.e. the path being run, not
|
|
212
|
+
// merely referenced as an argument (audit finding, pre-release review).
|
|
213
|
+
/\b(curl|wget)\b[\s\S]*?\bchmod\b[^;&|\n]*\+x\b[\s\S]*?(^|[;&|\n]\s*)(~\/|\/tmp\/|\/var\/tmp\/|\/dev\/shm\/|\/)\S+/i,
|
|
202
214
|
];
|
|
203
215
|
return patterns.some(pattern => pattern.test(sanitized));
|
|
204
216
|
}
|
|
@@ -119,7 +119,7 @@ function releaseReadinessChecks(root) {
|
|
|
119
119
|
label: 'RELEASENOTES.md present and has an entry for the current version',
|
|
120
120
|
points: 2,
|
|
121
121
|
pass: fileExists(root, 'RELEASENOTES.md') && Boolean(pkgVersion)
|
|
122
|
-
&& new RegExp(`^## v${pkgVersion.replace(
|
|
122
|
+
&& new RegExp(`^## v${pkgVersion.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?![\\d.\\w-])`, 'm')
|
|
123
123
|
.test(safeRead(root, 'RELEASENOTES.md')),
|
|
124
124
|
fix: `Add a "## v${pkgVersion || '?'}" section to RELEASENOTES.md. README.md links here as the human-readable route to the BREAKING notes, so releasing without one points readers at a file whose newest entry describes a different version.`,
|
|
125
125
|
},
|
package/bin/verify-audit.js
CHANGED
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
const { verifyAuditChain } = require('./governance/audit-verifier');
|
|
4
4
|
const auditPath = process.argv[2] || '.planning/AUDIT.jsonl';
|
|
5
5
|
const result = verifyAuditChain(auditPath);
|
|
6
|
-
if (result.
|
|
6
|
+
if (result.missing) {
|
|
7
|
+
// Not a break: a project that has never written an audit entry has no chain to break. Measured
|
|
8
|
+
// before this branch existed: an absent log printed "❌ audit chain BROKEN at entry 0: unreadable:
|
|
9
|
+
// ENOENT..." and exited 1 — indistinguishable from real tamper detection to a brand-new user.
|
|
10
|
+
process.stdout.write(`ℹ️ no audit log yet at ${auditPath} — one will be created on first audited action\n`);
|
|
11
|
+
process.exit(0);
|
|
12
|
+
} else if (result.valid) {
|
|
7
13
|
process.stdout.write(`✅ audit chain valid: ${result.count} entries\n`);
|
|
8
14
|
process.exit(0);
|
|
9
15
|
} else {
|
package/bin/wizard/theme.js
CHANGED
|
@@ -41,7 +41,7 @@ const Theme = {
|
|
|
41
41
|
'╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝'
|
|
42
42
|
].join('\n'),
|
|
43
43
|
|
|
44
|
-
tagline: '
|
|
44
|
+
tagline: 'AI-NATIVE AGENTIC FRAMEWORK FOR CLAUDE CODE',
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
47
|
* Print a styled header with BMad-style border flare
|
|
@@ -66,9 +66,8 @@ const Theme = {
|
|
|
66
66
|
console.log(` ${this.colors.dim('│')} ${this.colors.bold('THE PLATFORM VISION:')}`);
|
|
67
67
|
console.log(` ${this.colors.dim('│')} - Unified Enterprise Agentic Ecosystem`);
|
|
68
68
|
console.log(` ${this.colors.dim('│')} - Modular Skills & Persona Architecture`);
|
|
69
|
-
|
|
70
|
-
console.log(` ${this.colors.dim('│')} -
|
|
71
|
-
console.log(` ${this.colors.dim('│')} - Autonomous Governance & Self-Healing`);
|
|
69
|
+
console.log(` ${this.colors.dim('│')} - ${this.colors.magenta('Post-Quantum Security')} (simulated) & Proactive Task Homing`);
|
|
70
|
+
console.log(` ${this.colors.dim('│')} - Governance, Audit, and Verification Gates`);
|
|
72
71
|
console.log(` ${this.colors.dim('│')}`);
|
|
73
72
|
console.log(` ${this.colors.dim('│')} ${this.colors.yellow('🌟 100% FREE & OPEN SOURCE')}`);
|
|
74
73
|
console.log(` ${this.colors.dim('│')} - No paywalls. No gated content.`);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [11.9.9] — 2026-09-23 — Release-readiness audit: 5 CRITICAL + 9 HIGH findings fixed
|
|
4
|
+
|
|
5
|
+
Patch release. An 8-agent audit workflow tested every MindForge surface (slash commands,
|
|
6
|
+
skills, personas, subagents, dynamic workflows, CLI/MCP, live install/verify/health) as a
|
|
7
|
+
release gate before shipping to real external users. Every finding was independently
|
|
8
|
+
re-verified against live code/commands before fixing, not trusted from the audit report
|
|
9
|
+
alone.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
**CRITICAL**
|
|
14
|
+
|
|
15
|
+
- Removed the `godmode` skill entirely — a real, complete LLM jailbreak toolkit that was
|
|
16
|
+
shipping unconditionally in the published npm tarball, undisclosed anywhere in the docs.
|
|
17
|
+
- Rewrote `help.md`/`status.md`/`health.md`/`security-scan.md`: they claimed
|
|
18
|
+
PQAS/biometric-bypass/lattice-crypto signature verification was "active by default,"
|
|
19
|
+
directly contradicted by `quantum-crypto.js`'s own comments (simulated, off by default).
|
|
20
|
+
- Fixed `--minimal`: a second, unguarded persona-copy path in `installer-core.js` shipped
|
|
21
|
+
the full 218-file persona set regardless of `--minimal`. Gated on `!minimal` rather than
|
|
22
|
+
removed outright — the copy is a real, tested per-harness delivery contract, confirmed
|
|
23
|
+
against `harness-adapter-compliance.js`'s `ADAPTER_RECORDS`.
|
|
24
|
+
- Fixed `security-scan.md`'s "Sovereign Integrity Check," which called a CLI flag on a
|
|
25
|
+
module with no CLI entrypoint (always exits 0) — a CRITICAL gate that could never fail.
|
|
26
|
+
Replaced with the one real check (policy-engine tamper detection).
|
|
27
|
+
- Disclosed `bin/engine/skill-loader.js` as dead code (4 lines, zero callers). The real
|
|
28
|
+
trigger-matching mechanism is an LLM-followed protocol spec
|
|
29
|
+
(`.mindforge/engine/skills/loader.md`), not deterministic code.
|
|
30
|
+
|
|
31
|
+
**HIGH**
|
|
32
|
+
|
|
33
|
+
- `install-skill.md`: documented the literal action token (`install`/`register`/`audit`)
|
|
34
|
+
`bin/skill-registry.js` deliberately requires with no default.
|
|
35
|
+
- `marketplace.md`: disclosed that zero published packages exist today; labeled sample
|
|
36
|
+
output as illustrative, not reproducible.
|
|
37
|
+
- `status.md`: fixed a nonexistent-file reference (`AutoRunner.js` -> the real
|
|
38
|
+
`bin/autonomous/auto-runner.js`).
|
|
39
|
+
- `pr-review`/`cross-review`: was an unqualified alias with descriptions implying different
|
|
40
|
+
behavior — now honestly documented as the same 2-model adversarial review engine.
|
|
41
|
+
- 8 dynamic-workflow scripts (`feature-planner`, `tdd-sprint`, `onboard-codebase`,
|
|
42
|
+
`incident-response`, `release-prep`, `perf-optimize`, `refactor-plan`,
|
|
43
|
+
`verification-loop`): added null-guards after every dependent `agent()` call, matching
|
|
44
|
+
the pattern ~27 other scripts already use.
|
|
45
|
+
- `MANIFEST.md`: registered 32 engine-tier skills that existed on disk but were never
|
|
46
|
+
listed in the registration source of truth (`systematic-debugging`,
|
|
47
|
+
`test-driven-development`, and 30 others).
|
|
48
|
+
- 3 MF-series personas (`mf-tool`, `mf-memory`, `mf-executor`): replaced fictional tool
|
|
49
|
+
grants (`Database`, `API`, `task_boundary`, `commit_memory`,
|
|
50
|
+
`multi_replace_file_content`) with the real Claude Code tool vocabulary.
|
|
51
|
+
- `swarm-templates.json`: reconciled 11 dangling persona references (2 fixed by name
|
|
52
|
+
correction, 9 removed with no real equivalent); updated `docs/PERSONAS.md`'s
|
|
53
|
+
`data-privacy-engineer` writeup to match the real `privacy-engineer.md` persona it now
|
|
54
|
+
points to.
|
|
55
|
+
- `health` command: wired to `verifyInstall()` so it actually checks installation
|
|
56
|
+
integrity instead of only an npm-version lookup.
|
|
57
|
+
- `AUDIT.jsonl`: distinguished "no audit log yet" from "chain broken" so a brand-new
|
|
58
|
+
install doesn't report a false BROKEN status; shipped `verify-audit.js` by default (its
|
|
59
|
+
only dependencies already shipped unconditionally).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [12.0.0] — 2026-09-24 — First release aimed at real external users
|
|
4
|
+
|
|
5
|
+
MindForge's first release deliberately cut for real external users, not
|
|
6
|
+
just internal iteration. The major-version bump is a milestone marker for
|
|
7
|
+
that shift, not a signal of a breaking API/behavior change — there is none
|
|
8
|
+
in this release; every item below is a fix. It follows a second, independent
|
|
9
|
+
8-agent audit (security/STRIDE, staff-engineer code review, deps+license,
|
|
10
|
+
live production dry-run across all 6 supported runtimes, docs accuracy,
|
|
11
|
+
re-verification of the prior release's deferred backlog, test-coverage gaps,
|
|
12
|
+
and a full trace of the CI/CD release pipeline) run specifically to check
|
|
13
|
+
whether v11.9.9 was actually ready for that shift. It wasn't yet: this
|
|
14
|
+
release closes the 1 CRITICAL and 4 HIGH findings that audit surfaced, plus
|
|
15
|
+
8 MEDIUM/LOW findings judged worth fixing before this exact cutover, all
|
|
16
|
+
independently adversarially re-verified (10/10 confirmed, 0 refuted) before
|
|
17
|
+
being fixed.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
**CRITICAL**
|
|
22
|
+
|
|
23
|
+
- `--global` install printed a fabricated "PAYLOAD MANIFEST" (216 personas,
|
|
24
|
+
122 skills, etc. "active") while writing none of them — the install
|
|
25
|
+
success banner counted the source package tree instead of what a global
|
|
26
|
+
install actually writes (entry file, commands, subagents only, by
|
|
27
|
+
design). Now prints an honest message describing exactly that.
|
|
28
|
+
|
|
29
|
+
**HIGH**
|
|
30
|
+
|
|
31
|
+
- `help.md`/`status.md`/`health.md`/`security-scan.md`'s honesty fixes from
|
|
32
|
+
11.9.9 didn't reach the install banner itself: it printed "Proactive
|
|
33
|
+
Semantic Intent Harvesting active" — unhedged — for a feature confirmed
|
|
34
|
+
to be a genuine no-op, one line below a properly-hedged PQAS claim.
|
|
35
|
+
Reworded to match. The banner's surrounding "Autonomous Enterprise
|
|
36
|
+
Agentic Ecosystem" / "Sovereign Intelligence" / "Autonomous Governance &
|
|
37
|
+
Self-Healing" marketing language, unbacked by anything the rest of the
|
|
38
|
+
project stands behind, is gone too.
|
|
39
|
+
- `verification-loop.js` (one of the 8 dynamic-workflow scripts null-guarded
|
|
40
|
+
in 11.9.9) could still crash with an unhandled `TypeError` if its round
|
|
41
|
+
loop completed zero rounds before any guard ran. Fixed with the same
|
|
42
|
+
graceful-return shape its siblings already use.
|
|
43
|
+
- Two real test-coverage gaps: nothing asserted the removed `godmode` skill
|
|
44
|
+
stays absent, or that `--minimal` actually ships 0 persona files. Both
|
|
45
|
+
covered now, each verified by deliberately breaking the real fix and
|
|
46
|
+
confirming the new test catches it.
|
|
47
|
+
|
|
48
|
+
**MEDIUM**
|
|
49
|
+
|
|
50
|
+
- `bin/security/trust-boundaries.js`'s deny-class gate missed the classic
|
|
51
|
+
"curl/wget a payload, chmod +x it, run it by path" dropper chain (no
|
|
52
|
+
interpreter keyword in the final step, so neither existing pattern
|
|
53
|
+
fired). Added a pattern for it.
|
|
54
|
+
- `bin/governance/config-manager.js`'s `ConfigManager.set()` was vulnerable
|
|
55
|
+
to prototype pollution via a `__proto__`-shaped key — not reachable from
|
|
56
|
+
any shipped call site today, but a live, shared, mutable singleton.
|
|
57
|
+
Guarded, matching a pattern this codebase already uses elsewhere.
|
|
58
|
+
- CodeQL flagged (high severity) an incomplete regex-escape in
|
|
59
|
+
`bin/utils/readiness-gate.js` once this release's own plugin-bundling fix
|
|
60
|
+
(below) exposed it to scanning for the first time — only literal dots
|
|
61
|
+
were escaped before building a `RegExp` from the package version string.
|
|
62
|
+
Fixed to escape every regex metacharacter.
|
|
63
|
+
- Dependabot's unconstrained docker config silently shipped the Docker MCP
|
|
64
|
+
Catalog image on `node:25-bookworm-slim`, a non-LTS release. Reverted to
|
|
65
|
+
`node:22-bookworm-slim` (the CI test matrix's highest tested version) and
|
|
66
|
+
added an ignore rule blocking future Node major-version bumps of the base
|
|
67
|
+
image.
|
|
68
|
+
- `docs/PERSONAS.md`'s "Enterprise Swarm Templates" table cited 16 of 25
|
|
69
|
+
persona names that don't exist — a doc artifact never regenerated after
|
|
70
|
+
`swarm-templates.json`'s own dangling-reference cleanup in 11.9.9.
|
|
71
|
+
Regenerated wholesale from the real file: all 49 templates, exact
|
|
72
|
+
leader/members/focus values.
|
|
73
|
+
- The release workflow's "stable dist-tag" step has failed on 4 consecutive
|
|
74
|
+
real releases (11.9.6 through 11.9.9) for an identical, root-caused
|
|
75
|
+
reason: its retry budget (3 attempts × 5s) was an order of magnitude
|
|
76
|
+
short of npm's own stated multi-minute propagation window, even though
|
|
77
|
+
the underlying write always succeeded. Widened to 10 attempts × 15s.
|
|
78
|
+
- `.agent/settings.json` was missing the `instinct-capture` hook
|
|
79
|
+
`.claude/settings.json` has had since before 11.9.0 — a tracked,
|
|
80
|
+
documented parity gap. Mirrored the registration and, for the first
|
|
81
|
+
time, bundled its dependency closure into the plugin distribution.
|
|
82
|
+
- Three GitHub Actions hygiene items: an `${{ }}`-into-shell interpolation
|
|
83
|
+
inconsistency in `control-plane.yml`, an unused `contents: write` grant
|
|
84
|
+
in `auto-pr.yml`, and an unverified `gitleaks` binary download in
|
|
85
|
+
`secret-scan.yml` (now checksum-verified against the project's own
|
|
86
|
+
published `checksums.txt`).
|
|
87
|
+
- Stale doc drift: `agent.md`'s "13+ personas" claim (two mirrors)
|
|
88
|
+
corrected to 216; `docs/registry/PERSONAS.md`'s 3-release-stale version
|
|
89
|
+
header and unhedged PQAS citation corrected.
|
|
@@ -36,7 +36,7 @@ the complete, verified list.
|
|
|
36
36
|
| `/mindforge:note` | `note <text> [list|promote N]` | Zero-friction idea capture and todo promotion | v2.0.0 |
|
|
37
37
|
| `/mindforge:quick` | `quick` | Run a small, single-task plan without a full phase | |
|
|
38
38
|
| `/mindforge:status` | `status` | Show current phase, plan status, and next action | |
|
|
39
|
-
| `/mindforge:health` | `health
|
|
39
|
+
| `/mindforge:health` | `health` | Validate installation. `--repair` is documented but not wired into the CLI backing path — it's silently ignored, byte-identical to plain `health`. | |
|
|
40
40
|
| `/mindforge:review` | `review [N]` | Run a structured review pass for a phase | |
|
|
41
41
|
| `/mindforge:debug` | `debug [plan-id]` | Debug a failed plan with root-cause workflow | |
|
|
42
42
|
| `/mindforge:add-backlog` | `add-backlog <desc>` | Park ideas in 999.x "parking lot" | v2.0.0 |
|
|
@@ -70,7 +70,7 @@ the complete, verified list.
|
|
|
70
70
|
| `/mindforge:metrics` | `metrics [--phase N]` | Compute quality and throughput metrics | |
|
|
71
71
|
| `/mindforge:profile-team` | `profile-team` | Generate team skill and ownership profile | |
|
|
72
72
|
| `/mindforge:benchmark` | `benchmark [--skill X]` | Measure skill effectiveness | |
|
|
73
|
-
| `/mindforge:tokens` | `tokens [--
|
|
73
|
+
| `/mindforge:tokens` | `tokens [--phase N] [--session ID] [--window short\|medium\|long] [--optimise]` | Token usage profiling and optimisation (`--profile`/`--summary` don't exist) | |
|
|
74
74
|
|
|
75
75
|
### Integrations & distribution
|
|
76
76
|
|
|
@@ -24,7 +24,7 @@ and be followed by `=`. Prose bullets that merely mention `[KEY]` are not parsed
|
|
|
24
24
|
|
|
25
25
|
| Key | Example |
|
|
26
26
|
| :--- | :--- |
|
|
27
|
-
| `[VERSION]` | `11.9.
|
|
27
|
+
| `[VERSION]` | `11.9.8` — must match `^\d+\.\d+\.\d+$` |
|
|
28
28
|
| `[REACTIVE_MODE]` | `true` |
|
|
29
29
|
| `[PLANNER]` | `claude-opus-4-7` |
|
|
30
30
|
| `[EXECUTOR]` | `claude-sonnet-4-6` |
|
|
@@ -56,6 +56,9 @@ for older configs.
|
|
|
56
56
|
| `[VERIFIER]` | `VERIFIER_MODEL` | Testing and UAT verification. | `claude-sonnet-4-6` |
|
|
57
57
|
| `[SECURITY]` | `SECURITY_MODEL` | Sensitive security scanning. | `claude-opus-4-7` |
|
|
58
58
|
| `[DEBUG]` | — | Debugging and root-cause analysis. | `claude-opus-4-7` |
|
|
59
|
+
| `[RESEARCH]` | `RESEARCH_MODEL` | Domain research during planning. | `gemini-2.5-pro` |
|
|
60
|
+
| `[QA]` | `QA_MODEL` | Quality-assurance / test-writing tasks. | `claude-sonnet-4-6` |
|
|
61
|
+
| `[QUICK]` | `QUICK_MODEL` | Tier-1 budget-biased tasks. | — |
|
|
59
62
|
|
|
60
63
|
**Values are free-form strings** — the schema does not constrain them to a list, so a new model
|
|
61
64
|
id works without a framework upgrade. The ids shipped in `MINDFORGE.md` today are
|
|
@@ -91,13 +94,15 @@ than editing your registry to satisfy it.
|
|
|
91
94
|
|
|
92
95
|
These settings control the `/mindforge:auto` engine's behavior and performance.
|
|
93
96
|
|
|
97
|
+
> [!WARNING]
|
|
98
|
+
> `AUTONOMOUS_MODE_ENABLED`, `STUCK_DETECTION_TIMEOUT_MS`, `STEERING_CHECK_INTERVAL_MS`, and
|
|
99
|
+
> `NODE_REPAIR_ENABLED` do not appear anywhere in `.mindforge/MINDFORGE-SCHEMA.json`, and nothing
|
|
100
|
+
> in `bin/autonomous/` reads them — they are not currently configurable keys. Only the two rows
|
|
101
|
+
> below are real.
|
|
102
|
+
|
|
94
103
|
| Key | Description | Default |
|
|
95
104
|
| :--- | :--- | :--- |
|
|
96
|
-
| `AUTONOMOUS_MODE_ENABLED` | Global toggle for autonomous task execution. | `true` |
|
|
97
105
|
| `MAX_TASKS_PER_PHASE` | Limit on task expansion during planning. | `15` |
|
|
98
|
-
| `STUCK_DETECTION_TIMEOUT_MS` | Time before an agent is considered "looping" or stuck. | `300000` |
|
|
99
|
-
| `STEERING_CHECK_INTERVAL_MS` | How often the engine checks for user guidance. | `5000` |
|
|
100
|
-
| `NODE_REPAIR_ENABLED` | If true, the engine attempts to self-heal on failures. | `true` |
|
|
101
106
|
| `COMPACTION_THRESHOLD_PCT` | The context usage percentage at which to trigger compaction. | `70` |
|
|
102
107
|
|
|
103
108
|
---
|
|
@@ -111,8 +116,7 @@ Define the rules that code must follow to pass the `VERIFY` phase.
|
|
|
111
116
|
| `MIN_TEST_COVERAGE_PCT` | Required test coverage for any new module. | `80` |
|
|
112
117
|
| `MAX_FUNCTION_LINES` | Maximum lines allowed for a single function. | `40` |
|
|
113
118
|
| `MAX_CYCLOMATIC_COMPLEXITY` | Maximum complexity score (McCune) allowed. | `10` |
|
|
114
|
-
| `
|
|
115
|
-
| `ANTIPATTERN_SENSITIVITY` | Frequency at which suspicious patterns are flagged. | `0.7` |
|
|
119
|
+
| `BLOCK_ON_MEDIUM_SECURITY_FINDINGS` | Fail the gate if any medium security findings exist. | `true` |
|
|
116
120
|
|
|
117
121
|
---
|
|
118
122
|
|
|
@@ -136,37 +140,18 @@ Control reasoning snapshot retention for the Temporal Steering system.
|
|
|
136
140
|
| Key | Description | Default |
|
|
137
141
|
| :--- | :--- | :--- |
|
|
138
142
|
| `temporal.max_snapshots` | Maximum number of reasoning snapshots retained per session. | `50` |
|
|
139
|
-
| `temporal.max_age_days` | Snapshots older than this value (in days) are auto-pruned. | `
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## 6. Rate Limiting (v11.0.0+)
|
|
144
|
-
|
|
145
|
-
Configure request rate limits for the dashboard and API endpoints.
|
|
146
|
-
|
|
147
|
-
| Key | Description | Default |
|
|
148
|
-
| :--- | :--- | :--- |
|
|
149
|
-
| `rate_limiting.dashboard_rpm` | Maximum requests per minute to dashboard endpoints. | `120` |
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## 7. Session Configuration (v11.0.0+)
|
|
154
|
-
|
|
155
|
-
Control session token behaviour for dashboard authentication.
|
|
156
|
-
|
|
157
|
-
| Key | Description | Default |
|
|
158
|
-
| :--- | :--- | :--- |
|
|
159
|
-
| `session.token_expiry_hours` | Hours before a dashboard bearer token expires. | `24` |
|
|
143
|
+
| `temporal.max_age_days` | Snapshots older than this value (in days) are auto-pruned. | `7` |
|
|
160
144
|
|
|
161
145
|
---
|
|
162
146
|
|
|
163
|
-
##
|
|
164
|
-
|
|
165
|
-
Tune parallel wave execution behaviour.
|
|
147
|
+
## 6. Rate Limiting, Session Configuration, Wave Execution
|
|
166
148
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
149
|
+
> [!WARNING]
|
|
150
|
+
> `rate_limiting.dashboard_rpm`, `session.token_expiry_hours`, and
|
|
151
|
+
> `wave_execution.max_concurrency` are not present in the current `.mindforge/config.json` and
|
|
152
|
+
> nothing in the live `bin/` runtime reads them. The first two only ever existed as one-time
|
|
153
|
+
> values written by a historical migration (`bin/migrations/10.7.0-to-11.0.0.js`); the third
|
|
154
|
+
> doesn't appear anywhere in the codebase. Do not rely on setting any of these three today.
|
|
170
155
|
|
|
171
156
|
---
|
|
172
157
|
|
|
@@ -181,4 +166,4 @@ To ensure enterprise safety, several rules **cannot** be disabled via `MINDFORGE
|
|
|
181
166
|
5. **Critical Security Blocks:** High/Critical findings *will* block the `SHIP` command.
|
|
182
167
|
|
|
183
168
|
> [!WARNING]
|
|
184
|
-
> Attempting to disable these rules in your configuration will result in a silent enforcement of the defaults.
|
|
169
|
+
> Attempting to disable these rules in your configuration will result in a silent enforcement of the defaults.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MindForge SDK API — Reference (
|
|
1
|
+
# MindForge SDK API — Reference (v11.9.8)
|
|
2
2
|
|
|
3
3
|
## Package
|
|
4
4
|
|
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
From `sdk/src/index.ts`:
|
|
10
10
|
|
|
11
11
|
- `MindForgeClient`
|
|
12
|
-
- `MindForgeEventStream`
|
|
13
|
-
- `
|
|
12
|
+
- `MindForgeEventStream` — SSE-based event stream (see below)
|
|
13
|
+
- `WebSocketEventStream` — WebSocket-based alternative; requires a global `WebSocket` (Node 22+,
|
|
14
|
+
a browser, or the optional `ws` package assigned to `globalThis.WebSocket` — the SDK declares
|
|
15
|
+
no runtime dependencies, so nothing is installed for you)
|
|
16
|
+
- `commands` — slash-command string builders
|
|
17
|
+
- `batch(commands: string[])` — joins an array of command strings with `&&`
|
|
14
18
|
- `MindForgeMemory`
|
|
15
19
|
- Types: `MindForgeConfig`, `PhaseResult`, `TaskResult`, `SecurityFinding`,
|
|
16
|
-
`GateResult`, `HealthReport`, `HealthIssue`, `MindForgeEvent`, `CommandOptions
|
|
20
|
+
`GateResult`, `HealthReport`, `HealthIssue`, `MindForgeEvent`, `CommandOptions`,
|
|
21
|
+
`AuditLogEntry`, `WaveExecutionResult`, `MigrationResult`, `StreamChunk`,
|
|
22
|
+
`StreamingExecutionResult`, `BatchExecutionRequest`, `BatchExecutionResult`
|
|
17
23
|
- `VERSION`
|
|
18
24
|
|
|
19
25
|
## MindForgeClient
|
|
@@ -13,12 +13,13 @@ Skills are domain knowledge packs loaded on demand. They are stored as
|
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## SKILL.md schema (frontmatter)
|
|
16
|
-
Required fields
|
|
16
|
+
Required fields, enforced by `scripts/ci/validate-assets.js` and `tests/skills-platform.test.js`:
|
|
17
17
|
- `name`: string (stable in 1.x.x)
|
|
18
|
-
- `description`: string
|
|
19
|
-
- `triggers`: array of keywords
|
|
20
18
|
- `version`: semver string
|
|
21
|
-
- `
|
|
19
|
+
- `status`: string (e.g. `stable`)
|
|
20
|
+
- `triggers`: comma-separated keyword string, minimum 10 terms, unique across all engine skills
|
|
21
|
+
|
|
22
|
+
`description` and `owner` are commonly present but are **not** enforced as required fields.
|
|
22
23
|
|
|
23
24
|
Optional fields:
|
|
24
25
|
- `scope`: `core | org | project`
|
|
@@ -30,8 +31,9 @@ Example:
|
|
|
30
31
|
---
|
|
31
32
|
name: security-review
|
|
32
33
|
version: 1.0.0
|
|
34
|
+
status: stable
|
|
33
35
|
description: Secure coding review checklist and threat modeling prompts
|
|
34
|
-
triggers:
|
|
36
|
+
triggers: auth, payment, pii, encryption, secrets, credential, oauth, token, session, permission
|
|
35
37
|
owner: mindforge-core
|
|
36
38
|
scope: core
|
|
37
39
|
---
|
|
@@ -53,5 +55,5 @@ Skills can be published to the npm registry under `mindforge-skill-*`.
|
|
|
53
55
|
See `docs/skills-publishing-guide.md` for full workflow.
|
|
54
56
|
|
|
55
57
|
## Stability contract
|
|
56
|
-
As of v1.0.0, the `name` values of the
|
|
57
|
-
fields may be added in minor versions; removals require a major version bump.
|
|
58
|
+
As of v1.0.0, the `name` values of the 232 engine-tier skills (`.mindforge/skills/`) are stable.
|
|
59
|
+
New optional fields may be added in minor versions; removals require a major version bump.
|
|
@@ -171,8 +171,8 @@ mindforge <command> [options]
|
|
|
171
171
|
| `security-scan` | Validate configuration and run security checks |
|
|
172
172
|
| `health` | Verify project health and installation integrity |
|
|
173
173
|
| `headless` | Run MindForge agent in headless (non-interactive) mode |
|
|
174
|
-
| `pr-review` |
|
|
175
|
-
| `cross-review` | Run
|
|
174
|
+
| `pr-review` | Alias for `cross-review` — same 2-model adversarial review engine |
|
|
175
|
+
| `cross-review` | Run the 2-model adversarial cross-review engine (architect + security auditor) |
|
|
176
176
|
| `classify` | Classify changes into governance tiers |
|
|
177
177
|
| `approve` | Generate a governance approval signature to unblock Tier 3 gates |
|
|
178
178
|
| `validate-skill` | Run Level 1 & 2 validation on a SKILL.md file |
|
package/docs/faq.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MindForge FAQ (
|
|
1
|
+
# MindForge FAQ (v12.0.0)
|
|
2
2
|
|
|
3
3
|
## Is MindForge tied to Claude only?
|
|
4
4
|
No. MindForge supports Claude Code and Antigravity. Install with `--claude`,
|
|
@@ -55,7 +55,7 @@ The `deep-research` workflow was removed before the v11.8.0 release (the superpo
|
|
|
55
55
|
## Version & Stability
|
|
56
56
|
|
|
57
57
|
**Q: What version is current?**
|
|
58
|
-
|
|
58
|
+
v12.0.0 — verify with `node bin/mindforge-cli.js --version`
|
|
59
59
|
|
|
60
60
|
**Q: Was v11.9.0 production-stable?**
|
|
61
61
|
At that release: yes, by the IQ200 deep-audit (258 discrete checks across 14 dimensions),
|
package/docs/getting-started.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MindForge — Getting Started (
|
|
1
|
+
# MindForge — Getting Started (v12.0.0)
|
|
2
2
|
|
|
3
3
|
This guide gets you from zero to a working MindForge project in under five minutes.
|
|
4
4
|
|
|
@@ -17,7 +17,8 @@ MindForge ships across several channels. Pick the one that matches how you work
|
|
|
17
17
|
Zero-config setup that scaffolds the full framework:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
#
|
|
20
|
+
# Interactive wizard (TTY only) -- pre-selects a detected runtime, you confirm it.
|
|
21
|
+
# Non-interactive/CI/piped invocations skip the wizard and default to --claude.
|
|
21
22
|
npx mindforge-cc@latest
|
|
22
23
|
|
|
23
24
|
# Antigravity (local development)
|
|
@@ -29,6 +30,11 @@ npx mindforge-cc@latest --claude --local
|
|
|
29
30
|
|
|
30
31
|
After installation, the `mindforge` CLI command is available for runtime operations (health checks, security scans, headless execution, etc.).
|
|
31
32
|
|
|
33
|
+
If a `CLAUDE.md` already exists in the target directory, the installer backs it up
|
|
34
|
+
(`CLAUDE.md.backup-<timestamp>`) before writing its own — check that backup if you had custom
|
|
35
|
+
content there. Hooks are snapshotted by Claude Code at session start, so if the harness was
|
|
36
|
+
already open during install, restart it before expecting a newly-registered hook to fire.
|
|
37
|
+
|
|
32
38
|
**Global install** (system-wide `/mindforge` commands for your primary AI coding runtime):
|
|
33
39
|
|
|
34
40
|
```bash
|
|
@@ -114,7 +120,7 @@ Or use slash commands: `/mindforge:wf-code-audit`
|
|
|
114
120
|
## Your First 5 Minutes with MindForge
|
|
115
121
|
|
|
116
122
|
1. **Verify install:** `node bin/mindforge-cli.js health`
|
|
117
|
-
2. **Check version:** `node bin/mindforge-cli.js --version` (should print `
|
|
123
|
+
2. **Check version:** `node bin/mindforge-cli.js --version` (should print `12.0.0`)
|
|
118
124
|
3. **List workflows:** `node bin/mindforge-cli.js workflow list`
|
|
119
125
|
4. **Run first slash command:** Open Claude Code → `/mindforge:status`
|
|
120
126
|
5. **Onboard your codebase:** Open Claude Code → `/mindforge:wf-onboard-codebase`
|
package/docs/sdk-reference.md
CHANGED
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
} from 'mindforge-sdk';
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Current SDK version: `
|
|
17
|
+
Current SDK version: `12.0.0`
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
## SDK Exports (
|
|
21
|
+
## SDK Exports (v12.0.0)
|
|
22
22
|
|
|
23
23
|
```javascript
|
|
24
24
|
const {
|
|
@@ -28,7 +28,7 @@ const {
|
|
|
28
28
|
commands, // Command registry
|
|
29
29
|
batch, // Batch execution
|
|
30
30
|
MindForgeMemory, // Memory interface
|
|
31
|
-
VERSION // '
|
|
31
|
+
VERSION // '12.0.0'
|
|
32
32
|
} = require('mindforge-sdk');
|
|
33
33
|
// or: import { MindForgeClient, VERSION } from 'mindforge-sdk';
|
|
34
34
|
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# MindForge — Security Policy
|
|
2
|
+
|
|
3
|
+
> This file used to duplicate the repo's security policy and had drifted out of sync (it was
|
|
4
|
+
> still listing a `5.x.x`/`4.x.x`/`< 4.0.0` support table years behind the real `11.x` line). The
|
|
5
|
+
> canonical, kept-current security policy — supported versions, vulnerability reporting process,
|
|
6
|
+
> and the full "Security Features" / "Known Mitigations & Limitations" breakdown — lives at the
|
|
7
|
+
> repo root: **[`/SECURITY.md`](../../SECURITY.md)**. Read that file, not this one.
|
|
8
|
+
|
|
9
|
+
For the outward agentic-harness threat model (prompt injection, poisoned config/hooks/MCP,
|
|
10
|
+
supply-chain risk in skills/agents, sandboxing) see
|
|
11
|
+
**[`/MINDFORGE-AGENTIC-SECURITY.md`](../../MINDFORGE-AGENTIC-SECURITY.md)**.
|
|
12
|
+
|
|
13
|
+
For the current, honestly-labeled status of Zero-Trust Agentic Identity specifically, see
|
|
14
|
+
**[ZTAI Overview](./ZTAI-OVERVIEW.md)** — read its status banner first.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Zero-Trust Agentic Identity (ZTAI) Overview
|
|
2
|
+
|
|
3
|
+
> **STATUS: DESIGN DOCUMENT — NOT SHIPPED BEHAVIOUR.**
|
|
4
|
+
>
|
|
5
|
+
> Everything below describes an intended architecture. Measured against a live install:
|
|
6
|
+
>
|
|
7
|
+
> | Claim in this document | Reality |
|
|
8
|
+
> |---|---|
|
|
9
|
+
> | every agent action is cryptographically signed | **0 of 3116** audit entries carry a `signature` or `did` field |
|
|
10
|
+
> | per-persona Ed25519 keypairs at spawn | `ztai-manager.js` can generate them; nothing calls it in a normal run |
|
|
11
|
+
> | `.mindforge/identity` vault | not created by any install |
|
|
12
|
+
> | every 50 entries triggers a Merkle-root | not a Merkle root — a linear cumulative fold — and nothing triggers it: `.planning/audit-archive/` contains only `.gitkeep`, the archiver has no caller outside tests |
|
|
13
|
+
> | Merkle-root chain | `ztai-archiver.js:57` sets `merkleRoot: cumulativeHash` — a linear chain hash, not a hash tree |
|
|
14
|
+
>
|
|
15
|
+
> `ENABLE_ZTAI` has no readers in `bin/`. What IS real and independently verifiable is the SHA-256
|
|
16
|
+
> hash chain in `.planning/AUDIT.jsonl` — see `SECURITY.md` for its actual guarantees and its one
|
|
17
|
+
> documented gap. Treat this file as a roadmap, and `bin/` plus `tests/` as ground truth.
|
|
18
|
+
|
|
19
|
+
MindForge v4.2 introduces **ZTAI Enterprise Mode**, an enterprise-grade identity layer that ensures every agent action is cryptographically signed and non-repudiable.
|
|
20
|
+
|
|
21
|
+
## 1. Asymmetric Identity Model
|
|
22
|
+
Every MindForge persona in the 32+ agent library is assigned a unique asymmetric key pair (Ed25519) upon project initialization or agent spawning.
|
|
23
|
+
|
|
24
|
+
- **Private Key**: Stored securely in the local `.mindforge/identity` vault (never exposed).
|
|
25
|
+
- **Public Key / DID**: Represented as a **Decentralized Identifier (DID)** in the format `did:mf:<key-fingerprint>`.
|
|
26
|
+
|
|
27
|
+
## 2. Trust Tiers & Signing Requirements
|
|
28
|
+
MindForge enforces tiered signing based on the risk level of the persona's actions.
|
|
29
|
+
|
|
30
|
+
| Tier | Persona Examples | Signing Tech | Integrity Proof |
|
|
31
|
+
| :--- | :--- | :--- | :--- |
|
|
32
|
+
| **T0** | `mf-researcher`, `mf-query` | None | Audit log entry only. |
|
|
33
|
+
| **T1** | `mf-executor`, `mf-coder` | Ed25519 (Software) | Signed JSON payload. |
|
|
34
|
+
| **T2** | `security-auditor`, `ui-specialist` | Ed25519 (Software) | Signed Block + Peer Review. |
|
|
35
|
+
| **T3** | `mf-planner`, `system-architect` | **Secure Enclave (HSM)** | Enclave-attested signature. |
|
|
36
|
+
|
|
37
|
+
*Note: T3 agents utilize a simulated hardware-secured enclave (HSM) to ensure principal-level accountability.*
|
|
38
|
+
|
|
39
|
+
## 3. Non-Repudiable Audit Manifests
|
|
40
|
+
The `ZTAIArchiver` generates high-fidelity integrity proofs for the session history.
|
|
41
|
+
|
|
42
|
+
- **Cumulative Chain Root**: Every 50 audit entries would trigger a cumulative SHA-256 chain hash over the block. It is a linear fold, not a Merkle tree — no hash tree, no inclusion proof — though `ztai-archiver.js:57` still names the field `merkleRoot`.
|
|
43
|
+
- **Manifest Finalization**: The cumulative root of all audit entries is signed by the **Principal Agent (T3)**.
|
|
44
|
+
- **Tamper Detection**: Inside a block a manifest covers, `verifyIntegrity()` fails closed. Mutating or reordering an entry changes the recomputed root (`ztai-archiver.js:156`), and adding, deleting, or truncating *into* the block trips the `entryCount` check (`ztai-archiver.js:148`) — measured: dropping 3 of 10 covered entries throws `block entry count mismatch`. What it does **not** cover is anything outside the block: the manifest selects entries by the `[blockStart, blockEnd]` timestamp window (`ztai-archiver.js:141`), so entries appended after the last finalized `blockEnd` are never selected, and truncating that uncovered tail is invisible — measured: dropping all 4 uncovered entries still returns valid. This is a **separate mechanism** from the `previous_hash` back-link chain in `.planning/AUDIT.jsonl`; the archiver contains zero references to `previous_hash`. `bin/verify-audit.js` has its own, different tail-truncation gap, for the unrelated reason that any prefix of a back-linked chain is itself a valid chain. Nothing raises an alert for either today — the archiver has no caller outside tests.
|
|
45
|
+
|
|
46
|
+
## 4. Key Provider Abstraction
|
|
47
|
+
The `ZTAIManager` uses a pluggable `KeyProvider` architecture:
|
|
48
|
+
- `FileSystemProvider`: Standard key storage for T1/T2 agents.
|
|
49
|
+
- `SecureEnclaveProvider`: Simulates hardware-backed signing for T3 agents.
|
|
50
|
+
- `KMSProvider` (Future): Integration with AWS/GCP/Azure Key Management Services.
|
|
51
|
+
|
|
52
|
+
## 5. Governance Integration
|
|
53
|
+
ZTAI identities are verified during the `/mindforge:verify-phase` and `/mindforge:ship` processes. High-tier changes will be BLOCKED if the cryptographic signatures are missing or invalid.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# MindForge v1.0.0 — Penetration Test Results
|
|
2
|
+
|
|
3
|
+
> **STATUS: HISTORICAL — scoped to the v1.0.0-era predecessor system, not the current v11.x
|
|
4
|
+
> architecture.** These findings have not been re-run against the live `bin/` runtime. Retained
|
|
5
|
+
> for historical reference only. For current security status, see the root
|
|
6
|
+
> [`SECURITY.md`](../../SECURITY.md).
|
|
7
|
+
|
|
8
|
+
**Date:** 2026-03-22
|
|
9
|
+
**Scope:** MindForge v1.0.0 threat model (7 threat actors)
|
|
10
|
+
**Method:** Manual adversarial review + targeted negative tests
|
|
11
|
+
|
|
12
|
+
## Summary
|
|
13
|
+
- Critical findings: 0
|
|
14
|
+
- High findings: 0
|
|
15
|
+
- Medium findings: 2
|
|
16
|
+
- Low findings: 3
|
|
17
|
+
|
|
18
|
+
All findings were addressed or documented with explicit mitigations.
|
|
19
|
+
|
|
20
|
+
## Findings
|
|
21
|
+
| ID | Severity | Area | Description | Status |
|
|
22
|
+
|---|---|---|---|---|
|
|
23
|
+
| PT-01 | MEDIUM | Plugin system | Malicious plugin can request `write_state` permission | Mitigated: allowlist (`ELEVATED_PLUGINS`) + user approval |
|
|
24
|
+
| PT-02 | MEDIUM | Skill registry | Injection patterns could bypass simple string match | Mitigated: injection guard + manual review guidance |
|
|
25
|
+
| PT-03 | LOW | SSE stream | Local process can subscribe to localhost stream | Accepted: localhost-only + no secrets in stream |
|
|
26
|
+
| PT-04 | LOW | Config | User-controlled git email for approvals | Accepted: governance assumption, documented |
|
|
27
|
+
| PT-05 | LOW | CI | Workflow modification could bypass gates | Accepted: branch protection required |
|
|
28
|
+
|
|
29
|
+
## Retest notes
|
|
30
|
+
- Re-validated installer excludes `.env`, `.key`, `.pem` files
|
|
31
|
+
- Verified migration restores from backup on failure
|
|
32
|
+
- Confirmed plugin loader skips incompatible plugins and logs audit entry
|
|
33
|
+
|
|
34
|
+
## Conclusion
|
|
35
|
+
MindForge v1.0.0 is fit for public release with known, documented trade-offs.
|
|
36
|
+
See `docs/security/threat-model.md` for full controls and residual risk.
|