wicked-garden 12.30.0 → 12.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/components.json +46 -4
- package/.claude-plugin/marketplace.json +1 -15
- package/.claude-plugin/plugin.json +4 -5
- package/.claude-plugin/specialist.json +1 -1
- package/.product/DES-001-technical-design.md +8 -7
- package/.product/RAID.md +4 -4
- package/.product/REQ-001-application-overview.md +2 -2
- package/.product/REQ-002-technology-constraints.md +3 -3
- package/.product/REQ-003-domain-model.md +1 -1
- package/CHANGELOG.md +65 -0
- package/CONTRIBUTING.md +19 -41
- package/ETHOS.md +3 -3
- package/README.md +39 -11
- package/WICKED_GARDEN_BUS_EVENTS.md +5 -3
- package/docs/README.md +5 -2
- package/docs/adr/0001-code-relationship-graph-engine.md +7 -1
- package/docs/adr/0002-major-cleanup-keep-cut.md +9 -3
- package/docs/adr/0003-peers-gate-required-layers-optin.md +10 -4
- package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +15 -1
- package/docs/adr/0005-code-graph-re-homes-to-wicked-estate.md +138 -0
- package/docs/adr/0006-qe-campaign-homes-into-the-four-planes.md +76 -0
- package/docs/adr/0007-retarget-inventory.md +167 -0
- package/docs/brain-chunk-format.md +9 -0
- package/docs/domains.md +4 -4
- package/docs/examples/qe-campaign-nightly.yml +136 -0
- package/docs/examples/qe-campaign-pr.yml +84 -0
- package/docs/extending.md +191 -0
- package/docs/getting-started.md +16 -15
- package/docs/outgov-per-turn.md +144 -0
- package/docs/plans/2026-06-08-wicked-loom-cutover.md +2 -0
- package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +2 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +2 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +2 -0
- package/docs/required-peers.md +64 -22
- package/docs/specs/2026-06-08-wicked-loom-extraction.md +2 -0
- package/docs/v11/archetypes.md +3 -3
- package/evidence/aw25-golden/README.md +80 -0
- package/evidence/aw25-golden/campaign-recon.aw25.json +53 -0
- package/evidence/aw25-golden/chain/00-daemon-ready.txt +43 -0
- package/evidence/aw25-golden/chain/01-ingest.txt +1 -0
- package/evidence/aw25-golden/chain/02-fanout-manifest.json +63 -0
- package/evidence/aw25-golden/chain/02-fanout-manifest.json.crew-payload.json +58 -0
- package/evidence/aw25-golden/chain/02-fanout.txt +6 -0
- package/evidence/aw25-golden/chain/03-enforcement-post.json +54 -0
- package/evidence/aw25-golden/chain/04-rules-recall.json +22 -0
- package/evidence/aw25-golden/chain/05-run-terminal.json +55 -0
- package/evidence/aw25-golden/chain/06-governance-claims.json +1 -0
- package/evidence/aw25-golden/chain/07-acceptance.json +1 -0
- package/evidence/aw25-golden/ruleset/aw25-golden.md +53 -0
- package/evidence/aw25-golden/ruleset/policies/POL-2500.json +11 -0
- package/evidence/aw25-golden/run.sh +244 -0
- package/evidence/th6-dod/00-daemon-ready-line.txt +1 -0
- package/evidence/th6-dod/01-acceptance-deny.jsonl +2 -0
- package/evidence/th6-dod/02-qe-run-1.json +15 -0
- package/evidence/th6-dod/03-qe-run-2.json +15 -0
- package/evidence/th6-dod/04-flake-history.json +27 -0
- package/evidence/th6-dod/05-manifest-run2.json +58 -0
- package/evidence/th6-dod/06-gate-pass.json +1 -0
- package/evidence/th6-dod/07-acceptance-satisfied.jsonl +2 -0
- package/evidence/th6-dod/08-host-run-terminal.json +13 -0
- package/evidence/th6-dod/09-acceptance-after-terminal.jsonl +2 -0
- package/evidence/th6-dod/10-verdicts-rows.json +16 -0
- package/evidence/th6-dod/README.md +62 -0
- package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/console.json +3 -0
- package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/manifest.json +113 -0
- package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/result.json +75 -0
- package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/steps.json +48 -0
- package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/th6-home-connected.png +0 -0
- package/evidence/th6-dod/qe-evidence-bundle-8d49b3fe/wire.json +80 -0
- package/hooks/hooks.json +1 -1
- package/hooks/scripts/bootstrap.py +129 -358
- package/hooks/scripts/notification.py +9 -1
- package/hooks/scripts/post_tool.py +11 -67
- package/hooks/scripts/pre_compact.py +18 -80
- package/hooks/scripts/pre_tool.py +12 -5
- package/hooks/scripts/prompt_submit.py +50 -122
- package/hooks/scripts/session_end.py +3 -3
- package/hooks/scripts/stop.py +100 -106
- package/hooks/scripts/subagent_lifecycle.py +12 -2
- package/hooks/scripts/task_completed.py +16 -15
- package/install.mjs +92 -9
- package/package.json +2 -2
- package/schemas/README.md +12 -0
- package/schemas/campaign-recon.schema.json +226 -0
- package/schemas/wicked-pack.schema.json +123 -0
- package/scripts/_bus.py +52 -5
- package/scripts/_bus_catalog_gen.py +2 -2
- package/scripts/_bus_consumers.json +2 -26
- package/scripts/_context_backend.py +471 -0
- package/scripts/_estate_client.py +794 -0
- package/scripts/_heavy_cadence.py +15 -73
- package/scripts/_integration_resolver.py +38 -91
- package/scripts/_pack_registry.py +672 -0
- package/scripts/_session.py +7 -15
- package/scripts/_validate_registry.py +37 -10
- package/scripts/compiler/phase0/wire_vault.py +26 -10
- package/scripts/crew/flow_compiler.py +7 -3
- package/scripts/crew/specialist_resolver.py +102 -7
- package/scripts/delivery/telemetry.py +14 -2
- package/scripts/domain/extract_loop.py +40 -0
- package/scripts/domain/validate_domain_model.py +7 -2
- package/scripts/engineering/patch/estate_db.py +345 -0
- package/scripts/engineering/patch/generators/__init__.py +1 -1
- package/scripts/engineering/patch/patch.py +18 -109
- package/scripts/engineering/patch/safety.py +6 -4
- package/scripts/jam/consensus.py +1 -1
- package/scripts/loom/compose.py +2 -2
- package/scripts/loom/manifest.py +28 -40
- package/scripts/loom/resolve.py +1 -1
- package/scripts/mem/__init__.py +0 -0
- package/scripts/mem/auto_memorize.py +494 -0
- package/scripts/mem/estate_memory.py +385 -0
- package/scripts/{_brain_ingest → mem}/session_fact_extractor.py +163 -6
- package/scripts/pack/__init__.py +0 -0
- package/scripts/pack/check.py +376 -0
- package/scripts/platform/guard_pipeline.py +158 -12
- package/scripts/qe/campaign_degradation.py +545 -0
- package/scripts/qe/campaign_dispatch.py +134 -0
- package/scripts/qe/campaign_intake.py +633 -0
- package/scripts/qe/campaign_plan.py +534 -0
- package/scripts/qe/lib/campaign-rerun.mjs +392 -0
- package/scripts/qe/lib/campaign-scoreboard.mjs +677 -0
- package/scripts/qe/lib/context-md-validator.mjs +137 -0
- package/scripts/qe/lib/exec-with-timeout.mjs +178 -0
- package/scripts/qe/lib/flake-policy.mjs +365 -0
- package/scripts/qe/lib/gate.mjs +687 -0
- package/scripts/qe/lib/vault-evidence.mjs +664 -0
- package/scripts/qe/runner/README.md +256 -0
- package/scripts/qe/runner/bin/qe-run.mjs +103 -0
- package/scripts/qe/runner/package.json +29 -0
- package/scripts/qe/runner/specs/s1-smoke.spec.json +61 -0
- package/scripts/qe/runner/specs/th6-acceptance-dod.spec.json +56 -0
- package/scripts/qe/runner/src/asserts.mjs +265 -0
- package/scripts/qe/runner/src/evidence.mjs +348 -0
- package/scripts/qe/runner/src/index.mjs +21 -0
- package/scripts/qe/runner/src/lint.mjs +192 -0
- package/scripts/qe/runner/src/redact.mjs +163 -0
- package/scripts/qe/runner/src/runner.mjs +215 -0
- package/scripts/qe/runner/src/spec.mjs +119 -0
- package/scripts/qe/runner/src/wire-capture.mjs +91 -0
- package/scripts/qe/runner/test/asserts.test.mjs +81 -0
- package/scripts/qe/runner/test/campaign-rerun.test.mjs +268 -0
- package/scripts/qe/runner/test/evidence-redaction.test.mjs +168 -0
- package/scripts/qe/runner/test/fixture-ns.test.mjs +83 -0
- package/scripts/qe/runner/test/lint.test.mjs +121 -0
- package/scripts/qe/runner/test/redact.test.mjs +95 -0
- package/scripts/qe/runner/test/th17-vault-evidence.test.mjs +533 -0
- package/scripts/qe/runner/test/th21-flake-policy.test.mjs +226 -0
- package/scripts/qe/runner/test/th6-gate-wiring.test.mjs +292 -0
- package/scripts/qe/vault_gate.py +1 -1
- package/scripts/sentinel/invariants.py +25 -55
- package/scripts/smaht/adapters/brain_adapter.py +64 -78
- package/scripts/smaht/adapters/delegation_adapter.py +5 -5
- package/scripts/smaht/adapters/domain_adapter.py +1 -1
- package/scripts/smaht/adapters/events_adapter.py +1 -1
- package/scripts/smaht/context_package.py +15 -15
- package/scripts/where_am_i.py +2 -48
- package/skills/agentic-architect/SKILL.md +1 -1
- package/skills/agentic-performance-analyst/SKILL.md +1 -1
- package/skills/agentic-safety-reviewer/SKILL.md +6 -1
- package/skills/archetype/refs/build.md +1 -1
- package/skills/archetype/refs/incident.md +8 -7
- package/skills/archetype/refs/migrate.md +9 -7
- package/skills/archetype/refs/modernize.md +5 -4
- package/skills/archetype/refs/review.md +5 -5
- package/skills/archetype/refs/specify.md +3 -3
- package/skills/classify/SKILL.md +1 -1
- package/skills/core/SKILL.md +20 -15
- package/skills/core/refs/install.md +7 -9
- package/skills/core/refs/report-issue.md +1 -1
- package/skills/core/refs/setup.md +31 -62
- package/skills/data/refs/data.md +1 -1
- package/skills/data/refs/pipeline.md +2 -2
- package/skills/data-engineer/SKILL.md +2 -2
- package/skills/deliberate/refs/run-workflow.md +3 -3
- package/skills/domain/SKILL.md +55 -3
- package/skills/domain/vendor/README.md +37 -22
- package/skills/domain/vendor/VERSION +1 -1
- package/skills/domain-extractor/SKILL.md +4 -0
- package/skills/engineering/patch/SKILL.md +14 -4
- package/skills/engineering/refs/plan.md +1 -1
- package/skills/engineering/refs/review.md +1 -1
- package/skills/engineering-conformance-reviewer/SKILL.md +10 -4
- package/skills/engineering-migration-engineer/SKILL.md +1 -1
- package/skills/ground/SKILL.md +36 -36
- package/skills/integration-discovery/SKILL.md +3 -3
- package/skills/integration-discovery/refs/cli-detection.md +3 -3
- package/skills/integration-discovery/refs/discovery-sources.md +3 -3
- package/skills/integration-discovery/refs/task-patterns.md +10 -10
- package/skills/jam/SKILL.md +6 -6
- package/skills/jam/refs/quick.md +1 -1
- package/skills/jam/refs/revisit.md +8 -11
- package/skills/jam/refs/synthesis-patterns.md +1 -1
- package/skills/jam-brainstorm-facilitator/SKILL.md +11 -11
- package/skills/jam-council/SKILL.md +5 -5
- package/skills/mem/SKILL.md +144 -0
- package/skills/mem/refs/scopes.md +84 -0
- package/skills/mem-capture/SKILL.md +89 -0
- package/skills/mem-ingest/SKILL.md +131 -0
- package/skills/platform/audit/SKILL.md +2 -2
- package/skills/platform/compliance/SKILL.md +2 -2
- package/skills/platform/peer-health/SKILL.md +6 -6
- package/skills/platform-compliance-officer/SKILL.md +11 -2
- package/skills/platform-privacy-expert/SKILL.md +1 -1
- package/skills/platform-security-engineer/SKILL.md +14 -4
- package/skills/product/SKILL.md +4 -4
- package/skills/product/acceptance-criteria/SKILL.md +1 -1
- package/skills/product/listen/SKILL.md +2 -2
- package/skills/product/refs/acceptance.md +3 -3
- package/skills/product/refs/align.md +1 -1
- package/skills/product/refs/elicit.md +1 -1
- package/skills/product/refs/listen.md +1 -1
- package/skills/product/requirements-analysis/SKILL.md +2 -2
- package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +2 -2
- package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +3 -3
- package/skills/product/strategy/SKILL.md +3 -3
- package/skills/product/synthesize/SKILL.md +1 -1
- package/skills/product/ux-review/SKILL.md +1 -1
- package/skills/product-a11y-expert/SKILL.md +11 -2
- package/skills/product-requirements-analyst/SKILL.md +10 -2
- package/skills/product-ui-reviewer/SKILL.md +1 -1
- package/skills/product-ux-designer/SKILL.md +1 -1
- package/skills/product-value-strategist/SKILL.md +1 -1
- package/skills/qe/SKILL.md +200 -0
- package/skills/qe/refs/accept.md +476 -0
- package/skills/qe/refs/author.md +126 -0
- package/skills/qe/refs/campaign-ci.md +153 -0
- package/skills/qe/refs/campaign-degradation.md +129 -0
- package/skills/qe/refs/campaign-flake-policy.md +158 -0
- package/skills/qe/refs/campaign-grading.md +235 -0
- package/skills/qe/refs/campaign.md +274 -0
- package/skills/qe/refs/evidence.md +283 -0
- package/skills/qe/refs/execute.md +160 -0
- package/skills/qe/refs/insight.md +149 -0
- package/skills/qe/refs/intake.md +146 -0
- package/skills/qe/refs/integration.md +302 -0
- package/skills/qe/refs/plan.md +148 -0
- package/skills/qe/refs/review.md +147 -0
- package/skills/qe/refs/scenario-format.md +366 -0
- package/skills/qe/refs/setup.md +130 -0
- package/skills/qe-a11y-test-engineer/SKILL.md +259 -0
- package/skills/qe-acceptance-test-executor/SKILL.md +215 -0
- package/skills/qe-acceptance-test-reviewer/SKILL.md +224 -0
- package/skills/qe-acceptance-test-writer/SKILL.md +162 -0
- package/skills/qe-ai-feature-test-engineer/SKILL.md +383 -0
- package/skills/qe-chaos-test-engineer/SKILL.md +257 -0
- package/skills/qe-code-analyzer/SKILL.md +79 -0
- package/skills/qe-compliance-test-engineer/SKILL.md +271 -0
- package/skills/qe-contract-testing-engineer/SKILL.md +53 -0
- package/skills/qe-coverage-archaeologist/SKILL.md +52 -0
- package/skills/qe-data-quality-tester/SKILL.md +51 -0
- package/skills/qe-e2e-orchestrator/SKILL.md +51 -0
- package/skills/qe-exploratory-tester/SKILL.md +56 -0
- package/skills/qe-flaky-test-hunter/SKILL.md +267 -0
- package/skills/qe-fuzz-property-engineer/SKILL.md +58 -0
- package/skills/qe-iac-test-engineer/SKILL.md +247 -0
- package/skills/qe-incident-to-scenario-synthesizer/SKILL.md +288 -0
- package/skills/qe-integration-test-engineer/SKILL.md +46 -0
- package/skills/qe-load-performance-engineer/SKILL.md +59 -0
- package/skills/qe-localization-test-engineer/SKILL.md +49 -0
- package/skills/qe-mutation-test-engineer/SKILL.md +240 -0
- package/skills/qe-observability-test-engineer/SKILL.md +45 -0
- package/skills/qe-production-quality-engineer/SKILL.md +47 -0
- package/skills/qe-release-readiness-engineer/SKILL.md +240 -0
- package/skills/qe-requirements-quality-analyst/SKILL.md +56 -0
- package/skills/qe-risk-assessor/SKILL.md +48 -0
- package/skills/qe-scenario-executor/SKILL.md +185 -0
- package/skills/qe-security-test-engineer/SKILL.md +474 -0
- package/skills/qe-semantic-reviewer/SKILL.md +27 -1
- package/skills/qe-snapshot-hygiene-auditor/SKILL.md +274 -0
- package/skills/qe-test-automation-engineer/SKILL.md +66 -0
- package/skills/qe-test-code-quality-auditor/SKILL.md +299 -0
- package/skills/qe-test-data-manager/SKILL.md +58 -0
- package/skills/qe-test-designer/SKILL.md +83 -0
- package/skills/qe-test-impact-analyzer/SKILL.md +311 -0
- package/skills/qe-test-oracle/SKILL.md +177 -0
- package/skills/qe-test-strategist/SKILL.md +141 -0
- package/skills/qe-testability-reviewer/SKILL.md +49 -0
- package/skills/qe-ui-component-test-engineer/SKILL.md +48 -0
- package/skills/qe-visual-regression-engineer/SKILL.md +290 -0
- package/skills/search/SKILL.md +101 -89
- package/skills/search/codebase-narrator/SKILL.md +2 -2
- package/skills/search/refs/answer.md +66 -0
- package/skills/search/refs/hotspots.md +28 -43
- package/skills/search/refs/service-map.md +5 -11
- package/skills/smaht/SKILL.md +15 -14
- package/skills/smaht/intent/SKILL.md +2 -2
- package/skills/smaht/refs/briefing.md +1 -1
- package/skills/swarm/SKILL.md +1 -1
- package/skills/swarm/refs/receipts-and-evidence.md +1 -1
- package/skills/workflow/SKILL.md +14 -4
- package/skills/workflow/refs/integration.md +6 -6
- package/scripts/_brain_ingest/__init__.py +0 -2
- package/scripts/_brain_port.py +0 -163
- package/scripts/_wicked_testing_probe.py +0 -277
- package/scripts/engineering/patch/codegraph_db.py +0 -125
- package/scripts/smaht/_bus_consumers.py +0 -98
- package/skills/multi-model/SKILL.md +0 -43
- package/skills/multi-model/refs/aichat.md +0 -119
- package/skills/multi-model/refs/aider.md +0 -100
- package/skills/multi-model/refs/auditability.md +0 -238
- package/skills/multi-model/refs/codex.md +0 -169
- package/skills/multi-model/refs/context.md +0 -306
- package/skills/multi-model/refs/copilot.md +0 -161
- package/skills/multi-model/refs/examples.md +0 -224
- package/skills/multi-model/refs/gemini.md +0 -185
- package/skills/multi-model/refs/goose.md +0 -112
- package/skills/multi-model/refs/llm.md +0 -124
- package/skills/multi-model/refs/opencode.md +0 -196
- package/skills/multi-model/refs/orchestration.md +0 -188
- package/skills/multi-model/refs/pi.md +0 -208
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"_comment": "Issue #328: Component declarations for wicked-garden plugin. Claude Code plugin.json does not yet support inline component declarations beyond path overrides. This manifest documents all components for tooling, validation, and future schema support. When plugin.json gains a 'components' field, merge this data into plugin.json. The plugin is skills-only: former commands/ became actions of consolidated per-domain skills, and former agents/ became standalone context:fork worker skills (enumerated under fork_skills). Regenerate derived blocks with scripts/ci/sync_components.py.",
|
|
3
3
|
"domains": ["agentic", "crew", "data", "engineering", "jam", "mem", "persona", "platform", "product", "qe", "search", "smaht"],
|
|
4
4
|
"summary": {
|
|
5
|
-
"skills":
|
|
6
|
-
"fork_skills":
|
|
5
|
+
"skills": 141,
|
|
6
|
+
"fork_skills": 78,
|
|
7
7
|
"hooks": 13,
|
|
8
8
|
"specialists": 7
|
|
9
9
|
},
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
"jam": ["jam"],
|
|
36
36
|
"jam-brainstorm-facilitator": ["jam-brainstorm-facilitator"],
|
|
37
37
|
"jam-council": ["jam-council"],
|
|
38
|
-
"
|
|
38
|
+
"mem": ["mem"],
|
|
39
|
+
"mem-capture": ["mem-capture"],
|
|
40
|
+
"mem-ingest": ["mem-ingest"],
|
|
39
41
|
"persona": ["persona"],
|
|
40
42
|
"persona-agent": ["persona-agent"],
|
|
41
43
|
"platform": ["audit", "compliance", "errors", "gate-benchmark-rebaseline", "gh-cli", "github-actions", "gitlab-ci", "glab-cli", "health", "observability", "peer-health", "platform", "prereq-doctor"],
|
|
@@ -49,7 +51,47 @@
|
|
|
49
51
|
"product-ux-designer": ["product-ux-designer"],
|
|
50
52
|
"product-value-strategist": ["product-value-strategist"],
|
|
51
53
|
"prove": ["prove"],
|
|
54
|
+
"qe": ["qe"],
|
|
55
|
+
"qe-a11y-test-engineer": ["qe-a11y-test-engineer"],
|
|
56
|
+
"qe-acceptance-test-executor": ["qe-acceptance-test-executor"],
|
|
57
|
+
"qe-acceptance-test-reviewer": ["qe-acceptance-test-reviewer"],
|
|
58
|
+
"qe-acceptance-test-writer": ["qe-acceptance-test-writer"],
|
|
59
|
+
"qe-ai-feature-test-engineer": ["qe-ai-feature-test-engineer"],
|
|
60
|
+
"qe-chaos-test-engineer": ["qe-chaos-test-engineer"],
|
|
61
|
+
"qe-code-analyzer": ["qe-code-analyzer"],
|
|
62
|
+
"qe-compliance-test-engineer": ["qe-compliance-test-engineer"],
|
|
63
|
+
"qe-contract-testing-engineer": ["qe-contract-testing-engineer"],
|
|
64
|
+
"qe-coverage-archaeologist": ["qe-coverage-archaeologist"],
|
|
65
|
+
"qe-data-quality-tester": ["qe-data-quality-tester"],
|
|
66
|
+
"qe-e2e-orchestrator": ["qe-e2e-orchestrator"],
|
|
67
|
+
"qe-exploratory-tester": ["qe-exploratory-tester"],
|
|
68
|
+
"qe-flaky-test-hunter": ["qe-flaky-test-hunter"],
|
|
69
|
+
"qe-fuzz-property-engineer": ["qe-fuzz-property-engineer"],
|
|
70
|
+
"qe-iac-test-engineer": ["qe-iac-test-engineer"],
|
|
71
|
+
"qe-incident-to-scenario-synthesizer": ["qe-incident-to-scenario-synthesizer"],
|
|
72
|
+
"qe-integration-test-engineer": ["qe-integration-test-engineer"],
|
|
73
|
+
"qe-load-performance-engineer": ["qe-load-performance-engineer"],
|
|
74
|
+
"qe-localization-test-engineer": ["qe-localization-test-engineer"],
|
|
75
|
+
"qe-mutation-test-engineer": ["qe-mutation-test-engineer"],
|
|
76
|
+
"qe-observability-test-engineer": ["qe-observability-test-engineer"],
|
|
77
|
+
"qe-production-quality-engineer": ["qe-production-quality-engineer"],
|
|
78
|
+
"qe-release-readiness-engineer": ["qe-release-readiness-engineer"],
|
|
79
|
+
"qe-requirements-quality-analyst": ["qe-requirements-quality-analyst"],
|
|
80
|
+
"qe-risk-assessor": ["qe-risk-assessor"],
|
|
81
|
+
"qe-scenario-executor": ["qe-scenario-executor"],
|
|
82
|
+
"qe-security-test-engineer": ["qe-security-test-engineer"],
|
|
52
83
|
"qe-semantic-reviewer": ["qe-semantic-reviewer"],
|
|
84
|
+
"qe-snapshot-hygiene-auditor": ["qe-snapshot-hygiene-auditor"],
|
|
85
|
+
"qe-test-automation-engineer": ["qe-test-automation-engineer"],
|
|
86
|
+
"qe-test-code-quality-auditor": ["qe-test-code-quality-auditor"],
|
|
87
|
+
"qe-test-data-manager": ["qe-test-data-manager"],
|
|
88
|
+
"qe-test-designer": ["qe-test-designer"],
|
|
89
|
+
"qe-test-impact-analyzer": ["qe-test-impact-analyzer"],
|
|
90
|
+
"qe-test-oracle": ["qe-test-oracle"],
|
|
91
|
+
"qe-test-strategist": ["qe-test-strategist"],
|
|
92
|
+
"qe-testability-reviewer": ["qe-testability-reviewer"],
|
|
93
|
+
"qe-ui-component-test-engineer": ["qe-ui-component-test-engineer"],
|
|
94
|
+
"qe-visual-regression-engineer": ["qe-visual-regression-engineer"],
|
|
53
95
|
"runtime-exec": ["runtime-exec"],
|
|
54
96
|
"search": ["codebase-narrator", "search"],
|
|
55
97
|
"smaht": ["discovery", "intent", "propose-skills", "smaht"],
|
|
@@ -58,7 +100,7 @@
|
|
|
58
100
|
"workflow": ["workflow"],
|
|
59
101
|
"worktrees": ["worktrees"]
|
|
60
102
|
},
|
|
61
|
-
"fork_skills": ["wicked-garden-agentic-architect", "wicked-garden-agentic-performance-analyst", "wicked-garden-agentic-safety-reviewer", "wicked-garden-archetype", "wicked-garden-classify", "wicked-garden-crew-implementer", "wicked-garden-crew-researcher", "wicked-garden-crew-reviewer", "wicked-garden-data-engineer", "wicked-garden-domain-coverage", "wicked-garden-domain-extractor", "wicked-garden-domain-modeler", "wicked-garden-engineering-api-documentarian", "wicked-garden-engineering-conformance-reviewer", "wicked-garden-engineering-debugging", "wicked-garden-engineering-migration-engineer", "wicked-garden-engineering-solution-architect", "wicked-garden-ground", "wicked-garden-integration-discovery", "wicked-garden-jam-brainstorm-facilitator", "wicked-garden-jam-council", "wicked-garden-
|
|
103
|
+
"fork_skills": ["wicked-garden-agentic-architect", "wicked-garden-agentic-performance-analyst", "wicked-garden-agentic-safety-reviewer", "wicked-garden-archetype", "wicked-garden-classify", "wicked-garden-crew-implementer", "wicked-garden-crew-researcher", "wicked-garden-crew-reviewer", "wicked-garden-data-engineer", "wicked-garden-domain-coverage", "wicked-garden-domain-extractor", "wicked-garden-domain-modeler", "wicked-garden-engineering-api-documentarian", "wicked-garden-engineering-conformance-reviewer", "wicked-garden-engineering-debugging", "wicked-garden-engineering-migration-engineer", "wicked-garden-engineering-solution-architect", "wicked-garden-ground", "wicked-garden-integration-discovery", "wicked-garden-jam-brainstorm-facilitator", "wicked-garden-jam-council", "wicked-garden-mem-capture", "wicked-garden-mem-ingest", "wicked-garden-persona-agent", "wicked-garden-platform-compliance-officer", "wicked-garden-platform-privacy-expert", "wicked-garden-platform-security-engineer", "wicked-garden-product-a11y-expert", "wicked-garden-product-requirements-analyst", "wicked-garden-product-ui-reviewer", "wicked-garden-product-ux-designer", "wicked-garden-product-value-strategist", "wicked-garden-qe-a11y-test-engineer", "wicked-garden-qe-acceptance-test-executor", "wicked-garden-qe-acceptance-test-reviewer", "wicked-garden-qe-acceptance-test-writer", "wicked-garden-qe-ai-feature-test-engineer", "wicked-garden-qe-chaos-test-engineer", "wicked-garden-qe-code-analyzer", "wicked-garden-qe-compliance-test-engineer", "wicked-garden-qe-contract-testing-engineer", "wicked-garden-qe-coverage-archaeologist", "wicked-garden-qe-data-quality-tester", "wicked-garden-qe-e2e-orchestrator", "wicked-garden-qe-exploratory-tester", "wicked-garden-qe-flaky-test-hunter", "wicked-garden-qe-fuzz-property-engineer", "wicked-garden-qe-iac-test-engineer", "wicked-garden-qe-incident-to-scenario-synthesizer", "wicked-garden-qe-integration-test-engineer", "wicked-garden-qe-load-performance-engineer", "wicked-garden-qe-localization-test-engineer", "wicked-garden-qe-mutation-test-engineer", "wicked-garden-qe-observability-test-engineer", "wicked-garden-qe-production-quality-engineer", "wicked-garden-qe-release-readiness-engineer", "wicked-garden-qe-requirements-quality-analyst", "wicked-garden-qe-risk-assessor", "wicked-garden-qe-scenario-executor", "wicked-garden-qe-security-test-engineer", "wicked-garden-qe-semantic-reviewer", "wicked-garden-qe-snapshot-hygiene-auditor", "wicked-garden-qe-test-automation-engineer", "wicked-garden-qe-test-code-quality-auditor", "wicked-garden-qe-test-data-manager", "wicked-garden-qe-test-designer", "wicked-garden-qe-test-impact-analyzer", "wicked-garden-qe-test-oracle", "wicked-garden-qe-test-strategist", "wicked-garden-qe-testability-reviewer", "wicked-garden-qe-ui-component-test-engineer", "wicked-garden-qe-visual-regression-engineer", "wicked-garden-runtime-exec", "wicked-garden-smaht", "wicked-garden-swarm", "wicked-garden-wickedizer", "wicked-garden-workflow", "wicked-garden-worktrees"],
|
|
62
104
|
"hooks": ["SessionStart", "UserPromptSubmit", "PreToolUse", "PostToolUse", "PostToolUseFailure", "TaskCompleted", "SubagentStart", "SubagentStop", "PermissionRequest", "Notification", "PreCompact", "Stop", "SessionEnd"],
|
|
63
105
|
"specialists": [
|
|
64
106
|
{
|
|
@@ -1,15 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "wicked-garden",
|
|
3
|
-
"owner": {
|
|
4
|
-
"name": "Mike Parcewski"
|
|
5
|
-
},
|
|
6
|
-
"plugins": [
|
|
7
|
-
{
|
|
8
|
-
"name": "wicked-garden",
|
|
9
|
-
"source": "./",
|
|
10
|
-
"description": "Your coding agent already plans and swarms \u2014 Wicked Garden is the curated toolkit for what it can't: proof-not-claims gates, code links grep can't see, deterministic refactor, cross-session memory, real multi-model second opinions. Don't fight the harness; fill its gaps. The gate needs wicked-vault (auto-installed via wicked-testing) and re-derives through garden's built-in engine; testing/brain/bus are opt-in layers.",
|
|
11
|
-
"version": "12.30.0"
|
|
12
|
-
}
|
|
13
|
-
],
|
|
14
|
-
"version": "12.30.0"
|
|
15
|
-
}
|
|
1
|
+
{"name": "wicked-garden", "owner": {"name": "Mike Parcewski"}, "plugins": [{"name": "wicked-garden", "source": "./", "description": "Your coding agent already plans and swarms \u2014 Wicked Garden is the curated toolkit for what it can't: proof-not-claims gates, code links grep can't see, deterministic refactor, cross-session memory, real multi-model second opinions. Don't fight the harness; fill its gaps. The gate needs wicked-vault (a self-contained infra peer, installed directly) and re-derives through garden's built-in engine; estate/bus are opt-in layers (wicked-testing and wicked-brain are retired \u2014 QE ships in-catalog as the qe domain, memory lives in wicked-estate).", "version": "12.32.0"}], "version": "12.32.0"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wicked-garden",
|
|
3
|
-
"version": "12.
|
|
4
|
-
"description": "Your coding agent's harness already plans and swarms; Wicked Garden is the curated toolkit for what it can't do alone. Proof, not claims \u2014 gates re-derive 'done' through the internal loom engine (fail-closed, independently attested via wicked-vault), so a self-asserted pass can't lie its way green. Relationships grep can't see \u2014
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"wicked_brain_version": "^0.18.0",
|
|
3
|
+
"version": "12.32.0",
|
|
4
|
+
"description": "Your coding agent's harness already plans and swarms; Wicked Garden is the curated toolkit for what it can't do alone. Proof, not claims \u2014 gates re-derive 'done' through the internal loom engine (fail-closed, independently attested via wicked-vault), so a self-asserted pass can't lie its way green. Relationships grep can't see \u2014 the wicked-estate code graph + injected bus/dispatch/capability/archetype edges power blast-radius & lineage. Plus deterministic multi-file refactor (wicked-patch), cross-session memory + knowledge (the mem domain over wicked-estate), real multi-model second opinions (jam:council), portable expertise as on-demand skill-refs, and evidence-gated testing (the in-catalog qe domain). It reads the shape of your work to apply the right rigor \u2014 steering, not a pipeline \u2014 then gets out of the way. The compiler stamps a self-contained evidence gate into any repo that runs with no wicked-garden installed. Don't fight the harness; fill its gaps. The evidence gate requires wicked-vault, a self-contained infra peer wicked-garden installs directly; wicked-bus is an opt-in layer \u2014 install what you'll use, the toolkit works without the rest.",
|
|
5
|
+
"wicked_vault_version": "^0.5.0",
|
|
6
|
+
"wicked_ledger_version": "^0.4.0",
|
|
8
7
|
"wicked_bus_version": "^2.0.0",
|
|
9
8
|
"author": {
|
|
10
9
|
"name": "Mike Parcewski",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
{
|
|
24
24
|
"name": "qe",
|
|
25
25
|
"role": "quality-engineering",
|
|
26
|
-
"description": "Quality Engineering specialist
|
|
26
|
+
"description": "Quality Engineering specialist — in-catalog qe domain (Phase 6b). Crew dispatches QE workers by their wicked-garden-qe-* skill names (router: wicked-garden-qe). Covers test strategy, scenario generation, testability review, semantic alignment, risk assessment, test automation, evidence-gated acceptance testing, and shift-left quality practices.",
|
|
27
27
|
"enhances": ["clarify", "design", "qe", "build", "review", "operate", "*"]
|
|
28
28
|
},
|
|
29
29
|
{
|
|
@@ -182,9 +182,10 @@ wicked-patch is the deterministic multi-file transformation engine. It is expose
|
|
|
182
182
|
|
|
183
183
|
```
|
|
184
184
|
Developer invokes patch action: /wicked-garden-engineering patch-plan OldName
|
|
185
|
-
→ engineering-patch skill reads
|
|
186
|
-
|
|
187
|
-
|
|
185
|
+
→ engineering-patch skill reads the wicked-estate graph (ADR 0005):
|
|
186
|
+
built by `wicked-estate index` (75-language tree-sitter, in-binary),
|
|
187
|
+
adapted to the patch schema via estate_db.py (.codegraph/estate.db)
|
|
188
|
+
+ injected edges (bus producer→consumer, dispatch, capability, archetype)
|
|
188
189
|
→ computes full affected file set:
|
|
189
190
|
direct references (grep-visible)
|
|
190
191
|
+ injected-edge references (not grep-visible)
|
|
@@ -203,7 +204,7 @@ Developer invokes apply: /wicked-garden-engineering apply <patch-file>
|
|
|
203
204
|
|
|
204
205
|
New language support: `/wicked-garden-engineering new-generator` creates a generator for an additional language. Generators implement a documented interface; adding one requires no change to the patch core.
|
|
205
206
|
|
|
206
|
-
wicked-patch and wicked-
|
|
207
|
+
wicked-patch and the `wicked-garden-search` actions read the same wicked-estate graph. The `wicked-garden-search index` action (`wicked-estate index <path>`) refreshes the static graph and re-applies the injected-edge rules in one pass (ADR 0005).
|
|
207
208
|
|
|
208
209
|
---
|
|
209
210
|
|
|
@@ -254,9 +255,9 @@ Per-session ephemeral shared state. Not persisted across process restarts. Used
|
|
|
254
255
|
|
|
255
256
|
wicked-bus integration. Emits events in 4-segment format (`wicked.<domain>.<noun>.<past-tense-verb>`). The bus provides at-least-once delivery, append-only event records, and FTS5 search via the wicked-bus backing store.
|
|
256
257
|
|
|
257
|
-
###
|
|
258
|
+
### estate graph
|
|
258
259
|
|
|
259
|
-
Structural code graph built and maintained by wicked-
|
|
260
|
+
Structural code graph built and maintained by wicked-estate (`wicked-estate index <path>`; DB at `.wicked-estate/graph.db` by default, patch adapter DB at `.codegraph/estate.db`). Includes garden's injected archetype edges via `.wicked-estate-extractors/archetype.toml`. Consumed by wicked-patch and the search skill's actions. The `search:index` action refreshes it (ADR 0005).
|
|
260
261
|
|
|
261
262
|
---
|
|
262
263
|
|
|
@@ -304,6 +305,6 @@ Skills check for daemon availability before dispatching to it. If the daemon is
|
|
|
304
305
|
| wicked-testing | `scripts/qe/` (acceptance pipeline) | Installed peer; invoked by acceptance skills |
|
|
305
306
|
| wicked-brain | `scripts/crew/`, search/smaht skills | Brain server on port 4243; auto-starts on skill invocation |
|
|
306
307
|
| wicked-bus | `scripts/_bus.py` | Installed peer; event emit/consume |
|
|
307
|
-
|
|
|
308
|
+
| wicked-estate | `wicked-estate index` / estate MCP tools | `WICKED_ESTATE_BIN` env → PATH → `~/.local/bin`; consumed by search + patch skills |
|
|
308
309
|
|
|
309
310
|
All peers degrade gracefully on absence — except the evidence gate, which fails closed when vault or loom is unreachable. A transient peer outage never invents a pass.
|
package/.product/RAID.md
CHANGED
|
@@ -16,7 +16,7 @@ review-required: true
|
|
|
16
16
|
|----|------|-----------|--------|------------|
|
|
17
17
|
| RISK-001 | Archetype detection accuracy degrades for ambiguous or very short prompts | Medium | Medium | Detector returns confidence score; low-confidence prompts prompt for clarification. Multi-archetype output handles mixed-intent work. |
|
|
18
18
|
| RISK-002 | wicked-loom/wicked-vault peer absent → evidence gate fails closed | High (setup) | Low (expected) | Failing closed is the intended behavior. `/wg-check` validates peers at setup; setup skill guides installation. |
|
|
19
|
-
| RISK-003 |
|
|
19
|
+
| RISK-003 | wicked-estate graph not built → blast-radius/lineage/wicked-patch unavailable | High (optional) | Medium | wicked-estate is explicitly opt-in; skills degrade gracefully to text-search when the graph is absent (and flag that injected relationships are missing). |
|
|
20
20
|
| RISK-004 | Plugin not loaded in `claude -p` non-interactive mode | Medium | High | Documented mitigation: user must add `--plugin-dir` via clis.toml override (garden#994 resolution). Long-term fix: persistent worker sessions (core#13). |
|
|
21
21
|
| RISK-005 | Council seat (Antigravity/Codex) unavailable or returns garbage | Medium | Low | Council aggregation tolerates partial failures; the skill surfaces which seats failed. |
|
|
22
22
|
| RISK-006 | Hook scripts fail on Windows without correct Python fallback | Low | High | All scripts use cross-platform patterns (tempfile.gettempdir, python fallback chain). CI must include Windows runner. |
|
|
@@ -30,7 +30,7 @@ review-required: true
|
|
|
30
30
|
|----|-----------|
|
|
31
31
|
| ASS-001 | The host harness (Claude Code, Codex, Cursor, …) handles all planning, parallelism, and LLM calls. wicked-garden does not re-implement harness capabilities. |
|
|
32
32
|
| ASS-002 | Users install the required peers (`wicked-testing`/`wicked-vault`, `wicked-loom`) before using the evidence gate. The setup skill validates this. |
|
|
33
|
-
| ASS-003 | The
|
|
33
|
+
| ASS-003 | The wicked-estate graph (`wicked-estate index <path>`) is built and up-to-date when blast-radius/lineage/wicked-patch are used. |
|
|
34
34
|
| ASS-004 | Harness plugins are loaded in interactive mode; non-interactive (`claude -p`) mode requires explicit plugin-dir configuration. |
|
|
35
35
|
| ASS-005 | The `WICKED_VAULT_ACTOR` environment variable is set to a meaningful, stable actor identity for hard-gate evidence recording (not OS `$USER`). |
|
|
36
36
|
| ASS-006 | wicked-bus is optional; garden emits events fail-open when bus is unavailable. |
|
|
@@ -55,8 +55,8 @@ review-required: true
|
|
|
55
55
|
| wicked-vault ≥ 0.4.0 | Runtime | Yes (for evidence gate) | Evidence backend. `0.4.0` introduced fail-closed `attest` on weak identity. |
|
|
56
56
|
| wicked-loom | Runtime | Yes (for evidence gate) | Gate/resolve engine. Resolved via `WICKED_LOOM_BIN` → config → PATH → `npx`. |
|
|
57
57
|
| wicked-testing | Runtime | Yes (for acceptance) | The acceptance pipeline is the standard gate mechanism. |
|
|
58
|
-
| wicked-brain | Runtime | Optional | Cross-session memory +
|
|
58
|
+
| wicked-brain | Runtime | Optional | Cross-session memory + semantic search. |
|
|
59
59
|
| wicked-bus | Runtime | Optional | Event audit trail. Garden emits events fail-open without it. |
|
|
60
|
-
|
|
|
60
|
+
| wicked-estate | Runtime | Optional | Code-graph owner (ADR 0005): `wicked-estate index` + MCP tools. Powers blast-radius/lineage/hotspots/wicked-patch. Resolved via `WICKED_ESTATE_BIN` → PATH → `~/.local/bin`. |
|
|
61
61
|
| Python ≥ 3.9 | Runtime | Yes | Required for all hook scripts and CLI tools. |
|
|
62
62
|
| node.js ≥ 18 | Runtime | Yes | Required for npm peer installs and wicked-vault/loom. |
|
|
@@ -15,7 +15,7 @@ review-required: true
|
|
|
15
15
|
wicked-garden is a Claude Code plugin (v12.28.1) that fills the gaps modern coding-agent harnesses cannot close alone. The premise is direct: harnesses — Claude Code, Codex, Cursor, Aider, OpenCode, Zed/ACP, and others — already plan, parallelize, and execute well. wicked-garden does not compete with that; it adds only what a planner-executor genuinely cannot do on its own:
|
|
16
16
|
|
|
17
17
|
- **Evidence-gated done** — re-derives "done" from recorded evidence via the internal loom engine and wicked-vault; a self-asserted "tests pass" cannot lie its way green.
|
|
18
|
-
- **Relationships grep cannot see** —
|
|
18
|
+
- **Relationships grep cannot see** — the wicked-estate code graph + injected event-bus/dispatch/capability/archetype edges power blast-radius and lineage analysis (ADR 0005).
|
|
19
19
|
- **Deterministic multi-file refactor** — wicked-patch applies graph-driven renames and field additions across an entire codebase without leaving silent half-applied states.
|
|
20
20
|
- **Cross-session memory** — wicked-brain persists decisions, patterns, and gotchas across sessions; knowledge that only lives in chat history does not exist.
|
|
21
21
|
- **Real multi-model second opinions** — the jam:council skill convenes external LLM CLIs (Claude Code, Antigravity, Codex, local models) for independent evaluation; it is not the model talking to itself.
|
|
@@ -86,7 +86,7 @@ The plugin installs via `/plugin install wicked-garden` into any Claude Code ses
|
|
|
86
86
|
|
|
87
87
|
1. A developer needs to rename a domain type across a large codebase — source files, tests, migration files, configuration, and documentation.
|
|
88
88
|
2. They invoke the patch skill: `/wicked-garden-engineering rename OldName NewName`.
|
|
89
|
-
3. The `wicked-garden-engineering-patch` nested skill reads the
|
|
89
|
+
3. The `wicked-garden-engineering-patch` nested skill reads the wicked-estate graph (built by `wicked-estate index`, adapted via `scripts/engineering/patch/estate_db.py`), identifies all nodes referencing `OldName`, and computes the full set of affected files including injected edges (bus producer→consumer, dispatch links) that grep cannot see.
|
|
90
90
|
4. The skill shows the patch plan (files affected, kinds of change, risk surface). The developer approves or scopes the change.
|
|
91
91
|
5. On approval, the patch applies deterministically using the language-specific generator for each file type. Generators exist out of the box for Python, TypeScript, Java, Go, SQL, Rust, Kotlin, C#, PHP, and Ruby. A `new-generator` action lets contributors add additional languages.
|
|
92
92
|
6. The result is a complete, consistent rename across every file that references the symbol — including the relationships grep cannot see.
|
|
@@ -42,10 +42,10 @@ Three additional peers are opt-in:
|
|
|
42
42
|
| Peer | npm Package | Required Version | Role |
|
|
43
43
|
|------|-------------|-----------------|------|
|
|
44
44
|
| wicked-testing | `wicked-testing` | `^0.8.0` | Acceptance testing gate; also installs wicked-vault as a transitive dependency |
|
|
45
|
-
| wicked-brain | `wicked-brain` | `^0.18.0` | Cross-session memory, code graph,
|
|
45
|
+
| wicked-brain | `wicked-brain` | `^0.18.0` | Cross-session memory, semantic search (the code graph moved to wicked-estate, ADR 0005) |
|
|
46
46
|
| wicked-bus | `wicked-bus` | `^2.0.0` | Event audit trail, append-only event store, FTS5 search |
|
|
47
47
|
|
|
48
|
-
wicked-understanding (repo playbooks from HEAD) and
|
|
48
|
+
wicked-understanding (repo playbooks from HEAD) and wicked-estate (structural code intelligence — the code graph, ADR 0005) are additional optional integrations.
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
@@ -57,7 +57,7 @@ wicked-understanding (repo playbooks from HEAD) and codegraph (structural code i
|
|
|
57
57
|
|
|
58
58
|
**SessionState** (`scripts/_session.py`) — per-session ephemeral shared state. Does not persist across process restarts.
|
|
59
59
|
|
|
60
|
-
**
|
|
60
|
+
**estate graph** — wicked-estate builds and maintains the structural code graph (`wicked-estate index <path>`, DB at `.wicked-estate/graph.db` by default; the patch adapter materializes `.codegraph/estate.db`). wicked-patch consumes it for multi-file refactor operations (ADR 0005).
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
@@ -184,7 +184,7 @@ Compiler
|
|
|
184
184
|
→ emitted gate resolves wicked-vault via npx (no wicked-garden runtime required)
|
|
185
185
|
|
|
186
186
|
wicked-patch
|
|
187
|
-
→ reads
|
|
187
|
+
→ reads the wicked-estate graph (structural graph + injected edges, ADR 0005)
|
|
188
188
|
→ computes affected file set (including injected edges grep cannot see)
|
|
189
189
|
→ applies language-specific generator per file
|
|
190
190
|
→ produces deterministic multi-file change
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,71 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
### Added
|
|
6
|
+
- **AW-25 golden path — the wiki pipeline's own evidence-gated proof (recon arch-R21).** The guardrails program now applies its own DoD to itself: a committed, re-runnable acceptance scenario proves seed doc → `wicked-core rules ingest`/`fanout` (isolated stores; enforcement over the crew API, never CLI against a daemon store) → `rules.recall` over the **installed** `wicked-estate-mcp` 0.15.1 returning the rule with its digest-bearing provenance citation → an ISOLATED crew daemon's governed run deterministically tripping the canary trigger (the token rides the run INTENT, so the gate's evaluated context matches with no reliance on the worker model) → the gate denial citing the rule id + wiki URI (`POL-2500`, `wiki://aw25-golden#POL-2500` — via policy criteria AND `conform:` obligations, two independent citation paths) → the ConformanceClaim visible in `GET /runs/:id/acceptance` (deny-dominates, `guardrailed: false`). Ships as `scenarios/qe/aw25-golden-path.md` (scenario-format v1.1, category cli, isolation exclusive), `evidence/aw25-golden/` (seed ruleset with doc↔gate id-twinned `POL-2500`, `run.sh` fail-loud chain script, `campaign-recon.aw25.json` — spec-2 schema-validated plan with a machinery-verified claim ceiling, and the recorded `chain/` evidence 00–07 from a real run), plus `tests/qe/test_aw25_golden_artifacts.py` pinning the artifacts (schema validity, id-twinning, the AC-critical citation assertions in run.sh) hermetically. Evaluator≠creator: the verdict of record is crew's acceptance read, captured verbatim. Findings recorded in the evidence README: the <200-char PHASE SUBSTANCE GATE rejects a too-terse canary BEFORE any claim is recorded (first trip hit exactly this), and the ACP carrier reports `enforcement: enforced` with an empty `armedUnits` list.
|
|
7
|
+
- **Flaky-verdict policy at the campaign acceptance gate (TH-21, ADR 0006 — RECON-TEST-HARNESS test-R23).** One flaky scenario can no longer silently deny OR silently pass a nightly campaign, and exclusions always carry reasons. New written policy `skills/qe/refs/campaign-flake-policy.md` + pure policy engine `scripts/qe/lib/flake-policy.mjs`, applied by `campaign-scoreboard.mjs` on every assembly: (a) **bounded diagnostic re-runs with BOTH verdicts recorded** — a re-run lands as its own runs+verdicts rows under the same stable scenario id (TH-6's flake history, now consumed at the gate via `flake_policy.history`); mixed outcomes are a `flake_signal` blocker naming `wicked-garden-qe-flaky-test-hunter` (never best-of-N), >1+2 runs of one rung is a `rerun_bound_exceeded` violation, and a `--runs` selection showing PASS while omitting a same-window deny-graded sibling is a `pass_laundering_risk` violation; (b) **quarantine lane with owner+deadline via the hunter's taxonomy** — the gate consumes the hunter's ledger `tasks` row fail-closed (`quarantined: true` + scenario binding + taxonomy cause + owner + unexpired `quarantine_expires`; invalid/expired records are reported and NOT honored — the scenario keeps denying); (c) **quarantined scenarios are excluded-with-reason** — rows stay on the scoreboard, the exclusion (id/cause/owner/deadline/reason/observed grades) rides `certification.excluded` + `certification.gate_summary`, and `gate.mjs --exclusions-from <scoreboard.json>` appends the canonical clause to `verdict_summary` so it reaches crew's acceptance payload (the 8-field `wicked.qe.gate.*` wire contract untouched; exclusions missing id/reason/owner/deadline exit 3). A fully-quarantined campaign cannot certify; a quarantined PASS is excluded too; structural violations are never excused. Hunter's SKILL.md §5/§6 now pin the machine contract (body gains required `owner`). Tests: `tests/qe/test_campaign_flake_policy.py` (9 CLI cases, hermetic) + `scripts/qe/runner/test/th21-flake-policy.test.mjs` (14 unit cases).
|
|
8
|
+
- **qe campaign grading through the accept trio (TH-10, ADR 0006).** New `skills/qe/refs/campaign-grading.md` playbook: campaign evidence bundles grade through the SAME role-isolated reviewer as `refs/accept.md` (evidence PATHS only; isolation hard-enforced on Claude Code via host-level `allowed-tools`, advisory on Gemini/Codex/Cursor/Kiro — the boundary is now written down in both refs), with validate-before-grading against wicked-ledger's evidence-manifest 2.1 contract (schema-fail = INCONCLUSIVE; validator unavailable = fail closed). New deterministic glue `scripts/qe/lib/campaign-scoreboard.mjs` assembles the campaign-proven verbatim scoreboard shape `{id, grade, executor_claim, evidence_ok}` and makes self-grading structurally impossible: verdict rows by executor identities (`qe-runner/executor-claim`, `*executor*`, the `test-designer` dev-loop) are refused as grade sources and reported as `self_grade_attempt` violations; `executor_claim` derives from manifest-2.1 `scenario_evidence.status` (the contract's "executor's claim, never the verdict of record" field). Encodes the scenario-defect vs product-finding fork (verdict-reason tag `[scenario-defect]` → bounded re-author/re-run fix lane; `[product-finding]` → GH issue + idempotent ledger `tasks` mirror via `--mirror-tasks`) so certification terminates: `certification.disposition` is always `certified` or `not-certified`, never pending. Reviewer skill gains the campaign-bundle duties (structural floor re-check, claim-vs-evidence posture, mandatory non-PASS classification). Tests: `tests/qe/test_campaign_scoreboard.py` (8 cases, hermetic via a `WICKED_LEDGER_PKG_DIR` stub).
|
|
9
|
+
- **`qe campaign` recon+generation action (TH-7, ADR 0006).** New `campaign` action on the `wicked-garden-qe` router (`skills/qe/refs/campaign.md`): derives a capability inventory from three lenses — the estate code graph when the target repo is indexed, docs recall via `wicked-garden-mem`, and live probing (health endpoints, crew's committed `packages/crew/endpoint-manifest.json`, DOM landmarks) — and emits a dependency-ordered campaign plan CONFORMING to `schemas/campaign-recon.schema.json` v1 (never a parallel format), persisted as a ledger `strategies` row + scenario-format v1 files under `.wicked-qe/campaigns/<name>/`. Assembly/validation glue is `scripts/qe/campaign_plan.py` (stdlib-only, fail-closed): honest `sources.estate: "unindexed"` degradation is DERIVED (an unindexed plan claiming estate-sourced entries is rejected), doc-derived claims are forced `status: "proposed"` pending human review (the incident-to-scenario pending-review pattern), ladder order + rung↔capability binding are enforced beyond the JSON schema, and generated stubs fail until authored (never a silent PASS). Tests: `tests/qe/test_campaign_action.py` validates a generated three-lens plan against the schema itself.
|
|
10
|
+
- **qe dispatch guard (TH-7, guard half of the retired agent-surface cleanup — arch-R25 ≡ test-R20).** `scripts/qe/campaign_dispatch.py`: every qe dispatch resolves its specialist through `resolve_specialist()`, which asserts the resolved worker is a shipped `wicked-garden-qe-*` skill and BLOCKS retired `wicked-testing-*` / `wicked-brain-*` names at dispatch with a clear error naming the garden replacement (exit 2 on the CLI; never a silent rewrite). Wired into `skills/qe/SKILL.md` (fork workers) and `skills/qe/refs/execute.md` (dispatch block).
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **Re-landed TH-5's campaign-recon schema, clobbered by #1083's stale-base squash.** PR #1083 (TH-4) was squashed from a branch cut before #1082 merged, silently reverting `schemas/campaign-recon.schema.json`, `tests/qe/test_campaign_recon_schema.py`, and the `schemas/README.md` standalone-contract section. Restored byte-for-byte from the #1082 squash commit. (The same squash also reverted #1081's docs/peer-floor work — flagged to its owning lane, not restored here.)
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- **`wicked_ledger_version` floor `^0.2.0` → `^0.4.0` (recon XC-4 — the wicked-ledger 2.1 floor-bump wave).** wicked-ledger 0.4.0 ships evidence-manifest **2.1.0** (optional `scenario_evidence` block + first-class `claim_level` enum, `validateManifest` reviewer entry point — TH-5) and new-feature API surface, so the npm minor moved and the old caret (`^0.2.0` excludes 0.3+) had to move with it. Store compat is unchanged in every direction a garden consumer touches: SQLite `schema_version` stays **3** (no new migrations since 0.1.0), and manifest 2.1 is a **minor** — 2.0.0 bundles still validate (covered by the ledger's backward-compat smoke test) and 2.x readers gate on the major. The pin is single-sourced in `plugin.json`; the six qe skill files (`skills/qe/SKILL.md`, `skills/qe/refs/{accept,insight,integration}.md`, `skills/qe-release-readiness-engineer/SKILL.md`, `skills/qe-test-impact-analyzer/SKILL.md`) reference it symbolically and needed no edits — this completes the ledger-pin half DT-13 deferred to XC-4.
|
|
17
|
+
- **Peer-floor and manifest truth pass (recon DT-13).** One consistent vault-floor story: every doc restatement now says **≥ 0.5.0** — the floor `scripts/loom/manifest.py` (`version_pin="0.5"`) and `plugin.json` (`wicked_vault_version ^0.5.0`) have carried since 12.31.0 (checked by the peer registry's health probe: `loom doctor` reports a below-floor vault as `drift` and exits non-zero) — replacing the stale `≥ 0.4.0` (README, CONTRIBUTING, `skills/archetype/refs/{review,incident,migrate,modernize,specify}.md`) and `^0.3.0` (`docs/required-peers.md`) claims. manifest.py + plugin.json are declared the single source; restatements carry a greppable `<!-- vault-floor -->` marker, and `docs/required-peers.md` documents the bump procedure. `skills/core/refs/setup.md` now checks the probed vault version against the floor and tells a below-floor (e.g. 0.4.x) user to upgrade via `npm i -g wicked-vault@latest`.
|
|
18
|
+
- **`docs/required-peers.md` rewritten to the shipped truth.** The vault install command is now the working `npm i -g wicked-vault` form (was `npx wicked-vault-install`, which E404s on a fresh machine — no npm package of that name exists; it's a bin of `wicked-vault`). The loom row no longer presents a required external peer pinned `^0.2.0`: the engine has been absorbed in-package (`scripts/loom/`, dispatched in-process by `scripts/_loom.py`) since 12.27.0. **Decision (recon OQ-4):** the standalone `wicked-loom` npm package (0.4.0, not deprecated) is not a sanctioned install path — the pin is deleted, not bumped; `WICKED_LOOM_BIN` stays a debugging escape hatch.
|
|
19
|
+
- **`.claude-plugin/plugin.json`: deleted the retired `wicked_brain_version` pin** (`^0.18.0` — wicked-brain retired 2026-08, Phase 5-S7; nothing reads the key). The `wicked_ledger_version ^0.2.0` pin is deliberately untouched here — it moves with the coordinated wicked-ledger 2.1 floor-bump wave.
|
|
20
|
+
- **`.claude-plugin/marketplace.json`: retired-layers copy fixed** — "testing/brain/bus are opt-in layers" → estate/bus are the opt-in layers; wicked-testing and wicked-brain are retired (QE ships in-catalog as the `qe` domain; memory lives in wicked-estate).
|
|
21
|
+
- **`docs/brain-chunk-format.md`: retirement banner added** (recon DT-18) — the doc read as live instructions to write chunks into `~/.wicked-brain`, which is a frozen archive that must never be written; the format is preserved as historical reference for the chunks migrated into wicked-estate.
|
|
22
|
+
- **Site: the wicked-interactive card tells the document-engine story** (recon DT-12) — wicked-interactive moved planes rather than retiring: it is the foundation's document engine (storage, version lineage, HTML/PDF/PPTX/video rendering) that wicked-crew spawns and proxies, not a standalone visual builder. Install command unchanged (two-step marketplace add + install).
|
|
23
|
+
- **Backfilled the 12.30.0 and 12.31.0 changelog entries below** (recon DT-17) — the previous release entry was 12.29.1 while npm shipped 12.31.0; the vault-direct-peer entry that sat under [Unreleased] shipped in 12.31.0 and now lives there.
|
|
24
|
+
|
|
25
|
+
## [12.32.0] — 2026-08-30
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- **qe campaign suite complete**: recon+generation w/ dispatch guard, intake propose-as-gate, accept-trio grading, flaky-verdict quarantine, degradation scenarios, campaign rerun+diff, CI recipes (PR subset / governed nightly), vault-backed evidence integrity (content-addressed, redaction-first), AW-25 golden-path evidence chain, dogfood corpus wiring.
|
|
29
|
+
- **Per-turn rules source**: stop.py names `rules.recall` as THE per-turn source; guard_pipeline consumes a graph-derived rules dir with content-hash provenance; `WG_OUTGOV` defaults to advisory `warn`.
|
|
30
|
+
- **Architecture-wiki pointers** in the mem/search/conformance skills (`knowledge.recall {"scope_prefix":"wiki:"}` + estate `rules.recall`).
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Site version stamp injected at build from the plugin manifest (DT-7 — can never re-stale).
|
|
34
|
+
- campaign-recon schema v2: `desktop` category tiers + `isolation` annotation in one bump.
|
|
35
|
+
|
|
36
|
+
## [12.31.0] — 2026-08-25
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
- **Phase 5 — wicked-brain retired; memory/knowledge/context re-homed onto wicked-estate.** The `mem` domain now runs over wicked-estate (S7 brain folds: vision ingest, session capture, cited answer — #1048); the auto-memorize loop rebuilt on estate (#1050); context assembly retargeted from wicked-brain onto wicked-estate (S4 — #1044) and the wicked-brain route retired outright — estate-only context stack (S7 — #1056). Reach plumbing: estate reach-shim so garden hooks can reach the estate stdio MCP (S2 — #1041) and a persistent stdio broker for ~50x faster estate calls (S3).
|
|
40
|
+
- **ADR 0005 — the code-relationship graph re-homed to wicked-estate** (supersedes ADR 0004 — #1040): remaining graph consumers re-homed (S5: A1/A2/A4/A5/A6 + Section B — #1049) and wicked-patch's graph reader retargeted (A3 — #1045).
|
|
41
|
+
- **Phase 6 — wicked-testing retired; QE ships in-catalog.** wicked-testing's capability set became the garden `qe` domain (Phase 6b — #1047); the wicked-testing peer retired and its `wicked_testing_version` pin dropped (Phase 6c — #1051); qe event/domain rebrand — `.wicked-qe` store dirname, qe stamps, in-catalog helpers, `wicked_vault_version` floor `^0.4.4` → `^0.5.0` and `wicked_ledger_version` `^0.1.0` → `^0.2.0` (#1052). (Earlier in the same release, the testing floor had been bumped `^0.8.0` → `^0.10.0` — #1037 — before the peer's retirement mooted it.)
|
|
42
|
+
- **wicked-vault became a direct infra peer — no longer installed "via wicked-testing"** (#1039). `wicked-vault` is published from its own repo (mikeparcewski/wicked-vault): self-contained, zero runtime deps. The loom peer registry (`scripts/loom/manifest.py`) installs it directly (`install_cmd` = `["npm", "install", "-g", "wicked-vault@latest"]`, was `["npx", "wicked-testing", "install"]`); `plugin.json` `wicked_vault_version` floor `^0.4.0` → `^0.4.4` (raised again to `^0.5.0` by #1052 in this same release). Narrative corrected across `plugin.json` / `marketplace.json` descriptions, `docs/getting-started.md`, and `skills/core/refs/setup.md`; fixed a hardcoded `~/Projects/wicked-vault` dev path in `scripts/compiler/phase0/wire_vault.py`.
|
|
43
|
+
- Site: wave-2 capability deep-dive — the catalog, the qe wall, the extension pitch (#1055); shared chrome re-pins (studio first-class — #1058, and digest updates); baseline Playwright smoke suite for the signature widgets (#1046).
|
|
44
|
+
- Docs accuracy: removed the sunsetted Gemini CLI from the harness list and panel description (#1065).
|
|
45
|
+
- Dependency wave: astro 7.2.x, react 19.2.18, motion v13, svgo, npm_and_yarn group.
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
- **Third-party extension contract (packs)** — drop-in packs, shipped conformance gate, crew routing (#1057).
|
|
49
|
+
- Event hygiene: 6 wicked-core production events cataloged + a 4-segment `wicked.<domain>.<noun>.<verb>` format validator (#1061); 3-segment QE event names renamed to canonical 4-segment (#1060).
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- Drift-guard: crew contract check re-pointed at `wicked-crew-api-types` (#1054).
|
|
53
|
+
- Bootstrap perf: CH-02 legacy-scan result cached, eliminating a ~20s rglob on session start (#1064).
|
|
54
|
+
- E2E: `BootstrapEndToEndTests` isolated from shared `HOME` state (#1066).
|
|
55
|
+
|
|
56
|
+
## [12.30.0] — 2026-07-30
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- **Domain extraction pipeline:** structural extraction loop — clusters, blast-radius framing, parallel workers (#1020); Message Batches API pipeline + direct-API adapter for rule extraction (#1025).
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
- Domain-extraction robustness chain: infra failures abort the pass instead of RISK-flooring (#1021); zero-yield batches abort as infra-suspect and floors never overwrite content (#1022, #1023); one in-pass retry before infra abort (#1024); batch timeouts retry once before flooring (#1026); rule statements phrased in product-functional terms with config trivia floored honestly (#1027); trailing-dot-tolerant symbol-id matching so model-normalized ids recanonize (#1028).
|
|
63
|
+
- Scaffolding: YAML-quote template name placeholders — unquoted `{{name}}` broke codex's skill loader (#1029).
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
- Site: version-free kicker chip — npm is the version authority (#1018).
|
|
67
|
+
- CI: notify wicked-installer on release tags (#1030).
|
|
68
|
+
- DoD bookkeeping: L3-009/L3-010 evidence checked off against the 12.29.1 release (#1015); shared deps updated to v19.2.8 (#1008).
|
|
69
|
+
|
|
5
70
|
## [12.29.1] — 2026-07-21
|
|
6
71
|
|
|
7
72
|
### Added
|
package/CONTRIBUTING.md
CHANGED
|
@@ -18,41 +18,24 @@ uv run pytest tests/ -x
|
|
|
18
18
|
|
|
19
19
|
## Escape Hatches
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
export WG_SKIP_WICKED_TESTING_CHECK=1
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Effect:
|
|
32
|
-
- `wicked_testing_missing` is set to `false` — crew commands proceed normally.
|
|
33
|
-
- The probe subprocess (`npx wicked-testing --version`) is never invoked.
|
|
34
|
-
- A single warning is emitted to **stderr** (not to the Claude session briefing):
|
|
35
|
-
`WG_SKIP_WICKED_TESTING_CHECK is set — wicked-testing version check bypassed (offline dev mode). Do not use in production.`
|
|
36
|
-
|
|
37
|
-
**When to use**: CI pipelines where npm is unavailable; local development on
|
|
38
|
-
machines without Node.js installed; offline development sessions.
|
|
39
|
-
|
|
40
|
-
**When NOT to use**: Production environments, any session where crew QE gates
|
|
41
|
-
will actually run (the bypass skips the version check but wicked-testing agents
|
|
42
|
-
will still fail if the package is absent).
|
|
43
|
-
|
|
44
|
-
This escape hatch is a developer override. It does NOT appear in user-facing help,
|
|
45
|
-
setup wizard output, or the README. It is not a supported production configuration.
|
|
21
|
+
> **Historical note (Phase 6c):** the `WG_SKIP_WICKED_TESTING_CHECK` escape
|
|
22
|
+
> hatch and the SessionStart wicked-testing probe it bypassed were removed <!-- historical -->
|
|
23
|
+
> when wicked-testing retired — the qe domain ships in-catalog (the <!-- historical -->
|
|
24
|
+
> `wicked-garden-qe` router + specialists), so there is no peer package to
|
|
25
|
+
> probe. The acceptance gate concept now lives in wicked-crew's
|
|
26
|
+
> `/runs/:id/acceptance` route.
|
|
46
27
|
|
|
47
28
|
### WICKED_VAULT_BIN
|
|
48
29
|
|
|
49
30
|
**For offline CI and dev environments without the wicked-vault peer only.**
|
|
50
31
|
|
|
51
|
-
wicked-vault (npm, ≥0.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
loom
|
|
32
|
+
wicked-vault (npm, ≥ 0.5.0 <!-- vault-floor -->, install `npm i -g wicked-vault`)
|
|
33
|
+
is the one required peer (the loom engine is built into the garden; bus is an
|
|
34
|
+
opt-in layer). The garden's produces-gates re-derive
|
|
35
|
+
evidence through the built-in loom engine — `scripts/qe/vault_gate.py` runs
|
|
36
|
+
`loom gate` in-process (`scripts/_loom.py` → `scripts/loom/`), which shells
|
|
37
|
+
`wicked-vault cross-check`, so the vault is the backend loom re-runs the
|
|
38
|
+
verifier against. loom resolves the vault; the concrete-install
|
|
56
39
|
probe (`vault_available`) and the `WICKED_VAULT_BIN` kill-switch below still apply.
|
|
57
40
|
The vault CLI is resolved in order:
|
|
58
41
|
|
|
@@ -62,8 +45,7 @@ The vault CLI is resolved in order:
|
|
|
62
45
|
4. a local `node_modules/.bin/wicked-vault`
|
|
63
46
|
5. `npx --yes wicked-vault`
|
|
64
47
|
|
|
65
|
-
Setting `WICKED_VAULT_BIN=""` (set-but-empty)
|
|
66
|
-
`WG_SKIP_WICKED_TESTING_CHECK`:
|
|
48
|
+
Setting `WICKED_VAULT_BIN=""` (set-but-empty) disables vault resolution:
|
|
67
49
|
|
|
68
50
|
```bash
|
|
69
51
|
export WICKED_VAULT_BIN=""
|
|
@@ -88,12 +70,8 @@ setup wizard output, or the README. It is not a supported production configurati
|
|
|
88
70
|
|
|
89
71
|
### Fail-open boundary
|
|
90
72
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
**CH-02 close**: `crew_command_gate()` in `scripts/crew/_prerequisites.py`
|
|
97
|
-
is fail-closed: if `session_state.extras["wicked_testing_probe"]` is absent
|
|
98
|
-
(probe exception path), the gate treats this as missing rather than passing.
|
|
99
|
-
This prevents silent unblocked crew runs when the probe fails silently.
|
|
73
|
+
SessionStart probes in `hooks/scripts/bootstrap.py` (vault / bus / loom
|
|
74
|
+
dependency checks) are fail-open: any exception is caught, logged to stderr
|
|
75
|
+
with actionable detail, and bootstrap continues. Gates that *enforce*
|
|
76
|
+
evidence are fail-closed at their own layer (`scripts/qe/vault_gate.py`),
|
|
77
|
+
never at the probe.
|
package/ETHOS.md
CHANGED
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
**Quality pressure must be structural, not delegated to willpower.** Reviews skipped under deadline pressure are gates that didn't exist. So enforcement lives in code, not prose: hard gates refuse to advance at runtime, produces re-derive through wicked-loom (which re-runs the verifier via the vault), and the audit trail is append-only. Good intentions don't have to survive a Friday afternoon — the gates do.
|
|
20
20
|
|
|
21
|
-
**Knowledge compounds across sessions or it isn't knowledge.** If a decision, gotcha, or pattern lives only in the current chat, it dies with the chat. Every memorable thing belongs in a tier-appropriate memory store with confidence and decay rules. wicked-
|
|
21
|
+
**Knowledge compounds across sessions or it isn't knowledge.** If a decision, gotcha, or pattern lives only in the current chat, it dies with the chat. Every memorable thing belongs in a tier-appropriate memory store with confidence and decay rules. The mem domain over wicked-estate is the difference between learning once and learning every time.
|
|
22
22
|
|
|
23
23
|
**Native primitives over bespoke abstractions.** Claude Code's `TaskCreate`, `Skill`, `Agent`, and hooks are the surface. We extend them — we don't replace them. A task with metadata is more durable than a custom kanban; a skill with a frontmatter description is more discoverable than a registry call. The plugin is **skills-only**: user entry points are consolidated per-domain skills, and the former agents are fork-context worker skills — one surface, not three.
|
|
24
24
|
|
|
25
|
-
**The gate is required; the rest is a toolkit.** wicked-garden's one non-negotiable is the evidence gate, so it stands on two required peers: **wicked-vault** (the backend that makes "done" re-derivable) and **wicked-loom** (the engine that re-runs the verifier). The core skill's `setup` action (`/wicked-garden-core setup`) blocks without them — a gate you can fake is worse than no gate. The other siblings are **opt-in layers**, not prerequisites: **wicked-
|
|
25
|
+
**The gate is required; the rest is a toolkit.** wicked-garden's one non-negotiable is the evidence gate, so it stands on two required peers: **wicked-vault** (the backend that makes "done" re-derivable) and **wicked-loom** (the engine that re-runs the verifier). The core skill's `setup` action (`/wicked-garden-core setup`) blocks without them — a gate you can fake is worse than no gate. The other siblings are **opt-in layers**, not prerequisites: **wicked-estate** (cross-session memory + knowledge — the *what*), **wicked-understanding** (repo playbooks — the *how*), **wicked-bus** (the audit trail). Acceptance testing needs no sibling at all — the `qe` domain ships in-catalog. Install the ones you'll use; the toolkit works without the others — breadth you adopt incrementally, not a five-thing prerequisite wall. And required-at-install is not brittle-at-runtime: a transient outage degrades gracefully and never bricks a session — but a gate never pretends missing evidence is a pass; that path **fails closed**. We depend on the gate; we don't crash with the layers.
|
|
26
26
|
|
|
27
27
|
**Cross-platform is non-negotiable.** macOS, Linux, Windows (Git Bash, WSL, native). Bare `python3` doesn't exist on Windows; bare `/tmp` doesn't exist on Windows; the shim and `${TMPDIR:-/tmp}` exist for a reason. If a contributor adds shell that breaks on Windows, the contribution is incomplete.
|
|
28
28
|
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
|
|
69
69
|
**Not a single-language toolkit.** Cross-platform stdlib-only Python for the plumbing. wicked-patch's generators support Python, TypeScript, Java, Go, SQL, Rust, Kotlin, C#, PHP, Ruby out of the box; new languages plug in via the generator interface.
|
|
70
70
|
|
|
71
|
-
**Not closed.** The siblings (vault + loom required for the gate;
|
|
71
|
+
**Not closed.** The siblings (vault + loom required for the gate; estate, understanding, bus opt-in) are peers, not forks — and the compiler emits a vault-backed harness any repo can adopt **without installing wicked-garden at all**. The plugin's relationship to other tools is "stand on, and hand off," not "absorb."
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
## The premise
|
|
19
19
|
|
|
20
|
-
Coding agents grew up. Claude Code, Codex, Cursor, Antigravity, Aider, OpenCode,
|
|
20
|
+
Coding agents grew up. Claude Code, Codex, Cursor, Antigravity, Aider, OpenCode, Zed/ACP — they're not autocomplete anymore. They plan. They parallelize. And each has *strong opinions* about how it likes to work.
|
|
21
21
|
|
|
22
22
|
Most plugins try to boss them around — re-implement planning, impose a workflow, make the agent dance. You end up fighting your own tools.
|
|
23
23
|
|
|
@@ -30,9 +30,9 @@ Most plugins try to boss them around — re-implement planning, impose a workflo
|
|
|
30
30
|
| says *"tests pass"* (sometimes it's lying) | re-runs the proof. False "done" → **rejected.** Missing backend → **fails closed.** Never a vacuous green. |
|
|
31
31
|
| greps and reads — blind to string-wired links | sees the **injected edges** (event→consumer, command→agent, agent→capability) grep never will → `blast-radius`, `lineage` |
|
|
32
32
|
| refactors on a hope and a prayer | renames across files as a **graph operation**, not find-replace roulette → wicked-patch |
|
|
33
|
-
| forgets everything at `exit` | remembers what session 1 decided when you're in session 47 → wicked-
|
|
33
|
+
| forgets everything at `exit` | remembers what session 1 decided when you're in session 47 → the mem domain over wicked-estate |
|
|
34
34
|
| re-derives *how to work in this repo* every task — which file owns the bug, the wiring step, the test command | loads the repo's own playbooks (`fix-bug`/`add-feature`/`verify`…), generated from HEAD → wicked-understanding |
|
|
35
|
-
| asks *itself* for a second opinion | convenes a **real multi-model panel** (
|
|
35
|
+
| asks *itself* for a second opinion | convenes a **real multi-model panel** (Antigravity / Codex / …) → the jam skill's `council` action |
|
|
36
36
|
| re-derives WCAG/CWE/SOC2 from memory every time | loads the rubric on demand, ships it to any repo |
|
|
37
37
|
| grades its own homework | author ≠ executor ≠ reviewer → evidence-gated testing |
|
|
38
38
|
|
|
@@ -54,14 +54,23 @@ No universal pipeline to obey. A hook reads each prompt's *shape* and that decid
|
|
|
54
54
|
## Install
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
|
|
57
|
+
claude plugins marketplace add mikeparcewski/wicked-garden
|
|
58
|
+
claude plugins install wicked-garden
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Or use the family installer — [`npx wicked-installer`](https://www.npmjs.com/package/wicked-installer)
|
|
62
|
+
installs/updates the whole wicked-\* family (garden, its peers, and the rest).
|
|
63
|
+
|
|
64
|
+
Then, in a Claude Code session:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
58
67
|
/wicked-garden-core setup # verifies peers; blocks only on the one the gate needs
|
|
59
68
|
```
|
|
60
69
|
|
|
61
70
|
**One required peer, the rest opt-in.** The evidence gate is the floor we won't fake, so it needs one external peer — setup blocks without it:
|
|
62
71
|
|
|
63
72
|
```bash
|
|
64
|
-
|
|
73
|
+
npm i -g wicked-vault # wicked-vault (≥ 0.5.0), the honest-evidence backend the gate re-derives against
|
|
65
74
|
```
|
|
66
75
|
|
|
67
76
|
> The gate/resolve engine (formerly the separate `wicked-loom` package) is now **absorbed in-package** as of v12.27.0 (`scripts/loom/`) — nothing extra to install. The gate re-hashes recorded evidence and re-runs its verifier through that engine; a false "tests pass" is **rejected**, a missing backend **fails closed**.
|
|
@@ -69,12 +78,14 @@ npx wicked-testing install # installs wicked-vault (≥ 0.4.0), the honest-e
|
|
|
69
78
|
The rest of the kit is **opt-in layers** — add what you want, skip the rest and the toolkit still works:
|
|
70
79
|
|
|
71
80
|
```bash
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
# wicked-estate — the memory/knowledge layer (cross-session recall + cited search, the "what"):
|
|
82
|
+
# install the `wicked-estate` + `wicked-estate-mcp` binaries onto PATH or ~/.local/bin
|
|
83
|
+
npm i -g wicked-bus && npx wicked-bus-install # the audit-trail layer (fire-and-forget; fail-open without it)
|
|
75
84
|
```
|
|
76
85
|
|
|
77
|
-
|
|
86
|
+
> Evidence-gated acceptance testing (author ≠ executor ≠ reviewer) needs no extra install — it ships **in-catalog** as the `qe` domain (`wicked-garden-qe`).
|
|
87
|
+
|
|
88
|
+
Optional, lights up the code graph: **wicked-estate** (single binary; `wicked-estate index <path>` + the estate MCP server) → powers `blast-radius` / `lineage` / `hotspots` / wicked-patch (ADR 0005 — no external codegraph engine, no Node version floor). Details: [`docs/required-peers.md`](docs/required-peers.md).
|
|
78
89
|
|
|
79
90
|
## Try it
|
|
80
91
|
|
|
@@ -94,6 +105,23 @@ Optional, lights up the code graph: `npx @colbymchenry/codegraph` (Node ≥ 22.5
|
|
|
94
105
|
|
|
95
106
|
---
|
|
96
107
|
|
|
108
|
+
## Build on it
|
|
109
|
+
|
|
110
|
+
The catalog is open: ship your own domain pack — a `wicked-pack.json`
|
|
111
|
+
manifest plus `{vendor}-{domain}` router / `{vendor}-{domain}-{role}` fork
|
|
112
|
+
workers — and the runtime discovers it without a garden PR: catalog listing,
|
|
113
|
+
crew specialist routing, peer-floor probing, same evidence discipline.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npx wicked-garden pack check ./acme-seo-pack # the shipped conformance gate
|
|
117
|
+
npx wicked-installer pack add acme-seo-pack # acquire + validate + install + register
|
|
118
|
+
npx wicked-garden pack list # what the runtime sees
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Full author guide: [`docs/extending.md`](docs/extending.md).
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
97
125
|
## Principles
|
|
98
126
|
|
|
99
127
|
- **Don't fight the harness.** Fill the gaps; never re-implement what it already does well.
|
|
@@ -104,11 +132,11 @@ Optional, lights up the code graph: `npx @colbymchenry/codegraph` (Node ≥ 22.5
|
|
|
104
132
|
|
|
105
133
|
## More
|
|
106
134
|
|
|
107
|
-
[`ETHOS.md`](ETHOS.md) · [`docs/getting-started.md`](docs/getting-started.md) · [`docs/domains.md`](docs/domains.md) · [`docs/required-peers.md`](docs/required-peers.md) · [`docs/compiler.md`](docs/compiler.md)
|
|
135
|
+
[`ETHOS.md`](ETHOS.md) · [`docs/getting-started.md`](docs/getting-started.md) · [`docs/domains.md`](docs/domains.md) · [`docs/required-peers.md`](docs/required-peers.md) · [`docs/compiler.md`](docs/compiler.md) · [`docs/extending.md`](docs/extending.md)
|
|
108
136
|
|
|
109
137
|
## Requirements
|
|
110
138
|
|
|
111
|
-
A coding-agent harness ([Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) ≥ 1.0 for the plugin surface; the peers + compiled gate are harness-agnostic) · Python 3.9+ (stdlib-only hooks) · Node + `npx` · the gate's one required peer (`wicked-vault` ≥ 0.
|
|
139
|
+
A coding-agent harness ([Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) ≥ 1.0 for the plugin surface; the peers + compiled gate are harness-agnostic) · Python 3.9+ (stdlib-only hooks) · Node + `npx` · the gate's one required peer (`wicked-vault` ≥ 0.5.0) plus opt-in layers (`wicked-estate` · `wicked-bus`).
|
|
112
140
|
|
|
113
141
|
## License
|
|
114
142
|
|