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,204 @@
1
+ ---
2
+ phase_relevance: ["design", "build"]
3
+ archetype_relevance: ["*"]
4
+ ---
5
+ # Component Design Patterns: Layered Pattern
6
+
7
+ ## Layered Pattern
8
+
9
+ ### Structure
10
+
11
+ ```
12
+ ┌─────────────────────────┐
13
+ │ Presentation Layer │ Controllers, Views, API
14
+ ├─────────────────────────┤
15
+ │ Application Layer │ Use Cases, Workflows
16
+ ├─────────────────────────┤
17
+ │ Domain Layer │ Business Logic, Entities
18
+ ├─────────────────────────┤
19
+ │ Infrastructure Layer │ Database, External Services
20
+ └─────────────────────────┘
21
+ ```
22
+
23
+ ### Example
24
+
25
+ ```typescript
26
+ // Presentation Layer (API Controller)
27
+ class UserController {
28
+ constructor(private userService: UserService) {}
29
+
30
+ async createUser(req: Request, res: Response) {
31
+ const result = await this.userService.createUser(req.body);
32
+ res.status(201).json(result);
33
+ }
34
+ }
35
+
36
+ // Application Layer (Service)
37
+ class UserService {
38
+ constructor(
39
+ private userRepo: UserRepository,
40
+ private emailService: EmailService
41
+ ) {}
42
+
43
+ async createUser(data: CreateUserDTO): Promise<User> {
44
+ // Application logic
45
+ const user = User.create(data);
46
+ await this.userRepo.save(user);
47
+ await this.emailService.sendWelcome(user.email);
48
+ return user;
49
+ }
50
+ }
51
+
52
+ // Domain Layer (Entity)
53
+ class User {
54
+ constructor(
55
+ public id: string,
56
+ public email: string,
57
+ public name: string
58
+ ) {
59
+ this.validate();
60
+ }
61
+
62
+ private validate() {
63
+ if (!this.email.includes('@')) {
64
+ throw new Error('Invalid email');
65
+ }
66
+ }
67
+
68
+ static create(data: { email: string; name: string }): User {
69
+ return new User(generateId(), data.email, data.name);
70
+ }
71
+ }
72
+
73
+ // Infrastructure Layer (Repository)
74
+ class PostgresUserRepository implements UserRepository {
75
+ async save(user: User): Promise<void> {
76
+ await db.query(
77
+ 'INSERT INTO users (id, email, name) VALUES ($1, $2, $3)',
78
+ [user.id, user.email, user.name]
79
+ );
80
+ }
81
+ }
82
+ ```
83
+
84
+ ### When to Use
85
+
86
+ - Traditional web applications
87
+ - Need clear separation of concerns
88
+ - Team familiar with MVC
89
+ - Moderate complexity
90
+
91
+ ### Trade-offs
92
+
93
+ **Pros**: Easy to understand, well-known pattern
94
+ **Cons**: Can become rigid, may lead to anemic models
95
+
96
+ ## Hexagonal (Ports & Adapters)
97
+
98
+ ### Structure
99
+
100
+ ```
101
+ ┌──────────────┐
102
+ │ REST API │ (Adapter)
103
+ └──────┬───────┘
104
+ │
105
+ ┌──────────▼──────────┐
106
+ │ Port (Interface) │
107
+ ├─────────────────────┤
108
+ │ │
109
+ │ Business Logic │
110
+ │ (Core Domain) │
111
+ │ │
112
+ ├─────────────────────┤
113
+ │ Port (Interface) │
114
+ └──────────┬──────────┘
115
+ │
116
+ ┌──────────┼──────────┐
117
+ │ │ │
118
+ ┌────▼───┐ ┌───▼────┐ ┌──▼────┐
119
+ │Postgres│ │ Redis │ │ S3 │ (Adapters)
120
+ └────────┘ └────────┘ └───────┘
121
+ ```
122
+
123
+ ### Example
124
+
125
+ ```typescript
126
+ // Port (Interface)
127
+ interface UserRepository {
128
+ save(user: User): Promise<void>;
129
+ findById(id: string): Promise<User | null>;
130
+ findByEmail(email: string): Promise<User | null>;
131
+ }
132
+
133
+ // Core Domain (Business Logic)
134
+ class UserService {
135
+ constructor(
136
+ private userRepo: UserRepository, // Depends on port, not adapter
137
+ private emailGateway: EmailGateway
138
+ ) {}
139
+
140
+ async registerUser(email: string, name: string): Promise<User> {
141
+ // Pure business logic
142
+ const existing = await this.userRepo.findByEmail(email);
143
+ if (existing) {
144
+ throw new Error('Email already registered');
145
+ }
146
+
147
+ const user = User.create(email, name);
148
+ await this.userRepo.save(user);
149
+ await this.emailGateway.sendWelcome(user.email);
150
+
151
+ return user;
152
+ }
153
+ }
154
+
155
+ // Adapter (Implementation)
156
+ class PostgresUserRepository implements UserRepository {
157
+ async save(user: User): Promise<void> {
158
+ await db.query('INSERT INTO users ...');
159
+ }
160
+
161
+ async findById(id: string): Promise<User | null> {
162
+ const row = await db.query('SELECT * FROM users WHERE id = $1', [id]);
163
+ return row ? User.fromRow(row) : null;
164
+ }
165
+
166
+ async findByEmail(email: string): Promise<User | null> {
167
+ const row = await db.query('SELECT * FROM users WHERE email = $1', [email]);
168
+ return row ? User.fromRow(row) : null;
169
+ }
170
+ }
171
+
172
+ // Another Adapter (for testing)
173
+ class InMemoryUserRepository implements UserRepository {
174
+ private users = new Map<string, User>();
175
+
176
+ async save(user: User): Promise<void> {
177
+ this.users.set(user.id, user);
178
+ }
179
+
180
+ async findById(id: string): Promise<User | null> {
181
+ return this.users.get(id) || null;
182
+ }
183
+
184
+ async findByEmail(email: string): Promise<User | null> {
185
+ for (const user of this.users.values()) {
186
+ if (user.email === email) return user;
187
+ }
188
+ return null;
189
+ }
190
+ }
191
+ ```
192
+
193
+ ### When to Use
194
+
195
+ - Need to isolate business logic
196
+ - Frequent technology changes
197
+ - Testing is critical
198
+ - Multiple interfaces (API, CLI, Worker)
199
+
200
+ ### Trade-offs
201
+
202
+ **Pros**: Highly testable, technology-agnostic core
203
+ **Cons**: More abstraction, may be overkill for simple apps
204
+
@@ -0,0 +1,229 @@
1
+ ---
2
+ phase_relevance: ["design", "build"]
3
+ archetype_relevance: ["*"]
4
+ ---
5
+ # Component Design Patterns: Plugin Architecture
6
+
7
+ ## Plugin Architecture
8
+
9
+ ### Structure
10
+
11
+ ```
12
+ ┌────────────────────────────┐
13
+ │ Core System │
14
+ │ (Minimal, Stable) │
15
+ └────────┬───────────────────┘
16
+ │
17
+ │ Plugin Interface
18
+ │
19
+ ┌────┼────┬────────┬──────┐
20
+ │ │ │ │ │
21
+ ┌───▼┐ ┌─▼──┐ ┌▼────┐ ┌▼────┐
22
+ │P1 │ │ P2 │ │ P3 │ │ P4 │
23
+ └────┘ └────┘ └─────┘ └─────┘
24
+ ```
25
+
26
+ ### Example
27
+
28
+ ```typescript
29
+ // Core System
30
+ interface Plugin {
31
+ name: string;
32
+ version: string;
33
+ init(app: Application): Promise<void>;
34
+ shutdown(): Promise<void>;
35
+ }
36
+
37
+ class PluginManager {
38
+ private plugins: Map<string, Plugin> = new Map();
39
+
40
+ async register(plugin: Plugin): Promise<void> {
41
+ if (this.plugins.has(plugin.name)) {
42
+ throw new Error(`Plugin ${plugin.name} already registered`);
43
+ }
44
+
45
+ await plugin.init(this.app);
46
+ this.plugins.set(plugin.name, plugin);
47
+ }
48
+
49
+ async unregister(name: string): Promise<void> {
50
+ const plugin = this.plugins.get(name);
51
+ if (!plugin) return;
52
+
53
+ await plugin.shutdown();
54
+ this.plugins.delete(name);
55
+ }
56
+
57
+ getPlugin(name: string): Plugin | undefined {
58
+ return this.plugins.get(name);
59
+ }
60
+ }
61
+
62
+ // Plugin Implementation
63
+ class AuthPlugin implements Plugin {
64
+ name = 'auth';
65
+ version = '1.0.0';
66
+
67
+ async init(app: Application): Promise<void> {
68
+ // Register routes
69
+ app.post('/auth/login', this.handleLogin);
70
+ app.post('/auth/logout', this.handleLogout);
71
+
72
+ // Register middleware
73
+ app.use(this.authMiddleware);
74
+ }
75
+
76
+ async shutdown(): Promise<void> {
77
+ // Cleanup
78
+ }
79
+
80
+ private handleLogin = async (req, res) => {
81
+ // Login logic
82
+ };
83
+
84
+ private handleLogout = async (req, res) => {
85
+ // Logout logic
86
+ };
87
+
88
+ private authMiddleware = async (req, res, next) => {
89
+ // Auth checking
90
+ next();
91
+ };
92
+ }
93
+
94
+ // Usage
95
+ const pluginManager = new PluginManager(app);
96
+ await pluginManager.register(new AuthPlugin());
97
+ await pluginManager.register(new PaymentPlugin());
98
+ await pluginManager.register(new NotificationPlugin());
99
+ ```
100
+
101
+ ### When to Use
102
+
103
+ - Extensibility is a key requirement
104
+ - Third-party extensions needed
105
+ - Feature sets vary by deployment
106
+ - Plugin marketplace desired
107
+
108
+ ### Trade-offs
109
+
110
+ **Pros**: Highly extensible, loose coupling
111
+ **Cons**: Plugin compatibility, security concerns
112
+
113
+ ## Repository Pattern
114
+
115
+ ### Structure
116
+
117
+ ```
118
+ ┌─────────────┐
119
+ │ Service │
120
+ └──────┬──────┘
121
+ │
122
+ │ Interface
123
+ │
124
+ ┌──────▼──────┐
125
+ │ Repository │ (Abstraction)
126
+ └──────┬──────┘
127
+ │
128
+ │ Implementation
129
+ │
130
+ ┌──────▼──────┐
131
+ │ Database │
132
+ └─────────────┘
133
+ ```
134
+
135
+ ### Example
136
+
137
+ ```typescript
138
+ // Repository Interface
139
+ interface UserRepository {
140
+ findById(id: string): Promise<User | null>;
141
+ findAll(filter?: UserFilter): Promise<User[]>;
142
+ save(user: User): Promise<void>;
143
+ delete(id: string): Promise<void>;
144
+ }
145
+
146
+ // Domain Entity
147
+ class User {
148
+ constructor(
149
+ public id: string,
150
+ public email: string,
151
+ public name: string,
152
+ public status: 'active' | 'inactive'
153
+ ) {}
154
+ }
155
+
156
+ // Repository Implementation
157
+ class PostgresUserRepository implements UserRepository {
158
+ constructor(private db: Database) {}
159
+
160
+ async findById(id: string): Promise<User | null> {
161
+ const row = await this.db.queryOne(
162
+ 'SELECT * FROM users WHERE id = $1',
163
+ [id]
164
+ );
165
+
166
+ return row ? this.mapToEntity(row) : null;
167
+ }
168
+
169
+ async findAll(filter?: UserFilter): Promise<User[]> {
170
+ const query = this.buildQuery(filter);
171
+ const rows = await this.db.query(query.sql, query.params);
172
+ return rows.map(row => this.mapToEntity(row));
173
+ }
174
+
175
+ async save(user: User): Promise<void> {
176
+ await this.db.query(
177
+ `INSERT INTO users (id, email, name, status)
178
+ VALUES ($1, $2, $3, $4)
179
+ ON CONFLICT (id) DO UPDATE
180
+ SET email = $2, name = $3, status = $4`,
181
+ [user.id, user.email, user.name, user.status]
182
+ );
183
+ }
184
+
185
+ async delete(id: string): Promise<void> {
186
+ await this.db.query('DELETE FROM users WHERE id = $1', [id]);
187
+ }
188
+
189
+ private mapToEntity(row: any): User {
190
+ return new User(row.id, row.email, row.name, row.status);
191
+ }
192
+
193
+ private buildQuery(filter?: UserFilter) {
194
+ // Query building logic
195
+ return { sql: '...', params: [] };
196
+ }
197
+ }
198
+
199
+ // Service using repository
200
+ class UserService {
201
+ constructor(private userRepo: UserRepository) {}
202
+
203
+ async getActiveUsers(): Promise<User[]> {
204
+ const users = await this.userRepo.findAll({ status: 'active' });
205
+ return users;
206
+ }
207
+
208
+ async activateUser(id: string): Promise<void> {
209
+ const user = await this.userRepo.findById(id);
210
+ if (!user) throw new Error('User not found');
211
+
212
+ user.status = 'active';
213
+ await this.userRepo.save(user);
214
+ }
215
+ }
216
+ ```
217
+
218
+ ### When to Use
219
+
220
+ - Need to abstract data access
221
+ - Multiple data sources possible
222
+ - Domain-driven design
223
+ - Testing with mock data
224
+
225
+ ### Trade-offs
226
+
227
+ **Pros**: Decouples business logic from data access
228
+ **Cons**: Additional abstraction layer
229
+
@@ -0,0 +1,194 @@
1
+ ---
2
+ name: unit-test-quality
3
+ description: |
4
+ Language- and framework-neutral guard against useless unit tests — the kind
5
+ that pass forever, never catch regressions, and inflate coverage without
6
+ protecting behavior. Provides two complementary thought-experiment filters
7
+ (execution + behavior), a pre-write self-check, a taxonomy of seven recurring
8
+ anti-patterns (tautological, assertion-free, implementation mirror, framework
9
+ retest, constant verification, sleep-coupled, exception-swallowing), and a
10
+ one-line decision rule per pattern.
11
+
12
+ Use when: writing or reviewing a unit test, auditing a suite with high
13
+ coverage but low confidence, or pairing a regression test with a bug fix.
14
+ status: stable
15
+ portability: portable
16
+ phase_relevance: ["design", "build"]
17
+ archetype_relevance: ["*"]
18
+ ---
19
+
20
+ # Unit Test Quality
21
+
22
+ A test you cannot break by changing the system under test (SUT) is not a test —
23
+ it is dead weight. This skill exists because suites grow faster than they shrink,
24
+ and "100% coverage" is no defense against a suite that asserts the wrong things.
25
+
26
+ ## Two complementary filters
27
+
28
+ No single mechanical filter catches every useless test — each anti-pattern
29
+ below has its own diagnostic. But two thought experiments catch the most common
30
+ cases and are language-neutral. Apply them in order; if either says "cut," you
31
+ are looking at a test that does not earn its keep.
32
+
33
+ ### Filter A — execution check
34
+
35
+ > **If I replace the body of the SUT with a force-fail (`throw` / `raise` / `panic` / equivalent), does the test still pass?**
36
+
37
+ - **Still passes** → the test never exercised the SUT at all. Cut it (it is pure coverage theater, see #2 assertion-free, #4 framework retest).
38
+ - **Now fails** → the test at least *invokes* the SUT. Move to Filter B.
39
+
40
+ ### Filter B — behavior check
41
+
42
+ > **If I replace the body of the SUT with a no-op stub returning sensible defaults (zero, null/None, empty collection, default-constructed value), does the test still pass?**
43
+
44
+ - **Still passes** → the test asserts nothing the SUT actually computes; the assertion would hold against an empty stub. Cut it (typically #5 constant verification or #4 framework retest).
45
+ - **Now fails** → the test depends on SUT-derived behavior. Likely worth keeping, but still apply the per-pattern rules below.
46
+
47
+ The filters are first-cut diagnostics — both can pass on #1 tautological (assertion mirrors mock input), #3 implementation mirror (assertion locks structure, not behavior), #6 sleep-coupled (timing flake is orthogonal), and #7 exception-swallowing (assertion-count guards are required regardless). Use the per-pattern decision rules below for those.
48
+
49
+ ## The seven useless-test anti-patterns
50
+
51
+ ### 1. Tautological — asserts what the mock was told to return
52
+
53
+ ```
54
+ when(repo.find(1)).thenReturn(user);
55
+ result = service.fetch(1);
56
+ assert(result == user); // Tests that the mock was wired correctly. The
57
+ // production fetch() could be `return repo.find(id)`
58
+ // OR `return repo.find(id).asJson().broken()` — this
59
+ // test cannot distinguish.
60
+ ```
61
+
62
+ **Decision rule:** if the assertion is about a value you handed to a mock, the
63
+ test asserts mock plumbing, not behavior. Replace with a contract assertion
64
+ (state changed, side-effect emitted, derived value computed).
65
+
66
+ ### 2. Assertion-free — "no exception thrown" is the only signal
67
+
68
+ ```
69
+ test("processes order", () => {
70
+ service.process(order); // No assertion. Coverage counter ticks.
71
+ });
72
+ ```
73
+
74
+ **Decision rule:** every test must contain a positive assertion against an
75
+ observable outcome. If the only thing the test proves is "this line executed",
76
+ delete it — coverage tools already prove that.
77
+
78
+ Variants to catch: `expect(x).toBeDefined()`, `expect(x).not.toBeNull()`,
79
+ `assert x is not None`, `assertNotNull(x)`. These are coverage assertions, not
80
+ behavior assertions.
81
+
82
+ ### 3. Implementation mirror — asserts the structure of the code, not its outcome
83
+
84
+ ```
85
+ expect(component.props).toEqual({a: 1, b: 2, c: 3, d: 4, e: 5});
86
+ ```
87
+
88
+ **Decision rule:** snapshot tests and full-object equals tests rot — they catch
89
+ *every* change, including refactors that preserve behavior. Assert the
90
+ *minimum* set of fields that prove the contract. If the test must update every
91
+ time the SUT is touched, the test is locking in implementation, not behavior.
92
+
93
+ ### 4. Framework retest — asserts that the framework still works
94
+
95
+ ```
96
+ test("ORM saves user", () => {
97
+ user = User.create({name: "x"});
98
+ assert(User.find(user.id).name == "x"); // Tests Rails / Django / Hibernate.
99
+ });
100
+ ```
101
+
102
+ **Decision rule:** the framework's test suite covers this. If your test would
103
+ also pass against an empty stub of *your* code, it is a framework test. Move
104
+ it to integration tests if the wiring is non-trivial; otherwise delete it.
105
+
106
+ ### 5. Constant verification — tests with no logic
107
+
108
+ ```
109
+ test("getter returns name", () => {
110
+ user = new User("alice");
111
+ expect(user.name).toBe("alice");
112
+ });
113
+ ```
114
+
115
+ **Decision rule:** if the SUT contains no branches, no transformations, no
116
+ side-effects, and no derivations, there is nothing to test. Generated getters,
117
+ data-class field access, and one-line returns of constants do not need unit
118
+ tests.
119
+
120
+ ### 6. Sleep-coupled — uses `sleep`, `setTimeout`, or wall-clock waits to "stabilize"
121
+
122
+ ```
123
+ service.startBackground();
124
+ sleep(500); // Hopes the background work finished.
125
+ expect(state).toBe("done");
126
+ ```
127
+
128
+ **Decision rule:** any test using a hardcoded delay is non-deterministic. Either
129
+ the test sometimes finishes before the SUT (false fail), sometimes finishes
130
+ exactly on the boundary (flake), or runs unnecessarily slowly (waste). Replace
131
+ with: a deterministic clock, an explicit completion signal, or a poll-with-timeout
132
+ over a real condition (not a sleep).
133
+
134
+ ### 7. Exception-swallowing — try/catch hides the failure
135
+
136
+ ```
137
+ test("handles bad input", () => {
138
+ try { service.process(null); } catch (e) { /* expected */ }
139
+ });
140
+ ```
141
+
142
+ **Decision rule:** assertions that depend on a `catch` block being entered must
143
+ *also* assert the catch was entered (`expect.assertions(N)` in Jest, `try…else` in
144
+ Python with a fail-the-test in `else`). A bare `catch` that swallows everything
145
+ makes the test pass even when the SUT fails to throw at all.
146
+
147
+ ## Pre-write self-check (use before adding a new test)
148
+
149
+ Run through these in order. Stop at the first "no" — that is the work to do
150
+ before writing the test.
151
+
152
+ 1. **What contract am I asserting?** State it in one sentence: input → expected
153
+ observable outcome. If you cannot, you are not yet ready to write the test.
154
+ 2. **Could this test pass against a broken SUT?** Mentally apply Filter A
155
+ (replace SUT body with a force-fail) and Filter B (replace SUT body with a
156
+ no-op default-returning stub). If the test passes either filter, stop and
157
+ reconsider what you are asserting.
158
+ 3. **Is the assertion about behavior or about plumbing?** Behavior: state
159
+ changed, value derived, event emitted, error raised with specific shape.
160
+ Plumbing: mock was called, function exists, framework worked.
161
+ 4. **Is there exactly one logical assertion?** Multiple assertions about the
162
+ same outcome are fine; multiple unrelated outcomes mean multiple tests.
163
+ 5. **Is the test deterministic without sleeps?** If it depends on timing,
164
+ reach for a fake clock or a completion signal, not a delay.
165
+ 6. **Will I have to update this test on every refactor?** If yes, it is asserting
166
+ implementation, not behavior. Narrow the assertion.
167
+ 7. **Does the test name describe the behavior?** "test_user_creation" is a
168
+ coverage label. "rejects user creation when email is missing" is a contract.
169
+
170
+ ## Reviewer rubric (use during PR review of new tests)
171
+
172
+ For each new test in the diff:
173
+
174
+ - Read the test name. Does it state a contract or a code path? Contract → continue. Code path → flag.
175
+ - Read the assertion(s). Are they against observable outcomes the SUT controls? Yes → continue. No → flag.
176
+ - Apply Filter A mentally. Would the test fail if the SUT body became a force-fail (throw/raise/panic)? Yes → continue. No → flag (#2 assertion-free or #4 framework retest).
177
+ - Apply Filter B mentally. Would the test fail if the SUT body became a no-op stub returning defaults? Yes → likely keep. No → flag (#5 constant verification or #4 framework retest).
178
+ - If the test uses a mock: does the assertion verify *interaction the SUT chose to make*, not *value the test handed in*? Verifies SUT decision → keep. Echoes test input → flag (#1 tautological — neither filter catches this; structural inspection only).
179
+ - If the test contains `sleep`, `setTimeout(..., N)`, `Thread.sleep`, `time.sleep`, `await delay`, or any wall-clock-based wait: flag (#6 sleep-coupled). Replace with fake timers / virtual clock, an explicit completion signal/promise, or a poll-with-timeout over a real condition — never with `setTimeout(..., 0)` (which is a macrotask, not deterministic).
180
+
181
+ ## What this skill does not cover
182
+
183
+ - **Integration / E2E tests** — different rules (real dependencies, slower feedback, broader contracts). Use the `integration` skill.
184
+ - **Property / fuzz testing** — requires its own taxonomy (shrinking, generators, invariants). Out of scope here.
185
+ - **Mutation testing** — verifies the *suite* catches bugs by mutating the SUT. Use the `mutation-test-engineer` agent for that audit; this skill prevents the bad tests in the first place.
186
+ - **Test runner / CI ergonomics** — flake quarantine, retry policy, parallel isolation. See the `flaky-test-hunter` agent.
187
+
188
+ ## Why this is one skill across all languages
189
+
190
+ The seven anti-patterns above show up in pytest, Jest, Vitest, JUnit, RSpec,
191
+ xUnit, Go's `testing`, Rust's `#[test]`, and every framework that has ever
192
+ shipped. The syntax differs; the failure mode is identical. Keeping the rules
193
+ language-neutral is what makes this skill durable — any new framework inherits
194
+ the same filters the day it is adopted.