wicked-garden 12.30.0 → 12.32.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.
Files changed (311) hide show
  1. package/.claude-plugin/components.json +46 -4
  2. package/.claude-plugin/marketplace.json +1 -15
  3. package/.claude-plugin/plugin.json +4 -5
  4. package/.claude-plugin/specialist.json +1 -1
  5. package/.product/DES-001-technical-design.md +8 -7
  6. package/.product/RAID.md +4 -4
  7. package/.product/REQ-001-application-overview.md +2 -2
  8. package/.product/REQ-002-technology-constraints.md +3 -3
  9. package/.product/REQ-003-domain-model.md +1 -1
  10. package/CHANGELOG.md +65 -0
  11. package/CONTRIBUTING.md +19 -41
  12. package/ETHOS.md +3 -3
  13. package/README.md +39 -11
  14. package/WICKED_GARDEN_BUS_EVENTS.md +5 -3
  15. package/docs/README.md +5 -2
  16. package/docs/adr/0001-code-relationship-graph-engine.md +7 -1
  17. package/docs/adr/0002-major-cleanup-keep-cut.md +9 -3
  18. package/docs/adr/0003-peers-gate-required-layers-optin.md +10 -4
  19. package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +15 -1
  20. package/docs/adr/0005-code-graph-re-homes-to-wicked-estate.md +138 -0
  21. package/docs/adr/0006-qe-campaign-homes-into-the-four-planes.md +76 -0
  22. package/docs/adr/0007-retarget-inventory.md +167 -0
  23. package/docs/brain-chunk-format.md +9 -0
  24. package/docs/domains.md +4 -4
  25. package/docs/examples/qe-campaign-nightly.yml +136 -0
  26. package/docs/examples/qe-campaign-pr.yml +84 -0
  27. package/docs/extending.md +191 -0
  28. package/docs/getting-started.md +16 -15
  29. package/docs/outgov-per-turn.md +144 -0
  30. package/docs/plans/2026-06-08-wicked-loom-cutover.md +2 -0
  31. package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +2 -0
  32. package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +2 -0
  33. package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +2 -0
  34. package/docs/required-peers.md +64 -22
  35. package/docs/specs/2026-06-08-wicked-loom-extraction.md +2 -0
  36. package/docs/v11/archetypes.md +3 -3
  37. package/evidence/aw25-golden/README.md +80 -0
  38. package/evidence/aw25-golden/campaign-recon.aw25.json +53 -0
  39. package/evidence/aw25-golden/chain/00-daemon-ready.txt +43 -0
  40. package/evidence/aw25-golden/chain/01-ingest.txt +1 -0
  41. package/evidence/aw25-golden/chain/02-fanout-manifest.json +63 -0
  42. package/evidence/aw25-golden/chain/02-fanout-manifest.json.crew-payload.json +58 -0
  43. package/evidence/aw25-golden/chain/02-fanout.txt +6 -0
  44. package/evidence/aw25-golden/chain/03-enforcement-post.json +54 -0
  45. package/evidence/aw25-golden/chain/04-rules-recall.json +22 -0
  46. package/evidence/aw25-golden/chain/05-run-terminal.json +55 -0
  47. package/evidence/aw25-golden/chain/06-governance-claims.json +1 -0
  48. package/evidence/aw25-golden/chain/07-acceptance.json +1 -0
  49. package/evidence/aw25-golden/ruleset/aw25-golden.md +53 -0
  50. package/evidence/aw25-golden/ruleset/policies/POL-2500.json +11 -0
  51. package/evidence/aw25-golden/run.sh +244 -0
  52. package/evidence/th6-dod/00-daemon-ready-line.txt +1 -0
  53. package/evidence/th6-dod/01-acceptance-deny.jsonl +2 -0
  54. package/evidence/th6-dod/02-qe-run-1.json +15 -0
  55. package/evidence/th6-dod/03-qe-run-2.json +15 -0
  56. package/evidence/th6-dod/04-flake-history.json +27 -0
  57. package/evidence/th6-dod/05-manifest-run2.json +58 -0
  58. package/evidence/th6-dod/06-gate-pass.json +1 -0
  59. package/evidence/th6-dod/07-acceptance-satisfied.jsonl +2 -0
  60. package/evidence/th6-dod/08-host-run-terminal.json +13 -0
  61. package/evidence/th6-dod/09-acceptance-after-terminal.jsonl +2 -0
  62. package/evidence/th6-dod/10-verdicts-rows.json +16 -0
  63. package/evidence/th6-dod/README.md +62 -0
  64. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/console.json +3 -0
  65. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/manifest.json +113 -0
  66. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/result.json +75 -0
  67. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/steps.json +48 -0
  68. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/th6-home-connected.png +0 -0
  69. package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/wire.json +80 -0
  70. package/hooks/hooks.json +1 -1
  71. package/hooks/scripts/bootstrap.py +129 -358
  72. package/hooks/scripts/notification.py +9 -1
  73. package/hooks/scripts/post_tool.py +11 -67
  74. package/hooks/scripts/pre_compact.py +18 -80
  75. package/hooks/scripts/pre_tool.py +12 -5
  76. package/hooks/scripts/prompt_submit.py +50 -122
  77. package/hooks/scripts/session_end.py +3 -3
  78. package/hooks/scripts/stop.py +100 -106
  79. package/hooks/scripts/subagent_lifecycle.py +12 -2
  80. package/hooks/scripts/task_completed.py +16 -15
  81. package/install.mjs +92 -9
  82. package/package.json +2 -2
  83. package/schemas/README.md +12 -0
  84. package/schemas/campaign-recon.schema.json +226 -0
  85. package/schemas/wicked-pack.schema.json +123 -0
  86. package/scripts/_bus.py +52 -5
  87. package/scripts/_bus_catalog_gen.py +2 -2
  88. package/scripts/_bus_consumers.json +2 -26
  89. package/scripts/_context_backend.py +471 -0
  90. package/scripts/_estate_client.py +794 -0
  91. package/scripts/_heavy_cadence.py +15 -73
  92. package/scripts/_integration_resolver.py +38 -91
  93. package/scripts/_pack_registry.py +672 -0
  94. package/scripts/_session.py +7 -15
  95. package/scripts/_validate_registry.py +37 -10
  96. package/scripts/compiler/phase0/wire_vault.py +26 -10
  97. package/scripts/crew/flow_compiler.py +7 -3
  98. package/scripts/crew/specialist_resolver.py +102 -7
  99. package/scripts/delivery/telemetry.py +14 -2
  100. package/scripts/domain/extract_loop.py +40 -0
  101. package/scripts/domain/validate_domain_model.py +7 -2
  102. package/scripts/engineering/patch/estate_db.py +345 -0
  103. package/scripts/engineering/patch/generators/__init__.py +1 -1
  104. package/scripts/engineering/patch/patch.py +18 -109
  105. package/scripts/engineering/patch/safety.py +6 -4
  106. package/scripts/jam/consensus.py +1 -1
  107. package/scripts/loom/compose.py +2 -2
  108. package/scripts/loom/manifest.py +28 -40
  109. package/scripts/loom/resolve.py +1 -1
  110. package/scripts/mem/__init__.py +0 -0
  111. package/scripts/mem/auto_memorize.py +494 -0
  112. package/scripts/mem/estate_memory.py +385 -0
  113. package/scripts/{_brain_ingest → mem}/session_fact_extractor.py +163 -6
  114. package/scripts/pack/__init__.py +0 -0
  115. package/scripts/pack/check.py +376 -0
  116. package/scripts/platform/guard_pipeline.py +158 -12
  117. package/scripts/qe/campaign_degradation.py +545 -0
  118. package/scripts/qe/campaign_dispatch.py +134 -0
  119. package/scripts/qe/campaign_intake.py +633 -0
  120. package/scripts/qe/campaign_plan.py +534 -0
  121. package/scripts/qe/lib/campaign-rerun.mjs +392 -0
  122. package/scripts/qe/lib/campaign-scoreboard.mjs +677 -0
  123. package/scripts/qe/lib/context-md-validator.mjs +137 -0
  124. package/scripts/qe/lib/exec-with-timeout.mjs +178 -0
  125. package/scripts/qe/lib/flake-policy.mjs +365 -0
  126. package/scripts/qe/lib/gate.mjs +687 -0
  127. package/scripts/qe/lib/vault-evidence.mjs +664 -0
  128. package/scripts/qe/runner/README.md +256 -0
  129. package/scripts/qe/runner/bin/qe-run.mjs +103 -0
  130. package/scripts/qe/runner/package.json +29 -0
  131. package/scripts/qe/runner/specs/s1-smoke.spec.json +61 -0
  132. package/scripts/qe/runner/specs/th6-acceptance-dod.spec.json +56 -0
  133. package/scripts/qe/runner/src/asserts.mjs +265 -0
  134. package/scripts/qe/runner/src/evidence.mjs +348 -0
  135. package/scripts/qe/runner/src/index.mjs +21 -0
  136. package/scripts/qe/runner/src/lint.mjs +192 -0
  137. package/scripts/qe/runner/src/redact.mjs +163 -0
  138. package/scripts/qe/runner/src/runner.mjs +215 -0
  139. package/scripts/qe/runner/src/spec.mjs +119 -0
  140. package/scripts/qe/runner/src/wire-capture.mjs +91 -0
  141. package/scripts/qe/runner/test/asserts.test.mjs +81 -0
  142. package/scripts/qe/runner/test/campaign-rerun.test.mjs +268 -0
  143. package/scripts/qe/runner/test/evidence-redaction.test.mjs +168 -0
  144. package/scripts/qe/runner/test/fixture-ns.test.mjs +83 -0
  145. package/scripts/qe/runner/test/lint.test.mjs +121 -0
  146. package/scripts/qe/runner/test/redact.test.mjs +95 -0
  147. package/scripts/qe/runner/test/th17-vault-evidence.test.mjs +533 -0
  148. package/scripts/qe/runner/test/th21-flake-policy.test.mjs +226 -0
  149. package/scripts/qe/runner/test/th6-gate-wiring.test.mjs +292 -0
  150. package/scripts/qe/vault_gate.py +1 -1
  151. package/scripts/sentinel/invariants.py +25 -55
  152. package/scripts/smaht/adapters/brain_adapter.py +64 -78
  153. package/scripts/smaht/adapters/delegation_adapter.py +5 -5
  154. package/scripts/smaht/adapters/domain_adapter.py +1 -1
  155. package/scripts/smaht/adapters/events_adapter.py +1 -1
  156. package/scripts/smaht/context_package.py +15 -15
  157. package/scripts/where_am_i.py +2 -48
  158. package/skills/agentic-architect/SKILL.md +1 -1
  159. package/skills/agentic-performance-analyst/SKILL.md +1 -1
  160. package/skills/agentic-safety-reviewer/SKILL.md +6 -1
  161. package/skills/archetype/refs/build.md +1 -1
  162. package/skills/archetype/refs/incident.md +8 -7
  163. package/skills/archetype/refs/migrate.md +9 -7
  164. package/skills/archetype/refs/modernize.md +5 -4
  165. package/skills/archetype/refs/review.md +5 -5
  166. package/skills/archetype/refs/specify.md +3 -3
  167. package/skills/classify/SKILL.md +1 -1
  168. package/skills/core/SKILL.md +20 -15
  169. package/skills/core/refs/install.md +7 -9
  170. package/skills/core/refs/report-issue.md +1 -1
  171. package/skills/core/refs/setup.md +31 -62
  172. package/skills/data/refs/data.md +1 -1
  173. package/skills/data/refs/pipeline.md +2 -2
  174. package/skills/data-engineer/SKILL.md +2 -2
  175. package/skills/deliberate/refs/run-workflow.md +3 -3
  176. package/skills/domain/SKILL.md +55 -3
  177. package/skills/domain/vendor/README.md +37 -22
  178. package/skills/domain/vendor/VERSION +1 -1
  179. package/skills/domain-extractor/SKILL.md +4 -0
  180. package/skills/engineering/patch/SKILL.md +14 -4
  181. package/skills/engineering/refs/plan.md +1 -1
  182. package/skills/engineering/refs/review.md +1 -1
  183. package/skills/engineering-conformance-reviewer/SKILL.md +10 -4
  184. package/skills/engineering-migration-engineer/SKILL.md +1 -1
  185. package/skills/ground/SKILL.md +36 -36
  186. package/skills/integration-discovery/SKILL.md +3 -3
  187. package/skills/integration-discovery/refs/cli-detection.md +3 -3
  188. package/skills/integration-discovery/refs/discovery-sources.md +3 -3
  189. package/skills/integration-discovery/refs/task-patterns.md +10 -10
  190. package/skills/jam/SKILL.md +6 -6
  191. package/skills/jam/refs/quick.md +1 -1
  192. package/skills/jam/refs/revisit.md +8 -11
  193. package/skills/jam/refs/synthesis-patterns.md +1 -1
  194. package/skills/jam-brainstorm-facilitator/SKILL.md +11 -11
  195. package/skills/jam-council/SKILL.md +5 -5
  196. package/skills/mem/SKILL.md +144 -0
  197. package/skills/mem/refs/scopes.md +84 -0
  198. package/skills/mem-capture/SKILL.md +89 -0
  199. package/skills/mem-ingest/SKILL.md +131 -0
  200. package/skills/platform/audit/SKILL.md +2 -2
  201. package/skills/platform/compliance/SKILL.md +2 -2
  202. package/skills/platform/peer-health/SKILL.md +6 -6
  203. package/skills/platform-compliance-officer/SKILL.md +11 -2
  204. package/skills/platform-privacy-expert/SKILL.md +1 -1
  205. package/skills/platform-security-engineer/SKILL.md +14 -4
  206. package/skills/product/SKILL.md +4 -4
  207. package/skills/product/acceptance-criteria/SKILL.md +1 -1
  208. package/skills/product/listen/SKILL.md +2 -2
  209. package/skills/product/refs/acceptance.md +3 -3
  210. package/skills/product/refs/align.md +1 -1
  211. package/skills/product/refs/elicit.md +1 -1
  212. package/skills/product/refs/listen.md +1 -1
  213. package/skills/product/requirements-analysis/SKILL.md +2 -2
  214. package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +2 -2
  215. package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +3 -3
  216. package/skills/product/strategy/SKILL.md +3 -3
  217. package/skills/product/synthesize/SKILL.md +1 -1
  218. package/skills/product/ux-review/SKILL.md +1 -1
  219. package/skills/product-a11y-expert/SKILL.md +11 -2
  220. package/skills/product-requirements-analyst/SKILL.md +10 -2
  221. package/skills/product-ui-reviewer/SKILL.md +1 -1
  222. package/skills/product-ux-designer/SKILL.md +1 -1
  223. package/skills/product-value-strategist/SKILL.md +1 -1
  224. package/skills/qe/SKILL.md +200 -0
  225. package/skills/qe/refs/accept.md +476 -0
  226. package/skills/qe/refs/author.md +126 -0
  227. package/skills/qe/refs/campaign-ci.md +153 -0
  228. package/skills/qe/refs/campaign-degradation.md +129 -0
  229. package/skills/qe/refs/campaign-flake-policy.md +158 -0
  230. package/skills/qe/refs/campaign-grading.md +235 -0
  231. package/skills/qe/refs/campaign.md +274 -0
  232. package/skills/qe/refs/evidence.md +283 -0
  233. package/skills/qe/refs/execute.md +160 -0
  234. package/skills/qe/refs/insight.md +149 -0
  235. package/skills/qe/refs/intake.md +146 -0
  236. package/skills/qe/refs/integration.md +302 -0
  237. package/skills/qe/refs/plan.md +148 -0
  238. package/skills/qe/refs/review.md +147 -0
  239. package/skills/qe/refs/scenario-format.md +366 -0
  240. package/skills/qe/refs/setup.md +130 -0
  241. package/skills/qe-a11y-test-engineer/SKILL.md +259 -0
  242. package/skills/qe-acceptance-test-executor/SKILL.md +215 -0
  243. package/skills/qe-acceptance-test-reviewer/SKILL.md +224 -0
  244. package/skills/qe-acceptance-test-writer/SKILL.md +162 -0
  245. package/skills/qe-ai-feature-test-engineer/SKILL.md +383 -0
  246. package/skills/qe-chaos-test-engineer/SKILL.md +257 -0
  247. package/skills/qe-code-analyzer/SKILL.md +79 -0
  248. package/skills/qe-compliance-test-engineer/SKILL.md +271 -0
  249. package/skills/qe-contract-testing-engineer/SKILL.md +53 -0
  250. package/skills/qe-coverage-archaeologist/SKILL.md +52 -0
  251. package/skills/qe-data-quality-tester/SKILL.md +51 -0
  252. package/skills/qe-e2e-orchestrator/SKILL.md +51 -0
  253. package/skills/qe-exploratory-tester/SKILL.md +56 -0
  254. package/skills/qe-flaky-test-hunter/SKILL.md +267 -0
  255. package/skills/qe-fuzz-property-engineer/SKILL.md +58 -0
  256. package/skills/qe-iac-test-engineer/SKILL.md +247 -0
  257. package/skills/qe-incident-to-scenario-synthesizer/SKILL.md +288 -0
  258. package/skills/qe-integration-test-engineer/SKILL.md +46 -0
  259. package/skills/qe-load-performance-engineer/SKILL.md +59 -0
  260. package/skills/qe-localization-test-engineer/SKILL.md +49 -0
  261. package/skills/qe-mutation-test-engineer/SKILL.md +240 -0
  262. package/skills/qe-observability-test-engineer/SKILL.md +45 -0
  263. package/skills/qe-production-quality-engineer/SKILL.md +47 -0
  264. package/skills/qe-release-readiness-engineer/SKILL.md +240 -0
  265. package/skills/qe-requirements-quality-analyst/SKILL.md +56 -0
  266. package/skills/qe-risk-assessor/SKILL.md +48 -0
  267. package/skills/qe-scenario-executor/SKILL.md +185 -0
  268. package/skills/qe-security-test-engineer/SKILL.md +474 -0
  269. package/skills/qe-semantic-reviewer/SKILL.md +27 -1
  270. package/skills/qe-snapshot-hygiene-auditor/SKILL.md +274 -0
  271. package/skills/qe-test-automation-engineer/SKILL.md +66 -0
  272. package/skills/qe-test-code-quality-auditor/SKILL.md +299 -0
  273. package/skills/qe-test-data-manager/SKILL.md +58 -0
  274. package/skills/qe-test-designer/SKILL.md +83 -0
  275. package/skills/qe-test-impact-analyzer/SKILL.md +311 -0
  276. package/skills/qe-test-oracle/SKILL.md +177 -0
  277. package/skills/qe-test-strategist/SKILL.md +141 -0
  278. package/skills/qe-testability-reviewer/SKILL.md +49 -0
  279. package/skills/qe-ui-component-test-engineer/SKILL.md +48 -0
  280. package/skills/qe-visual-regression-engineer/SKILL.md +290 -0
  281. package/skills/search/SKILL.md +101 -89
  282. package/skills/search/codebase-narrator/SKILL.md +2 -2
  283. package/skills/search/refs/answer.md +66 -0
  284. package/skills/search/refs/hotspots.md +28 -43
  285. package/skills/search/refs/service-map.md +5 -11
  286. package/skills/smaht/SKILL.md +15 -14
  287. package/skills/smaht/intent/SKILL.md +2 -2
  288. package/skills/smaht/refs/briefing.md +1 -1
  289. package/skills/swarm/SKILL.md +1 -1
  290. package/skills/swarm/refs/receipts-and-evidence.md +1 -1
  291. package/skills/workflow/SKILL.md +14 -4
  292. package/skills/workflow/refs/integration.md +6 -6
  293. package/scripts/_brain_ingest/__init__.py +0 -2
  294. package/scripts/_brain_port.py +0 -163
  295. package/scripts/_wicked_testing_probe.py +0 -277
  296. package/scripts/engineering/patch/codegraph_db.py +0 -125
  297. package/scripts/smaht/_bus_consumers.py +0 -98
  298. package/skills/multi-model/SKILL.md +0 -43
  299. package/skills/multi-model/refs/aichat.md +0 -119
  300. package/skills/multi-model/refs/aider.md +0 -100
  301. package/skills/multi-model/refs/auditability.md +0 -238
  302. package/skills/multi-model/refs/codex.md +0 -169
  303. package/skills/multi-model/refs/context.md +0 -306
  304. package/skills/multi-model/refs/copilot.md +0 -161
  305. package/skills/multi-model/refs/examples.md +0 -224
  306. package/skills/multi-model/refs/gemini.md +0 -185
  307. package/skills/multi-model/refs/goose.md +0 -112
  308. package/skills/multi-model/refs/llm.md +0 -124
  309. package/skills/multi-model/refs/opencode.md +0 -196
  310. package/skills/multi-model/refs/orchestration.md +0 -188
  311. package/skills/multi-model/refs/pi.md +0 -208
@@ -2,8 +2,8 @@
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": 99,
6
- "fork_skills": 38,
5
+ "skills": 141,
6
+ "fork_skills": 78,
7
7
  "hooks": 13,
8
8
  "specialists": 7
9
9
  },
@@ -35,7 +35,9 @@
35
35
  "jam": ["jam"],
36
36
  "jam-brainstorm-facilitator": ["jam-brainstorm-facilitator"],
37
37
  "jam-council": ["jam-council"],
38
- "multi-model": ["multi-model"],
38
+ "mem": ["mem"],
39
+ "mem-capture": ["mem-capture"],
40
+ "mem-ingest": ["mem-ingest"],
39
41
  "persona": ["persona"],
40
42
  "persona-agent": ["persona-agent"],
41
43
  "platform": ["audit", "compliance", "errors", "gate-benchmark-rebaseline", "gh-cli", "github-actions", "gitlab-ci", "glab-cli", "health", "observability", "peer-health", "platform", "prereq-doctor"],
@@ -49,7 +51,47 @@
49
51
  "product-ux-designer": ["product-ux-designer"],
50
52
  "product-value-strategist": ["product-value-strategist"],
51
53
  "prove": ["prove"],
54
+ "qe": ["qe"],
55
+ "qe-a11y-test-engineer": ["qe-a11y-test-engineer"],
56
+ "qe-acceptance-test-executor": ["qe-acceptance-test-executor"],
57
+ "qe-acceptance-test-reviewer": ["qe-acceptance-test-reviewer"],
58
+ "qe-acceptance-test-writer": ["qe-acceptance-test-writer"],
59
+ "qe-ai-feature-test-engineer": ["qe-ai-feature-test-engineer"],
60
+ "qe-chaos-test-engineer": ["qe-chaos-test-engineer"],
61
+ "qe-code-analyzer": ["qe-code-analyzer"],
62
+ "qe-compliance-test-engineer": ["qe-compliance-test-engineer"],
63
+ "qe-contract-testing-engineer": ["qe-contract-testing-engineer"],
64
+ "qe-coverage-archaeologist": ["qe-coverage-archaeologist"],
65
+ "qe-data-quality-tester": ["qe-data-quality-tester"],
66
+ "qe-e2e-orchestrator": ["qe-e2e-orchestrator"],
67
+ "qe-exploratory-tester": ["qe-exploratory-tester"],
68
+ "qe-flaky-test-hunter": ["qe-flaky-test-hunter"],
69
+ "qe-fuzz-property-engineer": ["qe-fuzz-property-engineer"],
70
+ "qe-iac-test-engineer": ["qe-iac-test-engineer"],
71
+ "qe-incident-to-scenario-synthesizer": ["qe-incident-to-scenario-synthesizer"],
72
+ "qe-integration-test-engineer": ["qe-integration-test-engineer"],
73
+ "qe-load-performance-engineer": ["qe-load-performance-engineer"],
74
+ "qe-localization-test-engineer": ["qe-localization-test-engineer"],
75
+ "qe-mutation-test-engineer": ["qe-mutation-test-engineer"],
76
+ "qe-observability-test-engineer": ["qe-observability-test-engineer"],
77
+ "qe-production-quality-engineer": ["qe-production-quality-engineer"],
78
+ "qe-release-readiness-engineer": ["qe-release-readiness-engineer"],
79
+ "qe-requirements-quality-analyst": ["qe-requirements-quality-analyst"],
80
+ "qe-risk-assessor": ["qe-risk-assessor"],
81
+ "qe-scenario-executor": ["qe-scenario-executor"],
82
+ "qe-security-test-engineer": ["qe-security-test-engineer"],
52
83
  "qe-semantic-reviewer": ["qe-semantic-reviewer"],
84
+ "qe-snapshot-hygiene-auditor": ["qe-snapshot-hygiene-auditor"],
85
+ "qe-test-automation-engineer": ["qe-test-automation-engineer"],
86
+ "qe-test-code-quality-auditor": ["qe-test-code-quality-auditor"],
87
+ "qe-test-data-manager": ["qe-test-data-manager"],
88
+ "qe-test-designer": ["qe-test-designer"],
89
+ "qe-test-impact-analyzer": ["qe-test-impact-analyzer"],
90
+ "qe-test-oracle": ["qe-test-oracle"],
91
+ "qe-test-strategist": ["qe-test-strategist"],
92
+ "qe-testability-reviewer": ["qe-testability-reviewer"],
93
+ "qe-ui-component-test-engineer": ["qe-ui-component-test-engineer"],
94
+ "qe-visual-regression-engineer": ["qe-visual-regression-engineer"],
53
95
  "runtime-exec": ["runtime-exec"],
54
96
  "search": ["codebase-narrator", "search"],
55
97
  "smaht": ["discovery", "intent", "propose-skills", "smaht"],
@@ -58,7 +100,7 @@
58
100
  "workflow": ["workflow"],
59
101
  "worktrees": ["worktrees"]
60
102
  },
61
- "fork_skills": ["wicked-garden-agentic-architect", "wicked-garden-agentic-performance-analyst", "wicked-garden-agentic-safety-reviewer", "wicked-garden-archetype", "wicked-garden-classify", "wicked-garden-crew-implementer", "wicked-garden-crew-researcher", "wicked-garden-crew-reviewer", "wicked-garden-data-engineer", "wicked-garden-domain-coverage", "wicked-garden-domain-extractor", "wicked-garden-domain-modeler", "wicked-garden-engineering-api-documentarian", "wicked-garden-engineering-conformance-reviewer", "wicked-garden-engineering-debugging", "wicked-garden-engineering-migration-engineer", "wicked-garden-engineering-solution-architect", "wicked-garden-ground", "wicked-garden-integration-discovery", "wicked-garden-jam-brainstorm-facilitator", "wicked-garden-jam-council", "wicked-garden-multi-model", "wicked-garden-persona-agent", "wicked-garden-platform-compliance-officer", "wicked-garden-platform-privacy-expert", "wicked-garden-platform-security-engineer", "wicked-garden-product-a11y-expert", "wicked-garden-product-requirements-analyst", "wicked-garden-product-ui-reviewer", "wicked-garden-product-ux-designer", "wicked-garden-product-value-strategist", "wicked-garden-qe-semantic-reviewer", "wicked-garden-runtime-exec", "wicked-garden-smaht", "wicked-garden-swarm", "wicked-garden-wickedizer", "wicked-garden-workflow", "wicked-garden-worktrees"],
103
+ "fork_skills": ["wicked-garden-agentic-architect", "wicked-garden-agentic-performance-analyst", "wicked-garden-agentic-safety-reviewer", "wicked-garden-archetype", "wicked-garden-classify", "wicked-garden-crew-implementer", "wicked-garden-crew-researcher", "wicked-garden-crew-reviewer", "wicked-garden-data-engineer", "wicked-garden-domain-coverage", "wicked-garden-domain-extractor", "wicked-garden-domain-modeler", "wicked-garden-engineering-api-documentarian", "wicked-garden-engineering-conformance-reviewer", "wicked-garden-engineering-debugging", "wicked-garden-engineering-migration-engineer", "wicked-garden-engineering-solution-architect", "wicked-garden-ground", "wicked-garden-integration-discovery", "wicked-garden-jam-brainstorm-facilitator", "wicked-garden-jam-council", "wicked-garden-mem-capture", "wicked-garden-mem-ingest", "wicked-garden-persona-agent", "wicked-garden-platform-compliance-officer", "wicked-garden-platform-privacy-expert", "wicked-garden-platform-security-engineer", "wicked-garden-product-a11y-expert", "wicked-garden-product-requirements-analyst", "wicked-garden-product-ui-reviewer", "wicked-garden-product-ux-designer", "wicked-garden-product-value-strategist", "wicked-garden-qe-a11y-test-engineer", "wicked-garden-qe-acceptance-test-executor", "wicked-garden-qe-acceptance-test-reviewer", "wicked-garden-qe-acceptance-test-writer", "wicked-garden-qe-ai-feature-test-engineer", "wicked-garden-qe-chaos-test-engineer", "wicked-garden-qe-code-analyzer", "wicked-garden-qe-compliance-test-engineer", "wicked-garden-qe-contract-testing-engineer", "wicked-garden-qe-coverage-archaeologist", "wicked-garden-qe-data-quality-tester", "wicked-garden-qe-e2e-orchestrator", "wicked-garden-qe-exploratory-tester", "wicked-garden-qe-flaky-test-hunter", "wicked-garden-qe-fuzz-property-engineer", "wicked-garden-qe-iac-test-engineer", "wicked-garden-qe-incident-to-scenario-synthesizer", "wicked-garden-qe-integration-test-engineer", "wicked-garden-qe-load-performance-engineer", "wicked-garden-qe-localization-test-engineer", "wicked-garden-qe-mutation-test-engineer", "wicked-garden-qe-observability-test-engineer", "wicked-garden-qe-production-quality-engineer", "wicked-garden-qe-release-readiness-engineer", "wicked-garden-qe-requirements-quality-analyst", "wicked-garden-qe-risk-assessor", "wicked-garden-qe-scenario-executor", "wicked-garden-qe-security-test-engineer", "wicked-garden-qe-semantic-reviewer", "wicked-garden-qe-snapshot-hygiene-auditor", "wicked-garden-qe-test-automation-engineer", "wicked-garden-qe-test-code-quality-auditor", "wicked-garden-qe-test-data-manager", "wicked-garden-qe-test-designer", "wicked-garden-qe-test-impact-analyzer", "wicked-garden-qe-test-oracle", "wicked-garden-qe-test-strategist", "wicked-garden-qe-testability-reviewer", "wicked-garden-qe-ui-component-test-engineer", "wicked-garden-qe-visual-regression-engineer", "wicked-garden-runtime-exec", "wicked-garden-smaht", "wicked-garden-swarm", "wicked-garden-wickedizer", "wicked-garden-workflow", "wicked-garden-worktrees"],
62
104
  "hooks": ["SessionStart", "UserPromptSubmit", "PreToolUse", "PostToolUse", "PostToolUseFailure", "TaskCompleted", "SubagentStart", "SubagentStop", "PermissionRequest", "Notification", "PreCompact", "Stop", "SessionEnd"],
63
105
  "specialists": [
64
106
  {
@@ -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 (auto-installed via wicked-testing) and re-derives through garden's built-in engine; testing/brain/bus are opt-in layers.",
11
- "version": "12.30.0"
12
- }
13
- ],
14
- "version": "12.30.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.0"}], "version": "12.32.0"}
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "wicked-garden",
3
- "version": "12.30.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 \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 codegraph + injected bus/dispatch/capability edges power blast-radius & lineage. Plus deterministic multi-file refactor (wicked-patch), cross-session memory (wicked-brain), real multi-model second opinions (jam:council), portable expertise as on-demand skill-refs, and evidence-gated testing (wicked-testing). 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 (installed automatically via wicked-testing); wicked-testing, wicked-brain, and wicked-bus are opt-in layers \u2014 install what you'll use, the toolkit works without the rest.",
5
- "wicked_testing_version": "^0.8.0",
6
- "wicked_vault_version": "^0.4.0",
7
- "wicked_brain_version": "^0.18.0",
3
+ "version": "12.32.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 \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
+ "wicked_vault_version": "^0.5.0",
6
+ "wicked_ledger_version": "^0.4.0",
8
7
  "wicked_bus_version": "^2.0.0",
9
8
  "author": {
10
9
  "name": "Mike Parcewski",
@@ -23,7 +23,7 @@
23
23
  {
24
24
  "name": "qe",
25
25
  "role": "quality-engineering",
26
- "description": "Quality Engineering specialist powered by wicked-testing peer plugin. Crew dispatches QE agents by their wicked-testing:* subagent_type names. Covers test strategy, scenario generation, testability review, semantic alignment, risk assessment, test automation, and shift-left quality practices. Requires wicked-testing ^0.2 installed.",
26
+ "description": "Quality Engineering specialist — in-catalog qe domain (Phase 6b). Crew dispatches QE workers by their wicked-garden-qe-* skill names (router: wicked-garden-qe). Covers test strategy, scenario generation, testability review, semantic alignment, risk assessment, test automation, evidence-gated acceptance testing, and shift-left quality practices.",
27
27
  "enhances": ["clarify", "design", "qe", "build", "review", "operate", "*"]
28
28
  },
29
29
  {
@@ -182,9 +182,10 @@ wicked-patch is the deterministic multi-file transformation engine. It is expose
182
182
 
183
183
  ```
184
184
  Developer invokes patch action: /wicked-garden-engineering patch-plan OldName
185
- → engineering-patch skill reads codegraph from wicked-brain:
186
- .codegraph/codegraph.db (structural graph, tree-sitter)
187
- + injected edges (bus producer→consumer, dispatch, capability)
185
+ → engineering-patch skill reads the wicked-estate graph (ADR 0005):
186
+ built by `wicked-estate index` (75-language tree-sitter, in-binary),
187
+ adapted to the patch schema via estate_db.py (.codegraph/estate.db)
188
+ + injected edges (bus producer→consumer, dispatch, capability, archetype)
188
189
  → computes full affected file set:
189
190
  direct references (grep-visible)
190
191
  + injected-edge references (not grep-visible)
@@ -203,7 +204,7 @@ Developer invokes apply: /wicked-garden-engineering apply <patch-file>
203
204
 
204
205
  New language support: `/wicked-garden-engineering new-generator` creates a generator for an additional language. Generators implement a documented interface; adding one requires no change to the patch core.
205
206
 
206
- wicked-patch and wicked-brain share the same codegraph database (`.codegraph/codegraph.db`). The `wicked-garden-search index` action refreshes both layers — brain (semantic) and codegraph (structural).
207
+ wicked-patch and the `wicked-garden-search` actions read the same wicked-estate graph. The `wicked-garden-search index` action (`wicked-estate index <path>`) refreshes the static graph and re-applies the injected-edge rules in one pass (ADR 0005).
207
208
 
208
209
  ---
209
210
 
@@ -254,9 +255,9 @@ Per-session ephemeral shared state. Not persisted across process restarts. Used
254
255
 
255
256
  wicked-bus integration. Emits events in 4-segment format (`wicked.<domain>.<noun>.<past-tense-verb>`). The bus provides at-least-once delivery, append-only event records, and FTS5 search via the wicked-bus backing store.
256
257
 
257
- ### codegraph.db
258
+ ### estate graph
258
259
 
259
- Structural code graph built and maintained by wicked-brain at `.codegraph/codegraph.db`. Consumed by wicked-patch. The `search:index` action refreshes it.
260
+ Structural code graph built and maintained by wicked-estate (`wicked-estate index <path>`; DB at `.wicked-estate/graph.db` by default, patch adapter DB at `.codegraph/estate.db`). Includes garden's injected archetype edges via `.wicked-estate-extractors/archetype.toml`. Consumed by wicked-patch and the search skill's actions. The `search:index` action refreshes it (ADR 0005).
260
261
 
261
262
  ---
262
263
 
@@ -304,6 +305,6 @@ Skills check for daemon availability before dispatching to it. If the daemon is
304
305
  | wicked-testing | `scripts/qe/` (acceptance pipeline) | Installed peer; invoked by acceptance skills |
305
306
  | wicked-brain | `scripts/crew/`, search/smaht skills | Brain server on port 4243; auto-starts on skill invocation |
306
307
  | wicked-bus | `scripts/_bus.py` | Installed peer; event emit/consume |
307
- | codegraph | `.codegraph/codegraph.db` | Built by wicked-brain; consumed by patch skill |
308
+ | wicked-estate | `wicked-estate index` / estate MCP tools | `WICKED_ESTATE_BIN` env → PATH → `~/.local/bin`; consumed by search + patch skills |
308
309
 
309
310
  All peers degrade gracefully on absence — except the evidence gate, which fails closed when vault or loom is unreachable. A transient peer outage never invents a pass.
package/.product/RAID.md CHANGED
@@ -16,7 +16,7 @@ review-required: true
16
16
  |----|------|-----------|--------|------------|
17
17
  | RISK-001 | Archetype detection accuracy degrades for ambiguous or very short prompts | Medium | Medium | Detector returns confidence score; low-confidence prompts prompt for clarification. Multi-archetype output handles mixed-intent work. |
18
18
  | RISK-002 | wicked-loom/wicked-vault peer absent → evidence gate fails closed | High (setup) | Low (expected) | Failing closed is the intended behavior. `/wg-check` validates peers at setup; setup skill guides installation. |
19
- | RISK-003 | codegraph not built → blast-radius/lineage/wicked-patch unavailable | High (optional) | Medium | codegraph is explicitly opt-in; skills degrade gracefully to text-search when graph is absent. |
19
+ | RISK-003 | wicked-estate graph not built → blast-radius/lineage/wicked-patch unavailable | High (optional) | Medium | wicked-estate is explicitly opt-in; skills degrade gracefully to text-search when the graph is absent (and flag that injected relationships are missing). |
20
20
  | RISK-004 | Plugin not loaded in `claude -p` non-interactive mode | Medium | High | Documented mitigation: user must add `--plugin-dir` via clis.toml override (garden#994 resolution). Long-term fix: persistent worker sessions (core#13). |
21
21
  | RISK-005 | Council seat (Antigravity/Codex) unavailable or returns garbage | Medium | Low | Council aggregation tolerates partial failures; the skill surfaces which seats failed. |
22
22
  | RISK-006 | Hook scripts fail on Windows without correct Python fallback | Low | High | All scripts use cross-platform patterns (tempfile.gettempdir, python fallback chain). CI must include Windows runner. |
@@ -30,7 +30,7 @@ review-required: true
30
30
  |----|-----------|
31
31
  | ASS-001 | The host harness (Claude Code, Codex, Cursor, …) handles all planning, parallelism, and LLM calls. wicked-garden does not re-implement harness capabilities. |
32
32
  | ASS-002 | Users install the required peers (`wicked-testing`/`wicked-vault`, `wicked-loom`) before using the evidence gate. The setup skill validates this. |
33
- | ASS-003 | The codegraph (`.codegraph/codegraph.db`) is built and up-to-date when blast-radius/lineage/wicked-patch are used. |
33
+ | ASS-003 | The wicked-estate graph (`wicked-estate index <path>`) is built and up-to-date when blast-radius/lineage/wicked-patch are used. |
34
34
  | ASS-004 | Harness plugins are loaded in interactive mode; non-interactive (`claude -p`) mode requires explicit plugin-dir configuration. |
35
35
  | ASS-005 | The `WICKED_VAULT_ACTOR` environment variable is set to a meaningful, stable actor identity for hard-gate evidence recording (not OS `$USER`). |
36
36
  | ASS-006 | wicked-bus is optional; garden emits events fail-open when bus is unavailable. |
@@ -55,8 +55,8 @@ review-required: true
55
55
  | wicked-vault ≥ 0.4.0 | Runtime | Yes (for evidence gate) | Evidence backend. `0.4.0` introduced fail-closed `attest` on weak identity. |
56
56
  | wicked-loom | Runtime | Yes (for evidence gate) | Gate/resolve engine. Resolved via `WICKED_LOOM_BIN` → config → PATH → `npx`. |
57
57
  | wicked-testing | Runtime | Yes (for acceptance) | The acceptance pipeline is the standard gate mechanism. |
58
- | wicked-brain | Runtime | Optional | Cross-session memory + codegraph. Required for blast-radius, lineage, wicked-patch. |
58
+ | wicked-brain | Runtime | Optional | Cross-session memory + semantic search. |
59
59
  | wicked-bus | Runtime | Optional | Event audit trail. Garden emits events fail-open without it. |
60
- | codegraph (`@colbymchenry/codegraph`) | Runtime | Optional | Static graph builder. Powers blast-radius/lineage/wicked-patch. |
60
+ | wicked-estate | Runtime | Optional | Code-graph owner (ADR 0005): `wicked-estate index` + MCP tools. Powers blast-radius/lineage/hotspots/wicked-patch. Resolved via `WICKED_ESTATE_BIN` → PATH → `~/.local/bin`. |
61
61
  | Python ≥ 3.9 | Runtime | Yes | Required for all hook scripts and CLI tools. |
62
62
  | node.js ≥ 18 | Runtime | Yes | Required for npm peer installs and wicked-vault/loom. |
@@ -15,7 +15,7 @@ review-required: true
15
15
  wicked-garden is a Claude Code plugin (v12.28.1) that fills the gaps modern coding-agent harnesses cannot close alone. The premise is direct: harnesses — Claude Code, Codex, Cursor, Aider, OpenCode, Zed/ACP, and others — already plan, parallelize, and execute well. wicked-garden does not compete with that; it adds only what a planner-executor genuinely cannot do on its own:
16
16
 
17
17
  - **Evidence-gated done** — re-derives "done" from recorded evidence via the internal loom engine and wicked-vault; a self-asserted "tests pass" cannot lie its way green.
18
- - **Relationships grep cannot see** — codegraph + injected event-bus/dispatch/capability edges power blast-radius and lineage analysis.
18
+ - **Relationships grep cannot see** — the wicked-estate code graph + injected event-bus/dispatch/capability/archetype edges power blast-radius and lineage analysis (ADR 0005).
19
19
  - **Deterministic multi-file refactor** — wicked-patch applies graph-driven renames and field additions across an entire codebase without leaving silent half-applied states.
20
20
  - **Cross-session memory** — wicked-brain persists decisions, patterns, and gotchas across sessions; knowledge that only lives in chat history does not exist.
21
21
  - **Real multi-model second opinions** — the jam:council skill convenes external LLM CLIs (Claude Code, Antigravity, Codex, local models) for independent evaluation; it is not the model talking to itself.
@@ -86,7 +86,7 @@ The plugin installs via `/plugin install wicked-garden` into any Claude Code ses
86
86
 
87
87
  1. A developer needs to rename a domain type across a large codebase — source files, tests, migration files, configuration, and documentation.
88
88
  2. They invoke the patch skill: `/wicked-garden-engineering rename OldName NewName`.
89
- 3. The `wicked-garden-engineering-patch` nested skill reads the codegraph from wicked-brain (`.codegraph/codegraph.db`), identifies all nodes referencing `OldName`, and computes the full set of affected files including injected edges (bus producer→consumer, dispatch links) that grep cannot see.
89
+ 3. The `wicked-garden-engineering-patch` nested skill reads the wicked-estate graph (built by `wicked-estate index`, adapted via `scripts/engineering/patch/estate_db.py`), identifies all nodes referencing `OldName`, and computes the full set of affected files including injected edges (bus producer→consumer, dispatch links) that grep cannot see.
90
90
  4. The skill shows the patch plan (files affected, kinds of change, risk surface). The developer approves or scopes the change.
91
91
  5. On approval, the patch applies deterministically using the language-specific generator for each file type. Generators exist out of the box for Python, TypeScript, Java, Go, SQL, Rust, Kotlin, C#, PHP, and Ruby. A `new-generator` action lets contributors add additional languages.
92
92
  6. The result is a complete, consistent rename across every file that references the symbol — including the relationships grep cannot see.
@@ -42,10 +42,10 @@ Three additional peers are opt-in:
42
42
  | Peer | npm Package | Required Version | Role |
43
43
  |------|-------------|-----------------|------|
44
44
  | wicked-testing | `wicked-testing` | `^0.8.0` | Acceptance testing gate; also installs wicked-vault as a transitive dependency |
45
- | wicked-brain | `wicked-brain` | `^0.18.0` | Cross-session memory, code graph, semantic search |
45
+ | wicked-brain | `wicked-brain` | `^0.18.0` | Cross-session memory, semantic search (the code graph moved to wicked-estate, ADR 0005) |
46
46
  | wicked-bus | `wicked-bus` | `^2.0.0` | Event audit trail, append-only event store, FTS5 search |
47
47
 
48
- wicked-understanding (repo playbooks from HEAD) and codegraph (structural code intelligence) are additional optional integrations.
48
+ wicked-understanding (repo playbooks from HEAD) and wicked-estate (structural code intelligence — the code graph, ADR 0005) are additional optional integrations.
49
49
 
50
50
  ---
51
51
 
@@ -57,7 +57,7 @@ wicked-understanding (repo playbooks from HEAD) and codegraph (structural code i
57
57
 
58
58
  **SessionState** (`scripts/_session.py`) — per-session ephemeral shared state. Does not persist across process restarts.
59
59
 
60
- **codegraph.db** — wicked-brain builds and maintains this structural code graph at `.codegraph/codegraph.db`. wicked-patch consumes it for multi-file refactor operations.
60
+ **estate graph** — wicked-estate builds and maintains the structural code graph (`wicked-estate index <path>`, DB at `.wicked-estate/graph.db` by default; the patch adapter materializes `.codegraph/estate.db`). wicked-patch consumes it for multi-file refactor operations (ADR 0005).
61
61
 
62
62
  ---
63
63
 
@@ -184,7 +184,7 @@ Compiler
184
184
  → emitted gate resolves wicked-vault via npx (no wicked-garden runtime required)
185
185
 
186
186
  wicked-patch
187
- → reads codegraph.db (wicked-brain structural graph + injected edges)
187
+ → reads the wicked-estate graph (structural graph + injected edges, ADR 0005)
188
188
  → computes affected file set (including injected edges grep cannot see)
189
189
  → applies language-specific generator per file
190
190
  → produces deterministic multi-file change
package/CHANGELOG.md CHANGED
@@ -2,6 +2,71 @@
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.0] — 2026-08-30
26
+
27
+ ### Added
28
+ - **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.
29
+ - **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`.
30
+ - **Architecture-wiki pointers** in the mem/search/conformance skills (`knowledge.recall {"scope_prefix":"wiki:"}` + estate `rules.recall`).
31
+
32
+ ### Changed
33
+ - Site version stamp injected at build from the plugin manifest (DT-7 — can never re-stale).
34
+ - campaign-recon schema v2: `desktop` category tiers + `isolation` annotation in one bump.
35
+
36
+ ## [12.31.0] — 2026-08-25
37
+
38
+ ### Changed
39
+ - **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).
40
+ - **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).
41
+ - **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.)
42
+ - **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`.
43
+ - 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).
44
+ - Docs accuracy: removed the sunsetted Gemini CLI from the harness list and panel description (#1065).
45
+ - Dependency wave: astro 7.2.x, react 19.2.18, motion v13, svgo, npm_and_yarn group.
46
+
47
+ ### Added
48
+ - **Third-party extension contract (packs)** — drop-in packs, shipped conformance gate, crew routing (#1057).
49
+ - 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).
50
+
51
+ ### Fixed
52
+ - Drift-guard: crew contract check re-pointed at `wicked-crew-api-types` (#1054).
53
+ - Bootstrap perf: CH-02 legacy-scan result cached, eliminating a ~20s rglob on session start (#1064).
54
+ - E2E: `BootstrapEndToEndTests` isolated from shared `HOME` state (#1066).
55
+
56
+ ## [12.30.0] — 2026-07-30
57
+
58
+ ### Added
59
+ - **Domain extraction pipeline:** structural extraction loop — clusters, blast-radius framing, parallel workers (#1020); Message Batches API pipeline + direct-API adapter for rule extraction (#1025).
60
+
61
+ ### Fixed
62
+ - 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).
63
+ - Scaffolding: YAML-quote template name placeholders — unquoted `{{name}}` broke codex's skill loader (#1029).
64
+
65
+ ### Changed
66
+ - Site: version-free kicker chip — npm is the version authority (#1018).
67
+ - CI: notify wicked-installer on release tags (#1030).
68
+ - DoD bookkeeping: L3-009/L3-010 evidence checked off against the 12.29.1 release (#1015); shared deps updated to v19.2.8 (#1008).
69
+
5
70
  ## [12.29.1] — 2026-07-21
6
71
 
7
72
  ### Added
package/CONTRIBUTING.md CHANGED
@@ -18,41 +18,24 @@ uv run pytest tests/ -x
18
18
 
19
19
  ## Escape Hatches
20
20
 
21
- ### WG_SKIP_WICKED_TESTING_CHECK
22
-
23
- **For offline CI and dev environments without npm access only.**
24
-
25
- When set to `1`, the SessionStart wicked-testing probe is bypassed:
26
-
27
- ```bash
28
- export WG_SKIP_WICKED_TESTING_CHECK=1
29
- ```
30
-
31
- Effect:
32
- - `wicked_testing_missing` is set to `false` — crew commands proceed normally.
33
- - The probe subprocess (`npx wicked-testing --version`) is never invoked.
34
- - A single warning is emitted to **stderr** (not to the Claude session briefing):
35
- `WG_SKIP_WICKED_TESTING_CHECK is set — wicked-testing version check bypassed (offline dev mode). Do not use in production.`
36
-
37
- **When to use**: CI pipelines where npm is unavailable; local development on
38
- machines without Node.js installed; offline development sessions.
39
-
40
- **When NOT to use**: Production environments, any session where crew QE gates
41
- will actually run (the bypass skips the version check but wicked-testing agents
42
- will still fail if the package is absent).
43
-
44
- This escape hatch is a developer override. It does NOT appear in user-facing help,
45
- setup wizard output, or the README. It is not a supported production configuration.
21
+ > **Historical note (Phase 6c):** the `WG_SKIP_WICKED_TESTING_CHECK` escape
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
+ > `wicked-garden-qe` router + specialists), so there is no peer package to
25
+ > probe. The acceptance gate concept now lives in wicked-crew's
26
+ > `/runs/:id/acceptance` route.
46
27
 
47
28
  ### WICKED_VAULT_BIN
48
29
 
49
30
  **For offline CI and dev environments without the wicked-vault peer only.**
50
31
 
51
- wicked-vault (npm, ≥0.3, install `npx wicked-testing install`) is a required peer
52
- alongside wicked-loom/bus/brain/testing. The garden's produces-gates re-derive
53
- evidence through **wicked-loom** — `scripts/qe/vault_gate.py` shells `wicked-loom
54
- gate`, which in turn shells `wicked-vault cross-check`, so the vault is the backend
55
- 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
56
39
  probe (`vault_available`) and the `WICKED_VAULT_BIN` kill-switch below still apply.
57
40
  The vault CLI is resolved in order:
58
41
 
@@ -62,8 +45,7 @@ The vault CLI is resolved in order:
62
45
  4. a local `node_modules/.bin/wicked-vault`
63
46
  5. `npx --yes wicked-vault`
64
47
 
65
- Setting `WICKED_VAULT_BIN=""` (set-but-empty) is the vault analogue of
66
- `WG_SKIP_WICKED_TESTING_CHECK`:
48
+ Setting `WICKED_VAULT_BIN=""` (set-but-empty) disables vault resolution:
67
49
 
68
50
  ```bash
69
51
  export WICKED_VAULT_BIN=""
@@ -88,12 +70,8 @@ setup wizard output, or the README. It is not a supported production configurati
88
70
 
89
71
  ### Fail-open boundary
90
72
 
91
- The wicked-testing probe (`_wicked_testing_probe.probe()`) is called by
92
- `_probe_wicked_testing()` in `hooks/scripts/bootstrap.py` at SessionStart.
93
- Any exception that escapes the probe is caught by `_probe_wicked_testing()`
94
- which logs actionable detail to stderr and continues bootstrap (fail-open).
95
-
96
- **CH-02 close**: `crew_command_gate()` in `scripts/crew/_prerequisites.py`
97
- is fail-closed: if `session_state.extras["wicked_testing_probe"]` is absent
98
- (probe exception path), the gate treats this as missing rather than passing.
99
- This prevents silent unblocked crew runs when the probe fails silently.
73
+ SessionStart probes in `hooks/scripts/bootstrap.py` (vault / bus / loom
74
+ dependency checks) are fail-open: any exception is caught, logged to stderr
75
+ with actionable detail, and bootstrap continues. Gates that *enforce*
76
+ evidence are fail-closed at their own layer (`scripts/qe/vault_gate.py`),
77
+ never at the probe.
package/ETHOS.md CHANGED
@@ -18,11 +18,11 @@
18
18
 
19
19
  **Quality pressure must be structural, not delegated to willpower.** Reviews skipped under deadline pressure are gates that didn't exist. So enforcement lives in code, not prose: hard gates refuse to advance at runtime, produces re-derive through wicked-loom (which re-runs the verifier via the vault), and the audit trail is append-only. Good intentions don't have to survive a Friday afternoon — the gates do.
20
20
 
21
- **Knowledge compounds across sessions or it isn't knowledge.** If a decision, gotcha, or pattern lives only in the current chat, it dies with the chat. Every memorable thing belongs in a tier-appropriate memory store with confidence and decay rules. wicked-brain is the difference between learning once and learning every time.
21
+ **Knowledge compounds across sessions or it isn't knowledge.** If a decision, gotcha, or pattern lives only in the current chat, it dies with the chat. Every memorable thing belongs in a tier-appropriate memory store with confidence and decay rules. The mem domain over wicked-estate is the difference between learning once and learning every time.
22
22
 
23
23
  **Native primitives over bespoke abstractions.** Claude Code's `TaskCreate`, `Skill`, `Agent`, and hooks are the surface. We extend them — we don't replace them. A task with metadata is more durable than a custom kanban; a skill with a frontmatter description is more discoverable than a registry call. The plugin is **skills-only**: user entry points are consolidated per-domain skills, and the former agents are fork-context worker skills — one surface, not three.
24
24
 
25
- **The gate is required; the rest is a toolkit.** wicked-garden's one non-negotiable is the evidence gate, so it stands on two required peers: **wicked-vault** (the backend that makes "done" re-derivable) and **wicked-loom** (the engine that re-runs the verifier). The core skill's `setup` action (`/wicked-garden-core setup`) blocks without them — a gate you can fake is worse than no gate. The other siblings are **opt-in layers**, not prerequisites: **wicked-testing** (acceptance testing), **wicked-brain** (cross-session memory — the *what*), **wicked-understanding** (repo playbooks — the *how*), **wicked-bus** (the audit trail). Install the ones you'll use; the toolkit works without the others — breadth you adopt incrementally, not a five-thing prerequisite wall. And required-at-install is not brittle-at-runtime: a transient outage degrades gracefully and never bricks a session — but a gate never pretends missing evidence is a pass; that path **fails closed**. We depend on the gate; we don't crash with the layers.
25
+ **The gate is required; the rest is a toolkit.** wicked-garden's one non-negotiable is the evidence gate, so it stands on two required peers: **wicked-vault** (the backend that makes "done" re-derivable) and **wicked-loom** (the engine that re-runs the verifier). The core skill's `setup` action (`/wicked-garden-core setup`) blocks without them — a gate you can fake is worse than no gate. The other siblings are **opt-in layers**, not prerequisites: **wicked-estate** (cross-session memory + knowledge — the *what*), **wicked-understanding** (repo playbooks — the *how*), **wicked-bus** (the audit trail). Acceptance testing needs no sibling at all — the `qe` domain ships in-catalog. Install the ones you'll use; the toolkit works without the others — breadth you adopt incrementally, not a five-thing prerequisite wall. And required-at-install is not brittle-at-runtime: a transient outage degrades gracefully and never bricks a session — but a gate never pretends missing evidence is a pass; that path **fails closed**. We depend on the gate; we don't crash with the layers.
26
26
 
27
27
  **Cross-platform is non-negotiable.** macOS, Linux, Windows (Git Bash, WSL, native). Bare `python3` doesn't exist on Windows; bare `/tmp` doesn't exist on Windows; the shim and `${TMPDIR:-/tmp}` exist for a reason. If a contributor adds shell that breaks on Windows, the contribution is incomplete.
28
28
 
@@ -68,7 +68,7 @@
68
68
 
69
69
  **Not a single-language toolkit.** Cross-platform stdlib-only Python for the plumbing. wicked-patch's generators support Python, TypeScript, Java, Go, SQL, Rust, Kotlin, C#, PHP, Ruby out of the box; new languages plug in via the generator interface.
70
70
 
71
- **Not closed.** The siblings (vault + loom required for the gate; testing, brain, understanding, bus opt-in) are peers, not forks — and the compiler emits a vault-backed harness any repo can adopt **without installing wicked-garden at all**. The plugin's relationship to other tools is "stand on, and hand off," not "absorb."
71
+ **Not closed.** The siblings (vault + loom required for the gate; estate, understanding, bus opt-in) are peers, not forks — and the compiler emits a vault-backed harness any repo can adopt **without installing wicked-garden at all**. The plugin's relationship to other tools is "stand on, and hand off," not "absorb."
72
72
 
73
73
  ---
74
74
 
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## The premise
19
19
 
20
- Coding agents grew up. Claude Code, Codex, Cursor, Antigravity, Aider, OpenCode, Gemini CLI, Zed/ACP — they're not autocomplete anymore. They plan. They parallelize. And each has *strong opinions* about how it likes to work.
20
+ Coding agents grew up. Claude Code, Codex, Cursor, Antigravity, Aider, OpenCode, Zed/ACP — they're not autocomplete anymore. They plan. They parallelize. And each has *strong opinions* about how it likes to work.
21
21
 
22
22
  Most plugins try to boss them around — re-implement planning, impose a workflow, make the agent dance. You end up fighting your own tools.
23
23
 
@@ -30,9 +30,9 @@ Most plugins try to boss them around — re-implement planning, impose a workflo
30
30
  | says *"tests pass"* (sometimes it's lying) | re-runs the proof. False "done" → **rejected.** Missing backend → **fails closed.** Never a vacuous green. |
31
31
  | greps and reads — blind to string-wired links | sees the **injected edges** (event→consumer, command→agent, agent→capability) grep never will → `blast-radius`, `lineage` |
32
32
  | refactors on a hope and a prayer | renames across files as a **graph operation**, not find-replace roulette → wicked-patch |
33
- | forgets everything at `exit` | remembers what session 1 decided when you're in session 47 → wicked-brain |
33
+ | forgets everything at `exit` | remembers what session 1 decided when you're in session 47 → the mem domain over wicked-estate |
34
34
  | re-derives *how to work in this repo* every task — which file owns the bug, the wiring step, the test command | loads the repo's own playbooks (`fix-bug`/`add-feature`/`verify`…), generated from HEAD → wicked-understanding |
35
- | asks *itself* for a second opinion | convenes a **real multi-model panel** (Gemini / Codex / …) → the jam skill's `council` action |
35
+ | asks *itself* for a second opinion | convenes a **real multi-model panel** (Antigravity / Codex / …) → the jam skill's `council` action |
36
36
  | re-derives WCAG/CWE/SOC2 from memory every time | loads the rubric on demand, ships it to any repo |
37
37
  | grades its own homework | author ≠ executor ≠ reviewer → evidence-gated testing |
38
38
 
@@ -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
- npx wicked-testing install # installs 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**.
@@ -69,12 +78,14 @@ npx wicked-testing install # installs wicked-vault (≥ 0.4.0), the honest-e
69
78
  The rest of the kit is **opt-in layers** — add what you want, skip the rest and the toolkit still works:
70
79
 
71
80
  ```bash
72
- npx wicked-testing install # the acceptance-testing layer (author ≠ executor ≠ reviewer)
73
- /plugin install wicked-brain # the memory layer — cross-session recall + cited search (the "what")
74
- /plugin install wicked-bus # the audit-trail layer (fire-and-forget; fail-open without it)
81
+ # wicked-estate — the memory/knowledge layer (cross-session recall + cited search, the "what"):
82
+ # install the `wicked-estate` + `wicked-estate-mcp` binaries onto PATH or ~/.local/bin
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
- Optional, lights up the code graph: `npx @colbymchenry/codegraph` (Node ≥ 22.5) → powers `blast-radius` / `lineage` / `hotspots` / wicked-patch. Details: [`docs/required-peers.md`](docs/required-peers.md).
86
+ > Evidence-gated acceptance testing (author ≠ executor ≠ reviewer) needs no extra install — it ships **in-catalog** as the `qe` domain (`wicked-garden-qe`).
87
+
88
+ Optional, lights up the code graph: **wicked-estate** (single binary; `wicked-estate index <path>` + the estate MCP server) → powers `blast-radius` / `lineage` / `hotspots` / wicked-patch (ADR 0005 — no external codegraph engine, no Node version floor). Details: [`docs/required-peers.md`](docs/required-peers.md).
78
89
 
79
90
  ## Try it
80
91
 
@@ -94,6 +105,23 @@ Optional, lights up the code graph: `npx @colbymchenry/codegraph` (Node ≥ 22.5
94
105
 
95
106
  ---
96
107
 
108
+ ## Build on it
109
+
110
+ The catalog is open: ship your own domain pack — a `wicked-pack.json`
111
+ manifest plus `{vendor}-{domain}` router / `{vendor}-{domain}-{role}` fork
112
+ workers — and the runtime discovers it without a garden PR: catalog listing,
113
+ crew specialist routing, peer-floor probing, same evidence discipline.
114
+
115
+ ```bash
116
+ npx wicked-garden pack check ./acme-seo-pack # the shipped conformance gate
117
+ npx wicked-installer pack add acme-seo-pack # acquire + validate + install + register
118
+ npx wicked-garden pack list # what the runtime sees
119
+ ```
120
+
121
+ Full author guide: [`docs/extending.md`](docs/extending.md).
122
+
123
+ ---
124
+
97
125
  ## Principles
98
126
 
99
127
  - **Don't fight the harness.** Fill the gaps; never re-implement what it already does well.
@@ -104,11 +132,11 @@ Optional, lights up the code graph: `npx @colbymchenry/codegraph` (Node ≥ 22.5
104
132
 
105
133
  ## More
106
134
 
107
- [`ETHOS.md`](ETHOS.md) · [`docs/getting-started.md`](docs/getting-started.md) · [`docs/domains.md`](docs/domains.md) · [`docs/required-peers.md`](docs/required-peers.md) · [`docs/compiler.md`](docs/compiler.md)
135
+ [`ETHOS.md`](ETHOS.md) · [`docs/getting-started.md`](docs/getting-started.md) · [`docs/domains.md`](docs/domains.md) · [`docs/required-peers.md`](docs/required-peers.md) · [`docs/compiler.md`](docs/compiler.md) · [`docs/extending.md`](docs/extending.md)
108
136
 
109
137
  ## Requirements
110
138
 
111
- 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-testing` · `wicked-brain` · `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`).
112
140
 
113
141
  ## License
114
142