wicked-garden 12.31.0 → 12.32.1

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 (162) hide show
  1. package/.claude-plugin/components.json +2 -1
  2. package/.claude-plugin/marketplace.json +1 -15
  3. package/.claude-plugin/plugin.json +3 -4
  4. package/CHANGELOG.md +75 -1
  5. package/CONTRIBUTING.md +9 -7
  6. package/README.md +13 -4
  7. package/docs/README.md +6 -5
  8. package/docs/adr/0001-code-relationship-graph-engine.md +7 -1
  9. package/docs/adr/0002-major-cleanup-keep-cut.md +9 -3
  10. package/docs/adr/0003-peers-gate-required-layers-optin.md +10 -4
  11. package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +9 -0
  12. package/docs/adr/0005-code-graph-re-homes-to-wicked-estate.md +18 -11
  13. package/docs/adr/0006-qe-campaign-homes-into-the-four-planes.md +76 -0
  14. package/docs/adr/{0005-retarget-inventory.md → 0007-retarget-inventory.md} +14 -1
  15. package/docs/brain-chunk-format.md +10 -1
  16. package/docs/examples/qe-campaign-nightly.yml +136 -0
  17. package/docs/examples/qe-campaign-pr.yml +84 -0
  18. package/docs/getting-started.md +7 -6
  19. package/docs/outgov-per-turn.md +144 -0
  20. package/docs/plans/2026-06-08-wicked-loom-cutover.md +2 -0
  21. package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +2 -0
  22. package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +2 -0
  23. package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +2 -0
  24. package/docs/required-peers.md +58 -21
  25. package/docs/specs/2026-06-08-wicked-loom-extraction.md +2 -0
  26. package/docs/v11/archetypes.md +4 -3
  27. package/evidence/aw25-golden/README.md +80 -0
  28. package/evidence/aw25-golden/campaign-recon.aw25.json +53 -0
  29. package/evidence/aw25-golden/chain/00-daemon-ready.txt +43 -0
  30. package/evidence/aw25-golden/chain/01-ingest.txt +1 -0
  31. package/evidence/aw25-golden/chain/02-fanout-manifest.json +63 -0
  32. package/evidence/aw25-golden/chain/02-fanout-manifest.json.crew-payload.json +58 -0
  33. package/evidence/aw25-golden/chain/02-fanout.txt +6 -0
  34. package/evidence/aw25-golden/chain/03-enforcement-post.json +54 -0
  35. package/evidence/aw25-golden/chain/04-rules-recall.json +22 -0
  36. package/evidence/aw25-golden/chain/05-run-terminal.json +55 -0
  37. package/evidence/aw25-golden/chain/06-governance-claims.json +1 -0
  38. package/evidence/aw25-golden/chain/07-acceptance.json +1 -0
  39. package/evidence/aw25-golden/ruleset/aw25-golden.md +53 -0
  40. package/evidence/aw25-golden/ruleset/policies/POL-2500.json +11 -0
  41. package/evidence/aw25-golden/run.sh +244 -0
  42. package/evidence/th6-dod/00-daemon-ready-line.txt +1 -0
  43. package/evidence/th6-dod/01-acceptance-deny.jsonl +2 -0
  44. package/evidence/th6-dod/02-qe-run-1.json +15 -0
  45. package/evidence/th6-dod/03-qe-run-2.json +15 -0
  46. package/evidence/th6-dod/04-flake-history.json +27 -0
  47. package/evidence/th6-dod/05-manifest-run2.json +58 -0
  48. package/evidence/th6-dod/06-gate-pass.json +1 -0
  49. package/evidence/th6-dod/07-acceptance-satisfied.jsonl +2 -0
  50. package/evidence/th6-dod/08-host-run-terminal.json +13 -0
  51. package/evidence/th6-dod/09-acceptance-after-terminal.jsonl +2 -0
  52. package/evidence/th6-dod/10-verdicts-rows.json +16 -0
  53. package/evidence/th6-dod/README.md +62 -0
  54. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/console.json +3 -0
  55. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/manifest.json +113 -0
  56. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/result.json +75 -0
  57. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/steps.json +48 -0
  58. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/th6-home-connected.png +0 -0
  59. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/wire.json +80 -0
  60. package/hooks/scripts/stop.py +20 -10
  61. package/package.json +1 -1
  62. package/schemas/README.md +12 -0
  63. package/schemas/campaign-recon.schema.json +226 -0
  64. package/scripts/domain/extract_loop.py +40 -0
  65. package/scripts/domain/validate_domain_model.py +7 -2
  66. package/scripts/platform/guard_pipeline.py +158 -12
  67. package/scripts/qe/campaign_degradation.py +545 -0
  68. package/scripts/qe/campaign_dispatch.py +134 -0
  69. package/scripts/qe/campaign_intake.py +633 -0
  70. package/scripts/qe/campaign_plan.py +534 -0
  71. package/scripts/qe/lib/campaign-rerun.mjs +392 -0
  72. package/scripts/qe/lib/campaign-scoreboard.mjs +677 -0
  73. package/scripts/qe/lib/flake-policy.mjs +365 -0
  74. package/scripts/qe/lib/gate.mjs +279 -7
  75. package/scripts/qe/lib/vault-evidence.mjs +664 -0
  76. package/scripts/qe/runner/README.md +256 -0
  77. package/scripts/qe/runner/bin/qe-run.mjs +103 -0
  78. package/scripts/qe/runner/package.json +29 -0
  79. package/scripts/qe/runner/specs/s1-smoke.spec.json +61 -0
  80. package/scripts/qe/runner/specs/th6-acceptance-dod.spec.json +56 -0
  81. package/scripts/qe/runner/src/asserts.mjs +265 -0
  82. package/scripts/qe/runner/src/evidence.mjs +348 -0
  83. package/scripts/qe/runner/src/index.mjs +21 -0
  84. package/scripts/qe/runner/src/lint.mjs +192 -0
  85. package/scripts/qe/runner/src/redact.mjs +163 -0
  86. package/scripts/qe/runner/src/runner.mjs +215 -0
  87. package/scripts/qe/runner/src/spec.mjs +119 -0
  88. package/scripts/qe/runner/src/wire-capture.mjs +91 -0
  89. package/scripts/qe/runner/test/asserts.test.mjs +81 -0
  90. package/scripts/qe/runner/test/campaign-rerun.test.mjs +268 -0
  91. package/scripts/qe/runner/test/evidence-redaction.test.mjs +168 -0
  92. package/scripts/qe/runner/test/fixture-ns.test.mjs +83 -0
  93. package/scripts/qe/runner/test/lint.test.mjs +121 -0
  94. package/scripts/qe/runner/test/redact.test.mjs +95 -0
  95. package/scripts/qe/runner/test/th17-vault-evidence.test.mjs +533 -0
  96. package/scripts/qe/runner/test/th21-flake-policy.test.mjs +226 -0
  97. package/scripts/qe/runner/test/th6-gate-wiring.test.mjs +292 -0
  98. package/skills/archetype/refs/incident.md +8 -7
  99. package/skills/archetype/refs/migrate.md +9 -7
  100. package/skills/archetype/refs/modernize.md +5 -4
  101. package/skills/archetype/refs/review.md +5 -5
  102. package/skills/archetype/refs/specify.md +3 -3
  103. package/skills/classify/SKILL.md +1 -1
  104. package/skills/core/SKILL.md +2 -1
  105. package/skills/core/refs/install.md +2 -2
  106. package/skills/core/refs/setup.md +6 -6
  107. package/skills/domain/SKILL.md +55 -3
  108. package/skills/domain/vendor/README.md +37 -22
  109. package/skills/domain/vendor/VERSION +1 -1
  110. package/skills/domain-extractor/SKILL.md +4 -0
  111. package/skills/engineering-conformance-reviewer/SKILL.md +11 -4
  112. package/skills/mem/SKILL.md +11 -1
  113. package/skills/mem/refs/scopes.md +5 -1
  114. package/skills/platform/peer-health/SKILL.md +1 -1
  115. package/skills/product/imagery/alter/SKILL.md +3 -3
  116. package/skills/product/imagery/alter/refs/editing-reference.md +3 -3
  117. package/skills/product/imagery/create/SKILL.md +3 -3
  118. package/skills/product/imagery/scripts/analyze.sh +1 -1
  119. package/skills/product/imagery/scripts/edit.sh +3 -2
  120. package/skills/product/imagery/scripts/generate.sh +3 -2
  121. package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +13 -13
  122. package/skills/product/requirements-analysis/refs/user-story-guide.md +4 -2
  123. package/skills/qe/SKILL.md +43 -11
  124. package/skills/qe/refs/accept.md +14 -2
  125. package/skills/qe/refs/author.md +1 -1
  126. package/skills/qe/refs/campaign-ci.md +153 -0
  127. package/skills/qe/refs/campaign-degradation.md +129 -0
  128. package/skills/qe/refs/campaign-flake-policy.md +158 -0
  129. package/skills/qe/refs/campaign-grading.md +235 -0
  130. package/skills/qe/refs/campaign.md +274 -0
  131. package/skills/qe/refs/evidence.md +50 -3
  132. package/skills/qe/refs/execute.md +9 -3
  133. package/skills/qe/refs/insight.md +1 -1
  134. package/skills/qe/refs/intake.md +146 -0
  135. package/skills/qe/refs/integration.md +32 -4
  136. package/skills/qe/refs/plan.md +1 -1
  137. package/skills/qe/refs/review.md +2 -2
  138. package/skills/qe/refs/scenario-format.md +65 -6
  139. package/skills/qe/refs/setup.md +1 -1
  140. package/skills/qe-a11y-test-engineer/SKILL.md +1 -1
  141. package/skills/qe-acceptance-test-reviewer/SKILL.md +24 -0
  142. package/skills/qe-ai-feature-test-engineer/SKILL.md +1 -1
  143. package/skills/qe-chaos-test-engineer/SKILL.md +1 -1
  144. package/skills/qe-compliance-test-engineer/SKILL.md +1 -1
  145. package/skills/qe-flaky-test-hunter/SKILL.md +16 -1
  146. package/skills/qe-iac-test-engineer/SKILL.md +1 -1
  147. package/skills/qe-incident-to-scenario-synthesizer/SKILL.md +1 -1
  148. package/skills/qe-mutation-test-engineer/SKILL.md +1 -1
  149. package/skills/qe-release-readiness-engineer/SKILL.md +1 -1
  150. package/skills/qe-scenario-executor/SKILL.md +1 -1
  151. package/skills/qe-security-test-engineer/SKILL.md +1 -1
  152. package/skills/qe-snapshot-hygiene-auditor/SKILL.md +1 -1
  153. package/skills/qe-test-code-quality-auditor/SKILL.md +1 -1
  154. package/skills/qe-test-impact-analyzer/SKILL.md +91 -7
  155. package/skills/qe-visual-regression-engineer/SKILL.md +1 -1
  156. package/skills/repo-learn/SKILL.md +163 -0
  157. package/skills/repo-learn/refs/capture-proposals.md +162 -0
  158. package/skills/repo-learn/refs/churn-sampling.md +197 -0
  159. package/skills/runtime-exec/SKILL.md +2 -1
  160. package/skills/search/SKILL.md +12 -2
  161. package/skills/search/refs/answer.md +6 -1
  162. package/skills/search/refs/hotspots.md +4 -1
@@ -2,7 +2,7 @@
2
2
  "_comment": "Issue #328: Component declarations for wicked-garden plugin. Claude Code plugin.json does not yet support inline component declarations beyond path overrides. This manifest documents all components for tooling, validation, and future schema support. When plugin.json gains a 'components' field, merge this data into plugin.json. The plugin is skills-only: former commands/ became actions of consolidated per-domain skills, and former agents/ became standalone context:fork worker skills (enumerated under fork_skills). Regenerate derived blocks with scripts/ci/sync_components.py.",
3
3
  "domains": ["agentic", "crew", "data", "engineering", "jam", "mem", "persona", "platform", "product", "qe", "search", "smaht"],
4
4
  "summary": {
5
- "skills": 141,
5
+ "skills": 142,
6
6
  "fork_skills": 78,
7
7
  "hooks": 13,
8
8
  "specialists": 7
@@ -92,6 +92,7 @@
92
92
  "qe-testability-reviewer": ["qe-testability-reviewer"],
93
93
  "qe-ui-component-test-engineer": ["qe-ui-component-test-engineer"],
94
94
  "qe-visual-regression-engineer": ["qe-visual-regression-engineer"],
95
+ "repo-learn": ["repo-learn"],
95
96
  "runtime-exec": ["runtime-exec"],
96
97
  "search": ["codebase-narrator", "search"],
97
98
  "smaht": ["discovery", "intent", "propose-skills", "smaht"],
@@ -1,15 +1 @@
1
- {
2
- "name": "wicked-garden",
3
- "owner": {
4
- "name": "Mike Parcewski"
5
- },
6
- "plugins": [
7
- {
8
- "name": "wicked-garden",
9
- "source": "./",
10
- "description": "Your coding agent already plans and swarms \u2014 Wicked Garden is the curated toolkit for what it can't: proof-not-claims gates, code links grep can't see, deterministic refactor, cross-session memory, real multi-model second opinions. Don't fight the harness; fill its gaps. The gate needs wicked-vault (a self-contained infra peer, installed directly) and re-derives through garden's built-in engine; testing/brain/bus are opt-in layers.",
11
- "version": "12.31.0"
12
- }
13
- ],
14
- "version": "12.31.0"
15
- }
1
+ {"name": "wicked-garden", "owner": {"name": "Mike Parcewski"}, "plugins": [{"name": "wicked-garden", "source": "./", "description": "Your coding agent already plans and swarms \u2014 Wicked Garden is the curated toolkit for what it can't: proof-not-claims gates, code links grep can't see, deterministic refactor, cross-session memory, real multi-model second opinions. Don't fight the harness; fill its gaps. The gate needs wicked-vault (a self-contained infra peer, installed directly) and re-derives through garden's built-in engine; estate/bus are opt-in layers (wicked-testing and wicked-brain are retired \u2014 QE ships in-catalog as the qe domain, memory lives in wicked-estate).", "version": "12.32.1"}], "version": "12.32.1"}
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "wicked-garden",
3
- "version": "12.31.0",
4
- "description": "Your coding agent's harness already plans and swarms; Wicked Garden is the curated toolkit for what it can't do alone. Proof, not claims — gates re-derive 'done' through the internal loom engine (fail-closed, independently attested via wicked-vault), so a self-asserted pass can't lie its way green. Relationships grep can't see — the wicked-estate code graph + injected bus/dispatch/capability/archetype edges power blast-radius & lineage. Plus deterministic multi-file refactor (wicked-patch), cross-session memory + knowledge (the mem domain over wicked-estate), real multi-model second opinions (jam:council), portable expertise as on-demand skill-refs, and evidence-gated testing (the in-catalog qe domain). It reads the shape of your work to apply the right rigor — steering, not a pipeline — then gets out of the way. The compiler stamps a self-contained evidence gate into any repo that runs with no wicked-garden installed. Don't fight the harness; fill its gaps. The evidence gate requires wicked-vault, a self-contained infra peer wicked-garden installs directly; wicked-bus is an opt-in layer — install what you'll use, the toolkit works without the rest.",
3
+ "version": "12.32.1",
4
+ "description": "Your coding agent's harness already plans and swarms; Wicked Garden is the curated toolkit for what it can't do alone. Proof, not claims \u2014 gates re-derive 'done' through the internal loom engine (fail-closed, independently attested via wicked-vault), so a self-asserted pass can't lie its way green. Relationships grep can't see \u2014 the wicked-estate code graph + injected bus/dispatch/capability/archetype edges power blast-radius & lineage. Plus deterministic multi-file refactor (wicked-patch), cross-session memory + knowledge (the mem domain over wicked-estate), real multi-model second opinions (jam:council), portable expertise as on-demand skill-refs, and evidence-gated testing (the in-catalog qe domain). It reads the shape of your work to apply the right rigor \u2014 steering, not a pipeline \u2014 then gets out of the way. The compiler stamps a self-contained evidence gate into any repo that runs with no wicked-garden installed. Don't fight the harness; fill its gaps. The evidence gate requires wicked-vault, a self-contained infra peer wicked-garden installs directly; wicked-bus is an opt-in layer \u2014 install what you'll use, the toolkit works without the rest.",
5
5
  "wicked_vault_version": "^0.5.0",
6
- "wicked_ledger_version": "^0.2.0",
7
- "wicked_brain_version": "^0.18.0",
6
+ "wicked_ledger_version": "^0.4.0",
8
7
  "wicked_bus_version": "^2.0.0",
9
8
  "author": {
10
9
  "name": "Mike Parcewski",
package/CHANGELOG.md CHANGED
@@ -2,8 +2,82 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ### Added
6
+ - **AW-25 golden path — the wiki pipeline's own evidence-gated proof (recon arch-R21).** The guardrails program now applies its own DoD to itself: a committed, re-runnable acceptance scenario proves seed doc → `wicked-core rules ingest`/`fanout` (isolated stores; enforcement over the crew API, never CLI against a daemon store) → `rules.recall` over the **installed** `wicked-estate-mcp` 0.15.1 returning the rule with its digest-bearing provenance citation → an ISOLATED crew daemon's governed run deterministically tripping the canary trigger (the token rides the run INTENT, so the gate's evaluated context matches with no reliance on the worker model) → the gate denial citing the rule id + wiki URI (`POL-2500`, `wiki://aw25-golden#POL-2500` — via policy criteria AND `conform:` obligations, two independent citation paths) → the ConformanceClaim visible in `GET /runs/:id/acceptance` (deny-dominates, `guardrailed: false`). Ships as `scenarios/qe/aw25-golden-path.md` (scenario-format v1.1, category cli, isolation exclusive), `evidence/aw25-golden/` (seed ruleset with doc↔gate id-twinned `POL-2500`, `run.sh` fail-loud chain script, `campaign-recon.aw25.json` — spec-2 schema-validated plan with a machinery-verified claim ceiling, and the recorded `chain/` evidence 00–07 from a real run), plus `tests/qe/test_aw25_golden_artifacts.py` pinning the artifacts (schema validity, id-twinning, the AC-critical citation assertions in run.sh) hermetically. Evaluator≠creator: the verdict of record is crew's acceptance read, captured verbatim. Findings recorded in the evidence README: the <200-char PHASE SUBSTANCE GATE rejects a too-terse canary BEFORE any claim is recorded (first trip hit exactly this), and the ACP carrier reports `enforcement: enforced` with an empty `armedUnits` list.
7
+ - **Flaky-verdict policy at the campaign acceptance gate (TH-21, ADR 0006 — RECON-TEST-HARNESS test-R23).** One flaky scenario can no longer silently deny OR silently pass a nightly campaign, and exclusions always carry reasons. New written policy `skills/qe/refs/campaign-flake-policy.md` + pure policy engine `scripts/qe/lib/flake-policy.mjs`, applied by `campaign-scoreboard.mjs` on every assembly: (a) **bounded diagnostic re-runs with BOTH verdicts recorded** — a re-run lands as its own runs+verdicts rows under the same stable scenario id (TH-6's flake history, now consumed at the gate via `flake_policy.history`); mixed outcomes are a `flake_signal` blocker naming `wicked-garden-qe-flaky-test-hunter` (never best-of-N), >1+2 runs of one rung is a `rerun_bound_exceeded` violation, and a `--runs` selection showing PASS while omitting a same-window deny-graded sibling is a `pass_laundering_risk` violation; (b) **quarantine lane with owner+deadline via the hunter's taxonomy** — the gate consumes the hunter's ledger `tasks` row fail-closed (`quarantined: true` + scenario binding + taxonomy cause + owner + unexpired `quarantine_expires`; invalid/expired records are reported and NOT honored — the scenario keeps denying); (c) **quarantined scenarios are excluded-with-reason** — rows stay on the scoreboard, the exclusion (id/cause/owner/deadline/reason/observed grades) rides `certification.excluded` + `certification.gate_summary`, and `gate.mjs --exclusions-from <scoreboard.json>` appends the canonical clause to `verdict_summary` so it reaches crew's acceptance payload (the 8-field `wicked.qe.gate.*` wire contract untouched; exclusions missing id/reason/owner/deadline exit 3). A fully-quarantined campaign cannot certify; a quarantined PASS is excluded too; structural violations are never excused. Hunter's SKILL.md §5/§6 now pin the machine contract (body gains required `owner`). Tests: `tests/qe/test_campaign_flake_policy.py` (9 CLI cases, hermetic) + `scripts/qe/runner/test/th21-flake-policy.test.mjs` (14 unit cases).
8
+ - **qe campaign grading through the accept trio (TH-10, ADR 0006).** New `skills/qe/refs/campaign-grading.md` playbook: campaign evidence bundles grade through the SAME role-isolated reviewer as `refs/accept.md` (evidence PATHS only; isolation hard-enforced on Claude Code via host-level `allowed-tools`, advisory on Gemini/Codex/Cursor/Kiro — the boundary is now written down in both refs), with validate-before-grading against wicked-ledger's evidence-manifest 2.1 contract (schema-fail = INCONCLUSIVE; validator unavailable = fail closed). New deterministic glue `scripts/qe/lib/campaign-scoreboard.mjs` assembles the campaign-proven verbatim scoreboard shape `{id, grade, executor_claim, evidence_ok}` and makes self-grading structurally impossible: verdict rows by executor identities (`qe-runner/executor-claim`, `*executor*`, the `test-designer` dev-loop) are refused as grade sources and reported as `self_grade_attempt` violations; `executor_claim` derives from manifest-2.1 `scenario_evidence.status` (the contract's "executor's claim, never the verdict of record" field). Encodes the scenario-defect vs product-finding fork (verdict-reason tag `[scenario-defect]` → bounded re-author/re-run fix lane; `[product-finding]` → GH issue + idempotent ledger `tasks` mirror via `--mirror-tasks`) so certification terminates: `certification.disposition` is always `certified` or `not-certified`, never pending. Reviewer skill gains the campaign-bundle duties (structural floor re-check, claim-vs-evidence posture, mandatory non-PASS classification). Tests: `tests/qe/test_campaign_scoreboard.py` (8 cases, hermetic via a `WICKED_LEDGER_PKG_DIR` stub).
9
+ - **`qe campaign` recon+generation action (TH-7, ADR 0006).** New `campaign` action on the `wicked-garden-qe` router (`skills/qe/refs/campaign.md`): derives a capability inventory from three lenses — the estate code graph when the target repo is indexed, docs recall via `wicked-garden-mem`, and live probing (health endpoints, crew's committed `packages/crew/endpoint-manifest.json`, DOM landmarks) — and emits a dependency-ordered campaign plan CONFORMING to `schemas/campaign-recon.schema.json` v1 (never a parallel format), persisted as a ledger `strategies` row + scenario-format v1 files under `.wicked-qe/campaigns/<name>/`. Assembly/validation glue is `scripts/qe/campaign_plan.py` (stdlib-only, fail-closed): honest `sources.estate: "unindexed"` degradation is DERIVED (an unindexed plan claiming estate-sourced entries is rejected), doc-derived claims are forced `status: "proposed"` pending human review (the incident-to-scenario pending-review pattern), ladder order + rung↔capability binding are enforced beyond the JSON schema, and generated stubs fail until authored (never a silent PASS). Tests: `tests/qe/test_campaign_action.py` validates a generated three-lens plan against the schema itself.
10
+ - **qe dispatch guard (TH-7, guard half of the retired agent-surface cleanup — arch-R25 ≡ test-R20).** `scripts/qe/campaign_dispatch.py`: every qe dispatch resolves its specialist through `resolve_specialist()`, which asserts the resolved worker is a shipped `wicked-garden-qe-*` skill and BLOCKS retired `wicked-testing-*` / `wicked-brain-*` names at dispatch with a clear error naming the garden replacement (exit 2 on the CLI; never a silent rewrite). Wired into `skills/qe/SKILL.md` (fork workers) and `skills/qe/refs/execute.md` (dispatch block).
11
+
12
+ ### Fixed
13
+ - **Re-landed TH-5's campaign-recon schema, clobbered by #1083's stale-base squash.** PR #1083 (TH-4) was squashed from a branch cut before #1082 merged, silently reverting `schemas/campaign-recon.schema.json`, `tests/qe/test_campaign_recon_schema.py`, and the `schemas/README.md` standalone-contract section. Restored byte-for-byte from the #1082 squash commit. (The same squash also reverted #1081's docs/peer-floor work — flagged to its owning lane, not restored here.)
14
+
15
+ ### Changed
16
+ - **`wicked_ledger_version` floor `^0.2.0` → `^0.4.0` (recon XC-4 — the wicked-ledger 2.1 floor-bump wave).** wicked-ledger 0.4.0 ships evidence-manifest **2.1.0** (optional `scenario_evidence` block + first-class `claim_level` enum, `validateManifest` reviewer entry point — TH-5) and new-feature API surface, so the npm minor moved and the old caret (`^0.2.0` excludes 0.3+) had to move with it. Store compat is unchanged in every direction a garden consumer touches: SQLite `schema_version` stays **3** (no new migrations since 0.1.0), and manifest 2.1 is a **minor** — 2.0.0 bundles still validate (covered by the ledger's backward-compat smoke test) and 2.x readers gate on the major. The pin is single-sourced in `plugin.json`; the six qe skill files (`skills/qe/SKILL.md`, `skills/qe/refs/{accept,insight,integration}.md`, `skills/qe-release-readiness-engineer/SKILL.md`, `skills/qe-test-impact-analyzer/SKILL.md`) reference it symbolically and needed no edits — this completes the ledger-pin half DT-13 deferred to XC-4.
17
+ - **Peer-floor and manifest truth pass (recon DT-13).** One consistent vault-floor story: every doc restatement now says **≥ 0.5.0** — the floor `scripts/loom/manifest.py` (`version_pin="0.5"`) and `plugin.json` (`wicked_vault_version ^0.5.0`) have carried since 12.31.0 (checked by the peer registry's health probe: `loom doctor` reports a below-floor vault as `drift` and exits non-zero) — replacing the stale `≥ 0.4.0` (README, CONTRIBUTING, `skills/archetype/refs/{review,incident,migrate,modernize,specify}.md`) and `^0.3.0` (`docs/required-peers.md`) claims. manifest.py + plugin.json are declared the single source; restatements carry a greppable `<!-- vault-floor -->` marker, and `docs/required-peers.md` documents the bump procedure. `skills/core/refs/setup.md` now checks the probed vault version against the floor and tells a below-floor (e.g. 0.4.x) user to upgrade via `npm i -g wicked-vault@latest`.
18
+ - **`docs/required-peers.md` rewritten to the shipped truth.** The vault install command is now the working `npm i -g wicked-vault` form (was `npx wicked-vault-install`, which E404s on a fresh machine — no npm package of that name exists; it's a bin of `wicked-vault`). The loom row no longer presents a required external peer pinned `^0.2.0`: the engine has been absorbed in-package (`scripts/loom/`, dispatched in-process by `scripts/_loom.py`) since 12.27.0. **Decision (recon OQ-4):** the standalone `wicked-loom` npm package (0.4.0, not deprecated) is not a sanctioned install path — the pin is deleted, not bumped; `WICKED_LOOM_BIN` stays a debugging escape hatch.
19
+ - **`.claude-plugin/plugin.json`: deleted the retired `wicked_brain_version` pin** (`^0.18.0` — wicked-brain retired 2026-08, Phase 5-S7; nothing reads the key). The `wicked_ledger_version ^0.2.0` pin is deliberately untouched here — it moves with the coordinated wicked-ledger 2.1 floor-bump wave.
20
+ - **`.claude-plugin/marketplace.json`: retired-layers copy fixed** — "testing/brain/bus are opt-in layers" → estate/bus are the opt-in layers; wicked-testing and wicked-brain are retired (QE ships in-catalog as the `qe` domain; memory lives in wicked-estate).
21
+ - **`docs/brain-chunk-format.md`: retirement banner added** (recon DT-18) — the doc read as live instructions to write chunks into `~/.wicked-brain`, which is a frozen archive that must never be written; the format is preserved as historical reference for the chunks migrated into wicked-estate.
22
+ - **Site: the wicked-interactive card tells the document-engine story** (recon DT-12) — wicked-interactive moved planes rather than retiring: it is the foundation's document engine (storage, version lineage, HTML/PDF/PPTX/video rendering) that wicked-crew spawns and proxies, not a standalone visual builder. Install command unchanged (two-step marketplace add + install).
23
+ - **Backfilled the 12.30.0 and 12.31.0 changelog entries below** (recon DT-17) — the previous release entry was 12.29.1 while npm shipped 12.31.0; the vault-direct-peer entry that sat under [Unreleased] shipped in 12.31.0 and now lives there.
24
+
25
+ ## [12.32.1] — 2026-09-09
26
+
27
+ ### Fixed
28
+ - **Skills: the five dangling `${CLAUDE_PLUGIN_ROOT}` paths and the broken qe evidence-schema link (#1111, fixed in #1113).** wicked-crew's skills publish analyzer (crew#480) resolves every plugin-root and relative reference in the shipped plugin against the would-be snapshot; the five targets parked in `tests/test_skill_dispatch_refs_resolve.py::KNOWN_DANGLING_PATHS` are now fixed at the source and the allowlist is empty (the test fails if any of them dangles again). Imagery `alter`/`create` (+ `alter/refs/editing-reference.md` and the `scripts/{edit,generate}.sh` wrappers) invoke `skills/product/imagery/scripts/provider.py` — the sub-skills kept the pre-move `skills/imagery/` path after imagery moved under `skills/product/` (the wrappers' `PLUGIN_ROOT` fallback also climbed one directory too few); the requirements output-format ref's **Templates** section points at the two skeletons already inline instead of a `templates/` directory cut in v12.21; the user-story guide's "generate template" line (a script that never shipped) points at the inline **Template for New Stories** block; the runtime-exec example is written as the quoted `"path/to/your_script.py"` placeholder it always was (copy-safe, and no longer shaped like a plugin-root path); and `skills/qe/refs/evidence.md` cites `schemas/evidence.json` as shipped in the `wicked-vault` npm package (garden never vendored it, so the relative link had nothing to resolve to). `scripts/ci/validate.py` §6 now reports 0 broken script paths (was 11). Deliberately untouched: the architecture deployment-template links (`skills/engineering/architecture/refs/architecture-template-deployment.md`, they target the user's repo) and the domain vendor README's sibling-checkout prose.
29
+ - **repo-learn: the tier/severity enum tokens are spelled out unmissably** in the skill, so capture workers stop drifting onto values wicked-estate's `proposal.submit` rejects (#1108).
30
+
31
+ ### Added
32
+ - **`wicked-garden-repo-learn`** — churn-led repo-learning skill: churn → hotspots → captured memories + policy proposals (#1107).
33
+
34
+ ### Changed
35
+ - Docs: the architecture-wiki skill pointers route to Steering (`STEERING.md` — #1103); site additive messaging refresh — steering, governed knowledge, requirements graph (#1109); stale doc counts, version stamp and markers corrected (#1110).
36
+
37
+ ## [12.32.0] — 2026-08-30
38
+
39
+ ### Added
40
+ - **qe campaign suite complete**: recon+generation w/ dispatch guard, intake propose-as-gate, accept-trio grading, flaky-verdict quarantine, degradation scenarios, campaign rerun+diff, CI recipes (PR subset / governed nightly), vault-backed evidence integrity (content-addressed, redaction-first), AW-25 golden-path evidence chain, dogfood corpus wiring.
41
+ - **Per-turn rules source**: stop.py names `rules.recall` as THE per-turn source; guard_pipeline consumes a graph-derived rules dir with content-hash provenance; `WG_OUTGOV` defaults to advisory `warn`.
42
+ - **Architecture-wiki pointers** in the mem/search/conformance skills (`knowledge.recall {"scope_prefix":"wiki:"}` + estate `rules.recall`).
43
+
44
+ ### Changed
45
+ - Site version stamp injected at build from the plugin manifest (DT-7 — can never re-stale).
46
+ - campaign-recon schema v2: `desktop` category tiers + `isolation` annotation in one bump.
47
+
48
+ ## [12.31.0] — 2026-08-25
49
+
50
+ ### Changed
51
+ - **Phase 5 — wicked-brain retired; memory/knowledge/context re-homed onto wicked-estate.** The `mem` domain now runs over wicked-estate (S7 brain folds: vision ingest, session capture, cited answer — #1048); the auto-memorize loop rebuilt on estate (#1050); context assembly retargeted from wicked-brain onto wicked-estate (S4 — #1044) and the wicked-brain route retired outright — estate-only context stack (S7 — #1056). Reach plumbing: estate reach-shim so garden hooks can reach the estate stdio MCP (S2 — #1041) and a persistent stdio broker for ~50x faster estate calls (S3).
52
+ - **ADR 0005 — the code-relationship graph re-homed to wicked-estate** (supersedes ADR 0004 — #1040): remaining graph consumers re-homed (S5: A1/A2/A4/A5/A6 + Section B — #1049) and wicked-patch's graph reader retargeted (A3 — #1045).
53
+ - **Phase 6 — wicked-testing retired; QE ships in-catalog.** wicked-testing's capability set became the garden `qe` domain (Phase 6b — #1047); the wicked-testing peer retired and its `wicked_testing_version` pin dropped (Phase 6c — #1051); qe event/domain rebrand — `.wicked-qe` store dirname, qe stamps, in-catalog helpers, `wicked_vault_version` floor `^0.4.4` → `^0.5.0` and `wicked_ledger_version` `^0.1.0` → `^0.2.0` (#1052). (Earlier in the same release, the testing floor had been bumped `^0.8.0` → `^0.10.0` — #1037 — before the peer's retirement mooted it.)
54
+ - **wicked-vault became a direct infra peer — no longer installed "via wicked-testing"** (#1039). `wicked-vault` is published from its own repo (mikeparcewski/wicked-vault): self-contained, zero runtime deps. The loom peer registry (`scripts/loom/manifest.py`) installs it directly (`install_cmd` = `["npm", "install", "-g", "wicked-vault@latest"]`, was `["npx", "wicked-testing", "install"]`); `plugin.json` `wicked_vault_version` floor `^0.4.0` → `^0.4.4` (raised again to `^0.5.0` by #1052 in this same release). Narrative corrected across `plugin.json` / `marketplace.json` descriptions, `docs/getting-started.md`, and `skills/core/refs/setup.md`; fixed a hardcoded `~/Projects/wicked-vault` dev path in `scripts/compiler/phase0/wire_vault.py`.
55
+ - Site: wave-2 capability deep-dive — the catalog, the qe wall, the extension pitch (#1055); shared chrome re-pins (studio first-class — #1058, and digest updates); baseline Playwright smoke suite for the signature widgets (#1046).
56
+ - Docs accuracy: removed the sunsetted Gemini CLI from the harness list and panel description (#1065).
57
+ - Dependency wave: astro 7.2.x, react 19.2.18, motion v13, svgo, npm_and_yarn group.
58
+
59
+ ### Added
60
+ - **Third-party extension contract (packs)** — drop-in packs, shipped conformance gate, crew routing (#1057).
61
+ - Event hygiene: 6 wicked-core production events cataloged + a 4-segment `wicked.<domain>.<noun>.<verb>` format validator (#1061); 3-segment QE event names renamed to canonical 4-segment (#1060).
62
+
63
+ ### Fixed
64
+ - Drift-guard: crew contract check re-pointed at `wicked-crew-api-types` (#1054).
65
+ - Bootstrap perf: CH-02 legacy-scan result cached, eliminating a ~20s rglob on session start (#1064).
66
+ - E2E: `BootstrapEndToEndTests` isolated from shared `HOME` state (#1066).
67
+
68
+ ## [12.30.0] — 2026-07-30
69
+
70
+ ### Added
71
+ - **Domain extraction pipeline:** structural extraction loop — clusters, blast-radius framing, parallel workers (#1020); Message Batches API pipeline + direct-API adapter for rule extraction (#1025).
72
+
73
+ ### Fixed
74
+ - Domain-extraction robustness chain: infra failures abort the pass instead of RISK-flooring (#1021); zero-yield batches abort as infra-suspect and floors never overwrite content (#1022, #1023); one in-pass retry before infra abort (#1024); batch timeouts retry once before flooring (#1026); rule statements phrased in product-functional terms with config trivia floored honestly (#1027); trailing-dot-tolerant symbol-id matching so model-normalized ids recanonize (#1028).
75
+ - Scaffolding: YAML-quote template name placeholders — unquoted `{{name}}` broke codex's skill loader (#1029).
76
+
5
77
  ### Changed
6
- - **wicked-vault is now a direct infra peer — no longer installed "via wicked-testing".** `wicked-vault@0.4.4` is published from its own repo (mikeparcewski/wicked-vault): self-contained, zero runtime deps. The loom peer registry (`scripts/loom/manifest.py`) now installs it directly (`install_cmd` = `["npm", "install", "-g", "wicked-vault@latest"]`, was `["npx", "wicked-testing", "install"]`) and bumps the vault MAJOR.MINOR floor `0.3` → `0.4` (in lockstep with `plugin.json`). `plugin.json` `wicked_vault_version` floor `^0.4.0` → `^0.4.4`. Narrative corrected across `plugin.json` / `marketplace.json` descriptions, `docs/getting-started.md`, and `skills/core/refs/setup.md` (vault installs directly, not through wicked-testing). Fixed a hardcoded `~/Projects/wicked-vault` dev path in `scripts/compiler/phase0/wire_vault.py` so it resolves the published vault via `npx --yes wicked-vault`. This cuts the testing → garden coupling and makes the garden's evidence gate standalone.
78
+ - Site: version-free kicker chip — npm is the version authority (#1018).
79
+ - CI: notify wicked-installer on release tags (#1030).
80
+ - DoD bookkeeping: L3-009/L3-010 evidence checked off against the 12.29.1 release (#1015); shared deps updated to v19.2.8 (#1008).
7
81
 
8
82
  ## [12.29.1] — 2026-07-21
9
83
 
package/CONTRIBUTING.md CHANGED
@@ -19,8 +19,8 @@ uv run pytest tests/ -x
19
19
  ## Escape Hatches
20
20
 
21
21
  > **Historical note (Phase 6c):** the `WG_SKIP_WICKED_TESTING_CHECK` escape
22
- > hatch and the SessionStart wicked-testing probe it bypassed were removed
23
- > when wicked-testing retired — the qe domain ships in-catalog (the
22
+ > hatch and the SessionStart wicked-testing probe it bypassed were removed <!-- historical -->
23
+ > when wicked-testing retired — the qe domain ships in-catalog (the <!-- historical -->
24
24
  > `wicked-garden-qe` router + specialists), so there is no peer package to
25
25
  > probe. The acceptance gate concept now lives in wicked-crew's
26
26
  > `/runs/:id/acceptance` route.
@@ -29,11 +29,13 @@ uv run pytest tests/ -x
29
29
 
30
30
  **For offline CI and dev environments without the wicked-vault peer only.**
31
31
 
32
- wicked-vault (npm, ≥0.4, install `npm i -g wicked-vault`) is a required peer
33
- alongside wicked-loom/bus/brain. The garden's produces-gates re-derive
34
- evidence through **wicked-loom** — `scripts/qe/vault_gate.py` shells `wicked-loom
35
- gate`, which in turn shells `wicked-vault cross-check`, so the vault is the backend
36
- loom re-runs the verifier against. loom resolves the vault; the concrete-install
32
+ wicked-vault (npm, ≥ 0.5.0 <!-- vault-floor -->, install `npm i -g wicked-vault`)
33
+ is the one required peer (the loom engine is built into the garden; bus is an
34
+ opt-in layer). The garden's produces-gates re-derive
35
+ evidence through the built-in loom engine — `scripts/qe/vault_gate.py` runs
36
+ `loom gate` in-process (`scripts/_loom.py` → `scripts/loom/`), which shells
37
+ `wicked-vault cross-check`, so the vault is the backend loom re-runs the
38
+ verifier against. loom resolves the vault; the concrete-install
37
39
  probe (`vault_available`) and the `WICKED_VAULT_BIN` kill-switch below still apply.
38
40
  The vault CLI is resolved in order:
39
41
 
package/README.md CHANGED
@@ -54,14 +54,23 @@ No universal pipeline to obey. A hook reads each prompt's *shape* and that decid
54
54
  ## Install
55
55
 
56
56
  ```bash
57
- /plugin install wicked-garden # in Claude Code
57
+ claude plugins marketplace add mikeparcewski/wicked-garden
58
+ claude plugins install wicked-garden
59
+ ```
60
+
61
+ Or use the family installer — [`npx wicked-installer`](https://www.npmjs.com/package/wicked-installer)
62
+ installs/updates the whole wicked-\* family (garden, its peers, and the rest).
63
+
64
+ Then, in a Claude Code session:
65
+
66
+ ```bash
58
67
  /wicked-garden-core setup # verifies peers; blocks only on the one the gate needs
59
68
  ```
60
69
 
61
70
  **One required peer, the rest opt-in.** The evidence gate is the floor we won't fake, so it needs one external peer — setup blocks without it:
62
71
 
63
72
  ```bash
64
- npm i -g wicked-vault # wicked-vault (≥ 0.4.0), the honest-evidence backend the gate re-derives against
73
+ npm i -g wicked-vault # wicked-vault (≥ 0.5.0), the honest-evidence backend the gate re-derives against
65
74
  ```
66
75
 
67
76
  > The gate/resolve engine (formerly the separate `wicked-loom` package) is now **absorbed in-package** as of v12.27.0 (`scripts/loom/`) — nothing extra to install. The gate re-hashes recorded evidence and re-runs its verifier through that engine; a false "tests pass" is **rejected**, a missing backend **fails closed**.
@@ -71,7 +80,7 @@ The rest of the kit is **opt-in layers** — add what you want, skip the rest an
71
80
  ```bash
72
81
  # wicked-estate — the memory/knowledge layer (cross-session recall + cited search, the "what"):
73
82
  # install the `wicked-estate` + `wicked-estate-mcp` binaries onto PATH or ~/.local/bin
74
- /plugin install wicked-bus # the audit-trail layer (fire-and-forget; fail-open without it)
83
+ npm i -g wicked-bus && npx wicked-bus-install # the audit-trail layer (fire-and-forget; fail-open without it)
75
84
  ```
76
85
 
77
86
  > Evidence-gated acceptance testing (author ≠ executor ≠ reviewer) needs no extra install — it ships **in-catalog** as the `qe` domain (`wicked-garden-qe`).
@@ -127,7 +136,7 @@ Full author guide: [`docs/extending.md`](docs/extending.md).
127
136
 
128
137
  ## Requirements
129
138
 
130
- A coding-agent harness ([Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) ≥ 1.0 for the plugin surface; the peers + compiled gate are harness-agnostic) · Python 3.9+ (stdlib-only hooks) · Node + `npx` · the gate's one required peer (`wicked-vault` ≥ 0.4.0) plus opt-in layers (`wicked-estate` · `wicked-bus`).
139
+ A coding-agent harness ([Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) ≥ 1.0 for the plugin surface; the peers + compiled gate are harness-agnostic) · Python 3.9+ (stdlib-only hooks) · Node + `npx` · the gate's one required peer (`wicked-vault` ≥ 0.5.0) plus opt-in layers (`wicked-estate` · `wicked-bus`).
131
140
 
132
141
  ## License
133
142
 
package/docs/README.md CHANGED
@@ -2,19 +2,20 @@
2
2
 
3
3
  Detailed guides for getting the most out of wicked-garden.
4
4
 
5
- Work in wicked-garden is organized around **9 work-shape archetypes** — not a fixed pipeline. Each prompt classifies into one or more archetypes (triage, explore, specify, decide, ship, review, incident, build, migrate); each owns its own phase shape, produces contract, and HITL discipline.
5
+ Work in wicked-garden is organized around **10 work-shape archetypes** — not a fixed pipeline. Each prompt classifies into one or more archetypes (triage, explore, specify, decide, ship, review, incident, build, migrate, modernize); each owns its own phase shape, produces contract, and HITL discipline.
6
6
 
7
7
  ## Guides
8
8
 
9
9
  | Guide | Description |
10
10
  |-------|-------------|
11
11
  | [Getting Started](getting-started.md) | Installation, required peers, first session, common workflows |
12
- | [Archetypes](v11/archetypes.md) | The 9 work-shape archetypes — why the universal pipeline went away |
13
- | [Domains](domains.md) | The 10 domain skills archetypes invoke for expertise |
14
- | [Required Peers](required-peers.md) | The five required peer plugins and the install/runtime stance |
12
+ | [Archetypes](v11/archetypes.md) | The 10 work-shape archetypes — why the universal pipeline went away |
13
+ | [Domains](domains.md) | The 9 domain skills archetypes invoke for expertise |
14
+ | [Required Peers](required-peers.md) | The one required peer (plus the opt-in layers) and the install/runtime stance |
15
15
  | [The Compiler](compiler.md) | `/wicked-garden-prove compile` — emit a self-contained vault-backed gate into any repo |
16
16
  | [Extending the Catalog](extending.md) | Ship a third-party pack — `{vendor}-{domain}-{role}` skills, the `wicked-pack.json` manifest, the shipped conformance gate, install + crew routing |
17
- | [Brain Chunk Format](brain-chunk-format.md) | Historical: how content was chunked for the retired wicked-brain index (the migrated chunks in wicked-estate keep this shape) |
17
+ | [Output Governance (Per-Turn)](outgov-per-turn.md) | The advisory hook lane — `WG_OUTGOV` modes (default `warn`), `rules.recall` as the single per-turn rule source, content-hash provenance for the graph-derived rules dir |
18
+ | [Brain Chunk Format](brain-chunk-format.md) | Historical: how content was chunked for the retired wicked-brain index (the migrated chunks in wicked-estate keep this shape) | <!-- historical -->
18
19
 
19
20
  ## Quick Links
20
21
 
@@ -1,6 +1,12 @@
1
+ ---
2
+ id: wicked-garden-adr-0001
3
+ title: "Code-relationship graph: adopt codegraph as the engine, add injected-edge extractors"
4
+ status: superseded
5
+ date: 2026-06-09
6
+ ---
1
7
  # ADR 0001 — Code-relationship graph: adopt codegraph as the engine, add injected-edge extractors
2
8
 
3
- - **Status:** Superseded by [ADR 0004](0004-code-graph-moves-to-wicked-brain.md) (2026-06-10) — the engine choice (codegraph) + injected-edge concept stand, but the graph's **home moved to wicked-brain** (garden no longer hosts the shim/extractors). Originally: Accepted (prototype validated).
9
+ - **Status:** Superseded by [ADR 0004](0004-code-graph-moves-to-wicked-brain.md) (2026-06-10) — the engine choice (codegraph) + injected-edge concept stand, but the graph's **home moved to wicked-brain** (garden no longer hosts the shim/extractors). Originally: Accepted (prototype validated). <!-- historical -->
4
10
  - **Date:** 2026-06-09
5
11
  - **Context owners:** wicked-garden
6
12
 
@@ -1,3 +1,9 @@
1
+ ---
2
+ id: wicked-garden-adr-0002
3
+ title: "Major cleanup: collapse rubric-wrappers to skills; keep only what the agent actually uses"
4
+ status: active
5
+ date: 2026-06-09
6
+ ---
1
7
  # ADR 0002 — Major cleanup: collapse rubric-wrappers to skills; keep only what the agent actually uses
2
8
 
3
9
  - **Status:** Accepted — **fully executed**. All domains collapsed (product #910; engineering #911; platform #912; data+delivery #913; agentic+jam+persona+smaht #914), orphan agents purged via `scripts/ci/find_orphan_agents.py`, and `components.json` re-derived via `scripts/ci/sync_components.py`. End state: 90 commands, 40 agents (from 56), 71 skills.
@@ -31,13 +37,13 @@ This is grounded in a full hands-on pass: every domain was invoked and judged ag
31
37
  | code-graph (codegraph + injected-edge extractors) → `search:blast-radius`, `search:lineage` | **output + tokens** — finds injected relationships grep can't; impact in one query vs. reading many files |
32
38
  | wicked-patch (`rename`/`add-field`/`remove`/`apply`) — once wired to the graph DB | **easier + output** — deterministic multi-file refactor |
33
39
  | `jam:council` / multi-model | **output** — real external-model perspective the agent can't produce alone |
34
- | `jam:brainstorm` / `revisit` (the wicked-brain decision-memory loop) | **output** — longitudinal decision/outcome memory |
40
+ | `jam:brainstorm` / `revisit` (the wicked-brain decision-memory loop) | **output** — longitudinal decision/outcome memory | <!-- historical -->
35
41
  | `smaht:briefing` | **tokens** — one event-store query replaces stitching git+memory+tasks |
36
42
  | `data:ontology` | **output** — real RDF-vocabulary engine (beats free-recall) |
37
43
  | `persona:as` (built-in personas) + `persona:list` | **output** — hand-authored constraints/memories measurably steer; cheap discovery |
38
44
  | `platform:security` (now drives real `gitleaks`/`semgrep`) | **output** — real SAST/secrets, not grep-guessing |
39
45
  | `platform:toolchain` | **tokens/easier** — fast deterministic CLI inventory |
40
- | wicked-testing integration (`acceptance`/`run`/`plan`/`review`) | **output** — evidence-gated testing backbone |
46
+ | wicked-testing integration (`acceptance`/`run`/`plan`/`review`) | **output** — evidence-gated testing backbone | <!-- historical -->
41
47
  | archetype **gate** + actionable steering (emits the `prove` one-liner) | **output** — turns the principle into a reflex |
42
48
  | Core plumbing: `setup`, `where-am-i`, `help`, `intent`, `reset`, `classify`, hooks | load-bearing |
43
49
 
@@ -47,7 +53,7 @@ These are `Task(subagent)` rubric-wrappers: a checklist the agent already applie
47
53
 
48
54
  | Domain | Collapse | Note |
49
55
  |---|---|---|
50
- | product | ✅ **EXECUTED — all 12** (`a11y`,`ux`,`ux-review`,`elicit`,`strategy`,`mockup`,`screenshot`,`analyze`,`synthesize`,`listen`,`align`,`acceptance`) | The pattern. Each rubric is now `skills/product/refs/<name>.md`, loaded inline. **Kept dispatch** only for the genuine multi-lens cases: `ux-review --focus all` (4 lenses) and `strategy --focus all` (2 lenses). Removed the dispatch-only agents `ux-analyst`, `user-voice`, `mockup-generator`; kept the rest (still referenced). `acceptance --scenarios` wicked-testing tie-in preserved in the ref. |
56
+ | product | ✅ **EXECUTED — all 12** (`a11y`,`ux`,`ux-review`,`elicit`,`strategy`,`mockup`,`screenshot`,`analyze`,`synthesize`,`listen`,`align`,`acceptance`) | The pattern. Each rubric is now `skills/product/refs/<name>.md`, loaded inline. **Kept dispatch** only for the genuine multi-lens cases: `ux-review --focus all` (4 lenses) and `strategy --focus all` (2 lenses). Removed the dispatch-only agents `ux-analyst`, `user-voice`, `mockup-generator`; kept the rest (still referenced). `acceptance --scenarios` wicked-testing tie-in preserved in the ref. | <!-- historical -->
51
57
  | engineering | `debug`, `plan`, `arch`, `review`, `docs` | `debug` duplicates `superpowers:systematic-debugging` (collapse to a pointer); rest collapse with R1–R6 preserved as a ref. |
52
58
  | platform | `compliance`, `audit`, `incident`, `health`, `traces`, `actions`, `gh`, `infra` | keep `security` + `toolchain`. Collapse the SOC2/HIPAA audit checklist into a ref. |
53
59
  | data | `analyze`, `data`, `pipeline`, `ml` | keep `ontology`. |
@@ -1,12 +1,18 @@
1
+ ---
2
+ id: wicked-garden-adr-0003
3
+ title: "Two required peers (the gate), three opt-in layers"
4
+ status: active
5
+ date: 2026-06-09
6
+ ---
1
7
  # ADR 0003 — Two required peers (the gate), three opt-in layers
2
8
 
3
- - **Status:** Accepted — executed. *(Historical note, Phase 6c: `wicked-testing` has since retired as a peer — its skills ship in-catalog as the `qe` domain and the acceptance gate lives in wicked-crew. The opt-in-layer reasoning below is preserved as written.)*
9
+ - **Status:** Accepted — executed. *(Historical note, Phase 6c: `wicked-testing` has since retired as a peer — its skills ship in-catalog as the `qe` domain and the acceptance gate lives in wicked-crew. The opt-in-layer reasoning below is preserved as written.)* <!-- historical -->
4
10
  - **Date:** 2026-06-09
5
11
  - **Supersedes:** the v12 stance in `docs/required-peers.md` ("five peers are required infrastructure").
6
12
 
7
13
  ## Context
8
14
 
9
- v12 made all five peers (`wicked-testing`, `wicked-vault`, `wicked-brain`, `wicked-bus`, `wicked-loom`) **required** — `/wicked-garden:setup` blocked without any one, and the SessionStart bootstrap nagged "REQUIRED but not installed" for each.
15
+ v12 made all five peers (`wicked-testing`, `wicked-vault`, `wicked-brain`, `wicked-bus`, `wicked-loom`) **required** — `/wicked-garden:setup` blocked without any one, and the SessionStart bootstrap nagged "REQUIRED but not installed" for each. <!-- historical -->
10
16
 
11
17
  A third-party review pass (a skeptic persona + a `jam:council` panel of external models — codex/gpt-5.5 and opencode/claude-haiku) converged, independently, on one verdict: **the all-or-nothing five-peer requirement contradicts the "gap-filler that gets out of the way" pitch and is the single biggest adoption blocker.** "A gap-filler should feel additive; this sounds like infrastructure." "A single required peer would unlock solo adoption; bundle the other four as opt-in layers and you'd see 10× more install attempts."
12
18
 
@@ -17,7 +23,7 @@ The author's counter-point matters too: **garden's goal is a curated toolkit**,
17
23
  Split the peers by what actually needs them:
18
24
 
19
25
  - **Required — the evidence gate:** `wicked-vault` + `wicked-loom`. The toolkit's central promise is *re-derived, fail-closed "done."* A gate that can't re-derive evidence is the one thing we refuse to fake, so setup **blocks** without these two. Trading adoption for honesty here is deliberate.
20
- - **Opt-in layers:** `wicked-testing` (acceptance-testing tool), `wicked-brain` (memory + search — the *what*), `wicked-understanding` (repo playbooks — the *how*; `skills`-standard, added in v12.16), `wicked-bus` (audit trail). Each unlocks one capability; none is a prerequisite for the others or for the gate. Setup **recommends** them and continues; bootstrap surfaces them informationally.
26
+ - **Opt-in layers:** `wicked-testing` (acceptance-testing tool), `wicked-brain` (memory + search — the *what*), `wicked-understanding` (repo playbooks — the *how*; `skills`-standard, added in v12.16), `wicked-bus` (audit trail). Each unlocks one capability; none is a prerequisite for the others or for the gate. Setup **recommends** them and continues; bootstrap surfaces them informationally. <!-- historical -->
21
27
 
22
28
  This is the toolkit stance: **breadth you adopt incrementally**, not a five-thing prerequisite wall.
23
29
 
@@ -25,7 +31,7 @@ This is the toolkit stance: **breadth you adopt incrementally**, not a five-thin
25
31
 
26
32
  - The produces-gate already routes only through vault+loom; it never needed testing/brain/bus.
27
33
  - `wicked-bus` emission was already fire-and-forget / fail-open.
28
- - `wicked-brain` absence already degrades (structural search falls back to codegraph; memory features simply go dark).
34
+ - `wicked-brain` absence already degrades (structural search falls back to codegraph; memory features simply go dark). <!-- historical -->
29
35
  - Runtime resilience + the kill-switches (`WICKED_VAULT_BIN=""`, `WICKED_LOOM_CUTOVER=off`) are unchanged — they still fail closed, never vacuous-pass.
30
36
 
31
37
  ## Changes
@@ -1,5 +1,14 @@
1
+ ---
2
+ id: wicked-garden-adr-0004
3
+ title: "Move the code-relationship graph to wicked-brain (inverts ADR 0001's homing)"
4
+ status: superseded
5
+ date: 2026-06-10
6
+ supersedes: [wicked-garden-adr-0001]
7
+ ---
1
8
  # ADR 0004 — Move the code-relationship graph to wicked-brain (inverts ADR 0001's homing)
2
9
 
10
+ <!-- historical-doc -->
11
+
3
12
  - **Status:** Superseded by [ADR 0005](0005-code-graph-re-homes-to-wicked-estate.md) (2026-08-11) — the
4
13
  graph's **home moved from wicked-brain to wicked-estate** (which independently built a more capable
5
14
  graph: 75-language tree-sitter extractor, `ExtraEdgeExtractor` TOML injected edges, cross-repo
@@ -1,9 +1,16 @@
1
+ ---
2
+ id: wicked-garden-adr-0005
3
+ title: "Re-home the code-relationship graph to wicked-estate (supersedes ADR 0004)"
4
+ status: active
5
+ date: 2026-08-11
6
+ supersedes: [wicked-garden-adr-0004]
7
+ ---
1
8
  # ADR 0005 — Re-home the code-relationship graph to wicked-estate (supersedes ADR 0004)
2
9
 
3
10
  - **Status:** Accepted
4
11
  - **Date:** 2026-08-11
5
12
  - **Supersedes:** [ADR 0004](0004-code-graph-moves-to-wicked-brain.md) **in full** — the graph's
6
- home moves from `wicked-brain` to `wicked-estate`. Also **retires the engine choice** carried
13
+ home moves from `wicked-brain` to `wicked-estate`. Also **retires the engine choice** carried <!-- historical -->
7
14
  forward from [ADR 0001](0001-code-relationship-graph-engine.md): `@colbymchenry/codegraph` is
8
15
  replaced by estate's own 75-language tree-sitter extractor. What ADR 0001/0004 got right — a real
9
16
  relationship graph with **injected edges** as the load-bearing idea — stands; only the home and
@@ -13,22 +20,22 @@
13
20
  estate `docs/adr/ADR-001-graph-schema.md` (graph schema),
14
21
  estate `docs/extractor-sdk.md`, estate `CLAUDE.md`. (Cross-repo references are given as
15
22
  paths, not links — they resolve in the `wicked-estate` repo, not this one.)
16
- - **Retarget checklist:** [`0005-retarget-inventory.md`](0005-retarget-inventory.md) — the actionable
23
+ - **Retarget checklist:** [`0007-retarget-inventory.md`](0007-retarget-inventory.md) *(renumbered from 0005, 2026-08-29)* — the actionable
17
24
  call-site → estate mapping that Stage S5 executes.
18
25
 
19
26
  ## Context
20
27
 
21
- ADR 0004 homed the code-relationship graph in `wicked-brain`: brain shelled `@colbymchenry/codegraph`
28
+ ADR 0004 homed the code-relationship graph in `wicked-brain`: brain shelled `@colbymchenry/codegraph` <!-- historical -->
22
29
  to build a per-repo `.codegraph/codegraph.db`, read it back over `graph-*` server actions + a
23
- `wicked-brain:graph` skill, and let plugins contribute proprietary injected edges through a drop-in
30
+ `wicked-brain:graph` skill, and let plugins contribute proprietary injected edges through a drop-in <!-- historical -->
24
31
  registry (`<repo>/.codegraph-extractors/*.mjs`). Garden became a consumer: `skills/search/SKILL.md`,
25
32
  `skills/search/refs/hotspots.md`, and `wicked-patch` (`scripts/engineering/patch/codegraph_db.py`)
26
33
  all target that brain surface, and garden ships `.codegraph-extractors/archetype.mjs` as its drop-in.
27
34
 
28
35
  Two facts have since changed the ground under ADR 0004:
29
36
 
30
- 1. **The brain graph is gone.** ADR 0004's implementation is stripped from the current wicked-brain
31
- working tree — there is no `wicked-brain-graph` skill, no `@colbymchenry/codegraph` dependency,
37
+ 1. **The brain graph is gone.** ADR 0004's implementation is stripped from the current wicked-brain <!-- historical -->
38
+ working tree — there is no `wicked-brain-graph` skill, no `@colbymchenry/codegraph` dependency, <!-- historical -->
32
39
  and no `graph-*` server action. Every garden call-site above therefore points at a **surface that
33
40
  no longer exists** — an already-dangling contract, not a live coupling.
34
41
 
@@ -74,11 +81,11 @@ cross-repo overlay the brain never had). There is no code to move — only garde
74
81
 
75
82
  | | 0004 (brain) | 0005 (estate) |
76
83
  |---|---|---|
77
- | Home of the graph + queries | wicked-brain | **wicked-estate** |
84
+ | Home of the graph + queries | wicked-brain | **wicked-estate** | <!-- historical -->
78
85
  | Static engine | `@colbymchenry/codegraph` peer (Node ≥ 22.5) | **estate `wicked-estate-extract`** — 75-language tree-sitter, in-binary |
79
86
  | Injected edges | per-repo JS drop-ins `<repo>/.codegraph-extractors/*.mjs` | **`ExtraEdgeExtractor` TOML rules** (`.wicked-estate-extractors/<name>.toml`, `extra_edge.rs`) |
80
87
  | Cross-repo / cross-store edges | none | **`wicked-estate-overlay` `XedgeStore`** (`xedge.db`) |
81
- | blast-radius / lineage owner | brain `graph-*` actions + `wicked-brain:graph` skill | **estate MCP tools `BlastRadius` / `Lineage` / `TraverseGraph` / `RankHotspots`** |
88
+ | blast-radius / lineage owner | brain `graph-*` actions + `wicked-brain:graph` skill | **estate MCP tools `BlastRadius` / `Lineage` / `TraverseGraph` / `RankHotspots`** | <!-- historical -->
82
89
  | Graph DB | `<repo>/.codegraph/codegraph.db` (codegraph-native SQLite) | **estate index DB** (`wicked-estate index <path>`; queried via MCP, not read raw) |
83
90
  | wicked-patch symbol source | reads `.codegraph/codegraph.db` directly | **estate graph** (via MCP / an estate export) |
84
91
  | Injected-edge direction | `source = dependent, target = producer/playbook`; blast-radius = dependents | **unchanged in spirit** — estate invariant is `source = dependent, target = dependency`, blast-radius = dependents (`xedge.rs` header; estate `CLAUDE.md`). The archetype rule ports **without a direction flip.** |
@@ -98,9 +105,9 @@ cross-repo overlay the brain never had). There is no code to move — only garde
98
105
  ## Consequences
99
106
 
100
107
  - **The dangling contracts get a real target.** Every garden call-site that today references a
101
- retired brain surface (`graph-index`, `graph-blast-radius`, `graph-lineage`, `wicked-brain:graph`,
108
+ retired brain surface (`graph-index`, `graph-blast-radius`, `graph-lineage`, `wicked-brain:graph`, <!-- historical -->
102
109
  raw `.codegraph/codegraph.db` reads) maps to a live estate MCP tool or the estate graph. The exact
103
- mapping is [`0005-retarget-inventory.md`](0005-retarget-inventory.md).
110
+ mapping is [`0007-retarget-inventory.md`](0007-retarget-inventory.md) *(renumbered from 0005, 2026-08-29)*.
104
111
  - **Any repo** gets relationship-graph knowledge by running the wicked-estate MCP server — no garden
105
112
  required and, unlike ADR 0004, **no external codegraph peer / Node version floor** either.
106
113
  - **Garden's archetype extractor is re-authored, not dropped.** `.codegraph-extractors/archetype.mjs`
@@ -118,7 +125,7 @@ cross-repo overlay the brain never had). There is no code to move — only garde
118
125
 
119
126
  ## Implementation
120
127
 
121
- - **This PR (Stage S0):** ADR 0005 + [`0005-retarget-inventory.md`](0005-retarget-inventory.md); mark
128
+ - **This PR (Stage S0):** ADR 0005 + [`0007-retarget-inventory.md`](0007-retarget-inventory.md) *(renumbered from 0005, 2026-08-29)*; mark
122
129
  ADR 0004 superseded (its Status banner). No consumer code touched.
123
130
  - **Stage S5 (later):** execute the retarget inventory — repoint `skills/search/*` to estate MCP
124
131
  tools, repoint `scripts/engineering/patch/codegraph_db.py` to the estate graph, author the archetype
@@ -0,0 +1,76 @@
1
+ ---
2
+ id: wicked-garden-adr-0006
3
+ title: "The test harness homes into the four planes as "qe campaign" — no new product"
4
+ status: active
5
+ date: 2026-08-29
6
+ ---
7
+ # ADR 0006 — The test harness homes into the four planes as "qe campaign" — no new product
8
+
9
+ - **Status:** Accepted
10
+ - **Date:** 2026-08-29
11
+ - **Context owners:** wicked-garden (capability) + wicked-crew/wicked-core (control) + wicked-ledger/wicked-vault (evidence) + wicked-studio (surface)
12
+ - **Relates to:** garden `skills/qe/` (the qe domain), `scripts/qe/lib/gate.mjs` (the `wicked.qe.gate.*` wire contract), `schemas/` (contract-schema home); core `src/campaign.rs` + DES-CAMPAIGN-001 (the Campaign DAG scheduler); crew `GET /runs/:id/acceptance` (the deny-dominates gate); ledger `docs/SCHEMA-CONTRACT.md` (evidence-manifest versioning). (Cross-repo references are paths in those repos, not links.)
13
+ - **Origin:** 2026-08 test-harness recon (RECON-TEST-HARNESS test-R3); precedent in `scratch/TARGET-ARCHITECTURE.md` Phase 6 (wicked-testing dissolution). <!-- historical -->
14
+
15
+ ## Context
16
+
17
+ The 2026-08 studio E2E campaign proved a working shape for large-scale, evidence-gated
18
+ verification: recon a product's surfaces into a capability inventory, generate a
19
+ dependency-ordered scenario ladder, execute deterministically (model-free browser/API
20
+ runners, wire capture, read-back assertions), grade through an isolated reviewer, and
21
+ land evidence where an acceptance gate can re-derive it. The question this ADR settles
22
+ is *where that harness lives*.
23
+
24
+ The tempting answer — a new standalone product ("interactive test harness",
25
+ "wicked-harness") — has already been tried and unwound once. **wicked-testing was <!-- historical -->
26
+ retired in 2026-08 (Phase 6) INTO exactly the planes below**, at real cost: npm
27
+ deprecation at 0.11.0, install-surface migration, the `wicked.qe.*` event rebrand,
28
+ repo archival, site redirects. Its 40 specialists and the acceptance trio became
29
+ garden's `qe` domain; its machine gate became crew's `/runs/:id/acceptance`; its data
30
+ layer became wicked-ledger + wicked-vault under `.wicked-qe/`. A standalone harness
31
+ would recreate the product we just paid to dissolve.
32
+
33
+ ## Decision
34
+
35
+ **No new product.** The harness is a *campaign* capability distributed across the four
36
+ existing planes, under the name **"qe campaign"**.
37
+
38
+ | Concern | Plane | Home | Rationale |
39
+ |---|---|---|---|
40
+ | **Executor runtime** (model-free browser/API runner, vendored Playwright, wire-capture/read-back helpers — TH-4) | **Capability** | **wicked-garden**, `scripts/qe/runner` inside the qe domain | The executor is a tool any control plane invokes, like the rest of the qe pipeline (accept trio, gate.mjs) already in garden. Crew runs *governed workers*; it does not own domain tooling. Precedent: wicked-testing's executor skills landed in garden, only the gate landed in crew. | <!-- historical -->
41
+ | **Recon + generation** (estate-seeded capability inventory, scenario ladder — TH-7) | **Capability** | wicked-garden qe domain (`campaign` action) | Skill work: reads estate's graph + mem/search, emits scenario format v1 — never a parallel format. |
42
+ | **Schemas** (TH-5) | **Capability + Evidence** (two owners, deliberately) | `campaign-recon.schema.json` → **wicked-garden/schemas/** (sits beside assert_contracts.json, health_probe.json, wicked-pack.schema.json); scenario-evidence shape + `claim_level` enum (certified \| machinery-verified \| skipped) → **wicked-ledger manifest 2.1** via SCHEMA-CONTRACT.md | The recon artifact is a capability contract; the evidence shape is the system of record's contract. A single home would create the parallel-format drift the qe domain forbids. Reviewer validates against the ledger's schema before grading; schema-fail = INCONCLUSIVE. |
43
+ | **Scheduler** (durable parallel DAG over scenarios — TH-9) | **Control** | **wicked-core** `src/campaign.rs` (`launch_campaign`/`resume_campaign`, already built per DES-CAMPAIGN-001), exposed through **wicked-crew** `POST/GET /api/v1/campaigns` + WS passthrough of the Campaign* events | The scheduler exists; the work is exposure, not construction. Garden gets no scheduler. Governance (evaluator≠creator, deny-dominates, HITL gates) is crew's job by design. |
44
+ | **Evidence + acceptance** | **Evidence (foundation)** | **wicked-ledger** rows (scenarios/runs/verdicts) + **wicked-vault** artifacts under `.wicked-qe/evidence/<run-id>/`; crew's `GET /runs/:id/acceptance` re-derives the verdict from them | "Done" is re-derived from evidence, never asserted — the family's founding rule. Zero new gate or persistence code. |
45
+ | **Scoreboard** (TH-14) | **Experience** | **wicked-studio**, read-only in v1: scenario ladder, node status from Campaign* WS frames, verdict chips, evidence links, flake/cost trends from ledger insight queries | Studio is a pure client of crew's wire contract; a read surface adds no new authority. Authoring/triage is explicitly phase 2. |
46
+
47
+ ### Naming
48
+
49
+ - **"qe campaign"** — the garden action a user invokes (extends the existing qe domain vocabulary).
50
+ - **"Campaigns"** — the studio surface.
51
+ - **`CampaignDef` / Campaign*** — wicked-core's terms, unchanged; core owns them via DES-CAMPAIGN-001.
52
+ - **Avoid** "interactive test harness" (collides with the wicked-interactive product) and any revival of the retired "wicked-testing" name. <!-- historical -->
53
+
54
+ ## Consequences
55
+
56
+ 1. **This ADR is the anti-scope-creep anchor.** Every TH task cites its plane
57
+ assignment from the table above: TH-4 (executor) → garden; TH-5 (schemas) → garden
58
+ + wicked-ledger; TH-6 (gate wiring) → garden qe (gate.mjs emit) + ledger + crew acceptance; TH-7 (recon/
59
+ generation) → garden; TH-9 (scheduler exposure) → wicked-core-ts + crew; TH-12
60
+ (intake: plan proposed as a HITL gate) → garden `campaign_intake` glue over crew's
61
+ existing gate wire (elicitation follow-on = crew#358); TH-14
62
+ (scoreboard) → studio. A TH task proposing a new package outside these homes is
63
+ out of contract and needs a superseding ADR.
64
+ 2. **No new install surface.** The campaign arrives with `wicked-garden` (capability),
65
+ `wicked-crew` (control + API), and the ledger/vault peers users already have.
66
+ Nothing new to publish, deprecate, or redirect later.
67
+ 3. **Separation of duties is structural.** Garden authors and executes (writes
68
+ evidence, never verdicts of record); the qe accept trio grades in isolation; crew's
69
+ gate re-derives acceptance from ledger evidence, deny-dominates. No plane can
70
+ self-grade.
71
+ 4. **Costs accepted:** the capability is spread across four repos, so cross-repo
72
+ contract discipline (scenario format v1, `wicked.qe.gate.*` payload, ledger manifest
73
+ versioning, `wicked-crew-api-types`) is load-bearing — schema and floor bumps move
74
+ through their owners' release trains, never ad hoc. Crew-side scheduler exposure is
75
+ a prerequisite for durable parallel runs; until it lands, campaigns run as ordinary
76
+ governed workflows.
@@ -1,4 +1,17 @@
1
- # ADR 0005 — Retarget inventory (brain graph surface → wicked-estate)
1
+ ---
2
+ id: wicked-garden-adr-0007
3
+ title: "Retarget inventory (brain graph surface → wicked-estate)"
4
+ status: retired
5
+ date: 2026-08-11
6
+ ---
7
+ # ADR 0007 — Retarget inventory (brain graph surface → wicked-estate)
8
+
9
+ > **Renumbered 2026-08-29 (was ADR 0005)** — this companion checklist shared the number
10
+ > of [ADR 0005](0005-code-graph-re-homes-to-wicked-estate.md), the decision it executes
11
+ > (AW-12 / arch-R12 duplicate-number fix). Content below is unchanged. **Status: retired**
12
+ > — Stage S5 executed this inventory; line numbers reference the garden HEAD of its day.
13
+
14
+ <!-- historical-doc -->
2
15
 
3
16
  Companion to [ADR 0005](0005-code-graph-re-homes-to-wicked-estate.md). This is the **actionable
4
17
  checklist Stage S5 executes.** Every garden call-site that references wicked-brain's (now-retired)
@@ -1,6 +1,15 @@
1
1
  # Brain Chunk Format — Cross-CLI Reference
2
2
 
3
- This document defines the wicked-brain chunk format so any CLI (Claude Code, Codex, Gemini, Copilot) can write chunks that integrate into the shared knowledge graph.
3
+ <!-- historical-doc -->
4
+ > **RETIRED (2026-08, Phase 5-S7).** wicked-brain is retired and `~/.wicked-brain`
5
+ > is a **frozen archive — never write to it** (and never delete it). This format
6
+ > reference is preserved because the chunks written under it were migrated
7
+ > zero-loss into **wicked-estate** and keep `wicked-brain://…` source URIs there.
8
+ > **Do not write new chunks in this format.** To store knowledge or memories
9
+ > today, use wicked-garden's `mem` domain (`wicked-garden-mem` `store`/`ingest`)
10
+ > over wicked-estate. Everything below is historical reference only.
11
+
12
+ This document defines the wicked-brain chunk format so any CLI (Claude Code, Antigravity, Codex, OpenCode, Pi) can write chunks that integrate into the shared knowledge graph.
4
13
 
5
14
  ## Chunk File Structure
6
15