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.
- package/.claude-plugin/archetypes.json +166 -0
- package/.claude-plugin/components.json +75 -0
- package/.claude-plugin/marketplace.json +15 -0
- package/.claude-plugin/plugin.json +174 -0
- package/.claude-plugin/specialist.json +48 -0
- package/.claude-plugin/stack-registry.json +96 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +712 -0
- package/CONTRIBUTING.md +99 -0
- package/ETHOS.md +83 -0
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/WICKED_GARDEN_BUS_EVENTS.md +149 -0
- package/agents/agentic/architect.md +449 -0
- package/agents/agentic/performance-analyst.md +702 -0
- package/agents/agentic/safety-reviewer.md +662 -0
- package/agents/crew/implementer.md +163 -0
- package/agents/crew/researcher.md +94 -0
- package/agents/crew/reviewer.md +184 -0
- package/agents/data/data-engineer.md +227 -0
- package/agents/engineering/api-documentarian.md +440 -0
- package/agents/engineering/migration-engineer.md +301 -0
- package/agents/engineering/solution-architect.md +208 -0
- package/agents/jam/brainstorm-facilitator.md +297 -0
- package/agents/jam/council.md +322 -0
- package/agents/jam/quick-facilitator.md +85 -0
- package/agents/persona/persona-agent.md +121 -0
- package/agents/platform/compliance-officer.md +266 -0
- package/agents/platform/privacy-expert.md +496 -0
- package/agents/platform/security-engineer.md +287 -0
- package/agents/product/a11y-expert.md +323 -0
- package/agents/product/requirements-analyst.md +238 -0
- package/agents/product/ui-reviewer.md +180 -0
- package/agents/product/ux-designer.md +199 -0
- package/agents/product/value-strategist.md +269 -0
- package/agents/qe/semantic-reviewer.md +78 -0
- package/commands/agentic/audit.md +24 -0
- package/commands/agentic/design.md +24 -0
- package/commands/agentic/frameworks.md +25 -0
- package/commands/agentic/review.md +27 -0
- package/commands/archetype/build.md +12 -0
- package/commands/archetype/decide.md +12 -0
- package/commands/archetype/explore.md +12 -0
- package/commands/archetype/incident.md +12 -0
- package/commands/archetype/migrate.md +12 -0
- package/commands/archetype/modernize.md +12 -0
- package/commands/archetype/review.md +14 -0
- package/commands/archetype/ship.md +12 -0
- package/commands/archetype/specify.md +12 -0
- package/commands/archetype/triage.md +12 -0
- package/commands/compile.md +37 -0
- package/commands/data/analyze.md +18 -0
- package/commands/data/data.md +21 -0
- package/commands/data/ml.md +18 -0
- package/commands/data/ontology.md +22 -0
- package/commands/data/pipeline.md +17 -0
- package/commands/deliberate.md +181 -0
- package/commands/engineering/add-field.md +77 -0
- package/commands/engineering/apply.md +58 -0
- package/commands/engineering/arch.md +26 -0
- package/commands/engineering/debug.md +27 -0
- package/commands/engineering/docs.md +27 -0
- package/commands/engineering/new-generator.md +257 -0
- package/commands/engineering/patch-plan.md +59 -0
- package/commands/engineering/plan.md +29 -0
- package/commands/engineering/remove.md +48 -0
- package/commands/engineering/rename.md +44 -0
- package/commands/engineering/review.md +32 -0
- package/commands/help.md +128 -0
- package/commands/install.md +118 -0
- package/commands/intent.md +54 -0
- package/commands/jam/brainstorm.md +37 -0
- package/commands/jam/council.md +49 -0
- package/commands/jam/quick.md +21 -0
- package/commands/jam/revisit.md +79 -0
- package/commands/persona/as.md +136 -0
- package/commands/persona/define.md +24 -0
- package/commands/persona/list.md +118 -0
- package/commands/platform/actions.md +20 -0
- package/commands/platform/assert.md +18 -0
- package/commands/platform/audit.md +23 -0
- package/commands/platform/compliance.md +20 -0
- package/commands/platform/gh.md +22 -0
- package/commands/platform/health.md +22 -0
- package/commands/platform/incident.md +23 -0
- package/commands/platform/infra.md +24 -0
- package/commands/platform/peer-health.md +103 -0
- package/commands/platform/plugin-health.md +58 -0
- package/commands/platform/security.md +38 -0
- package/commands/platform/toolchain.md +96 -0
- package/commands/platform/traces.md +20 -0
- package/commands/product/a11y.md +19 -0
- package/commands/product/acceptance.md +19 -0
- package/commands/product/align.md +20 -0
- package/commands/product/analyze.md +23 -0
- package/commands/product/elicit.md +19 -0
- package/commands/product/listen.md +24 -0
- package/commands/product/mockup.md +20 -0
- package/commands/product/screenshot.md +19 -0
- package/commands/product/strategy.md +40 -0
- package/commands/product/synthesize.md +23 -0
- package/commands/product/ux-review.md +42 -0
- package/commands/product/ux.md +20 -0
- package/commands/product/visual-direction.md +34 -0
- package/commands/prove.md +47 -0
- package/commands/report-issue.md +243 -0
- package/commands/reset.md +144 -0
- package/commands/search/blast-radius.md +58 -0
- package/commands/search/hotspots.md +55 -0
- package/commands/search/index.md +38 -0
- package/commands/search/lineage.md +47 -0
- package/commands/search/service-map.md +79 -0
- package/commands/setup.md +363 -0
- package/commands/smaht/briefing.md +200 -0
- package/commands/smaht/events-import.md +95 -0
- package/commands/smaht/state.md +19 -0
- package/commands/where-am-i.md +58 -0
- package/docs/README.md +32 -0
- package/docs/adr/0001-code-relationship-graph-engine.md +116 -0
- package/docs/adr/0002-major-cleanup-keep-cut.md +91 -0
- package/docs/adr/0003-peers-gate-required-layers-optin.md +41 -0
- package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +47 -0
- package/docs/brain-chunk-format.md +135 -0
- package/docs/compiler.md +95 -0
- package/docs/daemon-api.md +70 -0
- package/docs/domains.md +197 -0
- package/docs/getting-started.md +208 -0
- package/docs/plans/2026-06-08-wicked-loom-conduct.md +1337 -0
- package/docs/plans/2026-06-08-wicked-loom-contract.md +638 -0
- package/docs/plans/2026-06-08-wicked-loom-cutover.md +1300 -0
- package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +843 -0
- package/docs/plans/2026-06-08-wicked-loom-flow-cutover.md +403 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +838 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +44 -0
- package/docs/required-peers.md +60 -0
- package/docs/specs/2026-06-08-wicked-loom-extraction.md +225 -0
- package/docs/specs/2026-06-10-codegraph-to-brain-migration.md +168 -0
- package/docs/v11/archetypes.md +231 -0
- package/hooks/hooks.json +275 -0
- package/hooks/scripts/bootstrap.py +1797 -0
- package/hooks/scripts/invoke.py +62 -0
- package/hooks/scripts/notification.py +166 -0
- package/hooks/scripts/permission_request.py +223 -0
- package/hooks/scripts/post_tool.py +1374 -0
- package/hooks/scripts/pre_compact.py +272 -0
- package/hooks/scripts/pre_tool.py +1278 -0
- package/hooks/scripts/prompt_submit.py +1109 -0
- package/hooks/scripts/session_end.py +95 -0
- package/hooks/scripts/stop.py +624 -0
- package/hooks/scripts/subagent_lifecycle.py +464 -0
- package/hooks/scripts/subscribers/on_gate_decided.py +84 -0
- package/hooks/scripts/task_completed.py +322 -0
- package/hooks/scripts/worktree_guard.py +148 -0
- package/hooks/subscriptions/on_gate_decided.json +9 -0
- package/install.mjs +128 -0
- package/package.json +41 -0
- package/pyproject.toml +59 -0
- package/schemas/README.md +32 -0
- package/schemas/assert_contracts.json +37 -0
- package/schemas/health_probe.json +46 -0
- package/schemas/plugin_status.json +37 -0
- package/scripts/_adapters/__init__.py +166 -0
- package/scripts/_adapters/jira_adapter.py +18 -0
- package/scripts/_adapters/linear_adapter.py +18 -0
- package/scripts/_adapters/miro_adapter.py +18 -0
- package/scripts/_adapters/notion_adapter.py +18 -0
- package/scripts/_agents.py +357 -0
- package/scripts/_brain_ingest/__init__.py +2 -0
- package/scripts/_brain_ingest/session_fact_extractor.py +341 -0
- package/scripts/_brain_port.py +163 -0
- package/scripts/_bus.py +1081 -0
- package/scripts/_bus_catalog_gen.py +93 -0
- package/scripts/_bus_consumers.json +46 -0
- package/scripts/_bus_emit.py +43 -0
- package/scripts/_capability_registry.py +334 -0
- package/scripts/_capability_resolver.py +322 -0
- package/scripts/_domain_store.py +559 -0
- package/scripts/_event_log_reader.py +154 -0
- package/scripts/_event_schema.py +305 -0
- package/scripts/_event_store.py +397 -0
- package/scripts/_heavy_cadence.py +324 -0
- package/scripts/_integration_resolver.py +321 -0
- package/scripts/_logger.py +151 -0
- package/scripts/_loom.py +482 -0
- package/scripts/_paths.py +133 -0
- package/scripts/_python.sh +22 -0
- package/scripts/_run.py +137 -0
- package/scripts/_session.py +502 -0
- package/scripts/_validate_registry.py +1042 -0
- package/scripts/_wicked_testing_probe.py +277 -0
- package/scripts/agentic/analyze_agents.py +391 -0
- package/scripts/agentic/detect_framework.py +420 -0
- package/scripts/agentic/issue_taxonomy.py +357 -0
- package/scripts/agentic/pattern_scorer.py +434 -0
- package/scripts/classify/persist.py +169 -0
- package/scripts/compiler/compile.py +552 -0
- package/scripts/compiler/phase0/VERDICT.md +60 -0
- package/scripts/compiler/phase0/detect.py +292 -0
- package/scripts/compiler/phase0/emit.py +228 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.bindings.json +30 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/honest-tests.txt +2 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/command_iq.bindings.json +45 -0
- package/scripts/compiler/phase0/evidence/command_iq.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/honest-tests.txt +3 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/memos.bindings.json +28 -0
- package/scripts/compiler/phase0/evidence/memos.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/honest-tests.txt +2 -0
- package/scripts/compiler/phase0/evidence/memos.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/verdict.json +104 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.bindings.json +29 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/honest-tests.txt +3 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/wire-vault-transcript.txt +60 -0
- package/scripts/compiler/phase0/run_probe.py +234 -0
- package/scripts/compiler/phase0/wire_vault.py +310 -0
- package/scripts/crew/__init__.py +0 -0
- package/scripts/crew/_task_audit_writer.py +243 -0
- package/scripts/crew/_task_reader.py +389 -0
- package/scripts/crew/archetypes_v11.py +348 -0
- package/scripts/crew/detectors/__init__.py +12 -0
- package/scripts/crew/flow_compiler.py +121 -0
- package/scripts/crew/phase_manager.py +703 -0
- package/scripts/crew/scope_delta.py +264 -0
- package/scripts/crew/specialist_resolver.py +218 -0
- package/scripts/crew/stack_registry.py +189 -0
- package/scripts/data/data_profiler.py +271 -0
- package/scripts/data/ontology_recommender.py +231 -0
- package/scripts/data/schema_validator.py +267 -0
- package/scripts/delivery/drift.py +739 -0
- package/scripts/delivery/telemetry.py +614 -0
- package/scripts/engineering/patch/codegraph_db.py +125 -0
- package/scripts/engineering/patch/generators/__init__.py +56 -0
- package/scripts/engineering/patch/generators/base.py +373 -0
- package/scripts/engineering/patch/generators/csharp_generator.py +494 -0
- package/scripts/engineering/patch/generators/go_generator.py +430 -0
- package/scripts/engineering/patch/generators/java_generator.py +928 -0
- package/scripts/engineering/patch/generators/jsp_generator.py +454 -0
- package/scripts/engineering/patch/generators/kotlin_generator.py +561 -0
- package/scripts/engineering/patch/generators/perl_generator.py +510 -0
- package/scripts/engineering/patch/generators/php_generator.py +644 -0
- package/scripts/engineering/patch/generators/propagation_engine.py +929 -0
- package/scripts/engineering/patch/generators/python_generator.py +487 -0
- package/scripts/engineering/patch/generators/ruby_generator.py +463 -0
- package/scripts/engineering/patch/generators/rust_generator.py +400 -0
- package/scripts/engineering/patch/generators/sql_generator.py +594 -0
- package/scripts/engineering/patch/generators/typescript_generator.py +439 -0
- package/scripts/engineering/patch/patch.py +800 -0
- package/scripts/engineering/patch/safety.py +429 -0
- package/scripts/jam/__init__.py +0 -0
- package/scripts/jam/_bus_consumers.py +271 -0
- package/scripts/jam/agentic_cli_registry.py +703 -0
- package/scripts/jam/consensus.py +737 -0
- package/scripts/jam/detect_clis.py +409 -0
- package/scripts/jam/jam.py +283 -0
- package/scripts/jam/save_transcript.py +171 -0
- package/scripts/loom/__init__.py +22 -0
- package/scripts/loom/cli.py +170 -0
- package/scripts/loom/compose.py +180 -0
- package/scripts/loom/gate.py +120 -0
- package/scripts/loom/manifest.py +140 -0
- package/scripts/loom/resolve.py +59 -0
- package/scripts/persona/__init__.py +0 -0
- package/scripts/persona/registry.py +688 -0
- package/scripts/platform/guard_pipeline.py +1214 -0
- package/scripts/platform/guard_profiles.py +216 -0
- package/scripts/platform/observability/assert_contracts.py +434 -0
- package/scripts/platform/observability/health_probe.py +915 -0
- package/scripts/platform/observability/ops_log_viewer.py +209 -0
- package/scripts/platform/prereq_doctor.py +567 -0
- package/scripts/qe/conditions_manifest.py +260 -0
- package/scripts/qe/content_sanitizer.py +160 -0
- package/scripts/qe/coverage_tracker.py +535 -0
- package/scripts/qe/discover_scenarios.py +243 -0
- package/scripts/qe/evidence_tracker.py +232 -0
- package/scripts/qe/prove.py +196 -0
- package/scripts/qe/registry_lookup.py +80 -0
- package/scripts/qe/registry_store.py +176 -0
- package/scripts/qe/semantic_review.py +1005 -0
- package/scripts/qe/vault_gate.py +382 -0
- package/scripts/qe/verdict_audit.py +175 -0
- package/scripts/qe/verdict_schema.py +335 -0
- package/scripts/reset.py +220 -0
- package/scripts/resolve_path.py +22 -0
- package/scripts/sentinel/invariants.py +402 -0
- package/scripts/sentinel/pre_push.py +73 -0
- package/scripts/setup/__init__.py +1 -0
- package/scripts/setup/detect_state.py +114 -0
- package/scripts/setup/migrate_legacy.py +67 -0
- package/scripts/setup/migrate_v6_projects.py +232 -0
- package/scripts/setup/onboarding.py +114 -0
- package/scripts/smaht/_bus_consumers.py +98 -0
- package/scripts/smaht/adapters/__init__.py +83 -0
- package/scripts/smaht/adapters/brain_adapter.py +254 -0
- package/scripts/smaht/adapters/context7_adapter.py +438 -0
- package/scripts/smaht/adapters/delegation_adapter.py +104 -0
- package/scripts/smaht/adapters/domain_adapter.py +206 -0
- package/scripts/smaht/adapters/events_adapter.py +231 -0
- package/scripts/smaht/adapters/tools_adapter.py +49 -0
- package/scripts/smaht/cheatsheet_store.py +236 -0
- package/scripts/smaht/context_package.py +386 -0
- package/scripts/smaht/knowledge_graph.py +395 -0
- package/scripts/smaht/propose_skills.py +856 -0
- package/scripts/smaht/test_cheatsheet_store.py +428 -0
- package/scripts/statusline.py +151 -0
- package/scripts/where_am_i.py +236 -0
- package/skills/agentic/agentic-patterns/SKILL.md +91 -0
- package/skills/agentic/agentic-patterns/refs/anti-patterns-design.md +283 -0
- package/skills/agentic/agentic-patterns/refs/anti-patterns-operational.md +216 -0
- package/skills/agentic/agentic-patterns/refs/pattern-catalog.md +329 -0
- package/skills/agentic/context-engineering/SKILL.md +142 -0
- package/skills/agentic/context-engineering/refs/caching-and-optimization.md +251 -0
- package/skills/agentic/context-engineering/refs/compression-techniques.md +171 -0
- package/skills/agentic/context-engineering/refs/cost-calculation-budget.md +250 -0
- package/skills/agentic/context-engineering/refs/cost-optimization-reporting.md +300 -0
- package/skills/agentic/context-engineering/refs/selective-loading.md +179 -0
- package/skills/agentic/frameworks/SKILL.md +191 -0
- package/skills/agentic/frameworks/refs/framework-profiles-1.md +209 -0
- package/skills/agentic/frameworks/refs/framework-profiles-2.md +214 -0
- package/skills/agentic/frameworks/refs/migration-patterns-paths.md +267 -0
- package/skills/agentic/frameworks/refs/migration-patterns-testing.md +208 -0
- package/skills/agentic/refs/audit.md +134 -0
- package/skills/agentic/refs/design.md +137 -0
- package/skills/agentic/refs/frameworks.md +102 -0
- package/skills/agentic/refs/review.md +160 -0
- package/skills/agentic/review-methodology/SKILL.md +186 -0
- package/skills/agentic/review-methodology/refs/deliverable-templates.md +246 -0
- package/skills/agentic/review-methodology/refs/issue-taxonomy-quality-testing.md +277 -0
- package/skills/agentic/review-methodology/refs/issue-taxonomy-reliability-safety.md +253 -0
- package/skills/agentic/trust-and-safety/SKILL.md +177 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-actions.md +246 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-input-output.md +238 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-resources.md +209 -0
- package/skills/agentic/trust-and-safety/refs/safety-checklist-advanced.md +209 -0
- package/skills/agentic/trust-and-safety/refs/safety-checklist-core.md +215 -0
- package/skills/archetype/SKILL.md +104 -0
- package/skills/archetype/refs/build.md +142 -0
- package/skills/archetype/refs/decide.md +117 -0
- package/skills/archetype/refs/explore.md +66 -0
- package/skills/archetype/refs/incident.md +149 -0
- package/skills/archetype/refs/migrate.md +170 -0
- package/skills/archetype/refs/modernize.md +187 -0
- package/skills/archetype/refs/review.md +145 -0
- package/skills/archetype/refs/ship.md +117 -0
- package/skills/archetype/refs/specify.md +108 -0
- package/skills/archetype/refs/triage.md +62 -0
- package/skills/classify/SKILL.md +157 -0
- package/skills/data/analysis/SKILL.md +125 -0
- package/skills/data/analysis/refs/templates.md +170 -0
- package/skills/data/data/SKILL.md +118 -0
- package/skills/data/data/refs/examples.md +235 -0
- package/skills/data/ml/SKILL.md +125 -0
- package/skills/data/ml/refs/templates.md +172 -0
- package/skills/data/pipeline/SKILL.md +136 -0
- package/skills/data/pipeline/refs/templates.md +175 -0
- package/skills/data/refs/analyze.md +123 -0
- package/skills/data/refs/data.md +95 -0
- package/skills/data/refs/ml.md +118 -0
- package/skills/data/refs/pipeline.md +92 -0
- package/skills/deliberate/SKILL.md +125 -0
- package/skills/deliberate/refs/architecture-lens.md +37 -0
- package/skills/deliberate/refs/assumptions-lens.md +43 -0
- package/skills/deliberate/refs/code-lens.md +38 -0
- package/skills/deliberate/refs/content-lens.md +37 -0
- package/skills/deliberate/refs/data-lens.md +43 -0
- package/skills/deliberate/refs/design-lens.md +37 -0
- package/skills/deliberate/refs/opportunity-patterns.md +107 -0
- package/skills/deliberate/refs/ops-lens.md +43 -0
- package/skills/deliberate/refs/product-lens.md +46 -0
- package/skills/deliberate/refs/rethink-framework.md +77 -0
- package/skills/deliberate/refs/security-lens.md +47 -0
- package/skills/deliberate/refs/testing-lens.md +45 -0
- package/skills/deliberate/refs/timing-lens.md +42 -0
- package/skills/engineering/architecture/SKILL.md +177 -0
- package/skills/engineering/architecture/refs/adr-template.md +268 -0
- package/skills/engineering/architecture/refs/architecture-template-deployment.md +176 -0
- package/skills/engineering/architecture/refs/architecture-template-design.md +300 -0
- package/skills/engineering/architecture/refs/examples-ecommerce-analytics.md +299 -0
- package/skills/engineering/architecture/refs/examples-saas-trading.md +291 -0
- package/skills/engineering/architecture/refs/patterns-advanced.md +238 -0
- package/skills/engineering/architecture/refs/patterns-structural.md +303 -0
- package/skills/engineering/backend/SKILL.md +102 -0
- package/skills/engineering/backend/refs/checklists.md +146 -0
- package/skills/engineering/backend/refs/patterns.md +181 -0
- package/skills/engineering/debugging/SKILL.md +99 -0
- package/skills/engineering/debugging/refs/patterns.md +248 -0
- package/skills/engineering/debugging/refs/process.md +203 -0
- package/skills/engineering/docs/SKILL.md +97 -0
- package/skills/engineering/engineering/SKILL.md +88 -0
- package/skills/engineering/engineering/refs/checklists.md +91 -0
- package/skills/engineering/engineering/refs/templates.md +71 -0
- package/skills/engineering/frontend/SKILL.md +92 -0
- package/skills/engineering/frontend/refs/checklists.md +96 -0
- package/skills/engineering/frontend/refs/patterns.md +167 -0
- package/skills/engineering/integration/SKILL.md +183 -0
- package/skills/engineering/integration/refs/error-handling-best-practices.md +139 -0
- package/skills/engineering/integration/refs/error-handling-error-classes-typescript.md +212 -0
- package/skills/engineering/integration/refs/error-handling-error-response-format.md +301 -0
- package/skills/engineering/integration/refs/error-handling-retry-strategies.md +190 -0
- package/skills/engineering/integration/refs/event-schemas-best-practices.md +225 -0
- package/skills/engineering/integration/refs/event-schemas-event-naming-conventions.md +303 -0
- package/skills/engineering/integration/refs/event-schemas-event-structure.md +288 -0
- package/skills/engineering/integration/refs/graphql-best-practices.md +138 -0
- package/skills/engineering/integration/refs/graphql-error-handling.md +198 -0
- package/skills/engineering/integration/refs/graphql-graphql-basics.md +197 -0
- package/skills/engineering/integration/refs/graphql-query-examples.md +226 -0
- package/skills/engineering/integration/refs/graphql-schema-design-patterns.md +280 -0
- package/skills/engineering/integration/refs/grpc-grpc-overview.md +246 -0
- package/skills/engineering/integration/refs/grpc-implementation-examples.md +269 -0
- package/skills/engineering/integration/refs/grpc-metadata-headers.md +304 -0
- package/skills/engineering/integration/refs/grpc-testing.md +49 -0
- package/skills/engineering/integration/refs/openapi-template.yaml +682 -0
- package/skills/engineering/integration/refs/resilience-best-practices.md +109 -0
- package/skills/engineering/integration/refs/resilience-circuit-breaker-pattern.md +302 -0
- package/skills/engineering/integration/refs/resilience-rate-limiting.md +245 -0
- package/skills/engineering/integration/refs/resilience-timeout-pattern.md +212 -0
- package/skills/engineering/integration/refs/rest-api-fundamentals.md +299 -0
- package/skills/engineering/integration/refs/rest-api-responses-security.md +302 -0
- package/skills/engineering/integration/refs/versioning-breaking-changes.md +237 -0
- package/skills/engineering/integration/refs/versioning-migration-strategies.md +257 -0
- package/skills/engineering/integration/refs/versioning-versioning-strategies.md +296 -0
- package/skills/engineering/large-scale-migration/SKILL.md +65 -0
- package/skills/engineering/patch/SKILL.md +184 -0
- package/skills/engineering/refs/arch.md +126 -0
- package/skills/engineering/refs/debug.md +142 -0
- package/skills/engineering/refs/docs.md +190 -0
- package/skills/engineering/refs/plan.md +109 -0
- package/skills/engineering/refs/review.md +138 -0
- package/skills/engineering/system-design/SKILL.md +154 -0
- package/skills/engineering/system-design/refs/anti-patterns-big-ball-of-mud.md +254 -0
- package/skills/engineering/system-design/refs/anti-patterns-circular-dependencies.md +241 -0
- package/skills/engineering/system-design/refs/anti-patterns-feature-envy.md +168 -0
- package/skills/engineering/system-design/refs/anti-patterns-god-object.md +247 -0
- package/skills/engineering/system-design/refs/component-template-lifecycle.md +210 -0
- package/skills/engineering/system-design/refs/component-template-maintenance.md +219 -0
- package/skills/engineering/system-design/refs/component-template-structure.md +276 -0
- package/skills/engineering/system-design/refs/dependencies-best-practices.md +260 -0
- package/skills/engineering/system-design/refs/dependencies-dependency-principles.md +295 -0
- package/skills/engineering/system-design/refs/dependencies-dependency-tracking.md +261 -0
- package/skills/engineering/system-design/refs/interface-template-lifecycle.md +211 -0
- package/skills/engineering/system-design/refs/interface-template-maintenance.md +212 -0
- package/skills/engineering/system-design/refs/interface-template-structure.md +269 -0
- package/skills/engineering/system-design/refs/patterns-dependency-injection.md +151 -0
- package/skills/engineering/system-design/refs/patterns-facade-pattern.md +257 -0
- package/skills/engineering/system-design/refs/patterns-layered-pattern.md +204 -0
- package/skills/engineering/system-design/refs/patterns-plugin-architecture.md +229 -0
- package/skills/engineering/unit-test-quality/SKILL.md +194 -0
- package/skills/ground/SKILL.md +130 -0
- package/skills/integration-discovery/SKILL.md +168 -0
- package/skills/integration-discovery/refs/capabilities.md +282 -0
- package/skills/integration-discovery/refs/cli-detection.md +295 -0
- package/skills/integration-discovery/refs/discovery-sources.md +233 -0
- package/skills/integration-discovery/refs/task-patterns.md +206 -0
- package/skills/jam/SKILL.md +45 -0
- package/skills/jam/refs/facilitation-patterns.md +125 -0
- package/skills/jam/refs/quick.md +64 -0
- package/skills/jam/refs/synthesis-patterns.md +114 -0
- package/skills/multi-model/SKILL.md +168 -0
- package/skills/multi-model/refs/aichat.md +119 -0
- package/skills/multi-model/refs/aider.md +100 -0
- package/skills/multi-model/refs/auditability.md +238 -0
- package/skills/multi-model/refs/codex.md +169 -0
- package/skills/multi-model/refs/context.md +306 -0
- package/skills/multi-model/refs/copilot.md +161 -0
- package/skills/multi-model/refs/examples.md +224 -0
- package/skills/multi-model/refs/gemini.md +185 -0
- package/skills/multi-model/refs/goose.md +112 -0
- package/skills/multi-model/refs/llm.md +124 -0
- package/skills/multi-model/refs/opencode.md +196 -0
- package/skills/multi-model/refs/orchestration.md +188 -0
- package/skills/multi-model/refs/pi.md +208 -0
- package/skills/persona/SKILL.md +144 -0
- package/skills/persona/refs/define.md +133 -0
- package/skills/platform/actions/refs/actions.md +114 -0
- package/skills/platform/audit/SKILL.md +174 -0
- package/skills/platform/audit/refs/audit.md +145 -0
- package/skills/platform/audit/refs/checklists-evidence-operations.md +144 -0
- package/skills/platform/audit/refs/checklists-gdpr-pci-evidence.md +213 -0
- package/skills/platform/audit/refs/checklists-soc2-hipaa.md +120 -0
- package/skills/platform/audit/refs/frameworks-gdpr-pci.md +225 -0
- package/skills/platform/audit/refs/frameworks-soc2-hipaa.md +228 -0
- package/skills/platform/compliance/SKILL.md +169 -0
- package/skills/platform/compliance/refs/checklists.md +303 -0
- package/skills/platform/compliance/refs/compliance.md +117 -0
- package/skills/platform/compliance/refs/frameworks.md +282 -0
- package/skills/platform/errors/SKILL.md +183 -0
- package/skills/platform/errors/refs/patterns.md +271 -0
- package/skills/platform/errors/refs/severity.md +264 -0
- package/skills/platform/gate-benchmark-rebaseline/SKILL.md +108 -0
- package/skills/platform/gh/refs/gh.md +105 -0
- package/skills/platform/gh-cli/SKILL.md +120 -0
- package/skills/platform/gh-cli/refs/automation.md +63 -0
- package/skills/platform/gh-cli/refs/gh-ops.md +103 -0
- package/skills/platform/gh-cli/refs/patterns.md +132 -0
- package/skills/platform/gh-cli/scripts/gh_ops.py +454 -0
- package/skills/platform/github-actions/SKILL.md +159 -0
- package/skills/platform/github-actions/refs/security.md +150 -0
- package/skills/platform/github-actions/refs/templates.md +230 -0
- package/skills/platform/github-actions/refs/troubleshooting.md +174 -0
- package/skills/platform/github-actions/scripts/workflow_gen.py +215 -0
- package/skills/platform/gitlab-ci/SKILL.md +140 -0
- package/skills/platform/gitlab-ci/refs/templates.md +223 -0
- package/skills/platform/gitlab-ci/refs/troubleshooting.md +213 -0
- package/skills/platform/glab-cli/SKILL.md +133 -0
- package/skills/platform/glab-cli/refs/ci-debugging.md +95 -0
- package/skills/platform/glab-cli/refs/glab-ops.md +78 -0
- package/skills/platform/glab-cli/refs/patterns.md +131 -0
- package/skills/platform/glab-cli/scripts/glab_ops.py +313 -0
- package/skills/platform/health/SKILL.md +177 -0
- package/skills/platform/health/refs/health.md +72 -0
- package/skills/platform/health/refs/sources.md +302 -0
- package/skills/platform/incident/refs/incident.md +136 -0
- package/skills/platform/infra/refs/infra.md +104 -0
- package/skills/platform/observability/SKILL.md +128 -0
- package/skills/platform/observability/refs/toolchain-discovery.md +243 -0
- package/skills/platform/prereq-doctor/SKILL.md +57 -0
- package/skills/platform/prereq-doctor/refs/tool-registry.md +58 -0
- package/skills/platform/traces/refs/traces.md +101 -0
- package/skills/product/acceptance-criteria/SKILL.md +193 -0
- package/skills/product/acceptance-criteria/refs/ac-anti-patterns.md +291 -0
- package/skills/product/acceptance-criteria/refs/ac-examples.md +277 -0
- package/skills/product/accessibility/SKILL.md +197 -0
- package/skills/product/accessibility/refs/aria-patterns-basics.md +250 -0
- package/skills/product/accessibility/refs/aria-patterns-dynamic.md +187 -0
- package/skills/product/accessibility/refs/aria-patterns-interactive.md +246 -0
- package/skills/product/accessibility/refs/audit-report-findings.md +248 -0
- package/skills/product/accessibility/refs/audit-report-results.md +276 -0
- package/skills/product/accessibility/refs/common-violations-html-css.md +270 -0
- package/skills/product/accessibility/refs/common-violations-interactive.md +303 -0
- package/skills/product/accessibility/refs/keyboard-testing-basics.md +222 -0
- package/skills/product/accessibility/refs/keyboard-testing-patterns.md +173 -0
- package/skills/product/accessibility/refs/screen-reader-testing-advanced.md +294 -0
- package/skills/product/accessibility/refs/screen-reader-testing-commands.md +255 -0
- package/skills/product/accessibility/refs/wcag-checklist.md +262 -0
- package/skills/product/analyze/SKILL.md +164 -0
- package/skills/product/analyze/refs/algorithms.md +238 -0
- package/skills/product/analyze/refs/sentiment-patterns.md +180 -0
- package/skills/product/imagery/SKILL.md +97 -0
- package/skills/product/imagery/alter/SKILL.md +105 -0
- package/skills/product/imagery/alter/refs/editing-reference.md +146 -0
- package/skills/product/imagery/create/SKILL.md +109 -0
- package/skills/product/imagery/create/refs/prompt-engineering.md +112 -0
- package/skills/product/imagery/create/refs/provider-reference.md +219 -0
- package/skills/product/imagery/review/SKILL.md +101 -0
- package/skills/product/imagery/review/refs/analysis-lenses.md +136 -0
- package/skills/product/imagery/review/refs/quality-gates.md +153 -0
- package/skills/product/imagery/scripts/analyze.sh +23 -0
- package/skills/product/imagery/scripts/edit.sh +14 -0
- package/skills/product/imagery/scripts/generate.sh +13 -0
- package/skills/product/imagery/scripts/provider.py +787 -0
- package/skills/product/listen/SKILL.md +175 -0
- package/skills/product/listen/refs/channels.md +220 -0
- package/skills/product/mockup/SKILL.md +106 -0
- package/skills/product/mockup/refs/templates.md +95 -0
- package/skills/product/refs/a11y.md +109 -0
- package/skills/product/refs/acceptance.md +79 -0
- package/skills/product/refs/align.md +67 -0
- package/skills/product/refs/analyze.md +77 -0
- package/skills/product/refs/elicit.md +67 -0
- package/skills/product/refs/listen.md +58 -0
- package/skills/product/refs/mockup.md +77 -0
- package/skills/product/refs/screenshot.md +59 -0
- package/skills/product/refs/strategy.md +77 -0
- package/skills/product/refs/synthesize.md +54 -0
- package/skills/product/refs/ux-review.md +68 -0
- package/skills/product/refs/ux.md +101 -0
- package/skills/product/requirements-analysis/SKILL.md +136 -0
- package/skills/product/requirements-analysis/refs/requirements-example-auth.md +264 -0
- package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +88 -0
- package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +247 -0
- package/skills/product/requirements-analysis/refs/user-story-guide.md +296 -0
- package/skills/product/requirements-graph/SKILL.md +155 -0
- package/skills/product/requirements-graph/refs/examples.md +223 -0
- package/skills/product/requirements-graph/refs/schema.md +162 -0
- package/skills/product/requirements-migrate/SKILL.md +90 -0
- package/skills/product/requirements-navigate/SKILL.md +141 -0
- package/skills/product/requirements-navigate/refs/meta-templates.md +141 -0
- package/skills/product/screenshot/SKILL.md +147 -0
- package/skills/product/strategy/SKILL.md +198 -0
- package/skills/product/strategy/refs/frameworks.md +295 -0
- package/skills/product/strategy/refs/templates-competitive-market.md +299 -0
- package/skills/product/strategy/refs/templates-roi-value.md +207 -0
- package/skills/product/synthesize/SKILL.md +116 -0
- package/skills/product/synthesize/refs/journey-mapping.md +212 -0
- package/skills/product/synthesize/refs/prioritization.md +193 -0
- package/skills/product/ux-review/SKILL.md +164 -0
- package/skills/product/visual-direction/SKILL.md +137 -0
- package/skills/product/visual-review/SKILL.md +131 -0
- package/skills/runtime-exec/SKILL.md +138 -0
- package/skills/search/codebase-narrator/SKILL.md +131 -0
- package/skills/search/codebase-narrator/refs/output-template.md +100 -0
- package/skills/smaht/SKILL.md +72 -0
- package/skills/smaht/discovery/SKILL.md +65 -0
- package/skills/smaht/intent/SKILL.md +89 -0
- package/skills/smaht/propose-skills/SKILL.md +142 -0
- package/skills/smaht/refs/state.md +76 -0
- package/skills/swarm/SKILL.md +132 -0
- package/skills/swarm/refs/fan-out.md +104 -0
- package/skills/swarm/refs/independent-verification.md +86 -0
- package/skills/swarm/refs/receipts-and-evidence.md +69 -0
- package/skills/swarm/refs/recon-synthesis.md +87 -0
- package/skills/swarm/refs/ship-discipline.md +90 -0
- package/skills/wickedizer/SKILL.md +147 -0
- package/skills/wickedizer/refs/artifact-types.md +238 -0
- package/skills/wickedizer/refs/complexity.md +278 -0
- package/skills/wickedizer/refs/de-ai-pass.md +140 -0
- package/skills/wickedizer/refs/failure-modes.md +249 -0
- package/skills/wickedizer/refs/patterns.md +282 -0
- package/skills/wickedizer/refs/review.md +221 -0
- package/skills/wickedizer/refs/structure.md +282 -0
- package/skills/wickedizer/refs/voice-profile.md +125 -0
- package/skills/workflow/SKILL.md +132 -0
- package/skills/workflow/refs/archetype-adjustments.md +205 -0
- package/skills/workflow/refs/evidence.md +58 -0
- package/skills/workflow/refs/integration.md +130 -0
- package/skills/workflow/refs/risk-dimension-signals.md +260 -0
- package/skills/workflow/refs/scoring-rubric.md +49 -0
- package/skills/workflow/refs/signal-keywords.md +176 -0
- package/skills/workflow/refs/specialist-routing-rules.md +159 -0
- package/skills/worktrees/SKILL.md +87 -0
- package/skills/worktrees/refs/recipes.md +96 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# decide — pick between options with an ADR
|
|
2
|
+
|
|
3
|
+
When 2+ paths are viable AND the choice is load-bearing (changing it later
|
|
4
|
+
is expensive). Produces an ADR-shaped artifact that records the chosen
|
|
5
|
+
path and the reasons.
|
|
6
|
+
|
|
7
|
+
## Phase shape
|
|
8
|
+
|
|
9
|
+
| Phase | Goal |
|
|
10
|
+
|---------|------------------------------------------------------------|
|
|
11
|
+
| brief | One-paragraph framing: the problem, the stakes, the constraints. |
|
|
12
|
+
| options | 2–4 named alternatives, each with a one-paragraph description. |
|
|
13
|
+
| score | Qualitative scoring on the dimensions that matter for this decision. |
|
|
14
|
+
| record | Write the ADR. Pick a path. Note the trade-offs you accepted. |
|
|
15
|
+
|
|
16
|
+
## Produces
|
|
17
|
+
|
|
18
|
+
- An **ADR** (Architecture Decision Record) at `docs/decisions/{N}-{slug}.md`
|
|
19
|
+
or `docs/adr/{N}-{slug}.md`, following whatever ADR convention the repo
|
|
20
|
+
uses. New repos: use the standard ADR template.
|
|
21
|
+
- A **decision artifact**: which option was picked, and the explicit
|
|
22
|
+
trade-offs accepted by picking it.
|
|
23
|
+
|
|
24
|
+
The select gate **re-derives** these via `wicked-loom` (`scripts/qe/vault_gate.py` shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the ADR's bytes are re-hashed and its
|
|
25
|
+
structure verifier re-run, never trusting a cached "ADR written". The
|
|
26
|
+
check is **deterministic document-structure** — it proves the ADR
|
|
27
|
+
contains the required sections, not that the call was wise. wicked-loom (the gate engine) and wicked-vault (the evidence backend) are **required** peers (installed by `/wicked-garden:setup`); if loom is unresolvable — or the vault behind it absent — the gate **fails closed** (`gate: "unavailable"`,
|
|
28
|
+
`satisfied: false`) rather than self-asserting a PASS. `--no-require`
|
|
29
|
+
opts a throwaway/low-rigor decision back to the doctrine-light
|
|
30
|
+
claim-only path. (A judgment tier — `wicked-vault analyze-evidence` —
|
|
31
|
+
exists for "was this the right call" sign-off; it's optional here and
|
|
32
|
+
not part of this discrete gate.)
|
|
33
|
+
|
|
34
|
+
## HITL
|
|
35
|
+
|
|
36
|
+
`discrete:select-gate` — the user (or a council) picks. Don't auto-select.
|
|
37
|
+
|
|
38
|
+
## How to run
|
|
39
|
+
|
|
40
|
+
### brief
|
|
41
|
+
|
|
42
|
+
1. Restate the problem in one paragraph. What changes if we pick wrong?
|
|
43
|
+
2. Name the constraints: budget, time, team capability, blast radius,
|
|
44
|
+
reversibility.
|
|
45
|
+
3. If reversibility is HIGH and blast radius is LOW, **stop and ask**
|
|
46
|
+
whether this even needs an ADR. Cheap-to-reverse decisions don't
|
|
47
|
+
benefit from this archetype's overhead.
|
|
48
|
+
4. If a vault is resolvable
|
|
49
|
+
(`scripts/qe/vault_gate.py resolve` → `available: true`), declare the
|
|
50
|
+
re-derivable contract so the select gate has a bar to check against:
|
|
51
|
+
`wicked-vault init` (once per repo) then
|
|
52
|
+
`wicked-vault declare-contract --scope <scope> --phase decide --spec contract.json`.
|
|
53
|
+
`required_evidence` pins `adr` (kind `adr-doc`) to a `regex_match`
|
|
54
|
+
verifier proving the ADR carries every required section — Status,
|
|
55
|
+
Context, Decision, Consequences — and pins `decision-artifact` to a
|
|
56
|
+
presence/structure check (`regex_match`, or `commit_exists` once the
|
|
57
|
+
ADR is committed). Skip silently if no vault.
|
|
58
|
+
|
|
59
|
+
### options
|
|
60
|
+
|
|
61
|
+
1. Generate 2–4 distinct options. Don't pad — false alternatives weaken
|
|
62
|
+
the decision.
|
|
63
|
+
2. For each option:
|
|
64
|
+
- One-paragraph description.
|
|
65
|
+
- Cost: time + complexity + ongoing maintenance.
|
|
66
|
+
- Reversibility: how hard is undoing this in 6 months?
|
|
67
|
+
- Failure mode: what's the worst plausible outcome?
|
|
68
|
+
|
|
69
|
+
### score
|
|
70
|
+
|
|
71
|
+
1. Pick 3–5 dimensions that actually matter for this decision (not a
|
|
72
|
+
generic checklist). Examples: latency, operational complexity,
|
|
73
|
+
contract stability, team familiarity, vendor lock-in.
|
|
74
|
+
2. Score each option qualitatively (LOW/MEDIUM/HIGH) on each dimension.
|
|
75
|
+
3. The score is a *thinking aid*, not a winner-picker. The user picks.
|
|
76
|
+
|
|
77
|
+
### record
|
|
78
|
+
|
|
79
|
+
1. Use `wicked-garden:jam:council` for a multi-model second opinion when
|
|
80
|
+
the stakes warrant it.
|
|
81
|
+
2. Write the ADR. Sections: context, options considered, decision,
|
|
82
|
+
consequences, trade-offs accepted.
|
|
83
|
+
3. Commit the ADR with the implementing change, not separately. The ADR
|
|
84
|
+
is the explanation for the diff.
|
|
85
|
+
4. Record the ADR as re-derivable evidence (vault present):
|
|
86
|
+
`wicked-vault record --scope <scope> --phase decide --claim adr
|
|
87
|
+
--kind adr-doc --source "<path to the ADR>"
|
|
88
|
+
--criteria "ADR has Status / Context / Decision / Consequences"
|
|
89
|
+
--verifier 'regex_match:(?ims)^#+\s*(status|context|decision|consequences)\b'
|
|
90
|
+
--run`, then record `decision-artifact` against the committed ADR
|
|
91
|
+
(`--verifier commit_exists:<sha>` once committed, else a `regex_match`
|
|
92
|
+
on the decision line). The `--run` hashes the file's bytes now and the
|
|
93
|
+
gate re-derives the structure later — a claim you can't re-derive is
|
|
94
|
+
not evidence. No vault → fall back to `evidence_tracker.py claim`.
|
|
95
|
+
|
|
96
|
+
## When to stop
|
|
97
|
+
|
|
98
|
+
Decide is done when the produces-gate is satisfied AND the chosen option
|
|
99
|
+
is named. Check the gate — don't self-assert it:
|
|
100
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase decide` (frictionless, single claim — re-derive, don't assert) — or the full multi-claim contract via `scripts/qe/vault_gate.py gate <project_dir> --scope <scope> --phase decide`
|
|
101
|
+
(exit 0 = satisfied). This is a re-derived PASS over the declared
|
|
102
|
+
contract — the ADR was re-hashed and its structure verifier re-run. A
|
|
103
|
+
REJECT means the recorded ADR doesn't clear its contract (a missing
|
|
104
|
+
section, an uncommitted artifact) — fix the document, not the claim. An
|
|
105
|
+
`unavailable` verdict means the required vault isn't installed — run
|
|
106
|
+
`/wicked-garden:setup`. Then hand off to `build` (implement the chosen
|
|
107
|
+
path), `migrate` (when the choice is a shape change), or `ship` (when the
|
|
108
|
+
choice is a rollout strategy).
|
|
109
|
+
|
|
110
|
+
## Anti-patterns
|
|
111
|
+
|
|
112
|
+
- **Don't run decide for cheap-reversible choices.** A feature flag that
|
|
113
|
+
defaults to off does not need an ADR. The overhead exceeds the benefit.
|
|
114
|
+
- **Don't pad to 4 options.** Three honest options beats four with one
|
|
115
|
+
filler.
|
|
116
|
+
- **Don't quantify when you don't have data.** Qualitative scoring is
|
|
117
|
+
fine; spurious numbers are worse than honest LOW/MEDIUM/HIGH.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# explore — diverge then converge on open problems
|
|
2
|
+
|
|
3
|
+
When the problem space is genuinely open and a single answer would be
|
|
4
|
+
premature. Produces an option set or hypothesis, **not a decision** — that's
|
|
5
|
+
the `decide` archetype's job.
|
|
6
|
+
|
|
7
|
+
## Phase shape
|
|
8
|
+
|
|
9
|
+
| Phase | Goal |
|
|
10
|
+
|----------|----------------------------------------------------------|
|
|
11
|
+
| frame | Name the problem in one sentence. Surface assumptions. |
|
|
12
|
+
| diverge | Generate 4–8 distinct options. Aim for variety, not quality. |
|
|
13
|
+
| converge | Cluster, score qualitatively, and pick a top-3 to take forward. |
|
|
14
|
+
|
|
15
|
+
## Produces
|
|
16
|
+
|
|
17
|
+
- **Option set**: 3–8 named alternatives with one-line rationales.
|
|
18
|
+
- **Hypothesis** (when the prompt is research-shaped): testable statement
|
|
19
|
+
with a falsification condition.
|
|
20
|
+
|
|
21
|
+
## HITL
|
|
22
|
+
|
|
23
|
+
`continuous` — the user is a participant. Don't run explore as a closed
|
|
24
|
+
loop; check in after frame, after diverge, before convergence.
|
|
25
|
+
|
|
26
|
+
## How to run
|
|
27
|
+
|
|
28
|
+
### frame
|
|
29
|
+
|
|
30
|
+
1. Restate the problem in one sentence in your own words. Confirm with the user.
|
|
31
|
+
2. List 2–4 assumptions you're making. Get the user to mark them
|
|
32
|
+
"true / unknown / false".
|
|
33
|
+
3. If a critical assumption is "unknown", branch to `specify` to elicit
|
|
34
|
+
facts before continuing.
|
|
35
|
+
|
|
36
|
+
### diverge
|
|
37
|
+
|
|
38
|
+
1. Generate 4–8 options. **Variety beats quality.** Include at least one
|
|
39
|
+
"lazy" option (do nothing) and one "expensive" option (the over-built
|
|
40
|
+
answer).
|
|
41
|
+
2. Use `wicked-garden:jam:quick` or `wicked-garden:jam:brainstorm` for
|
|
42
|
+
structured ideation when the surface is unfamiliar.
|
|
43
|
+
3. Don't score yet. Just name them.
|
|
44
|
+
|
|
45
|
+
### converge
|
|
46
|
+
|
|
47
|
+
1. Cluster the options into 2–3 thematic groups.
|
|
48
|
+
2. Pick the top-3 to take forward. Each one needs:
|
|
49
|
+
- A one-line description.
|
|
50
|
+
- A risk note.
|
|
51
|
+
- A reversibility note.
|
|
52
|
+
3. Hand off to `decide` if the user wants a verdict, or to `specify` /
|
|
53
|
+
`build` if the path forward is now clear.
|
|
54
|
+
|
|
55
|
+
## When to stop
|
|
56
|
+
|
|
57
|
+
Explore is done when the user has a top-3 option set OR a falsifiable
|
|
58
|
+
hypothesis they can take forward. Don't keep diverging.
|
|
59
|
+
|
|
60
|
+
## Anti-patterns
|
|
61
|
+
|
|
62
|
+
- **Don't pick a winner inside explore.** That's the decide archetype.
|
|
63
|
+
- **Don't skip frame.** A bad problem statement makes diverge produce
|
|
64
|
+
noise.
|
|
65
|
+
- **Don't rank prematurely.** Convergence is qualitative clustering,
|
|
66
|
+
not quantitative scoring.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# incident — live-fire response to production failure
|
|
2
|
+
|
|
3
|
+
Mitigate first, RCA second, follow-up third. The cost band is variable —
|
|
4
|
+
a quick rollback may take 5 minutes; a complex multi-service incident
|
|
5
|
+
may consume a day. The phase order is **non-negotiable**: do not
|
|
6
|
+
investigate before mitigating unless investigation IS the mitigation.
|
|
7
|
+
|
|
8
|
+
## Phase shape
|
|
9
|
+
|
|
10
|
+
| Phase | Goal |
|
|
11
|
+
|--------------|-----------------------------------------------------|
|
|
12
|
+
| triage | Classify severity + scope. Page who needs paging. |
|
|
13
|
+
| investigate | Find proximate cause. Just enough to mitigate. |
|
|
14
|
+
| mitigate | Stop the bleeding. Rollback / feature flag / scaling / circuit break. |
|
|
15
|
+
| resolve | Permanent fix. May be the same as mitigate, may not. |
|
|
16
|
+
| followup | RCA writeup, action items, tests/alerting that would have caught this. |
|
|
17
|
+
|
|
18
|
+
## Produces
|
|
19
|
+
|
|
20
|
+
- **Mitigation**: the action that stopped the impact (rollback hash,
|
|
21
|
+
feature flag toggle, scaling change, etc.).
|
|
22
|
+
- **RCA**: root cause analysis writeup at `docs/postmortems/INC-{N}.md`.
|
|
23
|
+
- **Followup list**: action items with owners. Each gets a github issue
|
|
24
|
+
or tracked task.
|
|
25
|
+
|
|
26
|
+
The mitigate gate **re-derives** these via `wicked-loom` (`scripts/qe/vault_gate.py` shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the evidence is re-hashed and its verifier
|
|
27
|
+
re-run, never trusting a cached "mitigated". The honesty move here is the
|
|
28
|
+
mitigation pin — a claimed mitigation that doesn't actually make the
|
|
29
|
+
symptom check pass must REJECT. wicked-loom (the gate engine) and wicked-vault (the evidence backend) are **required** peers (installed by `/wicked-garden:setup`); if loom is unresolvable — or the vault behind it absent — the gate **fails closed** (`gate: "unavailable"`, `satisfied: false`) rather than
|
|
30
|
+
self-asserting a PASS. `--no-require` opts a throwaway/low-rigor run back
|
|
31
|
+
to the doctrine-light claim-only path.
|
|
32
|
+
|
|
33
|
+
## HITL
|
|
34
|
+
|
|
35
|
+
`hard:mitigate` — mitigate is a hard gate. Don't move past it without
|
|
36
|
+
confirming the bleeding stopped. Don't skip to followup before resolve.
|
|
37
|
+
|
|
38
|
+
## How to run
|
|
39
|
+
|
|
40
|
+
### triage
|
|
41
|
+
|
|
42
|
+
1. Classify severity: SEV-1 (revenue/data impact), SEV-2 (degraded
|
|
43
|
+
primary path), SEV-3 (degraded secondary path).
|
|
44
|
+
2. Page the right people. SEV-1 is a phone call, not a slack message.
|
|
45
|
+
3. Open an incident channel + tracking ticket. The ticket is the
|
|
46
|
+
single source of truth for the timeline.
|
|
47
|
+
4. If a vault is resolvable
|
|
48
|
+
(`scripts/qe/vault_gate.py resolve` → `available: true`), declare the
|
|
49
|
+
re-derivable contract so the mitigate gate has a bar to check against:
|
|
50
|
+
`wicked-vault init` (once per repo) then
|
|
51
|
+
`wicked-vault declare-contract --scope <scope> --phase incident --spec contract.json`.
|
|
52
|
+
`required_evidence` pins `mitigation` to a deterministic re-run of the
|
|
53
|
+
symptom check (`exit_code_eq:0`), and `rca` / `followup-list` to
|
|
54
|
+
presence/structure `regex_match` (required RCA sections present;
|
|
55
|
+
followup list non-empty). Skip silently if no vault.
|
|
56
|
+
|
|
57
|
+
### investigate
|
|
58
|
+
|
|
59
|
+
1. Look at dashboards FIRST — `wicked-garden:platform:health` /
|
|
60
|
+
`:traces` / `:incident`. Hypothesize from data, not memory.
|
|
61
|
+
2. Run `wicked-garden:platform:incident` for triage workflows.
|
|
62
|
+
3. **Time-box investigation to 15 minutes during SEV-1.** If you don't
|
|
63
|
+
have a mitigation hypothesis in 15 min, escalate; don't keep
|
|
64
|
+
investigating.
|
|
65
|
+
4. Capture the **symptom check** — the command that reproduces the break
|
|
66
|
+
(it fails now). This becomes the deterministic verifier the mitigate
|
|
67
|
+
gate re-runs: a real mitigation makes this same command pass.
|
|
68
|
+
|
|
69
|
+
### mitigate
|
|
70
|
+
|
|
71
|
+
1. Pick the cheapest reversible action that stops the impact:
|
|
72
|
+
- Rollback to last-known-good (cheapest).
|
|
73
|
+
- Feature flag off (cheap if instrumented).
|
|
74
|
+
- Scale up (when capacity is the issue).
|
|
75
|
+
- Circuit break a downstream (when a dependency is the issue).
|
|
76
|
+
2. **Confirm the bleeding stopped.** Watch the same dashboards that
|
|
77
|
+
surfaced the incident. Don't declare mitigated based on logs alone.
|
|
78
|
+
3. Record the mitigation as re-derivable evidence (vault present;
|
|
79
|
+
**wicked-vault ≥ 0.4.0**):
|
|
80
|
+
`wicked-vault record --scope <scope> --phase incident --claim mitigation
|
|
81
|
+
--kind mitigation-check --source "<the symptom-check command>"
|
|
82
|
+
--criteria "symptom check passes post-mitigation"
|
|
83
|
+
--verifier exit_code_eq:0 --actor "${WICKED_VAULT_ACTOR:-garden-prove}"
|
|
84
|
+
--run`. The **`--actor`** is mandatory because `mitigate` is a hard
|
|
85
|
+
gate: vault ≥ 0.4.0 refuses an `attest` over evidence recorded under a
|
|
86
|
+
weak/ambient identity, so without an explicit actor the independent
|
|
87
|
+
attestation fails closed and the gate can never PASS. The `--run`
|
|
88
|
+
captures the symptom check's real exit code now and the gate re-runs it
|
|
89
|
+
later — a mitigation you can't re-derive is not evidence. No vault →
|
|
90
|
+
fall back to `evidence_tracker.py claim`.
|
|
91
|
+
4. Update the incident channel: "MITIGATED via {action} at {time}".
|
|
92
|
+
|
|
93
|
+
### resolve
|
|
94
|
+
|
|
95
|
+
1. The permanent fix may be the same as the mitigation (rollback that
|
|
96
|
+
stays rolled back) or different (rollback unblocks impact, then
|
|
97
|
+
forward-fix the bug).
|
|
98
|
+
2. Test the fix in staging when possible. Cowboying a fix into prod
|
|
99
|
+
during an incident is how you get a second incident.
|
|
100
|
+
3. Land the fix; close the incident channel.
|
|
101
|
+
|
|
102
|
+
### followup
|
|
103
|
+
|
|
104
|
+
1. Write the RCA within 48h. Use the standard postmortem template.
|
|
105
|
+
2. Use `wicked-garden:incident-to-scenario-synthesizer` to convert the
|
|
106
|
+
incident into a regression scenario that would catch the same break.
|
|
107
|
+
3. Track action items in github. Don't bury them in a Slack thread.
|
|
108
|
+
4. Record the docs evidence (vault present; **wicked-vault ≥ 0.4.0**):
|
|
109
|
+
`wicked-vault record --scope <scope> --phase incident --claim rca
|
|
110
|
+
--kind doc --artifact docs/postmortems/INC-{N}.md
|
|
111
|
+
--criteria "required RCA sections present"
|
|
112
|
+
--verifier "regex_match:## Root Cause"
|
|
113
|
+
--actor "${WICKED_VAULT_ACTOR:-garden-prove}"` and
|
|
114
|
+
`wicked-vault record --scope <scope> --phase incident
|
|
115
|
+
--claim followup-list --kind doc --artifact <followup-list>
|
|
116
|
+
--criteria "followup list non-empty"
|
|
117
|
+
--verifier "regex_match:- \[" --actor "${WICKED_VAULT_ACTOR:-garden-prove}"`.
|
|
118
|
+
The **`--actor`** keeps this incident's evidence attestable by an
|
|
119
|
+
independent reviewer under vault ≥ 0.4.0. No vault →
|
|
120
|
+
`evidence_tracker.py claim`.
|
|
121
|
+
|
|
122
|
+
## When to stop
|
|
123
|
+
|
|
124
|
+
`mitigate` is a **hard gate** — confirm the bleeding stopped before
|
|
125
|
+
moving past it, and don't self-grade the mitigation. Check the gate WITH
|
|
126
|
+
judgment:
|
|
127
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase incident --with-attestations` (frictionless, single claim — re-derive, don't assert) — or the full multi-claim contract via `scripts/qe/vault_gate.py gate <project_dir> --scope <scope> --phase incident --with-attestations` **`--with-attestations`** keeps this gate `UNATTESTED`/`REJECT` until an INDEPENDENT evaluator (not the doer) runs `wicked-vault attest <artifact-id> --opinion pass` — find it via `wicked-vault list --scope <scope> --phase incident`. The doer's own evidence cannot satisfy a hard gate.
|
|
128
|
+
(exit 0 = satisfied). This re-runs the symptom check (the mitigation pin)
|
|
129
|
+
and requires an **independent attestation** — an evaluator who is *not*
|
|
130
|
+
the responder confirms the mitigation holds and the RCA is adequate,
|
|
131
|
+
recorded via `wicked-vault:analyze-evidence`. It fails closed on a
|
|
132
|
+
self-grade. A REJECT means the symptom check still fails or the
|
|
133
|
+
attestation is missing/negative — fix the work, not the claim. An
|
|
134
|
+
`unavailable` verdict means the required vault isn't installed — run
|
|
135
|
+
`/wicked-garden:setup`.
|
|
136
|
+
|
|
137
|
+
Incident is done when the gate is satisfied and the followup list is
|
|
138
|
+
owned and tracked. Hand off to `build` (forward-fix work), `migrate`
|
|
139
|
+
(when the fix is a shape change), or `review` (when the followup includes
|
|
140
|
+
auditing prevention).
|
|
141
|
+
|
|
142
|
+
## Anti-patterns
|
|
143
|
+
|
|
144
|
+
- **Don't investigate before you mitigate.** SEV-1 with users impacted
|
|
145
|
+
is not the time for root-cause analysis.
|
|
146
|
+
- **Don't skip the RCA.** "We know what happened" is what every team
|
|
147
|
+
says before the same incident recurs.
|
|
148
|
+
- **Don't blame.** Blameless postmortems aren't soft — they produce
|
|
149
|
+
better followups.
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# migrate — expand / backfill / cutover / contract
|
|
2
|
+
|
|
3
|
+
For shape changes that require both forward and rollback proof. Schema
|
|
4
|
+
migrations, data backfills, breaking API rollouts. Uses the standard
|
|
5
|
+
**expand-contract** pattern: add the new shape, make both work, switch
|
|
6
|
+
readers, switch writers, remove the old shape.
|
|
7
|
+
|
|
8
|
+
## Phase shape
|
|
9
|
+
|
|
10
|
+
| Phase | Goal |
|
|
11
|
+
|----------|-------------------------------------------------------|
|
|
12
|
+
| plan | Document the shape change. Define rollback contract. |
|
|
13
|
+
| expand | Add the new shape. **Do not remove the old shape.** |
|
|
14
|
+
| backfill | Populate the new shape from the old. Idempotent. |
|
|
15
|
+
| cutover | Switch readers/writers. **Hard gate** — staged. |
|
|
16
|
+
| contract | Remove the old shape. Only after cutover has soaked. |
|
|
17
|
+
|
|
18
|
+
## Produces
|
|
19
|
+
|
|
20
|
+
- **Shape change**: the new schema / API / data layout.
|
|
21
|
+
- **Rollback proof**: an executable rollback path. Tested in staging
|
|
22
|
+
before cutover.
|
|
23
|
+
|
|
24
|
+
The cutover gate **re-derives** these via `wicked-loom` (`scripts/qe/vault_gate.py` shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the rollback drill is re-run and the
|
|
25
|
+
shape-change post-condition re-checked, never trusting a self-asserted
|
|
26
|
+
"rolled back fine". This is the original evidence-vault use case — for a
|
|
27
|
+
migration the load-bearing honesty move is **no cutover without a
|
|
28
|
+
re-derivable rollback proof**. wicked-loom (the gate engine) and wicked-vault (the evidence backend) are **required** peers (installed by `/wicked-garden:setup`); if loom is unresolvable — or the vault behind it absent — the gate **fails closed** (`gate: "unavailable"`, `satisfied: false`) rather than
|
|
29
|
+
self-asserting a PASS. Because `cutover` is a HARD gate, the gate also
|
|
30
|
+
demands an **independent attestation**: an evaluator who is **not** the
|
|
31
|
+
migrator confirms the rollback proof and shape change are adequate
|
|
32
|
+
(recorded via `wicked-vault:analyze-evidence`), and the gate fails closed
|
|
33
|
+
on a self-grade.
|
|
34
|
+
|
|
35
|
+
## HITL
|
|
36
|
+
|
|
37
|
+
`hard:cutover-gate` — cutover is a hard gate. Don't cutover without
|
|
38
|
+
explicit user approval AND a green pre-cutover checklist (rollback
|
|
39
|
+
tested, backfill complete, dual-read working).
|
|
40
|
+
|
|
41
|
+
## Ground in the repo's method first
|
|
42
|
+
|
|
43
|
+
Before you plan, check for **wicked-understanding** repo playbooks (the opt-in
|
|
44
|
+
"how to work in THIS repo" layer). A migration lives or dies on repo-specific
|
|
45
|
+
wiring — where readers/writers are switched, how schema/config is loaded, the
|
|
46
|
+
deploy/rollback command. If its skills are present — `add-domain` / `add-feature`
|
|
47
|
+
/ `scaffold`, or the routing block in `AGENTS.md` / `CLAUDE.md` — **load the
|
|
48
|
+
matching playbook** and let it name those exact points instead of rediscovering
|
|
49
|
+
them mid-cutover. Absent? Discover it the usual way — and consider
|
|
50
|
+
`npx skills add mikeparcewski/wicked-understanding --all` so next time it's known.
|
|
51
|
+
|
|
52
|
+
## How to run
|
|
53
|
+
|
|
54
|
+
### plan
|
|
55
|
+
|
|
56
|
+
1. Document the shape change at `docs/migrations/{N}-{slug}.md`. The
|
|
57
|
+
doc names:
|
|
58
|
+
- The OLD shape, the NEW shape.
|
|
59
|
+
- The rollback contract: how to undo, who pulls the trigger, how
|
|
60
|
+
long the rollback window is.
|
|
61
|
+
- The expand-contract phase boundaries: when each step happens.
|
|
62
|
+
2. Use `wicked-garden:engineering:migration-engineer` for the canonical
|
|
63
|
+
playbook.
|
|
64
|
+
3. Declare the re-derivable contract early so the cutover gate has a bar
|
|
65
|
+
to check against. If a vault is resolvable
|
|
66
|
+
(`scripts/qe/vault_gate.py resolve` → `available: true`):
|
|
67
|
+
`wicked-vault init` (once per repo) then
|
|
68
|
+
`wicked-vault declare-contract --scope <scope> --phase migrate --spec contract.json`.
|
|
69
|
+
`required_evidence` must pin both claim_ids:
|
|
70
|
+
- `rollback-proof` → `exit_code_eq:0` on the rollback-drill command —
|
|
71
|
+
the rollback was actually exercised and succeeded, not asserted.
|
|
72
|
+
- `shape-change` → a deterministic post-condition: `exit_code_eq:0`
|
|
73
|
+
on a migration-applied verification, or `jq_pred` over a captured
|
|
74
|
+
schema-state JSON.
|
|
75
|
+
Skip silently if no vault.
|
|
76
|
+
4. **If the shape change is reversible HIGH (e.g. a column add), this
|
|
77
|
+
archetype is overkill.** Drop back to `build`.
|
|
78
|
+
|
|
79
|
+
### expand
|
|
80
|
+
|
|
81
|
+
1. Add the new shape alongside the old. **Both must work.**
|
|
82
|
+
2. New writes go to BOTH shapes (dual-write). New reads still come from
|
|
83
|
+
the old shape.
|
|
84
|
+
3. Land + deploy expand. Don't combine with backfill.
|
|
85
|
+
4. Record the **shape-change** as re-derivable evidence (vault present;
|
|
86
|
+
**wicked-vault ≥ 0.4.0**):
|
|
87
|
+
`wicked-vault record --scope <scope> --phase migrate --claim shape-change
|
|
88
|
+
--kind schema-state --source "<migration-applied verification>"
|
|
89
|
+
--criteria "<the post-condition>" --verifier exit_code_eq:0
|
|
90
|
+
--actor "${WICKED_VAULT_ACTOR:-garden-prove}" --run`. The **`--actor`**
|
|
91
|
+
is mandatory because `cutover` is a hard gate: vault ≥ 0.4.0 refuses an
|
|
92
|
+
`attest` over weak/ambient-identity evidence, so without an explicit
|
|
93
|
+
actor the independent attestation fails closed and cutover can never be
|
|
94
|
+
gated PASS. The `--run` captures the real exit code now and the gate
|
|
95
|
+
re-runs it later — a claim you can't re-derive is not evidence.
|
|
96
|
+
|
|
97
|
+
### backfill
|
|
98
|
+
|
|
99
|
+
1. Populate the new shape from the old. The backfill must be
|
|
100
|
+
**idempotent** — a half-completed backfill that gets restarted
|
|
101
|
+
should converge to the same end state as a clean run.
|
|
102
|
+
2. Run in batches; rate-limit against the production DB.
|
|
103
|
+
3. Verify completeness: the row count + checksum + spot-check sample
|
|
104
|
+
match the old shape.
|
|
105
|
+
4. **Exercise the rollback drill and record it as re-derivable evidence —
|
|
106
|
+
this must exist and re-derive BEFORE cutover** (vault present):
|
|
107
|
+
`wicked-vault record --scope <scope> --phase migrate --claim rollback-proof
|
|
108
|
+
--kind rollback-drill --source "<the rollback-drill command>"
|
|
109
|
+
--criteria "rollback exercised and succeeded" --verifier exit_code_eq:0
|
|
110
|
+
--actor "${WICKED_VAULT_ACTOR:-garden-prove}" --run`.
|
|
111
|
+
The **`--actor`** keeps the rollback proof attestable by an independent
|
|
112
|
+
reviewer under vault ≥ 0.4.0 (the hard cutover gate needs it). The
|
|
113
|
+
`--run` captures the drill's real exit code now; the gate re-runs
|
|
114
|
+
it at cutover. A rollback path you can't re-derive is not a rollback
|
|
115
|
+
path. No vault → fall back to `evidence_tracker.py claim`.
|
|
116
|
+
|
|
117
|
+
### cutover
|
|
118
|
+
|
|
119
|
+
1. **Pre-cutover checklist**:
|
|
120
|
+
- Rollback path executed in staging. (`✓` or block.)
|
|
121
|
+
- Backfill complete + verified.
|
|
122
|
+
- Dual-write running cleanly for at least 24h.
|
|
123
|
+
- Monitoring + alerts updated to surface new shape's anomalies.
|
|
124
|
+
2. **Gate before any switch** — don't self-assert the checklist. Run the
|
|
125
|
+
produces-gate WITH judgment:
|
|
126
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase migrate --with-attestations` (frictionless, single claim — re-derive, don't assert) — or the full multi-claim contract via `scripts/qe/vault_gate.py gate <project_dir> --scope <scope> --phase migrate --with-attestations` **`--with-attestations`** keeps this gate `UNATTESTED`/`REJECT` until an INDEPENDENT evaluator (not the doer) runs `wicked-vault attest <artifact-id> --opinion pass` — find it via `wicked-vault list --scope <scope> --phase migrate`. The doer's own evidence cannot satisfy a hard gate.
|
|
127
|
+
(exit 0 = satisfied). This re-derives the rollback drill and the
|
|
128
|
+
shape-change post-condition over the declared contract, and requires
|
|
129
|
+
the independent attestation (evaluator ≠ migrator, via
|
|
130
|
+
`wicked-vault:analyze-evidence`). A REJECT means the rollback proof or
|
|
131
|
+
shape change doesn't clear its contract — fix the work, not the claim.
|
|
132
|
+
An `unavailable` verdict means the required vault isn't installed — run
|
|
133
|
+
`/wicked-garden:setup`. **No cutover on a fail-closed verdict.**
|
|
134
|
+
3. **Cutover staged**: switch readers first, watch for 1h, then switch
|
|
135
|
+
writers. Don't switch both at once.
|
|
136
|
+
4. The cutover gate is HARD — explicit user "go" before each switch.
|
|
137
|
+
5. If anything looks off post-cutover: **rollback first, debug second.**
|
|
138
|
+
|
|
139
|
+
### contract
|
|
140
|
+
|
|
141
|
+
1. Wait for cutover to soak (24–72h, longer for data shape).
|
|
142
|
+
2. Stop the dual-write. Only the new shape is being written.
|
|
143
|
+
3. After another soak, drop the old shape.
|
|
144
|
+
4. Land the contract change with a docs update — the migration is now
|
|
145
|
+
complete.
|
|
146
|
+
|
|
147
|
+
## When to stop
|
|
148
|
+
|
|
149
|
+
Cutover may only proceed when the produces-gate is satisfied — check it,
|
|
150
|
+
don't self-assert it:
|
|
151
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase migrate --with-attestations` (frictionless, single claim — re-derive, don't assert) — or the full multi-claim contract via `scripts/qe/vault_gate.py gate <project_dir> --scope <scope> --phase migrate --with-attestations` **`--with-attestations`** keeps this gate `UNATTESTED`/`REJECT` until an INDEPENDENT evaluator (not the doer) runs `wicked-vault attest <artifact-id> --opinion pass` — find it via `wicked-vault list --scope <scope> --phase migrate`. The doer's own evidence cannot satisfy a hard gate.
|
|
152
|
+
(exit 0 = satisfied). This is a re-derived PASS over the declared contract
|
|
153
|
+
plus the independent attestation; a missing vault is `gate: "unavailable"`
|
|
154
|
+
/ `satisfied: false`, never a claim-only pass.
|
|
155
|
+
|
|
156
|
+
Migrate is done when the old shape is removed AND the contract phase
|
|
157
|
+
has soaked. Hand off to `review` for a post-migration audit when the
|
|
158
|
+
change touched compliance or revenue surface.
|
|
159
|
+
|
|
160
|
+
## Anti-patterns
|
|
161
|
+
|
|
162
|
+
- **Don't combine expand with backfill.** Each phase is a separate
|
|
163
|
+
ship. Combining them removes the ability to roll back to a clean
|
|
164
|
+
intermediate state.
|
|
165
|
+
- **Don't switch readers and writers simultaneously.** Stage them.
|
|
166
|
+
- **Don't contract before soaking.** "We've cutover; let's clean up
|
|
167
|
+
the old shape" is how you discover at 3am that one consumer never
|
|
168
|
+
switched.
|
|
169
|
+
- **Don't skip rollback testing.** A rollback path you haven't
|
|
170
|
+
exercised is not a rollback path.
|