wicked-garden 12.27.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 (640) hide show
  1. package/.claude-plugin/archetypes.json +166 -0
  2. package/.claude-plugin/components.json +75 -0
  3. package/.claude-plugin/marketplace.json +15 -0
  4. package/.claude-plugin/plugin.json +174 -0
  5. package/.claude-plugin/specialist.json +48 -0
  6. package/.claude-plugin/stack-registry.json +96 -0
  7. package/AGENTS.md +13 -0
  8. package/CHANGELOG.md +712 -0
  9. package/CONTRIBUTING.md +99 -0
  10. package/ETHOS.md +83 -0
  11. package/LICENSE +21 -0
  12. package/README.md +115 -0
  13. package/WICKED_GARDEN_BUS_EVENTS.md +149 -0
  14. package/agents/agentic/architect.md +449 -0
  15. package/agents/agentic/performance-analyst.md +702 -0
  16. package/agents/agentic/safety-reviewer.md +662 -0
  17. package/agents/crew/implementer.md +163 -0
  18. package/agents/crew/researcher.md +94 -0
  19. package/agents/crew/reviewer.md +184 -0
  20. package/agents/data/data-engineer.md +227 -0
  21. package/agents/engineering/api-documentarian.md +440 -0
  22. package/agents/engineering/migration-engineer.md +301 -0
  23. package/agents/engineering/solution-architect.md +208 -0
  24. package/agents/jam/brainstorm-facilitator.md +297 -0
  25. package/agents/jam/council.md +322 -0
  26. package/agents/jam/quick-facilitator.md +85 -0
  27. package/agents/persona/persona-agent.md +121 -0
  28. package/agents/platform/compliance-officer.md +266 -0
  29. package/agents/platform/privacy-expert.md +496 -0
  30. package/agents/platform/security-engineer.md +287 -0
  31. package/agents/product/a11y-expert.md +323 -0
  32. package/agents/product/requirements-analyst.md +238 -0
  33. package/agents/product/ui-reviewer.md +180 -0
  34. package/agents/product/ux-designer.md +199 -0
  35. package/agents/product/value-strategist.md +269 -0
  36. package/agents/qe/semantic-reviewer.md +78 -0
  37. package/commands/agentic/audit.md +24 -0
  38. package/commands/agentic/design.md +24 -0
  39. package/commands/agentic/frameworks.md +25 -0
  40. package/commands/agentic/review.md +27 -0
  41. package/commands/archetype/build.md +12 -0
  42. package/commands/archetype/decide.md +12 -0
  43. package/commands/archetype/explore.md +12 -0
  44. package/commands/archetype/incident.md +12 -0
  45. package/commands/archetype/migrate.md +12 -0
  46. package/commands/archetype/modernize.md +12 -0
  47. package/commands/archetype/review.md +14 -0
  48. package/commands/archetype/ship.md +12 -0
  49. package/commands/archetype/specify.md +12 -0
  50. package/commands/archetype/triage.md +12 -0
  51. package/commands/compile.md +37 -0
  52. package/commands/data/analyze.md +18 -0
  53. package/commands/data/data.md +21 -0
  54. package/commands/data/ml.md +18 -0
  55. package/commands/data/ontology.md +22 -0
  56. package/commands/data/pipeline.md +17 -0
  57. package/commands/deliberate.md +181 -0
  58. package/commands/engineering/add-field.md +77 -0
  59. package/commands/engineering/apply.md +58 -0
  60. package/commands/engineering/arch.md +26 -0
  61. package/commands/engineering/debug.md +27 -0
  62. package/commands/engineering/docs.md +27 -0
  63. package/commands/engineering/new-generator.md +257 -0
  64. package/commands/engineering/patch-plan.md +59 -0
  65. package/commands/engineering/plan.md +29 -0
  66. package/commands/engineering/remove.md +48 -0
  67. package/commands/engineering/rename.md +44 -0
  68. package/commands/engineering/review.md +32 -0
  69. package/commands/help.md +128 -0
  70. package/commands/install.md +118 -0
  71. package/commands/intent.md +54 -0
  72. package/commands/jam/brainstorm.md +37 -0
  73. package/commands/jam/council.md +49 -0
  74. package/commands/jam/quick.md +21 -0
  75. package/commands/jam/revisit.md +79 -0
  76. package/commands/persona/as.md +136 -0
  77. package/commands/persona/define.md +24 -0
  78. package/commands/persona/list.md +118 -0
  79. package/commands/platform/actions.md +20 -0
  80. package/commands/platform/assert.md +18 -0
  81. package/commands/platform/audit.md +23 -0
  82. package/commands/platform/compliance.md +20 -0
  83. package/commands/platform/gh.md +22 -0
  84. package/commands/platform/health.md +22 -0
  85. package/commands/platform/incident.md +23 -0
  86. package/commands/platform/infra.md +24 -0
  87. package/commands/platform/peer-health.md +103 -0
  88. package/commands/platform/plugin-health.md +58 -0
  89. package/commands/platform/security.md +38 -0
  90. package/commands/platform/toolchain.md +96 -0
  91. package/commands/platform/traces.md +20 -0
  92. package/commands/product/a11y.md +19 -0
  93. package/commands/product/acceptance.md +19 -0
  94. package/commands/product/align.md +20 -0
  95. package/commands/product/analyze.md +23 -0
  96. package/commands/product/elicit.md +19 -0
  97. package/commands/product/listen.md +24 -0
  98. package/commands/product/mockup.md +20 -0
  99. package/commands/product/screenshot.md +19 -0
  100. package/commands/product/strategy.md +40 -0
  101. package/commands/product/synthesize.md +23 -0
  102. package/commands/product/ux-review.md +42 -0
  103. package/commands/product/ux.md +20 -0
  104. package/commands/product/visual-direction.md +34 -0
  105. package/commands/prove.md +47 -0
  106. package/commands/report-issue.md +243 -0
  107. package/commands/reset.md +144 -0
  108. package/commands/search/blast-radius.md +58 -0
  109. package/commands/search/hotspots.md +55 -0
  110. package/commands/search/index.md +38 -0
  111. package/commands/search/lineage.md +47 -0
  112. package/commands/search/service-map.md +79 -0
  113. package/commands/setup.md +363 -0
  114. package/commands/smaht/briefing.md +200 -0
  115. package/commands/smaht/events-import.md +95 -0
  116. package/commands/smaht/state.md +19 -0
  117. package/commands/where-am-i.md +58 -0
  118. package/docs/README.md +32 -0
  119. package/docs/adr/0001-code-relationship-graph-engine.md +116 -0
  120. package/docs/adr/0002-major-cleanup-keep-cut.md +91 -0
  121. package/docs/adr/0003-peers-gate-required-layers-optin.md +41 -0
  122. package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +47 -0
  123. package/docs/brain-chunk-format.md +135 -0
  124. package/docs/compiler.md +95 -0
  125. package/docs/daemon-api.md +70 -0
  126. package/docs/domains.md +197 -0
  127. package/docs/getting-started.md +208 -0
  128. package/docs/plans/2026-06-08-wicked-loom-conduct.md +1337 -0
  129. package/docs/plans/2026-06-08-wicked-loom-contract.md +638 -0
  130. package/docs/plans/2026-06-08-wicked-loom-cutover.md +1300 -0
  131. package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +843 -0
  132. package/docs/plans/2026-06-08-wicked-loom-flow-cutover.md +403 -0
  133. package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +838 -0
  134. package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +44 -0
  135. package/docs/required-peers.md +60 -0
  136. package/docs/specs/2026-06-08-wicked-loom-extraction.md +225 -0
  137. package/docs/specs/2026-06-10-codegraph-to-brain-migration.md +168 -0
  138. package/docs/v11/archetypes.md +231 -0
  139. package/hooks/hooks.json +275 -0
  140. package/hooks/scripts/bootstrap.py +1797 -0
  141. package/hooks/scripts/invoke.py +62 -0
  142. package/hooks/scripts/notification.py +166 -0
  143. package/hooks/scripts/permission_request.py +223 -0
  144. package/hooks/scripts/post_tool.py +1374 -0
  145. package/hooks/scripts/pre_compact.py +272 -0
  146. package/hooks/scripts/pre_tool.py +1278 -0
  147. package/hooks/scripts/prompt_submit.py +1109 -0
  148. package/hooks/scripts/session_end.py +95 -0
  149. package/hooks/scripts/stop.py +624 -0
  150. package/hooks/scripts/subagent_lifecycle.py +464 -0
  151. package/hooks/scripts/subscribers/on_gate_decided.py +84 -0
  152. package/hooks/scripts/task_completed.py +322 -0
  153. package/hooks/scripts/worktree_guard.py +148 -0
  154. package/hooks/subscriptions/on_gate_decided.json +9 -0
  155. package/install.mjs +128 -0
  156. package/package.json +41 -0
  157. package/pyproject.toml +59 -0
  158. package/schemas/README.md +32 -0
  159. package/schemas/assert_contracts.json +37 -0
  160. package/schemas/health_probe.json +46 -0
  161. package/schemas/plugin_status.json +37 -0
  162. package/scripts/_adapters/__init__.py +166 -0
  163. package/scripts/_adapters/jira_adapter.py +18 -0
  164. package/scripts/_adapters/linear_adapter.py +18 -0
  165. package/scripts/_adapters/miro_adapter.py +18 -0
  166. package/scripts/_adapters/notion_adapter.py +18 -0
  167. package/scripts/_agents.py +357 -0
  168. package/scripts/_brain_ingest/__init__.py +2 -0
  169. package/scripts/_brain_ingest/session_fact_extractor.py +341 -0
  170. package/scripts/_brain_port.py +163 -0
  171. package/scripts/_bus.py +1081 -0
  172. package/scripts/_bus_catalog_gen.py +93 -0
  173. package/scripts/_bus_consumers.json +46 -0
  174. package/scripts/_bus_emit.py +43 -0
  175. package/scripts/_capability_registry.py +334 -0
  176. package/scripts/_capability_resolver.py +322 -0
  177. package/scripts/_domain_store.py +559 -0
  178. package/scripts/_event_log_reader.py +154 -0
  179. package/scripts/_event_schema.py +305 -0
  180. package/scripts/_event_store.py +397 -0
  181. package/scripts/_heavy_cadence.py +324 -0
  182. package/scripts/_integration_resolver.py +321 -0
  183. package/scripts/_logger.py +151 -0
  184. package/scripts/_loom.py +482 -0
  185. package/scripts/_paths.py +133 -0
  186. package/scripts/_python.sh +22 -0
  187. package/scripts/_run.py +137 -0
  188. package/scripts/_session.py +502 -0
  189. package/scripts/_validate_registry.py +1042 -0
  190. package/scripts/_wicked_testing_probe.py +277 -0
  191. package/scripts/agentic/analyze_agents.py +391 -0
  192. package/scripts/agentic/detect_framework.py +420 -0
  193. package/scripts/agentic/issue_taxonomy.py +357 -0
  194. package/scripts/agentic/pattern_scorer.py +434 -0
  195. package/scripts/classify/persist.py +169 -0
  196. package/scripts/compiler/compile.py +552 -0
  197. package/scripts/compiler/phase0/VERDICT.md +60 -0
  198. package/scripts/compiler/phase0/detect.py +292 -0
  199. package/scripts/compiler/phase0/emit.py +228 -0
  200. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.bindings.json +30 -0
  201. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.lint-output.txt +17 -0
  202. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/failing-tests.txt +4 -0
  203. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/honest-tests.txt +2 -0
  204. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-fail.build.md +8 -0
  205. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-missing.build.md +8 -0
  206. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/honest.build.md +8 -0
  207. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/wg_check_claims.py +174 -0
  208. package/scripts/compiler/phase0/evidence/command_iq.bindings.json +45 -0
  209. package/scripts/compiler/phase0/evidence/command_iq.lint-output.txt +17 -0
  210. package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/failing-tests.txt +4 -0
  211. package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/honest-tests.txt +3 -0
  212. package/scripts/compiler/phase0/evidence/command_iq.stage/fab-fail.build.md +8 -0
  213. package/scripts/compiler/phase0/evidence/command_iq.stage/fab-missing.build.md +8 -0
  214. package/scripts/compiler/phase0/evidence/command_iq.stage/honest.build.md +8 -0
  215. package/scripts/compiler/phase0/evidence/command_iq.stage/wg_check_claims.py +174 -0
  216. package/scripts/compiler/phase0/evidence/memos.bindings.json +28 -0
  217. package/scripts/compiler/phase0/evidence/memos.lint-output.txt +17 -0
  218. package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/failing-tests.txt +4 -0
  219. package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/honest-tests.txt +2 -0
  220. package/scripts/compiler/phase0/evidence/memos.stage/fab-fail.build.md +8 -0
  221. package/scripts/compiler/phase0/evidence/memos.stage/fab-missing.build.md +8 -0
  222. package/scripts/compiler/phase0/evidence/memos.stage/honest.build.md +8 -0
  223. package/scripts/compiler/phase0/evidence/memos.stage/wg_check_claims.py +174 -0
  224. package/scripts/compiler/phase0/evidence/verdict.json +104 -0
  225. package/scripts/compiler/phase0/evidence/wicked-bus.bindings.json +29 -0
  226. package/scripts/compiler/phase0/evidence/wicked-bus.lint-output.txt +17 -0
  227. package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/failing-tests.txt +4 -0
  228. package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/honest-tests.txt +3 -0
  229. package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-fail.build.md +8 -0
  230. package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-missing.build.md +8 -0
  231. package/scripts/compiler/phase0/evidence/wicked-bus.stage/honest.build.md +8 -0
  232. package/scripts/compiler/phase0/evidence/wicked-bus.stage/wg_check_claims.py +174 -0
  233. package/scripts/compiler/phase0/evidence/wire-vault-transcript.txt +60 -0
  234. package/scripts/compiler/phase0/run_probe.py +234 -0
  235. package/scripts/compiler/phase0/wire_vault.py +310 -0
  236. package/scripts/crew/__init__.py +0 -0
  237. package/scripts/crew/_task_audit_writer.py +243 -0
  238. package/scripts/crew/_task_reader.py +389 -0
  239. package/scripts/crew/archetypes_v11.py +348 -0
  240. package/scripts/crew/detectors/__init__.py +12 -0
  241. package/scripts/crew/flow_compiler.py +121 -0
  242. package/scripts/crew/phase_manager.py +703 -0
  243. package/scripts/crew/scope_delta.py +264 -0
  244. package/scripts/crew/specialist_resolver.py +218 -0
  245. package/scripts/crew/stack_registry.py +189 -0
  246. package/scripts/data/data_profiler.py +271 -0
  247. package/scripts/data/ontology_recommender.py +231 -0
  248. package/scripts/data/schema_validator.py +267 -0
  249. package/scripts/delivery/drift.py +739 -0
  250. package/scripts/delivery/telemetry.py +614 -0
  251. package/scripts/engineering/patch/codegraph_db.py +125 -0
  252. package/scripts/engineering/patch/generators/__init__.py +56 -0
  253. package/scripts/engineering/patch/generators/base.py +373 -0
  254. package/scripts/engineering/patch/generators/csharp_generator.py +494 -0
  255. package/scripts/engineering/patch/generators/go_generator.py +430 -0
  256. package/scripts/engineering/patch/generators/java_generator.py +928 -0
  257. package/scripts/engineering/patch/generators/jsp_generator.py +454 -0
  258. package/scripts/engineering/patch/generators/kotlin_generator.py +561 -0
  259. package/scripts/engineering/patch/generators/perl_generator.py +510 -0
  260. package/scripts/engineering/patch/generators/php_generator.py +644 -0
  261. package/scripts/engineering/patch/generators/propagation_engine.py +929 -0
  262. package/scripts/engineering/patch/generators/python_generator.py +487 -0
  263. package/scripts/engineering/patch/generators/ruby_generator.py +463 -0
  264. package/scripts/engineering/patch/generators/rust_generator.py +400 -0
  265. package/scripts/engineering/patch/generators/sql_generator.py +594 -0
  266. package/scripts/engineering/patch/generators/typescript_generator.py +439 -0
  267. package/scripts/engineering/patch/patch.py +800 -0
  268. package/scripts/engineering/patch/safety.py +429 -0
  269. package/scripts/jam/__init__.py +0 -0
  270. package/scripts/jam/_bus_consumers.py +271 -0
  271. package/scripts/jam/agentic_cli_registry.py +703 -0
  272. package/scripts/jam/consensus.py +737 -0
  273. package/scripts/jam/detect_clis.py +409 -0
  274. package/scripts/jam/jam.py +283 -0
  275. package/scripts/jam/save_transcript.py +171 -0
  276. package/scripts/loom/__init__.py +22 -0
  277. package/scripts/loom/cli.py +170 -0
  278. package/scripts/loom/compose.py +180 -0
  279. package/scripts/loom/gate.py +120 -0
  280. package/scripts/loom/manifest.py +140 -0
  281. package/scripts/loom/resolve.py +59 -0
  282. package/scripts/persona/__init__.py +0 -0
  283. package/scripts/persona/registry.py +688 -0
  284. package/scripts/platform/guard_pipeline.py +1214 -0
  285. package/scripts/platform/guard_profiles.py +216 -0
  286. package/scripts/platform/observability/assert_contracts.py +434 -0
  287. package/scripts/platform/observability/health_probe.py +915 -0
  288. package/scripts/platform/observability/ops_log_viewer.py +209 -0
  289. package/scripts/platform/prereq_doctor.py +567 -0
  290. package/scripts/qe/conditions_manifest.py +260 -0
  291. package/scripts/qe/content_sanitizer.py +160 -0
  292. package/scripts/qe/coverage_tracker.py +535 -0
  293. package/scripts/qe/discover_scenarios.py +243 -0
  294. package/scripts/qe/evidence_tracker.py +232 -0
  295. package/scripts/qe/prove.py +196 -0
  296. package/scripts/qe/registry_lookup.py +80 -0
  297. package/scripts/qe/registry_store.py +176 -0
  298. package/scripts/qe/semantic_review.py +1005 -0
  299. package/scripts/qe/vault_gate.py +382 -0
  300. package/scripts/qe/verdict_audit.py +175 -0
  301. package/scripts/qe/verdict_schema.py +335 -0
  302. package/scripts/reset.py +220 -0
  303. package/scripts/resolve_path.py +22 -0
  304. package/scripts/sentinel/invariants.py +402 -0
  305. package/scripts/sentinel/pre_push.py +73 -0
  306. package/scripts/setup/__init__.py +1 -0
  307. package/scripts/setup/detect_state.py +114 -0
  308. package/scripts/setup/migrate_legacy.py +67 -0
  309. package/scripts/setup/migrate_v6_projects.py +232 -0
  310. package/scripts/setup/onboarding.py +114 -0
  311. package/scripts/smaht/_bus_consumers.py +98 -0
  312. package/scripts/smaht/adapters/__init__.py +83 -0
  313. package/scripts/smaht/adapters/brain_adapter.py +254 -0
  314. package/scripts/smaht/adapters/context7_adapter.py +438 -0
  315. package/scripts/smaht/adapters/delegation_adapter.py +104 -0
  316. package/scripts/smaht/adapters/domain_adapter.py +206 -0
  317. package/scripts/smaht/adapters/events_adapter.py +231 -0
  318. package/scripts/smaht/adapters/tools_adapter.py +49 -0
  319. package/scripts/smaht/cheatsheet_store.py +236 -0
  320. package/scripts/smaht/context_package.py +386 -0
  321. package/scripts/smaht/knowledge_graph.py +395 -0
  322. package/scripts/smaht/propose_skills.py +856 -0
  323. package/scripts/smaht/test_cheatsheet_store.py +428 -0
  324. package/scripts/statusline.py +151 -0
  325. package/scripts/where_am_i.py +236 -0
  326. package/skills/agentic/agentic-patterns/SKILL.md +91 -0
  327. package/skills/agentic/agentic-patterns/refs/anti-patterns-design.md +283 -0
  328. package/skills/agentic/agentic-patterns/refs/anti-patterns-operational.md +216 -0
  329. package/skills/agentic/agentic-patterns/refs/pattern-catalog.md +329 -0
  330. package/skills/agentic/context-engineering/SKILL.md +142 -0
  331. package/skills/agentic/context-engineering/refs/caching-and-optimization.md +251 -0
  332. package/skills/agentic/context-engineering/refs/compression-techniques.md +171 -0
  333. package/skills/agentic/context-engineering/refs/cost-calculation-budget.md +250 -0
  334. package/skills/agentic/context-engineering/refs/cost-optimization-reporting.md +300 -0
  335. package/skills/agentic/context-engineering/refs/selective-loading.md +179 -0
  336. package/skills/agentic/frameworks/SKILL.md +191 -0
  337. package/skills/agentic/frameworks/refs/framework-profiles-1.md +209 -0
  338. package/skills/agentic/frameworks/refs/framework-profiles-2.md +214 -0
  339. package/skills/agentic/frameworks/refs/migration-patterns-paths.md +267 -0
  340. package/skills/agentic/frameworks/refs/migration-patterns-testing.md +208 -0
  341. package/skills/agentic/refs/audit.md +134 -0
  342. package/skills/agentic/refs/design.md +137 -0
  343. package/skills/agentic/refs/frameworks.md +102 -0
  344. package/skills/agentic/refs/review.md +160 -0
  345. package/skills/agentic/review-methodology/SKILL.md +186 -0
  346. package/skills/agentic/review-methodology/refs/deliverable-templates.md +246 -0
  347. package/skills/agentic/review-methodology/refs/issue-taxonomy-quality-testing.md +277 -0
  348. package/skills/agentic/review-methodology/refs/issue-taxonomy-reliability-safety.md +253 -0
  349. package/skills/agentic/trust-and-safety/SKILL.md +177 -0
  350. package/skills/agentic/trust-and-safety/refs/guardrails-actions.md +246 -0
  351. package/skills/agentic/trust-and-safety/refs/guardrails-input-output.md +238 -0
  352. package/skills/agentic/trust-and-safety/refs/guardrails-resources.md +209 -0
  353. package/skills/agentic/trust-and-safety/refs/safety-checklist-advanced.md +209 -0
  354. package/skills/agentic/trust-and-safety/refs/safety-checklist-core.md +215 -0
  355. package/skills/archetype/SKILL.md +104 -0
  356. package/skills/archetype/refs/build.md +142 -0
  357. package/skills/archetype/refs/decide.md +117 -0
  358. package/skills/archetype/refs/explore.md +66 -0
  359. package/skills/archetype/refs/incident.md +149 -0
  360. package/skills/archetype/refs/migrate.md +170 -0
  361. package/skills/archetype/refs/modernize.md +187 -0
  362. package/skills/archetype/refs/review.md +145 -0
  363. package/skills/archetype/refs/ship.md +117 -0
  364. package/skills/archetype/refs/specify.md +108 -0
  365. package/skills/archetype/refs/triage.md +62 -0
  366. package/skills/classify/SKILL.md +157 -0
  367. package/skills/data/analysis/SKILL.md +125 -0
  368. package/skills/data/analysis/refs/templates.md +170 -0
  369. package/skills/data/data/SKILL.md +118 -0
  370. package/skills/data/data/refs/examples.md +235 -0
  371. package/skills/data/ml/SKILL.md +125 -0
  372. package/skills/data/ml/refs/templates.md +172 -0
  373. package/skills/data/pipeline/SKILL.md +136 -0
  374. package/skills/data/pipeline/refs/templates.md +175 -0
  375. package/skills/data/refs/analyze.md +123 -0
  376. package/skills/data/refs/data.md +95 -0
  377. package/skills/data/refs/ml.md +118 -0
  378. package/skills/data/refs/pipeline.md +92 -0
  379. package/skills/deliberate/SKILL.md +125 -0
  380. package/skills/deliberate/refs/architecture-lens.md +37 -0
  381. package/skills/deliberate/refs/assumptions-lens.md +43 -0
  382. package/skills/deliberate/refs/code-lens.md +38 -0
  383. package/skills/deliberate/refs/content-lens.md +37 -0
  384. package/skills/deliberate/refs/data-lens.md +43 -0
  385. package/skills/deliberate/refs/design-lens.md +37 -0
  386. package/skills/deliberate/refs/opportunity-patterns.md +107 -0
  387. package/skills/deliberate/refs/ops-lens.md +43 -0
  388. package/skills/deliberate/refs/product-lens.md +46 -0
  389. package/skills/deliberate/refs/rethink-framework.md +77 -0
  390. package/skills/deliberate/refs/security-lens.md +47 -0
  391. package/skills/deliberate/refs/testing-lens.md +45 -0
  392. package/skills/deliberate/refs/timing-lens.md +42 -0
  393. package/skills/engineering/architecture/SKILL.md +177 -0
  394. package/skills/engineering/architecture/refs/adr-template.md +268 -0
  395. package/skills/engineering/architecture/refs/architecture-template-deployment.md +176 -0
  396. package/skills/engineering/architecture/refs/architecture-template-design.md +300 -0
  397. package/skills/engineering/architecture/refs/examples-ecommerce-analytics.md +299 -0
  398. package/skills/engineering/architecture/refs/examples-saas-trading.md +291 -0
  399. package/skills/engineering/architecture/refs/patterns-advanced.md +238 -0
  400. package/skills/engineering/architecture/refs/patterns-structural.md +303 -0
  401. package/skills/engineering/backend/SKILL.md +102 -0
  402. package/skills/engineering/backend/refs/checklists.md +146 -0
  403. package/skills/engineering/backend/refs/patterns.md +181 -0
  404. package/skills/engineering/debugging/SKILL.md +99 -0
  405. package/skills/engineering/debugging/refs/patterns.md +248 -0
  406. package/skills/engineering/debugging/refs/process.md +203 -0
  407. package/skills/engineering/docs/SKILL.md +97 -0
  408. package/skills/engineering/engineering/SKILL.md +88 -0
  409. package/skills/engineering/engineering/refs/checklists.md +91 -0
  410. package/skills/engineering/engineering/refs/templates.md +71 -0
  411. package/skills/engineering/frontend/SKILL.md +92 -0
  412. package/skills/engineering/frontend/refs/checklists.md +96 -0
  413. package/skills/engineering/frontend/refs/patterns.md +167 -0
  414. package/skills/engineering/integration/SKILL.md +183 -0
  415. package/skills/engineering/integration/refs/error-handling-best-practices.md +139 -0
  416. package/skills/engineering/integration/refs/error-handling-error-classes-typescript.md +212 -0
  417. package/skills/engineering/integration/refs/error-handling-error-response-format.md +301 -0
  418. package/skills/engineering/integration/refs/error-handling-retry-strategies.md +190 -0
  419. package/skills/engineering/integration/refs/event-schemas-best-practices.md +225 -0
  420. package/skills/engineering/integration/refs/event-schemas-event-naming-conventions.md +303 -0
  421. package/skills/engineering/integration/refs/event-schemas-event-structure.md +288 -0
  422. package/skills/engineering/integration/refs/graphql-best-practices.md +138 -0
  423. package/skills/engineering/integration/refs/graphql-error-handling.md +198 -0
  424. package/skills/engineering/integration/refs/graphql-graphql-basics.md +197 -0
  425. package/skills/engineering/integration/refs/graphql-query-examples.md +226 -0
  426. package/skills/engineering/integration/refs/graphql-schema-design-patterns.md +280 -0
  427. package/skills/engineering/integration/refs/grpc-grpc-overview.md +246 -0
  428. package/skills/engineering/integration/refs/grpc-implementation-examples.md +269 -0
  429. package/skills/engineering/integration/refs/grpc-metadata-headers.md +304 -0
  430. package/skills/engineering/integration/refs/grpc-testing.md +49 -0
  431. package/skills/engineering/integration/refs/openapi-template.yaml +682 -0
  432. package/skills/engineering/integration/refs/resilience-best-practices.md +109 -0
  433. package/skills/engineering/integration/refs/resilience-circuit-breaker-pattern.md +302 -0
  434. package/skills/engineering/integration/refs/resilience-rate-limiting.md +245 -0
  435. package/skills/engineering/integration/refs/resilience-timeout-pattern.md +212 -0
  436. package/skills/engineering/integration/refs/rest-api-fundamentals.md +299 -0
  437. package/skills/engineering/integration/refs/rest-api-responses-security.md +302 -0
  438. package/skills/engineering/integration/refs/versioning-breaking-changes.md +237 -0
  439. package/skills/engineering/integration/refs/versioning-migration-strategies.md +257 -0
  440. package/skills/engineering/integration/refs/versioning-versioning-strategies.md +296 -0
  441. package/skills/engineering/large-scale-migration/SKILL.md +65 -0
  442. package/skills/engineering/patch/SKILL.md +184 -0
  443. package/skills/engineering/refs/arch.md +126 -0
  444. package/skills/engineering/refs/debug.md +142 -0
  445. package/skills/engineering/refs/docs.md +190 -0
  446. package/skills/engineering/refs/plan.md +109 -0
  447. package/skills/engineering/refs/review.md +138 -0
  448. package/skills/engineering/system-design/SKILL.md +154 -0
  449. package/skills/engineering/system-design/refs/anti-patterns-big-ball-of-mud.md +254 -0
  450. package/skills/engineering/system-design/refs/anti-patterns-circular-dependencies.md +241 -0
  451. package/skills/engineering/system-design/refs/anti-patterns-feature-envy.md +168 -0
  452. package/skills/engineering/system-design/refs/anti-patterns-god-object.md +247 -0
  453. package/skills/engineering/system-design/refs/component-template-lifecycle.md +210 -0
  454. package/skills/engineering/system-design/refs/component-template-maintenance.md +219 -0
  455. package/skills/engineering/system-design/refs/component-template-structure.md +276 -0
  456. package/skills/engineering/system-design/refs/dependencies-best-practices.md +260 -0
  457. package/skills/engineering/system-design/refs/dependencies-dependency-principles.md +295 -0
  458. package/skills/engineering/system-design/refs/dependencies-dependency-tracking.md +261 -0
  459. package/skills/engineering/system-design/refs/interface-template-lifecycle.md +211 -0
  460. package/skills/engineering/system-design/refs/interface-template-maintenance.md +212 -0
  461. package/skills/engineering/system-design/refs/interface-template-structure.md +269 -0
  462. package/skills/engineering/system-design/refs/patterns-dependency-injection.md +151 -0
  463. package/skills/engineering/system-design/refs/patterns-facade-pattern.md +257 -0
  464. package/skills/engineering/system-design/refs/patterns-layered-pattern.md +204 -0
  465. package/skills/engineering/system-design/refs/patterns-plugin-architecture.md +229 -0
  466. package/skills/engineering/unit-test-quality/SKILL.md +194 -0
  467. package/skills/ground/SKILL.md +130 -0
  468. package/skills/integration-discovery/SKILL.md +168 -0
  469. package/skills/integration-discovery/refs/capabilities.md +282 -0
  470. package/skills/integration-discovery/refs/cli-detection.md +295 -0
  471. package/skills/integration-discovery/refs/discovery-sources.md +233 -0
  472. package/skills/integration-discovery/refs/task-patterns.md +206 -0
  473. package/skills/jam/SKILL.md +45 -0
  474. package/skills/jam/refs/facilitation-patterns.md +125 -0
  475. package/skills/jam/refs/quick.md +64 -0
  476. package/skills/jam/refs/synthesis-patterns.md +114 -0
  477. package/skills/multi-model/SKILL.md +168 -0
  478. package/skills/multi-model/refs/aichat.md +119 -0
  479. package/skills/multi-model/refs/aider.md +100 -0
  480. package/skills/multi-model/refs/auditability.md +238 -0
  481. package/skills/multi-model/refs/codex.md +169 -0
  482. package/skills/multi-model/refs/context.md +306 -0
  483. package/skills/multi-model/refs/copilot.md +161 -0
  484. package/skills/multi-model/refs/examples.md +224 -0
  485. package/skills/multi-model/refs/gemini.md +185 -0
  486. package/skills/multi-model/refs/goose.md +112 -0
  487. package/skills/multi-model/refs/llm.md +124 -0
  488. package/skills/multi-model/refs/opencode.md +196 -0
  489. package/skills/multi-model/refs/orchestration.md +188 -0
  490. package/skills/multi-model/refs/pi.md +208 -0
  491. package/skills/persona/SKILL.md +144 -0
  492. package/skills/persona/refs/define.md +133 -0
  493. package/skills/platform/actions/refs/actions.md +114 -0
  494. package/skills/platform/audit/SKILL.md +174 -0
  495. package/skills/platform/audit/refs/audit.md +145 -0
  496. package/skills/platform/audit/refs/checklists-evidence-operations.md +144 -0
  497. package/skills/platform/audit/refs/checklists-gdpr-pci-evidence.md +213 -0
  498. package/skills/platform/audit/refs/checklists-soc2-hipaa.md +120 -0
  499. package/skills/platform/audit/refs/frameworks-gdpr-pci.md +225 -0
  500. package/skills/platform/audit/refs/frameworks-soc2-hipaa.md +228 -0
  501. package/skills/platform/compliance/SKILL.md +169 -0
  502. package/skills/platform/compliance/refs/checklists.md +303 -0
  503. package/skills/platform/compliance/refs/compliance.md +117 -0
  504. package/skills/platform/compliance/refs/frameworks.md +282 -0
  505. package/skills/platform/errors/SKILL.md +183 -0
  506. package/skills/platform/errors/refs/patterns.md +271 -0
  507. package/skills/platform/errors/refs/severity.md +264 -0
  508. package/skills/platform/gate-benchmark-rebaseline/SKILL.md +108 -0
  509. package/skills/platform/gh/refs/gh.md +105 -0
  510. package/skills/platform/gh-cli/SKILL.md +120 -0
  511. package/skills/platform/gh-cli/refs/automation.md +63 -0
  512. package/skills/platform/gh-cli/refs/gh-ops.md +103 -0
  513. package/skills/platform/gh-cli/refs/patterns.md +132 -0
  514. package/skills/platform/gh-cli/scripts/gh_ops.py +454 -0
  515. package/skills/platform/github-actions/SKILL.md +159 -0
  516. package/skills/platform/github-actions/refs/security.md +150 -0
  517. package/skills/platform/github-actions/refs/templates.md +230 -0
  518. package/skills/platform/github-actions/refs/troubleshooting.md +174 -0
  519. package/skills/platform/github-actions/scripts/workflow_gen.py +215 -0
  520. package/skills/platform/gitlab-ci/SKILL.md +140 -0
  521. package/skills/platform/gitlab-ci/refs/templates.md +223 -0
  522. package/skills/platform/gitlab-ci/refs/troubleshooting.md +213 -0
  523. package/skills/platform/glab-cli/SKILL.md +133 -0
  524. package/skills/platform/glab-cli/refs/ci-debugging.md +95 -0
  525. package/skills/platform/glab-cli/refs/glab-ops.md +78 -0
  526. package/skills/platform/glab-cli/refs/patterns.md +131 -0
  527. package/skills/platform/glab-cli/scripts/glab_ops.py +313 -0
  528. package/skills/platform/health/SKILL.md +177 -0
  529. package/skills/platform/health/refs/health.md +72 -0
  530. package/skills/platform/health/refs/sources.md +302 -0
  531. package/skills/platform/incident/refs/incident.md +136 -0
  532. package/skills/platform/infra/refs/infra.md +104 -0
  533. package/skills/platform/observability/SKILL.md +128 -0
  534. package/skills/platform/observability/refs/toolchain-discovery.md +243 -0
  535. package/skills/platform/prereq-doctor/SKILL.md +57 -0
  536. package/skills/platform/prereq-doctor/refs/tool-registry.md +58 -0
  537. package/skills/platform/traces/refs/traces.md +101 -0
  538. package/skills/product/acceptance-criteria/SKILL.md +193 -0
  539. package/skills/product/acceptance-criteria/refs/ac-anti-patterns.md +291 -0
  540. package/skills/product/acceptance-criteria/refs/ac-examples.md +277 -0
  541. package/skills/product/accessibility/SKILL.md +197 -0
  542. package/skills/product/accessibility/refs/aria-patterns-basics.md +250 -0
  543. package/skills/product/accessibility/refs/aria-patterns-dynamic.md +187 -0
  544. package/skills/product/accessibility/refs/aria-patterns-interactive.md +246 -0
  545. package/skills/product/accessibility/refs/audit-report-findings.md +248 -0
  546. package/skills/product/accessibility/refs/audit-report-results.md +276 -0
  547. package/skills/product/accessibility/refs/common-violations-html-css.md +270 -0
  548. package/skills/product/accessibility/refs/common-violations-interactive.md +303 -0
  549. package/skills/product/accessibility/refs/keyboard-testing-basics.md +222 -0
  550. package/skills/product/accessibility/refs/keyboard-testing-patterns.md +173 -0
  551. package/skills/product/accessibility/refs/screen-reader-testing-advanced.md +294 -0
  552. package/skills/product/accessibility/refs/screen-reader-testing-commands.md +255 -0
  553. package/skills/product/accessibility/refs/wcag-checklist.md +262 -0
  554. package/skills/product/analyze/SKILL.md +164 -0
  555. package/skills/product/analyze/refs/algorithms.md +238 -0
  556. package/skills/product/analyze/refs/sentiment-patterns.md +180 -0
  557. package/skills/product/imagery/SKILL.md +97 -0
  558. package/skills/product/imagery/alter/SKILL.md +105 -0
  559. package/skills/product/imagery/alter/refs/editing-reference.md +146 -0
  560. package/skills/product/imagery/create/SKILL.md +109 -0
  561. package/skills/product/imagery/create/refs/prompt-engineering.md +112 -0
  562. package/skills/product/imagery/create/refs/provider-reference.md +219 -0
  563. package/skills/product/imagery/review/SKILL.md +101 -0
  564. package/skills/product/imagery/review/refs/analysis-lenses.md +136 -0
  565. package/skills/product/imagery/review/refs/quality-gates.md +153 -0
  566. package/skills/product/imagery/scripts/analyze.sh +23 -0
  567. package/skills/product/imagery/scripts/edit.sh +14 -0
  568. package/skills/product/imagery/scripts/generate.sh +13 -0
  569. package/skills/product/imagery/scripts/provider.py +787 -0
  570. package/skills/product/listen/SKILL.md +175 -0
  571. package/skills/product/listen/refs/channels.md +220 -0
  572. package/skills/product/mockup/SKILL.md +106 -0
  573. package/skills/product/mockup/refs/templates.md +95 -0
  574. package/skills/product/refs/a11y.md +109 -0
  575. package/skills/product/refs/acceptance.md +79 -0
  576. package/skills/product/refs/align.md +67 -0
  577. package/skills/product/refs/analyze.md +77 -0
  578. package/skills/product/refs/elicit.md +67 -0
  579. package/skills/product/refs/listen.md +58 -0
  580. package/skills/product/refs/mockup.md +77 -0
  581. package/skills/product/refs/screenshot.md +59 -0
  582. package/skills/product/refs/strategy.md +77 -0
  583. package/skills/product/refs/synthesize.md +54 -0
  584. package/skills/product/refs/ux-review.md +68 -0
  585. package/skills/product/refs/ux.md +101 -0
  586. package/skills/product/requirements-analysis/SKILL.md +136 -0
  587. package/skills/product/requirements-analysis/refs/requirements-example-auth.md +264 -0
  588. package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +88 -0
  589. package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +247 -0
  590. package/skills/product/requirements-analysis/refs/user-story-guide.md +296 -0
  591. package/skills/product/requirements-graph/SKILL.md +155 -0
  592. package/skills/product/requirements-graph/refs/examples.md +223 -0
  593. package/skills/product/requirements-graph/refs/schema.md +162 -0
  594. package/skills/product/requirements-migrate/SKILL.md +90 -0
  595. package/skills/product/requirements-navigate/SKILL.md +141 -0
  596. package/skills/product/requirements-navigate/refs/meta-templates.md +141 -0
  597. package/skills/product/screenshot/SKILL.md +147 -0
  598. package/skills/product/strategy/SKILL.md +198 -0
  599. package/skills/product/strategy/refs/frameworks.md +295 -0
  600. package/skills/product/strategy/refs/templates-competitive-market.md +299 -0
  601. package/skills/product/strategy/refs/templates-roi-value.md +207 -0
  602. package/skills/product/synthesize/SKILL.md +116 -0
  603. package/skills/product/synthesize/refs/journey-mapping.md +212 -0
  604. package/skills/product/synthesize/refs/prioritization.md +193 -0
  605. package/skills/product/ux-review/SKILL.md +164 -0
  606. package/skills/product/visual-direction/SKILL.md +137 -0
  607. package/skills/product/visual-review/SKILL.md +131 -0
  608. package/skills/runtime-exec/SKILL.md +138 -0
  609. package/skills/search/codebase-narrator/SKILL.md +131 -0
  610. package/skills/search/codebase-narrator/refs/output-template.md +100 -0
  611. package/skills/smaht/SKILL.md +72 -0
  612. package/skills/smaht/discovery/SKILL.md +65 -0
  613. package/skills/smaht/intent/SKILL.md +89 -0
  614. package/skills/smaht/propose-skills/SKILL.md +142 -0
  615. package/skills/smaht/refs/state.md +76 -0
  616. package/skills/swarm/SKILL.md +132 -0
  617. package/skills/swarm/refs/fan-out.md +104 -0
  618. package/skills/swarm/refs/independent-verification.md +86 -0
  619. package/skills/swarm/refs/receipts-and-evidence.md +69 -0
  620. package/skills/swarm/refs/recon-synthesis.md +87 -0
  621. package/skills/swarm/refs/ship-discipline.md +90 -0
  622. package/skills/wickedizer/SKILL.md +147 -0
  623. package/skills/wickedizer/refs/artifact-types.md +238 -0
  624. package/skills/wickedizer/refs/complexity.md +278 -0
  625. package/skills/wickedizer/refs/de-ai-pass.md +140 -0
  626. package/skills/wickedizer/refs/failure-modes.md +249 -0
  627. package/skills/wickedizer/refs/patterns.md +282 -0
  628. package/skills/wickedizer/refs/review.md +221 -0
  629. package/skills/wickedizer/refs/structure.md +282 -0
  630. package/skills/wickedizer/refs/voice-profile.md +125 -0
  631. package/skills/workflow/SKILL.md +132 -0
  632. package/skills/workflow/refs/archetype-adjustments.md +205 -0
  633. package/skills/workflow/refs/evidence.md +58 -0
  634. package/skills/workflow/refs/integration.md +130 -0
  635. package/skills/workflow/refs/risk-dimension-signals.md +260 -0
  636. package/skills/workflow/refs/scoring-rubric.md +49 -0
  637. package/skills/workflow/refs/signal-keywords.md +176 -0
  638. package/skills/workflow/refs/specialist-routing-rules.md +159 -0
  639. package/skills/worktrees/SKILL.md +87 -0
  640. package/skills/worktrees/refs/recipes.md +96 -0
@@ -0,0 +1,44 @@
1
+ # Codegraph → Brain, Phase 1b: Injected Edges + Extractor Registry — Plan
2
+
3
+ > **For agentic workers:** executed via subagent-driven-development against the wicked-brain repo (branch `feat/codegraph-graph-core`, same as Phase 1a). Builds on Phase 1a's `codegraph-client`/`codegraph-index`.
4
+
5
+ **Goal:** Materialize wicked-ecosystem **injected edges** (grep-/static-invisible, string-wired relationships) into the codegraph graph so blast-radius/lineage traverse them — with a pluggable registry so brain ships generic extractors and any plugin can drop in proprietary ones (Decision D3). **Zero garden dependency.**
6
+
7
+ **Repo:** `/Users/michael.parcewski/Projects/wicked-brain` (worktree `.claude/worktrees/codegraph-phase1a`).
8
+
9
+ ---
10
+
11
+ ## Decisions
12
+
13
+ | # | Decision | Why |
14
+ |---|---|---|
15
+ | B1 | Brain **ships** built-in extractors that read only target-repo files/conventions: **bus** (`_bus_consumers.json` + emit sites), **dispatch** (`subagent_type:` in `commands/**/*.md` → `agents/<d>/<n>.md`), **capability** (agent `tool-capabilities:` frontmatter → `capability:<name>` nodes, **frontmatter-only — no registry import**). | These are wicked-bus / Claude-plugin conventions, not garden internals. No garden code is imported (the garden `capability` extractor's `_capability_registry` import is dropped — registry *filtering* becomes a drop-in concern). |
16
+ | B2 | **Drop-in registry**: brain scans `<sourcePath>/.codegraph-extractors/*.mjs`, dynamic-imports each, runs its `extract({db, sourcePath, nodes})`. Absent dir → no-op. | D3 mechanism. Garden's proprietary archetype extractor (Phase 2) drops in here. Dependency points target→brain only; brain never imports the drop-in's repo. |
17
+ | B3 | Extractors write to the codegraph SQLite **read-write** (better-sqlite3). Each is **idempotent**: `DELETE FROM edges WHERE provenance=?` (its own), re-insert. Self-node markdown/virtual nodes via `ensureFileNode`/`ensureVirtualNode` (codegraph indexes code, not .md — issue garden#916). | Matches the garden Python extractors' contract; injected edges co-locate in the same `nodes`/`edges` tables as the static graph (ADR 0001). |
18
+ | B4 | `graph-index` runs the codegraph build **then** all extractors (built-in + drop-in) in one pass, so a single action yields the complete graph. Re-index drops injected edges (codegraph rebuild) → extractors re-apply every run. | One front door; blast-radius never sees a stale/empty injected layer. |
19
+
20
+ Edge convention (from Phase-1a contract): edge `(source, target, kind, metadata, provenance)`; injected edges use `kind="references"`, `provenance="injected:<mechanism>"`, semantics in `metadata`. Direction matches static edges so `DEPENDENTS_BY="target"` blast-radius surfaces the dependent (e.g. consumer is a dependent of producer ⇒ edge `source=consumer? ...`). **NB:** the garden bus extractor inserts `edge(source=producer, target=consumer)`; verify against Phase-1a blast-radius direction during implementation and align so blast-radius(producer) surfaces the consumer (see Task B-real).
21
+
22
+ ## File structure (brain `server/`)
23
+
24
+ | File | Responsibility |
25
+ |---|---|
26
+ | `lib/codegraph-nodes.mjs` | `ensureFileNode(db, relpath, lang?)`, `ensureVirtualNode(db, id, kind, name, filePath?)` — idempotent `INSERT OR IGNORE` populating all NOT NULL node cols. Port of `_graph_nodes.py`. |
27
+ | `lib/codegraph-extractors/bus.mjs` | `extract({db, sourcePath})` — read `scripts/_bus_consumers.json` + grep `wicked|wg.x` event strings in `scripts/**/*.py`; insert producer→consumer edges (`injected:bus`). |
28
+ | `lib/codegraph-extractors/dispatch.mjs` | command→agent edges from `subagent_type:` handles resolving to `agents/<d>/<n>.md` (`injected:dispatch`). |
29
+ | `lib/codegraph-extractors/capability.mjs` | agent→`capability:<name>` edges from `tool-capabilities:` frontmatter (`injected:capability`); creates virtual capability nodes. |
30
+ | `lib/codegraph-extract.mjs` | registry: `BUILTINS=[bus,dispatch,capability]`; `discoverDropins(sourcePath)` scans `<sourcePath>/.codegraph-extractors/*.mjs`; `runExtractors({db, sourcePath})` runs all, returns `{<label>:counts, total_injected_edges, dropins:[...]}`. Fail-open per extractor. |
31
+ | `bin/wicked-brain-server.mjs` | `graph-index` action: after `runIndex`, open db read-write, `runExtractors`, return build + injection stats + staleness. |
32
+ | `test/codegraph-nodes.test.mjs`, `test/codegraph-extract.test.mjs`, per-extractor tests | fixtures with the wiring; assert edges materialized + idempotency + drop-in discovery (present/absent). |
33
+
34
+ ## Tasks (TDD, subagent-driven)
35
+
36
+ - **B1 nodes**: `codegraph-nodes.mjs` + test (ensure file/virtual node idempotent; all NOT NULL cols set).
37
+ - **B2 bus extractor**: `extractors/bus.mjs` + test (fixture repo with `scripts/_bus_consumers.json` + a producer .py emitting the event + the consumer module node; assert producer→consumer edge with `injected:bus`; idempotent re-run).
38
+ - **B3 dispatch + capability extractors** + tests (fixture command/agent .md with `subagent_type:` and `tool-capabilities:`).
39
+ - **B4 registry**: `codegraph-extract.mjs` + test (runs builtins; discovers a drop-in `.mjs` in `.codegraph-extractors/` and runs it; absent dir → builtins only; one failing extractor doesn't abort the rest).
40
+ - **B5 wire `graph-index`** to run extractors after build + test (action returns injection stats; read actions unaffected).
41
+ - **B-real**: real-repo test — point brain at **wicked-garden**, `graph-index`, then `graph-blast-radius` on a bus producer module; assert a consumer wired only via the event string appears in the blast radius (a link grep cannot find). This is the Phase-1b acceptance + part of the goal's "tested on a real repo".
42
+
43
+ ## Out of scope
44
+ Registry-filtered capability validation (drop-in concern); hooks event→script extractor (additive later); import-node→file resolution (Phase 1a limitation).
@@ -0,0 +1,60 @@
1
+ # Peers — two required, three opt-in
2
+
3
+ Wicked Garden is a **curated toolkit**, and like any toolkit you can use the
4
+ parts you want. Only one thing is non-negotiable: the **evidence gate**. A gate
5
+ that can't re-derive its own evidence is the single thing the toolkit refuses to
6
+ fake — so its two peers are required. Everything else is an **opt-in layer**:
7
+ install it for the capability it unlocks, skip it and the rest of the kit still
8
+ works.
9
+
10
+ > **History:** v12 briefly made all five peers required infrastructure. That
11
+ > maximized the honesty guarantee and minimized adoption — you couldn't try the
12
+ > toolkit without standing up five things first. We walked it back: the gate
13
+ > stays required (that's the floor), the other three became opt-in layers.
14
+
15
+ ## Required — the evidence gate (setup blocks without these)
16
+
17
+ | Peer | What it does | Install |
18
+ |------|--------------|---------|
19
+ | **wicked-vault** | The honest-evidence backend the gate re-derives against: record → re-hash + re-run the verifier → cross-check. Never trusts a cached status. | `npx wicked-vault-install` (npm; pinned `^0.3.0`). Resolved at runtime via `WICKED_VAULT_BIN` → config → `PATH` → `node_modules` → `npx wicked-vault`. |
20
+ | **wicked-loom** | The gate engine garden drives: peer resolution (`loom resolve`), synchronous fail-closed evidence gating (`loom gate`), and the flow runtime (`loom flow run/status/resume`). It is the *sole* re-derivation engine — without it the produces-gate fails closed. | `npx wicked-loom` (npm; pinned `^0.2.0`). Resolved via `WICKED_LOOM_BIN` → config → `PATH` → `node_modules` → `npx wicked-loom`; `WICKED_LOOM_BIN=""` is the kill-switch. |
21
+
22
+ `/wicked-garden:setup` **blocks** without these two — a toolkit whose headline is
23
+ "done is re-derived, not asserted" cannot ship the gate as optional.
24
+
25
+ ## Opt-in layers (setup recommends; never blocks)
26
+
27
+ Add what you want. Each unlocks one capability; the rest of the toolkit (the gate,
28
+ the code graph, wicked-patch, the council, the rubric skill-refs) runs without any
29
+ of them.
30
+
31
+ | Layer | What it unlocks | Skip it and… | Install |
32
+ |-------|-----------------|--------------|---------|
33
+ | **wicked-testing** | Evidence-gated acceptance testing with writer/executor/**independent reviewer** separation — no self-graded "it passed." | the produces-gate still works (via vault+loom); you just don't get the acceptance-testing tool. | `npx wicked-testing install` (npm `^0.3.0`) |
34
+ | **wicked-brain** | The memory layer — cross-session recall, cited search, `smaht:briefing`. Carries decisions/gotchas from session 1 to session 47. | structural search (`blast-radius`/`lineage`/`hotspots`, via codegraph) still works; you lose cross-session memory + semantic search. | `/plugin install wicked-brain` (npm `0.14.0`) |
35
+ | **wicked-bus** | The audit-trail layer — append-only events recording what happened. | nothing breaks — emission is already fire-and-forget / fail-open; events just aren't recorded. | `/plugin install wicked-bus` (npm `2.0.0`) |
36
+ | **wicked-understanding** | The repo-playbooks layer — analyzes the repo at HEAD into task playbooks (`fix-bug`/`add-feature`/`verify`/`write-tests`/`scaffold`) that tell the agent *how to work in this repo*: the file that owns the bug, the wiring step, the test command, the gotcha. Pairs with brain — brain is the *what*, this is the *how* (`repo-analyst --enrich-from-brain` folds in design rationale). | the agent re-derives the method from scratch each task; the rest of the toolkit works. | `npx skills add mikeparcewski/wicked-understanding --all` (skills-standard; multi-CLI, no server, no lock-in) |
37
+
38
+ The SessionStart bootstrap hook probes for all peers and **warns** (non-blocking)
39
+ when one isn't resolvable — informational for the opt-in layers, a real flag for
40
+ the gate's two.
41
+
42
+ ## The stance: gate required, layers optional, runtime resilient
43
+
44
+ - **The gate is the floor.** vault + loom are required because the toolkit's
45
+ central promise — re-derived, fail-closed "done" — is meaningless without them.
46
+ This is the one place we trade adoption for honesty on purpose.
47
+ - **The layers are a toolkit, not a checklist.** Testing/brain/bus each add a
48
+ capability; none is a prerequisite for the others. Install the toolkit and reach
49
+ for the layers you need. Breadth is the point of a toolkit — but breadth you can
50
+ *adopt incrementally*, not a five-thing prerequisite wall.
51
+ - **Resilient at runtime.** Even the required gate degrades cleanly: a transient
52
+ outage never crashes a session, and the kill-switches (`WICKED_VAULT_BIN=""`,
53
+ `WICKED_LOOM_CUTOVER=off`) disable cleanly and **fail closed** — they never let a
54
+ gate treat missing evidence as a pass. `WICKED_LOOM_CUTOVER=off` is an emergency
55
+ disable (e.g. a wedged `npx`): gating pauses and fails closed until loom is
56
+ restored, rather than thrashing.
57
+
58
+ The line is simple: **fake-able honesty is worse than no honesty**, so the gate is
59
+ required. Everything else earns its place by being useful when you reach for it —
60
+ which is exactly what makes it a toolkit and not a monolith.
@@ -0,0 +1,225 @@
1
+ # North-Star Spec — `wicked-loom`: extracting the orchestration runtime
2
+
3
+ - **Date:** 2026-06-08
4
+ - **Status:** Design (approved shape; pending written-spec review → implementation plan)
5
+ - **Author:** brainstormed with Mike Parcewski
6
+ - **Topic:** Reshape wicked-garden from a heavy library into a thin orchestrator by extracting its runtime/wiring into a new standalone peer, `wicked-loom`.
7
+ - **Related:** ETHOS.md, docs/required-peers.md, issues #887 #843 #878 #842
8
+
9
+ ---
10
+
11
+ ## 1. Context & motivation
12
+
13
+ `wicked-garden` is published at **v12.2.0** on a marketplace with real users. It has grown heavy: **~127k lines** across **71 skills · 93 commands · 55 agents · 131 Python scripts**. A large share of that weight is not domain expertise or archetype intelligence — it is *runtime plumbing*: peer detection/install/resolution, bus wiring, gate execution, and phase-loop mechanics. That plumbing was even formalized once as a `daemon/` (typed bus subscribers + projector + council, #592/#624) and then **deliberately deleted in v11** (commit `d205fc3`, "daemon cleanup") for being too heavy in-tree. The plumbing keeps wanting to exist, and keeps not belonging in garden.
14
+
15
+ Meanwhile the `wicked-*` ecosystem already decomposes cleanly by concern, each concern a standalone primitive:
16
+
17
+ | Primitive | Concern |
18
+ |---|---|
19
+ | `wicked-bus` | messaging substrate (how components talk) |
20
+ | `wicked-brain` | memory / knowledge |
21
+ | `wicked-vault` | evidence / verification (re-derive, never trust a claim) |
22
+ | `wicked-testing` | QE execution (plan → run → judge) |
23
+ | `wicked-understanding` | per-repo knowledge + **verifier spec** |
24
+
25
+ `wicked-garden` uniquely owns three things none of the primitives provide: the **archetype engine** (classify work-shape, steer phases), the **domain catalog** (skills + agents), and the **compiler** (stamp a self-contained gate into any repo). Everything else garden does today is runtime that *should be a primitive too* — and isn't. That missing primitive is `wicked-loom`.
26
+
27
+ **Thesis:** garden should *drive* a runtime, not *be* one. Extract the runtime into `wicked-loom`; garden becomes "archetype engine + domain catalog + compiler, running on loom."
28
+
29
+ ---
30
+
31
+ ## 2. Decisions (locked)
32
+
33
+ These were settled during brainstorming and are the spine of this spec.
34
+
35
+ | # | Decision | Rationale |
36
+ |---|---|---|
37
+ | D1 | **North star = Level 1.** Garden keeps the archetype engine, domain catalog, and compiler. Extract concerns *gate/phase + autonomy substrate* and *peer-wiring/adapters* into one standalone. | L1 is destination *and* first increment — biggest clarity win, smallest blast radius, and it names the missing component precisely. L2 (unbundle the domain catalog) and L3 (gut the archetype engine) are explicitly **out of scope** — L3 would erase garden's identity. |
38
+ | D2 | **One new primitive, not two.** `wicked-loom`, containing a `compose` module and a `conduct` module. | Honors the "a missing component" (singular) framing and YAGNI — do not spec a separate `compose` primitive until a *second* consumer needs it. |
39
+ | D3 | **Hybrid autonomy, synchronous-core-first.** The in-session synchronous runtime is the L1 deliverable. Headless/daemon is **spec'd now, built later**, with the park-at-hard-gate contract baked into the interface from day one. | The deleted daemon shows headless was too heavy as a default; garden's HITL discipline (hard gates require a human) collides with unattended autonomy unless bounded. Baking the contract in now prevents a later repaint. |
40
+ | D4 | **Hybrid wiring.** Bus-as-spine for coordination/audit/knowledge/parks (async); direct synchronous resolution for re-derivation gates. **An event never satisfies a gate.** | Vault re-derivation must be blocking + in-line — a gate cannot return "pass" off a stale event. The bus carries everything that *isn't* a gate verdict. |
41
+ | D5 | **Language-neutral standalone, Python impl, CLI + (deferred) daemon surface, consumed by garden via subprocess.** | Reuses nearly all existing Python code (daemon, `qe/`, resolvers) while making loom a true sibling primitive any stack can shell to — identical to how garden already consumes `npx wicked-vault`. Keeps garden's plugin packaging decoupled from loom's Python env. |
42
+ | D6 | **Name: `wicked-loom`.** | A loom is the frame that wires threads together into cloth — the literal metaphor for "only wiring them together." |
43
+
44
+ ---
45
+
46
+ ## 3. Target architecture
47
+
48
+ ```
49
+ ┌───────────────────────────────────────────┐
50
+ prompt ─────────────► │ wicked-garden (plugin) │
51
+ │ • archetype engine (classify + steer) │ KEEPS
52
+ │ • domain catalog (71 skills / 55 agents) │
53
+ │ • compiler (emit stamped gate into repos) │
54
+ │ compiles archetype → FLOW DEFINITION; │
55
+ │ shells to loom for compose / gate / flow │
56
+ └───────────────┬───────────────────────────┘
57
+ subprocess (CLI, sync) + bus events (async)
58
+ ▼
59
+ ┌───────────────────────────────────────────┐
60
+ │ wicked-loom (NEW standalone) │ TAKES
61
+ │ COMPOSE: declare → install → version → │
62
+ │ resolve (the WICKED_*_BIN ladder)│
63
+ │ CONDUCT: run any FLOW DEFINITION — │
64
+ │ phase-loop · gate exec · park- │
65
+ │ at-hard-gate · bus-consumer+proj │
66
+ └──┬──────────┬──────────┬──────────┬─────────┘
67
+ direct/sync ──┘ │ │ └── bus/async
68
+ ▼ ▼ ▼ ▼
69
+ wicked-vault wicked-testing wicked-brain wicked-bus
70
+ (re-derive) (QE exec) (knowledge) (spine)
71
+ (+ wicked-understanding — verifier spec, optional/fail-soft)
72
+ ```
73
+
74
+ ### 3.1 The load-bearing abstraction: loom is archetype-agnostic
75
+
76
+ Garden does **not** hand loom an archetype name. Garden's archetype engine compiles a catalog entry into a generic, declarative **flow definition**:
77
+
78
+ ```jsonc
79
+ // flow definition — garden produces it, loom executes it
80
+ {
81
+ "flow_id": "…",
82
+ "phases": [
83
+ { "name": "plan", "gate": null, "produces": [...] },
84
+ { "name": "implement", "gate": null, "produces": [...] },
85
+ { "name": "test", "gate": "produces:test-report", "hitl": "discrete:review" },
86
+ { "name": "review", "gate": "produces:verdict", "hitl": "hard:final-verdict" }
87
+ ],
88
+ "peers_required": ["vault", "testing"],
89
+ "verifier_spec_ref": "…optional wicked-understanding verify.json…"
90
+ }
91
+ ```
92
+
93
+ Loom knows nothing about "build" vs "migrate" vs "incident." It runs *any* flow definition: advance phase → if the phase has a gate, execute it (sync vault re-derive) → if the gate is `hard:*`, park and emit `needs-human` → else continue. This is the seam that makes loom a genuine reusable primitive (any agent system can author flow definitions) rather than "garden's engine in a sidecar repo." Garden remains the archetype-to-flow compiler; loom is the generic flow runtime.
94
+
95
+ ### 3.2 Responsibility split
96
+
97
+ | Concern | Owner | Notes |
98
+ |---|---|---|
99
+ | Archetype catalog, detector, steering hook, playbooks | **garden** | `archetypes_v11.py`, `prompt_submit.py`, `commands/archetype/`, `skills/archetype/refs/`, `archetypes.json` |
100
+ | Domain catalog (skills/agents) | **garden** | unchanged |
101
+ | Compiler (stamped-gate emitter) | **garden** | stays; see §7 synergy |
102
+ | Archetype → flow-definition compilation | **garden** | new thin layer; the handoff contract to loom |
103
+ | Peer install + version-check + resolution (compose) | **loom** | cross-cutting; not archetype-specific |
104
+ | Gate execution (vault re-derive) | **loom** | the honest-evidence engine |
105
+ | Flow/phase mechanics + state + park-at-gate | **loom** | generic flow runtime |
106
+ | Bus consumer + projector (headless) | **loom** | resurrected daemon, deferred-on by default |
107
+
108
+ ---
109
+
110
+ ## 4. `wicked-loom` component spec
111
+
112
+ One standalone, two modules, three surfaces.
113
+
114
+ ### 4.1 COMPOSE module
115
+ Owns the peer lifecycle. Salvaged from garden's `bootstrap.py` (peer portion), `_integration_resolver.py`, `_capability_resolver.py`, `_capability_registry.py`, and `required-peers` logic.
116
+
117
+ - **Declare** — a peer manifest (peer name, npm package, pinned `^x.y`, resolution env var, optional/required).
118
+ - **Install** — orchestrate installs across mechanisms. **All four current peers are on npm**, so install runs headless via `npm`/`npx` (`npx wicked-testing install`, `npx wicked-vault-install`, `npm i wicked-brain@0.14`, `npm i wicked-bus@2`). The Claude Code `/plugin install` path is UX sugar, *not* the only route — loom never depends on a live CC session to install.
119
+ - **Version-check** — verify resolved versions satisfy the pins; report drift.
120
+ - **Resolve** — own the runtime resolution ladder (`WICKED_<PEER>_BIN` → config → `PATH` → `node_modules/.bin` → `npx`), including the `WICKED_VAULT_BIN=""` kill-switch.
121
+
122
+ ### 4.2 CONDUCT module
123
+ Runs flow definitions. Salvaged from `qe/vault_gate.py`, `crew/phase_manager.py`, and the deleted `daemon/`.
124
+
125
+ - **Run a flow** — advance through declared phases; persist phase state.
126
+ - **Execute a gate** — *synchronous, in-line* vault re-derivation: re-hash recorded evidence + re-run the verifier via `cross-check`. Missing vault → `gate: "unavailable"`, **fail-closed**, never a vacuous pass. Hard gates additionally require an independent attestation (`--with-attestations`). If a `verifier_spec_ref` is present, read it to know *what* to re-derive; if absent/stale, fall back to generic detection (fail-soft on the *spec*, never on the *gate*).
127
+ - **Park at hard gate** — on `hard:mitigate / cutover / final-verdict`, stop the flow and emit `loom:flow:needs-human`; do not self-approve. (Contract present from day one even though headless execution is deferred.)
128
+ - **Project** — materialize flow/phase/evidence state from bus events to disk (headless, deferred).
129
+
130
+ ### 4.3 Surfaces
131
+ 1. **CLI** (the L1 deliverable; garden shells to it):
132
+ - `loom compose install [--peer X] [--check]` · `loom resolve <peer>` · `loom doctor`
133
+ - `loom gate <produces> [--verifier-spec path] [--with-attestations]`
134
+ - `loom flow run <flow-def.json>` · `loom flow status <flow-id>` · `loom flow resume <flow-id>`
135
+ 2. **Bus-consumer / daemon** (deferred per D3): headless mode that reacts to bus events, runs soft-gated flows unattended, parks at hard gates.
136
+ 3. **Event contract** (stable, on `wicked-bus`): `loom:flow:started|phase-advanced|gate-passed|gate-failed|needs-human|completed`, `loom:compose:installed|drift-detected`.
137
+
138
+ ---
139
+
140
+ ## 5. Wiring contract & invariants
141
+
142
+ - **I1 — Gates are synchronous and direct.** `loom gate` re-derives every call. **An event never satisfies a gate.**
143
+ - **I2 — Fail-closed.** Missing vault → `unavailable`, never pass. A claimed-but-false "tests pass" is rejected.
144
+ - **I3 — Fail-soft on the verifier spec only.** Absent/stale `wicked-understanding` verifier spec → generic detection, never a blocked or vacuous gate.
145
+ - **I4 — Bus is the spine for everything that is not a gate verdict:** phase transitions, evidence-recorded notices, brain knowledge writes, audit, and `needs-human` parks.
146
+ - **I5 — Autonomy never overrides a hard gate.** Headless flows park + emit at `hard:*`.
147
+ - **I6 — Loom is archetype-agnostic.** It executes flow definitions; it does not know archetype names.
148
+
149
+ ---
150
+
151
+ ## 6. Extraction inventory (file-level, grounded)
152
+
153
+ `→ loom` = moves; `STAY` = remains in garden; `PARTIAL` = split.
154
+
155
+ > **OUTCOME (shipped 2026-06-08 — supersedes the forward-looking `→ loom` dispositions below).** What *actually* moved to loom: **resolve** (peer resolution) and **gate** (`vault_gate.cross_check`) — both fully cut over **and contracted** (in-process deleted; loom is the sole path, fail-closed). **flow** landed as a loom-*authoritative* hard-gate park decision with an in-process fail-closed floor — the `phase_manager` state machine was **not** moved (incompatible execution models: garden advances one phase agent-in-loop; loom runs a whole flow-def). Everything else listed `→ loom` below **STAYS in garden permanently** — re-decided, *not* future loom work: `_integration_resolver` / `_capability_resolver` / `_capability_registry` (agent/domain MCP-tool discovery — a different concern from wicked-peer orchestration), `bootstrap` (session assembly; loom peer-detection already shimmed), `_bus`/`_event_*` (not migrated), `phase_manager` storage (rejected). The loom migration is **complete**; nothing further is owed. Shipped: garden **v12.3.0** (resolve/gate) + **v12.4.0** (flow); loom **v0.2.x**.
156
+
157
+ | File | Lines | Disposition |
158
+ |---|---:|---|
159
+ | `hooks/scripts/bootstrap.py` | 1711 | **PARTIAL** — peer detect/install/resolve → loom compose; session-bootstrap (state init, archetype priming, brain orientation) STAYS |
160
+ | `scripts/_integration_resolver.py` | 321 | → loom (compose) |
161
+ | `scripts/_capability_resolver.py` | 322 | → loom (compose) |
162
+ | `scripts/_capability_registry.py` | 226 | → loom (compose) |
163
+ | `scripts/qe/vault_gate.py` | 348 | → loom (conduct/gate) |
164
+ | `scripts/crew/phase_manager.py` | 614 | → loom (conduct/state) |
165
+ | `scripts/_bus.py` | 973 | **PARTIAL** — consumer/projector role → loom; thin fire-and-forget emit (`_bus_emit.py`, 43) STAYS so any garden component can emit |
166
+ | `scripts/_event_store.py` / `_event_log_reader.py` / `_event_schema.py` | 397 / 154 / 305 | → loom (conduct/projector) — confirm during expand phase |
167
+ | `scripts/_wicked_testing_probe.py` / `_wicked_testing_tier1.py` | 277 / 88 | → loom (compose/resolution) |
168
+ | `scripts/_brain_port.py` | 65 | → loom (compose/resolution) |
169
+ | `scripts/crew/archetypes_v11.py` | 348 | **STAY** — archetype engine (garden identity) |
170
+ | `hooks/scripts/prompt_submit.py` | 1126 | **STAY** — classification entry (archetype engine) |
171
+ | `scripts/crew/scope_delta.py` | 264 | **STAY** — HITL scope heuristic feeds flow-definition compilation |
172
+ | `scripts/compiler/**` | 2312 | **STAY** — see §7 synergy |
173
+
174
+ Exact partial boundaries (esp. `bootstrap.py`, `_bus.py`, the `_event_*` trio) are confirmed empirically during the **expand** phase, not asserted here.
175
+
176
+ ---
177
+
178
+ ## 7. Migration plan — strangler (expand → cutover → contract)
179
+
180
+ Garden is published with users; this is a migration, not a rewrite. Each step is independently verifiable via vault.
181
+
182
+ 1. **Expand.** Stand up the `wicked-loom` repo. *Copy* (don't move) compose + conduct code; ship the CLI; publish to npm with a `^0.1` pin. Garden is byte-for-byte unchanged and keeps working. Loom is usable standalone by other consumers immediately.
183
+ 2. **Cutover (strangler).** Garden's `scripts/` shims start shelling to `loom` instead of running in-process, **one surface at a time**: `resolve` → `gate` → `flow`. Each cutover ships behind the existing fail-soft posture (if loom unresolvable, the old in-process path or graceful degradation still applies during transition). Add `wicked-loom` as a **5th peer** in `docs/required-peers.md` (required at install, resilient at runtime — same stance as the other four). Introduce the archetype → flow-definition compiler in garden.
184
+ 3. **Contract.** Delete the now-dead in-garden runtime code (the `→ loom` rows above). Re-measure garden's footprint; slim whatever genuinely remains (this absorbs #843).
185
+
186
+ **Backward compat:** during expand+cutover, no user-visible behavior change. The contract phase is a major version bump for garden (v13) with a migration note: "wicked-loom is now a required peer; `/wicked-garden:setup` installs it."
187
+
188
+ ---
189
+
190
+ ## 8. The four open issues, re-triaged against the north star
191
+
192
+ | Issue | Disposition |
193
+ |---|---|
194
+ | **#887** consume wicked-understanding | **Absorbed into loom.** Understanding's `verify.json` is the `verifier_spec_ref` that `loom gate` reads to know *what* to re-derive. Optional/fail-soft peer (I3), exactly as the author proposed. Resolve by speccing it into loom, not as a standalone garden change. Open sub-item: confirm the `verify.json` schema loom's gate consumes (tracked in §9). |
195
+ | **#843** slim `commands/*` | **Largely dissolved** by the contract phase — much weight is runtime plumbing that leaves. Re-measure after contract; slim the genuine remainder. |
196
+ | **#878** cwd-leak PreToolUse hook | **Tactical, do now.** Independent of the rethink — worktree-safety bug. Not blocked by loom. |
197
+ | **#842** SessionEnd dogfood (v9.2.15) | **Stale** (we're at v12.2). Verify-or-close; do not carry v9 dogfooding forward. |
198
+
199
+ ---
200
+
201
+ ## 9. Open questions / deferred
202
+
203
+ - **D-headless:** the daemon/bus-consumer execution mode is spec'd (§4.2/§4.3) but **not built** in L1. The contract (park-at-hard-gate, event names) is fixed now to avoid a repaint.
204
+ - **Compiler↔loom synergy:** `loom gate` and the compiler's stamped gate are the same logic at different lifetimes (live runtime vs. stamped file). L1 leaves the compiler as-is (self-contained, resolves vault directly via npx). A later increment *may* have the compiler emit a thin shim over loom — flagged, not scoped.
205
+ - **compose-as-its-own-primitive:** deferred per D2 (YAGNI). Revisit only if a non-garden consumer needs the composer.
206
+ - **`verify.json` schema:** the structured sidecar wicked-understanding would emit (issue #887, rec #2) needs its shape confirmed against what `loom gate` consumes. Coordinate cross-repo before building.
207
+ - **CLI verb naming:** `compose`/`gate`/`flow` are provisional.
208
+
209
+ ---
210
+
211
+ ## 10. Error handling & testing posture
212
+
213
+ - **Error handling:** all peer interaction is fail-soft *except gates* (fail-closed, I2). Loom unresolvable → garden degrades gracefully during transition; a gate with no vault returns `unavailable`. The `WICKED_VAULT_BIN=""` kill-switch and the loom resolution ladder are preserved verbatim.
214
+ - **Testing:** loom ships with its own suite (compose resolution ladder, gate fail-closed behavior, flow phase advance + park-at-hard-gate). Garden adds **contract tests** asserting each cutover shim produces identical results to the in-process path it replaces (the strangler's safety net). The emitted-compiler-gate AST test (stdlib-only, imports nothing from the garden) is unaffected.
215
+
216
+ ---
217
+
218
+ ## 11. Success criteria for L1
219
+
220
+ 1. `wicked-loom` exists as a standalone npm-published primitive with a working CLI, usable by a non-garden consumer.
221
+ 2. Garden shells to loom for `resolve`, `gate`, and `flow`; the in-process runtime code is deleted.
222
+ 3. No regression: every archetype's gate behavior is identical pre/post cutover (proven by contract tests + vault re-derivation, not asserted).
223
+ 4. Garden's footprint drops measurably (target: the `→ loom` rows above leave; #843 re-measured).
224
+ 5. The honest-evidence invariants (§5) hold unchanged — done is still re-derived, never claimed.
225
+ 6. Loom is archetype-agnostic: it runs a hand-authored flow definition with zero garden knowledge.
@@ -0,0 +1,168 @@
1
+ # North-Star Spec — move the code-relationship graph from `wicked-garden` into `wicked-brain`
2
+
3
+ - **Date:** 2026-06-10
4
+ - **Status:** Design (approved shape; pending written-spec review → implementation plan)
5
+ - **Author:** brainstormed with Mike Parcewski
6
+ - **Topic:** Relocate the codegraph-backed relationship graph (engine integration, injected-edge extractors, and the blast-radius / lineage / architecture query surface) out of `wicked-garden` and into `wicked-brain`, so any project — not just ones running garden — gets enhanced code/graph knowledge.
7
+ - **Related:** docs/adr/0001-code-relationship-graph-engine.md (**this spec amends/inverts it**), docs/required-peers.md, `scripts/_codegraph.py`, `scripts/codegraph/`, the `wicked-brain-lsp` skill.
8
+
9
+ ---
10
+
11
+ ## 1. Context & motivation
12
+
13
+ There are currently **two half-built code-intelligence stacks** answering overlapping questions in different places:
14
+
15
+ - **garden's codegraph stack** — `scripts/_codegraph.py` (peer shim) + `scripts/codegraph/inject_*.py` (injected-edge extractors), feeding `search:blast-radius` / `search:lineage` and (eventually) wicked-patch's `--db`. Introduced by ADR 0001 (dated 2026-06-09).
16
+ - **brain's LSP stack** — the `wicked-brain-lsp` skill already advertises "blast radius" and "architecture map" via language servers.
17
+
18
+ Two blast-radius implementations, two homes, one concept. The smell is structural: **"what breaks if I change X" / "what flows where" / "what's connected to this" are knowledge questions about relationships** — and brain *is* the knowledge layer. Code-relationship comprehension is a thinking pattern, and thinking patterns belong in brain.
19
+
20
+ ADR 0001 noticed `search:blast-radius` was "wrongly" calling the brain and concluded *pull the graph into garden*. **That was the wrong direction.** The original instinct (blast-radius = brain) was right; the fix is to move the *graph* to brain, not move the *query* to garden. The decisive secondary requirement: the graph is **valuable to everyone**, and requiring all of wicked-garden just to give a repo enhanced code/graph knowledge is unacceptable. The graph must be a standalone brain capability with **zero garden dependency**.
21
+
22
+ **Thesis:** brain *knows* (the relationship graph + every query over it). Garden *does* (deterministic refactor, gates, archetypes) and is merely a *consumer* of the graph.
23
+
24
+ ---
25
+
26
+ ## 2. Decisions (locked)
27
+
28
+ Settled during brainstorming; the spine of this spec.
29
+
30
+ | # | Decision | Rationale |
31
+ |---|---|---|
32
+ | D1 | **Ownership: brain owns the graph + all relationship queries; garden consumes.** The *knowing*-vs-*doing* line: brain knows (blast-radius, lineage, impact, callers, architecture); garden does (wicked-patch refactor, gates, archetypes). | Blast-radius is knowledge; knowledge lives in brain. Unifies the two stacks under one owner. **Amends ADR 0001.** |
33
+ | D2 | **Dependency arrow points garden→brain only, never back.** Brain is fully valuable standalone for code/graph knowledge. | "Don't require all of garden just for brain to have graph knowledge." The graph is universally valuable. |
34
+ | D3 | **Proprietary edges via a pluggable extractor-drop registry (option i).** Brain defines an extractor interface + a discovery dir, *ships* the generic/ecosystem extractors itself, and discovers + runs plugin-dropped extractors if present (ignores if absent). | Most "injected" edges are ecosystem/platform conventions (bus wiring, plugin frontmatter, hooks), not garden internals — brain should know them natively. The genuinely garden-proprietary ones (archetypes) drop in without a reverse dependency. Generalizes to any wicked-* plugin. |
35
+ | D4 | **codegraph = graph of record; LSP = live precision (option A).** codegraph owns the persistent relationship graph, injected edges, and blast-radius / lineage / architecture. LSP keeps def/ref/hover/diagnostics and **stops being a second blast-radius**. No fusion layer. | LSP cannot represent injected edges (it only knows language semantics) and has no persistent whole-repo graph; codegraph is the only layer that can. Two clean lanes, each doing what it's best at. YAGNI on a merge/facade. |
36
+ | D5 | **Freshness: lazy staleness-stamp baseline + optional commit-hook accelerator (A + C). No watcher full-reindex.** | The 40%-CPU runaway diagnosed on 2026-06-10 *was* a reindex loop (watcher → polling → repeated re-index). Lazy + staleness-stamped is structurally incapable of that failure. Commit-hook is an opt-in accelerator (garden's compiler already installs git hooks — precedent). |
37
+ | D6 | **DB stays codegraph-native: `<repo>/.codegraph/codegraph.db` (per-repo, gitignored).** Brain records a pointer + staleness, does not relocate it. | It is codegraph's stable, self-describing contract; consumers (wicked-patch `--db`) expect it; it travels with the repo. |
38
+
39
+ ---
40
+
41
+ ## 3. Target architecture
42
+
43
+ ```
44
+ codegraph CLI (peer, resolved via env→config→PATH→node_modules→npx)
45
+ │ index
46
+ ▼
47
+ <repo>/.codegraph/codegraph.db ── per-repo, gitignored, codegraph-native ──┐
48
+ ▲ │
49
+ │ inject │ read
50
+ ┌─────┴──────────────────────────────────────────────┐ │
51
+ │ brain BUILT-IN extractors (ship with brain): │ │
52
+ │ • bus producer→consumer (emit + _bus_consumers) │ │
53
+ │ • command→agent (subagent_type:) │ │
54
+ │ • hook event→script (hooks.json) │ │
55
+ │ • agent→tool (capability registry) │ │
56
+ │ brain DISCOVERED extractors (drop-in, optional): │ │
57
+ │ • garden: archetype→playbook/gate (archetypes.json)│ │
58
+ └──────────────────────────────────────────────────────┘ │
59
+ │
60
+ LSP servers ──live──▶ def/ref/hover/diagnostics ◀── SEPARATE LANE │
61
+ (not blast-radius) │
62
+ │
63
+ brain GRAPH QUERIES ◀───────────────────────────────────────────────────────┘
64
+ blast-radius · lineage · impact · callers · architecture
65
+ every answer carries a staleness stamp (N commits behind HEAD, indexed-at)
66
+
67
+ CONSUMERS:
68
+ • brain skill `wicked-brain-graph` (new) — the query surface
69
+ • garden wicked-patch (rename/add-field/remove) — consumes .codegraph.db as --db
70
+ • any other plugin
71
+ ```
72
+
73
+ ### 3.1 Component responsibilities
74
+
75
+ | Component | Home | Does | Depends on |
76
+ |---|---|---|---|
77
+ | codegraph engine | external peer (`@colbymchenry/codegraph`, MIT) | static multi-language graph, column-precise, SQLite | Node ≥ 22.5 |
78
+ | engine integration (resolve + run + staleness) | **brain** | resolution ladder, `index`, `impact`/`callers`, staleness stamp | codegraph peer |
79
+ | extractor framework + interface + discovery | **brain** | define interface, discover + run extractors | — |
80
+ | built-in extractors (bus / command→agent / hooks / capability) | **brain** | materialize ecosystem-convention edges | brain graph |
81
+ | `wicked-brain-graph` skill | **brain** | blast-radius / lineage / impact / callers / architecture | brain graph |
82
+ | LSP intelligence (`wicked-brain-lsp`) | **brain** | live def/ref/hover/diagnostics (blast-radius role removed) | language servers |
83
+ | archetype extractor (drop-in) | **garden** | materialize archetype→gate edges into brain's graph | brain extractor interface |
84
+ | wicked-patch (rename/add-field/remove) | **garden** | deterministic refactor; consumes `.codegraph.db` as `--db` | brain graph DB shape |
85
+
86
+ ---
87
+
88
+ ## 4. What moves / what stays
89
+
90
+ | Today (garden) | Disposition | Note |
91
+ |---|---|---|
92
+ | `scripts/_codegraph.py` (engine shim, staleness) | **→ brain** | **Cross-language re-home, not a file copy** — brain's server is Node; this is Python. Re-implemented in brain's runtime. The resolution-ladder + staleness *semantics* port verbatim. |
93
+ | `scripts/codegraph/inject_edges.py` (bus) | **→ brain built-in extractor** | reads `_bus_consumers.json` + emit sites — a wicked-bus convention, not a garden internal |
94
+ | `scripts/codegraph/inject_dispatch_edges.py` (command→agent) | **→ brain built-in extractor** | `subagent_type:` is a Claude-Code plugin convention |
95
+ | `scripts/codegraph/inject_capability_edges.py` (agent→tool) | **→ brain built-in extractor** | capability registry — ecosystem-wide |
96
+ | `scripts/codegraph/_graph_nodes.py`, `inject_all.py` | **→ brain** | shared helpers + the orchestration entry |
97
+ | archetype→gate extractor (proprietary; future) | **garden ships as drop-in** | discovered by brain at runtime; brain works without it |
98
+ | `scripts/engineering/patch/{codegraph_db,patch}.py` | **stays garden** | repoint `--db` to `<repo>/.codegraph/codegraph.db`; a *doing* action |
99
+ | `commands/search/{blast-radius,lineage,hotspots,index}.md` | **thin aliases → brain skills, or removed** | the query surface is brain's now |
100
+ | `tests/codegraph/test_codegraph.py` | **engine/extractor tests → brain; garden keeps drop-in + patch-consumer tests** | |
101
+
102
+ ---
103
+
104
+ ## 5. Freshness & failure modes
105
+
106
+ ### 5.1 Freshness (D5)
107
+ - **Baseline (lazy + staleness-stamped):** brain stamps how far `.codegraph.db` is behind HEAD (commits-behind + indexed-at — the `staleness()` logic already in `_codegraph.py`). Reindex runs **on explicit demand** or **when a query finds the graph stale past a threshold**. Zero idle CPU.
108
+ - **Accelerator (opt-in, commit-driven):** a git `post-commit` / `pre-push` hook triggers reindex so the graph is commit-fresh. Off by default.
109
+ - **Explicitly NOT** watcher-driven full reindex — that is the failure class diagnosed on 2026-06-10.
110
+
111
+ ### 5.2 Failure modes (fail-closed, never vacuous)
112
+ | Condition | Behavior |
113
+ |---|---|
114
+ | codegraph unresolvable (no peer) | query returns `engine: "unavailable"` — **not** an empty/zero-edge graph that looks like a real answer |
115
+ | graph stale | answer is returned **with** a `stale: true, commits_behind: N` flag; caller decides |
116
+ | drop-in extractor absent | skipped silently — the standalone guarantee (D2) |
117
+ | shim subprocess error/timeout | surfaced as data (`{error: ...}`), never raises (R4) |
118
+
119
+ ---
120
+
121
+ ## 6. Testing & the standalone guarantee
122
+
123
+ - Engine resolver: resolution ladder (env → config → PATH → node_modules → npx) + the set-but-empty kill-switch.
124
+ - Staleness math: present/absent DB, commits-behind computation, fail-open on git errors.
125
+ - Each built-in extractor: deterministic edge materialization against a fixture repo (producer→consumer, command→agent, hooks, capability).
126
+ - Extractor-drop discovery: present (runs) vs absent (skipped, graph still valid).
127
+ - Query correctness: blast-radius / lineage over a known fixture graph with injected edges grep cannot see.
128
+ - **Standalone guarantee (the load-bearing test):** brain's graph module imports **nothing** from garden — enforced in CI (the inverse of the compiler's existing "emitted gate imports nothing from the garden" AST test). This is what keeps D2's one-way arrow from silently regressing.
129
+
130
+ ---
131
+
132
+ ## 7. Implementation decomposition
133
+
134
+ Two phases, sequenced — garden phase depends on brain having shipped the graph.
135
+
136
+ ### Phase 1 — `wicked-brain`
137
+ 1. Engine integration (resolve + `index` + `impact`/`callers` + staleness), Node-native.
138
+ 2. Extractor framework: interface + discovery dir + registry.
139
+ 3. Built-in extractors: bus, command→agent, hooks, capability.
140
+ 4. Graph query surface + new `wicked-brain-graph` skill (blast-radius / lineage / impact / callers / architecture).
141
+ 5. Remove blast-radius/architecture from `wicked-brain-lsp`'s advertised surface (keep live ops).
142
+ 6. Freshness: staleness stamp + opt-in commit hook.
143
+ 7. Standalone CI test (zero garden imports).
144
+
145
+ ### Phase 2 — `wicked-garden`
146
+ 1. Repoint wicked-patch (`codegraph_db.py` / `patch.py`) to brain's `.codegraph.db`.
147
+ 2. Ship the archetype extractor as a brain drop-in.
148
+ 3. Convert `search:{blast-radius,lineage,hotspots,index}` commands to thin aliases over brain skills, or remove.
149
+ 4. Delete the migrated `scripts/_codegraph.py` + `scripts/codegraph/*` from garden.
150
+ 5. **Amend ADR 0001** (record the inversion: graph → brain, not garden) — likely a new ADR 0004 superseding the relevant section.
151
+ 6. Update CLAUDE.md (storage/search sections) to point at brain for graph queries.
152
+
153
+ ---
154
+
155
+ ## 8. Out of scope (YAGNI)
156
+
157
+ - A unified LSP+codegraph graph or a query facade over both (D4 rejected B and C).
158
+ - Watcher-driven incremental reindex (D5 rejected B).
159
+ - Relocating the graph DB under brain's project dir (D6 — keep codegraph-native).
160
+ - Any general data-flow lineage layer beyond what codegraph + injected edges provide (deferred; was ADR 0001 roadmap step 5).
161
+
162
+ ---
163
+
164
+ ## 9. Related operational findings (non-blocking)
165
+
166
+ Surfaced while diagnosing why brain appeared "down" on 2026-06-10 (separate from this migration, tracked separately):
167
+ - **wicked-brain bug:** file-watcher polling fallback (after EMFILE) re-indexes unchanged files in a hot loop → ~40% CPU runaway. This spec's D5 ensures the *codegraph* reindex path cannot reproduce that class of bug, but the watcher bug itself is a brain-repo fix.
168
+ - **wicked-garden bug:** the brain reachability probe (`_brain_api` / `_check_search_staleness`, 2s timeout) collapses slow/down/errored/non-JSON into one "not reachable — start wicked-brain" message, mis-reporting an up-but-slow server. Dogfooding issue to be filed.