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,187 @@
|
|
|
1
|
+
# modernize — discover / extract / blueprint / transform / parity / cutover
|
|
2
|
+
|
|
3
|
+
For porting a **legacy codebase to a new stack** (a language/framework/runtime
|
|
4
|
+
jump, a rehost/replatform, a rewrite from the working code as the spec). This is
|
|
5
|
+
NOT `migrate` — `migrate` is in-place expand-contract shape change on a *running*
|
|
6
|
+
system. `modernize` reverse-engineers an estate, blueprints a target, transforms
|
|
7
|
+
with leverage, and proves parity before cutting over.
|
|
8
|
+
|
|
9
|
+
This archetype is a **general modernization steering shape**. It is self-contained
|
|
10
|
+
and **composes the general `code-modernization` skills** for the heavy lifting —
|
|
11
|
+
it does not own a parallel lifecycle, and it routes the same rigor/gate discipline
|
|
12
|
+
garden already preaches into those skills.
|
|
13
|
+
|
|
14
|
+
## Phase shape
|
|
15
|
+
|
|
16
|
+
| Phase | Goal |
|
|
17
|
+
|-----------|-------------------------------------------------------------------|
|
|
18
|
+
| discover | Map the estate; resolve the legacy **stack class** via the registry. |
|
|
19
|
+
| extract | Pull out the testable business rules (what it does, not how). |
|
|
20
|
+
| blueprint | Decide the target-state architecture. Decision matrix, not prose. |
|
|
21
|
+
| transform | Codemod / regenerate with leverage. Deterministic before AI. |
|
|
22
|
+
| parity | Prove old ≡ new on identical inputs. Differential equivalence. |
|
|
23
|
+
| cutover | Switch to the new stack. **Hard gate** — staged, parity-proved. |
|
|
24
|
+
|
|
25
|
+
## Produces
|
|
26
|
+
|
|
27
|
+
- **Modernization blueprint**: the target-state architecture (target stack,
|
|
28
|
+
package/module structure, API surface, data model) + the recorded technique
|
|
29
|
+
choice per transform wave.
|
|
30
|
+
- **Parity proof**: an executable, re-derivable equivalence check — old vs new
|
|
31
|
+
on identical seeded inputs assert identical outputs (the trust, not review).
|
|
32
|
+
|
|
33
|
+
The cutover gate **re-derives** these via `wicked-loom` (`scripts/qe/vault_gate.py`
|
|
34
|
+
shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the parity
|
|
35
|
+
harness is re-run and the blueprint post-condition re-checked, never trusting a
|
|
36
|
+
self-asserted "ported fine". wicked-loom (the gate engine) and wicked-vault (the
|
|
37
|
+
evidence backend) are **required** peers (installed by `/wicked-garden:setup`); if
|
|
38
|
+
loom is unresolvable — or the vault behind it absent — the gate **fails closed**
|
|
39
|
+
(`gate: "unavailable"`, `satisfied: false`) rather than self-asserting a PASS.
|
|
40
|
+
Because `cutover` is a HARD gate, the gate also demands an **independent
|
|
41
|
+
attestation**: an evaluator who is **not** the modernizer confirms the parity proof
|
|
42
|
+
and blueprint are adequate (recorded via `wicked-vault:analyze-evidence`), and the
|
|
43
|
+
gate fails closed on a self-grade.
|
|
44
|
+
|
|
45
|
+
## HITL
|
|
46
|
+
|
|
47
|
+
`hard:cutover-gate` — cutover is a hard gate. Don't cut over to the new stack
|
|
48
|
+
without explicit user approval AND a green pre-cutover checklist (parity proved on
|
|
49
|
+
real seeded data, rollback path to the legacy system tested, traffic plan staged).
|
|
50
|
+
|
|
51
|
+
## Ground in the repo's method first
|
|
52
|
+
|
|
53
|
+
Before you discover, check for **wicked-understanding** repo playbooks (the opt-in
|
|
54
|
+
"how to work in THIS repo" layer). A modernization lives or dies on repo-specific
|
|
55
|
+
wiring — the build/run command, where the seam between old and new lives, the
|
|
56
|
+
deploy/rollback command. If its skills are present, **load the matching playbook**
|
|
57
|
+
and let it name those points instead of rediscovering them mid-cutover. Absent?
|
|
58
|
+
Discover it the usual way — and consider
|
|
59
|
+
`npx skills add mikeparcewski/wicked-understanding --all`.
|
|
60
|
+
|
|
61
|
+
## How to run
|
|
62
|
+
|
|
63
|
+
### discover
|
|
64
|
+
|
|
65
|
+
1. Survey the legacy estate: entry points, modules, data stores, external
|
|
66
|
+
contracts. Use `code-modernization:modernize-assess` for the structural read
|
|
67
|
+
and `code-modernization:modernize-brief` to frame scope + risk.
|
|
68
|
+
2. **Resolve the stack class — DO NOT fabricate a playbook.** Read the dispatch
|
|
69
|
+
truth in `.claude-plugin/stack-registry.json` via the reader:
|
|
70
|
+
```bash
|
|
71
|
+
sh "${CLAUDE_PLUGIN_ROOT}/scripts/_python.sh" \
|
|
72
|
+
"${CLAUDE_PLUGIN_ROOT}/scripts/crew/stack_registry.py" \
|
|
73
|
+
resolve --stack <stack-id>
|
|
74
|
+
```
|
|
75
|
+
- `status: wired` (exit 0) → the printed `dispatch` names the `blueprint`,
|
|
76
|
+
`transform`, and `validate` skills/gate to use in the phases below.
|
|
77
|
+
- unknown / `planned` / `none` (exit 3) → the reader returns a **capability-gap
|
|
78
|
+
task** and emits `wicked.modernize.stack_gap`. **STOP.** Create that task
|
|
79
|
+
(`TaskCreate`) and surface the gap to the user — never invent a transform for a
|
|
80
|
+
stack the system can't actually handle. This is the fail-closed ETHOS as
|
|
81
|
+
dispatch data: an honest "we don't handle this yet" beats a fabricated port.
|
|
82
|
+
- When the legacy stack genuinely is not in the registry but IS general
|
|
83
|
+
(any language → modern target), use the `generic-cross-stack` entry, which is
|
|
84
|
+
wired to the general `code-modernization` skills.
|
|
85
|
+
|
|
86
|
+
### extract
|
|
87
|
+
|
|
88
|
+
1. Mine the domain logic — calculations, validations, policies — into testable
|
|
89
|
+
Given/When/Then specs with `code-modernization:modernize-extract-rules`.
|
|
90
|
+
Separate *what the business requires* from *how the old code happened to do it*.
|
|
91
|
+
2. These extracted rules become the parity oracle: the new stack must satisfy the
|
|
92
|
+
same rules. Pin each rule so the parity phase has a bar to check.
|
|
93
|
+
|
|
94
|
+
### blueprint
|
|
95
|
+
|
|
96
|
+
1. Decide the **target-state architecture** with `code-modernization:modernize-reimagine`
|
|
97
|
+
(the registry `blueprint` field names this for the resolved stack). Capture it
|
|
98
|
+
as a **decision matrix, not a narrative**: target stack + version (pin, don't
|
|
99
|
+
"latest"), module/package structure, API surface, data model, the engines/tools.
|
|
100
|
+
2. Write the blueprint to `docs/modernization/{slug}-blueprint.md` and declare the
|
|
101
|
+
re-derivable contract early so the cutover gate has a bar. If a vault is
|
|
102
|
+
resolvable (`scripts/qe/vault_gate.py resolve` → `available: true`):
|
|
103
|
+
`wicked-vault init` then
|
|
104
|
+
`wicked-vault declare-contract --scope <scope> --phase modernize --spec contract.json`.
|
|
105
|
+
`required_evidence` must pin `parity-proof` to a deterministic verifier
|
|
106
|
+
(`exit_code_eq:0` on the differential harness). Skip silently if no vault.
|
|
107
|
+
|
|
108
|
+
### transform
|
|
109
|
+
|
|
110
|
+
1. Transform **with leverage, not an agent-grind** — follow
|
|
111
|
+
`wicked-garden:engineering:large-scale-migration` (MAP → TRANSFORM → GATE) and
|
|
112
|
+
its ranked techniques menu: **prefer the lowest-numbered technique that fully
|
|
113
|
+
covers the task** (deterministic recipe/codemod before AI-assisted waves), and
|
|
114
|
+
**record the chosen technique** per wave. Drive the bulk through a deterministic
|
|
115
|
+
codemod/codegen; touch only the self-flagged residue by hand.
|
|
116
|
+
2. Run the resolved `transform` skills (`code-modernization:modernize-map` then
|
|
117
|
+
`code-modernization:modernize-transform`) over the estate.
|
|
118
|
+
3. **Don't grandfather.** No exemptions, no "left raw with a TODO" — an exemption
|
|
119
|
+
preserves the exact legacy case the modernization exists to remove.
|
|
120
|
+
|
|
121
|
+
### parity
|
|
122
|
+
|
|
123
|
+
1. Prove **old ≡ new** on identical seeded inputs (differential equivalence) — the
|
|
124
|
+
parity proof is the trust, not a diff review. Seed broadly; an empty fixture
|
|
125
|
+
passes trivially and lies.
|
|
126
|
+
2. Harden the result with `code-modernization:modernize-harden` (security/CVEs,
|
|
127
|
+
error handling) before it carries traffic.
|
|
128
|
+
3. Record the parity proof as re-derivable evidence (vault present; **wicked-vault
|
|
129
|
+
≥ 0.4.0**):
|
|
130
|
+
`wicked-vault record --scope <scope> --phase modernize --claim parity-proof
|
|
131
|
+
--kind differential --source "<the differential harness command>"
|
|
132
|
+
--criteria "old(input) == new(input) on seeded data" --verifier exit_code_eq:0
|
|
133
|
+
--actor "${WICKED_VAULT_ACTOR:-garden-prove}" --run`. The **`--actor`** is
|
|
134
|
+
mandatory because `cutover` is a hard gate: vault ≥ 0.4.0 refuses an `attest`
|
|
135
|
+
over weak/ambient-identity evidence, so without an explicit actor the
|
|
136
|
+
independent attestation fails closed and cutover can never be gated PASS. The
|
|
137
|
+
`--run` captures the real exit code now and the gate re-runs it later — a claim
|
|
138
|
+
you can't re-derive is not evidence. No vault → fall back to
|
|
139
|
+
`evidence_tracker.py claim`.
|
|
140
|
+
|
|
141
|
+
### cutover
|
|
142
|
+
|
|
143
|
+
1. **Pre-cutover checklist**:
|
|
144
|
+
- Parity proved on real seeded data. (`✓` or block.)
|
|
145
|
+
- Rollback path to the legacy system tested.
|
|
146
|
+
- Traffic plan staged (canary first, not big-bang).
|
|
147
|
+
- Monitoring + alerts cover the new stack.
|
|
148
|
+
2. **Gate before any switch** — don't self-assert the checklist. Run the
|
|
149
|
+
produces-gate WITH judgment:
|
|
150
|
+
`scripts/qe/prove.py parity-proof --by "<command>" --scope <scope> --phase modernize --with-attestations`
|
|
151
|
+
(frictionless, single claim — re-derive, don't assert) — or the full multi-claim
|
|
152
|
+
contract via
|
|
153
|
+
`scripts/qe/vault_gate.py gate <project_dir> --scope <scope> --phase modernize --with-attestations`.
|
|
154
|
+
`--with-attestations` keeps this gate `UNATTESTED`/`REJECT` until an INDEPENDENT
|
|
155
|
+
evaluator (not the doer) runs `wicked-vault attest <artifact-id> --opinion pass`
|
|
156
|
+
— find it via `wicked-vault list --scope <scope> --phase modernize`. The doer's
|
|
157
|
+
own evidence cannot satisfy a hard gate. (exit 0 = satisfied.) A REJECT means the
|
|
158
|
+
parity proof doesn't clear its contract — fix the work, not the claim. An
|
|
159
|
+
`unavailable` verdict means the required vault isn't installed — run
|
|
160
|
+
`/wicked-garden:setup`. **No cutover on a fail-closed verdict.**
|
|
161
|
+
3. **Cutover staged**: canary the new stack, watch, ramp. Hand the rollout tail to
|
|
162
|
+
the `ship` archetype if blast radius warrants.
|
|
163
|
+
4. The cutover gate is HARD — explicit user "go" before each ramp step.
|
|
164
|
+
5. If anything looks off post-cutover: **roll back to the legacy system first,
|
|
165
|
+
debug second.**
|
|
166
|
+
|
|
167
|
+
## When to stop
|
|
168
|
+
|
|
169
|
+
Cutover may only proceed when the produces-gate is satisfied — check it, don't
|
|
170
|
+
self-assert it (see the cutover step). Modernize is done when traffic is on the new
|
|
171
|
+
stack, parity has soaked, and the blueprint matches what shipped. Hand off to
|
|
172
|
+
`review` for a post-modernization audit when the change touched compliance or
|
|
173
|
+
revenue surface.
|
|
174
|
+
|
|
175
|
+
## Anti-patterns
|
|
176
|
+
|
|
177
|
+
- **Don't fabricate a playbook for an unhandled stack.** If the registry says
|
|
178
|
+
`planned`/`none`/unknown, emit the gap task and stop. A fabricated port is the
|
|
179
|
+
exact failure the fail-closed ETHOS exists to prevent.
|
|
180
|
+
- **Don't hand-edit the bulk.** Modernization is MAP → TRANSFORM → GATE, not "fan
|
|
181
|
+
out N agents to rewrite each file." Deterministic transform first; AI only for the
|
|
182
|
+
residue, eval-gated.
|
|
183
|
+
- **Don't trust build-green as parity.** Build/test green ≠ behavior preserved —
|
|
184
|
+
*especially* for any LLM/agent surface. Prove `old ≡ new` on real inputs.
|
|
185
|
+
- **Don't big-bang the cutover.** Canary, ramp, soak — same discipline as `migrate`.
|
|
186
|
+
- **Don't skip rollback testing.** A path back to the legacy system you haven't
|
|
187
|
+
exercised is not a rollback path.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# review — independent assessment with hard verdict
|
|
2
|
+
|
|
3
|
+
When an artifact (code, design, spec, incident response) needs an
|
|
4
|
+
external quality check. Produces a verdict: APPROVE / CONDITIONAL /
|
|
5
|
+
REJECT, with a remediation list when not APPROVE.
|
|
6
|
+
|
|
7
|
+
## Phase shape
|
|
8
|
+
|
|
9
|
+
| Phase | Goal |
|
|
10
|
+
|------------------------|--------------------------------------------|
|
|
11
|
+
| scope | Name what's being reviewed and what isn't. |
|
|
12
|
+
| assess | Apply the relevant rubric / quality bar. |
|
|
13
|
+
| findings | List what's wrong, what's missing, what's good (in that order). |
|
|
14
|
+
| remediate-or-accept | Pick: fix the findings, accept them with a CONDITIONAL, or reject. |
|
|
15
|
+
|
|
16
|
+
## Produces
|
|
17
|
+
|
|
18
|
+
- **Verdict**: `APPROVE` / `CONDITIONAL` / `REJECT`.
|
|
19
|
+
- **Remediation list**: each item has an id, severity, and a concrete
|
|
20
|
+
action. Empty when APPROVE.
|
|
21
|
+
|
|
22
|
+
The final-verdict gate **re-derives** these via `wicked-loom` (`scripts/qe/vault_gate.py` shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the verdict JSON is re-validated and the
|
|
23
|
+
remediation-list structure re-checked, never trusting a self-asserted
|
|
24
|
+
"done". 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 passing
|
|
25
|
+
on a claim alone. Because final-verdict is a **hard** gate, the contract
|
|
26
|
+
also demands an **independent attestation** — the verdict must be signed
|
|
27
|
+
off by an evaluator that is NOT the worker who did the reviewed work
|
|
28
|
+
(anti-self-grade, G10). `--no-require` opts a throwaway/low-rigor run
|
|
29
|
+
back to the doctrine-light claim-only path.
|
|
30
|
+
|
|
31
|
+
## HITL
|
|
32
|
+
|
|
33
|
+
`hard:final-verdict` — the verdict is a hard gate. Auto-approve is
|
|
34
|
+
banned (banned-reviewer enforcement applies — `auto-approve-*`,
|
|
35
|
+
`fast-pass`, `just-finish-auto` are rejected at the gate).
|
|
36
|
+
|
|
37
|
+
## How to run
|
|
38
|
+
|
|
39
|
+
### scope
|
|
40
|
+
|
|
41
|
+
1. Name what's in scope: this PR, this commit, this design doc.
|
|
42
|
+
2. Name what's out of scope: don't drift into adjacent code that wasn't
|
|
43
|
+
changed.
|
|
44
|
+
3. Pick the rubric: code review uses R1–R6; design review uses
|
|
45
|
+
testability + boundary clarity; spec review uses SMART+T.
|
|
46
|
+
4. If a vault is resolvable (`scripts/qe/vault_gate.py resolve` →
|
|
47
|
+
`available: true`), declare the re-derivable contract for this phase
|
|
48
|
+
so the final-verdict gate has a bar to check against:
|
|
49
|
+
`wicked-vault init` (once per repo) then
|
|
50
|
+
`wicked-vault declare-contract --scope <scope> --phase review --spec contract.json`.
|
|
51
|
+
`required_evidence` should pin `verdict` to `exit_code_eq:0` on a
|
|
52
|
+
verdict-schema validation (`scripts/qe/verdict_schema.py`) and
|
|
53
|
+
`remediation-list` to a presence/structure `regex_match`. Because
|
|
54
|
+
this is a **hard** gate, the contract also requires a passing
|
|
55
|
+
independent `opinion_attestation` (the judgment tier). Skip silently
|
|
56
|
+
if no vault.
|
|
57
|
+
|
|
58
|
+
### assess
|
|
59
|
+
|
|
60
|
+
1. Apply the rubric. Take notes; don't write the findings yet.
|
|
61
|
+
2. Use the right specialist subagent — `pr-review-toolkit:code-reviewer`,
|
|
62
|
+
`wicked-garden:crew:reviewer`, `wicked-garden:qe:semantic-reviewer`,
|
|
63
|
+
`wicked-garden:engineering:solution-architect`, etc. Match the artifact
|
|
64
|
+
to the specialist.
|
|
65
|
+
3. For high-stakes reviews, run a council via
|
|
66
|
+
`wicked-garden:jam:council` — independent multi-model verdicts
|
|
67
|
+
catch what a single reviewer misses.
|
|
68
|
+
|
|
69
|
+
### findings
|
|
70
|
+
|
|
71
|
+
1. Write the findings list. Each finding:
|
|
72
|
+
- `id`: F-1, F-2, ...
|
|
73
|
+
- `severity`: blocker / major / minor / nit
|
|
74
|
+
- `claim`: what's wrong, in one sentence.
|
|
75
|
+
- `fix`: a concrete action.
|
|
76
|
+
2. Order: blockers first, then major, then minor. Nits last (or
|
|
77
|
+
collapsed into a "nit-pile" comment).
|
|
78
|
+
|
|
79
|
+
### remediate-or-accept
|
|
80
|
+
|
|
81
|
+
1. Decide the verdict:
|
|
82
|
+
- **APPROVE**: no blockers, no majors, the code is shippable as-is.
|
|
83
|
+
- **CONDITIONAL**: blockers/majors that have a clear fix path. Each
|
|
84
|
+
condition gets a row in the conditions manifest so the next
|
|
85
|
+
archetype (build / migrate / etc.) can pin it to the resolution
|
|
86
|
+
artifact.
|
|
87
|
+
- **REJECT**: fundamental issues. Don't bandaid; send back to the
|
|
88
|
+
author.
|
|
89
|
+
2. Write the verdict JSON. Validate with `scripts/qe/verdict_schema.py`
|
|
90
|
+
— confirms shape (verdict enum, reviewer not banned, score in
|
|
91
|
+
range, invariants per verdict type).
|
|
92
|
+
3. Sanitize free-text fields with `scripts/qe/content_sanitizer.py`
|
|
93
|
+
to strip prompt-injection patterns from reasons / findings /
|
|
94
|
+
condition descriptions before persisting.
|
|
95
|
+
4. Append to the audit log with `scripts/qe/verdict_audit.py append`
|
|
96
|
+
so the verdict is replayable.
|
|
97
|
+
Then record both produces as re-derivable evidence (vault present;
|
|
98
|
+
**wicked-vault ≥ 0.4.0**):
|
|
99
|
+
`wicked-vault record --scope <scope> --phase review --claim verdict
|
|
100
|
+
--kind verdict --source "<verdict.json>" --criteria "<the bar>"
|
|
101
|
+
--verifier exit_code_eq:0 --actor "${WICKED_VAULT_ACTOR:-garden-prove}"
|
|
102
|
+
--run` where the run is `scripts/qe/verdict_schema.py <verdict.json>`,
|
|
103
|
+
and a second `record` for `--claim remediation-list ... --verifier
|
|
104
|
+
regex_match:<pattern> --actor "${WICKED_VAULT_ACTOR:-garden-prove}"`.
|
|
105
|
+
The **`--actor`** is mandatory for a hard gate: vault ≥ 0.4.0 refuses an
|
|
106
|
+
`attest` over evidence recorded under a weak/ambient identity
|
|
107
|
+
(`created_by_source='env-user'`), so without an explicit actor the
|
|
108
|
+
independent sign-off below fails closed and the gate can never reach
|
|
109
|
+
PASS. The `--run` captures the validator's real exit code now and the
|
|
110
|
+
gate re-runs it later — a claim you can't re-derive is not evidence. No
|
|
111
|
+
vault → fall back to `evidence_tracker.py claim`.
|
|
112
|
+
Then have an **independent** evaluator sign off via the
|
|
113
|
+
`wicked-vault:analyze-evidence` skill, which records an
|
|
114
|
+
`opinion_attestation` over the frozen criteria. The evaluator must
|
|
115
|
+
NOT be the agent that did the reviewed work — the gate fails closed
|
|
116
|
+
on a self-grade. This is the "never let work self-grade its own done"
|
|
117
|
+
guarantee.
|
|
118
|
+
5. On CONDITIONAL: initialise the conditions manifest with
|
|
119
|
+
`scripts/qe/conditions_manifest.py init --from-verdict <path>`.
|
|
120
|
+
The downstream archetype calls `mark` as it satisfies each one.
|
|
121
|
+
6. Don't soften — REJECT means REJECT.
|
|
122
|
+
|
|
123
|
+
## When to stop
|
|
124
|
+
|
|
125
|
+
Review is done when the produces-gate is satisfied. Check the gate —
|
|
126
|
+
don't self-assert it:
|
|
127
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase review --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 review --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 review`. The doer's own evidence cannot satisfy a hard gate.
|
|
128
|
+
(exit 0 = satisfied). This is a re-derived PASS over the declared
|
|
129
|
+
contract. `--with-attestations` makes the gate require a passing
|
|
130
|
+
independent `opinion_attestation` recorded via the
|
|
131
|
+
`wicked-vault:analyze-evidence` skill, where the evaluator ≠ the agent
|
|
132
|
+
that did the reviewed work — it fails closed on a self-grade. A REJECT
|
|
133
|
+
means the recorded evidence does not clear its contract — fix the work,
|
|
134
|
+
not the claim. An `unavailable` verdict means the required vault isn't
|
|
135
|
+
installed — run `/wicked-garden:setup`. Then hand off to `build` (when
|
|
136
|
+
fixes are needed before ship) or `ship` (when APPROVE).
|
|
137
|
+
|
|
138
|
+
## Anti-patterns
|
|
139
|
+
|
|
140
|
+
- **Don't sandbag with nits.** If the only findings are nits, APPROVE.
|
|
141
|
+
Don't gate on cosmetic preferences.
|
|
142
|
+
- **Don't write a fix during review.** The reviewer's job is the
|
|
143
|
+
verdict; the fix is the author's.
|
|
144
|
+
- **Don't auto-approve for speed.** Banned-reviewer enforcement exists
|
|
145
|
+
for a reason. Time pressure is not a CONDITIONAL.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# ship — progressive rollout with widening blast radius
|
|
2
|
+
|
|
3
|
+
For changes that are already built and tested but need controlled exposure
|
|
4
|
+
to production. Each phase widens blast radius; gates are explicit ramps.
|
|
5
|
+
|
|
6
|
+
## Phase shape
|
|
7
|
+
|
|
8
|
+
| Phase | Goal |
|
|
9
|
+
|--------|------------------------------------------------------------|
|
|
10
|
+
| canary | Expose to a small slice (1–5% traffic, internal only, single region). |
|
|
11
|
+
| ramp | Widen progressively (10% → 25% → 50%) with monitoring at each step. |
|
|
12
|
+
| full | 100% exposure. Production traffic on the new path. |
|
|
13
|
+
| soak | Keep the new path running unchanged for 24–72h. Watch the long tail. |
|
|
14
|
+
|
|
15
|
+
## Produces
|
|
16
|
+
|
|
17
|
+
- **Rollout verdict**: APPROVE / ROLLBACK / HOLD at each gate.
|
|
18
|
+
- **SLO snapshot**: error rate, latency, saturation at each phase
|
|
19
|
+
boundary, compared to the pre-rollout baseline.
|
|
20
|
+
|
|
21
|
+
The ramp gate **re-derives** these via `wicked-loom` (`scripts/qe/vault_gate.py` shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the SLO snapshot's verifier is re-run and
|
|
22
|
+
the rollout-verdict command's exit code re-checked, never trusting a
|
|
23
|
+
cached "looked clean". Because live observation verifiers
|
|
24
|
+
(`http_status_eq`, `pr_check_status`) aren't implemented yet, **capture
|
|
25
|
+
the SLO metrics to a snapshot file** and verify with `jq_pred` over that
|
|
26
|
+
captured JSON — deterministic and re-derivable, not a one-shot live
|
|
27
|
+
probe. 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
|
|
28
|
+
self-asserting an APPROVE. `--no-require` opts a throwaway/low-rigor
|
|
29
|
+
rollout back to the doctrine-light claim-only path.
|
|
30
|
+
|
|
31
|
+
## HITL
|
|
32
|
+
|
|
33
|
+
`discrete:ramp-gates` — each phase boundary is a discrete gate. Auto-pass
|
|
34
|
+
is allowed when SLO criteria are clean and prior phases passed; auto-fail
|
|
35
|
+
(rollback) is allowed when SLO criteria breach. **Manual override is
|
|
36
|
+
always available.** Don't bypass the gate; widen the criteria.
|
|
37
|
+
|
|
38
|
+
## How to run
|
|
39
|
+
|
|
40
|
+
### canary
|
|
41
|
+
|
|
42
|
+
1. Define the slice: which traffic, what %, what region.
|
|
43
|
+
2. Define the SLO criteria: error rate threshold, latency p95/p99
|
|
44
|
+
threshold, saturation threshold. Pull baseline from the last 7d.
|
|
45
|
+
3. If a vault is resolvable
|
|
46
|
+
(`scripts/qe/vault_gate.py resolve` → `available: true`), declare the
|
|
47
|
+
re-derivable contract for this rollout so every ramp gate has a bar to
|
|
48
|
+
check against: `wicked-vault init` (once per repo) then
|
|
49
|
+
`wicked-vault declare-contract --scope <scope> --phase ship --spec
|
|
50
|
+
contract.json`. `required_evidence` pins `slo-snapshot` (kind
|
|
51
|
+
`metrics-snapshot`) to a `jq_pred` verifier over a captured metrics
|
|
52
|
+
JSON file (e.g. `.error_rate <= 0.01 and .p95_ms < 250`) and
|
|
53
|
+
`rollout-verdict` to `exit_code_eq:0` on the canary/ramp check command.
|
|
54
|
+
Skip silently if no vault.
|
|
55
|
+
4. Deploy. Watch for at least 1 hour OR 1000 requests, whichever is
|
|
56
|
+
longer.
|
|
57
|
+
5. Compare to baseline. If clean: pass to ramp. If degraded:
|
|
58
|
+
**rollback immediately**. Don't tune in production.
|
|
59
|
+
|
|
60
|
+
### ramp
|
|
61
|
+
|
|
62
|
+
1. Step the ramp at 10% → 25% → 50%. Don't skip steps.
|
|
63
|
+
2. At each step, the SLO criteria from canary still apply. New metrics
|
|
64
|
+
may surface as load scales (saturation, queue depth, lock contention).
|
|
65
|
+
3. Each step gets at least 30 minutes of soak before stepping up.
|
|
66
|
+
4. At each step, **capture fresh SLO metrics to a snapshot file** (don't
|
|
67
|
+
probe live), then record both produces as re-derivable evidence
|
|
68
|
+
(vault present):
|
|
69
|
+
`wicked-vault record --scope <scope> --phase ship --claim slo-snapshot
|
|
70
|
+
--kind metrics-snapshot --artifact <metrics.json> --criteria "<the
|
|
71
|
+
SLO bar>" --verifier 'jq_pred:.error_rate <= 0.01 and .p95_ms < 250'`
|
|
72
|
+
and `wicked-vault record --scope <scope> --phase ship --claim
|
|
73
|
+
rollout-verdict --kind check --source "<the canary/ramp check
|
|
74
|
+
command>" --criteria "verdict is APPROVE" --verifier exit_code_eq:0
|
|
75
|
+
--run`. The `jq_pred` re-runs against the captured snapshot and
|
|
76
|
+
`--run` re-checks the verdict command's real exit code — a claim you
|
|
77
|
+
can't re-derive is not evidence. Each ramp step supersedes the prior
|
|
78
|
+
snapshot, so the cross-check runs against fresh captured evidence at
|
|
79
|
+
every step. No vault → fall back to `evidence_tracker.py claim`.
|
|
80
|
+
5. The `ship` archetype owns the canonical rollout playbook.
|
|
81
|
+
|
|
82
|
+
### full
|
|
83
|
+
|
|
84
|
+
1. Step from 50% → 100%. The same SLO criteria apply.
|
|
85
|
+
2. Tag the release. Publish a one-line "shipped X" note for visibility.
|
|
86
|
+
|
|
87
|
+
### soak
|
|
88
|
+
|
|
89
|
+
1. Watch for 24–72h depending on the change's criticality.
|
|
90
|
+
2. The long tail surfaces issues canary missed: data drift, slow leaks,
|
|
91
|
+
off-hours load patterns, third-party rate limits.
|
|
92
|
+
3. Soak ends when there's no anomaly outside the baseline noise band.
|
|
93
|
+
|
|
94
|
+
## When to stop
|
|
95
|
+
|
|
96
|
+
Each ramp step advances only when the produces-gate is satisfied — check
|
|
97
|
+
it, don't self-assert it:
|
|
98
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase ship` (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 ship`
|
|
99
|
+
(exit 0 = satisfied). This is a re-derived APPROVE over the declared
|
|
100
|
+
contract, re-run at **every** ramp step against the fresh captured
|
|
101
|
+
snapshot. A REJECT means the recorded SLO snapshot doesn't clear its
|
|
102
|
+
budget — **rollback**, don't widen. An `unavailable` verdict means the
|
|
103
|
+
required vault isn't installed — run `/wicked-garden:setup`.
|
|
104
|
+
|
|
105
|
+
Ship is done when soak is clean. Hand off to `review` for a post-rollout
|
|
106
|
+
audit when the change was high-blast-radius, or close out otherwise.
|
|
107
|
+
|
|
108
|
+
## Anti-patterns
|
|
109
|
+
|
|
110
|
+
- **Don't skip ramp.** 0% → 100% is not a rollout; it's a deploy.
|
|
111
|
+
- **Don't auto-pass under degraded SLOs.** "It's only slightly worse"
|
|
112
|
+
has rolled out exactly the kind of regression rollouts are meant to
|
|
113
|
+
catch.
|
|
114
|
+
- **Don't ship and walk.** Soak is part of ship. A rollout that ends at
|
|
115
|
+
full is incomplete.
|
|
116
|
+
- **Don't treat ramp as a build phase.** No code changes during ramp.
|
|
117
|
+
Tuning happens in a follow-up build → ship cycle.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# specify — turn an ask into testable acceptance criteria
|
|
2
|
+
|
|
3
|
+
When the implementation path is clear-ish but the success criteria are
|
|
4
|
+
fuzzy. Produces SMART acceptance criteria — Specific, Measurable,
|
|
5
|
+
Achievable, Relevant, Time-bound — that downstream `build` can verify.
|
|
6
|
+
|
|
7
|
+
## Phase shape
|
|
8
|
+
|
|
9
|
+
| Phase | Goal |
|
|
10
|
+
|----------|------------------------------------------------------------|
|
|
11
|
+
| elicit | Surface the user's intent through targeted questions. |
|
|
12
|
+
| structure | Convert intent into REQ-/AC- numbered acceptance criteria.|
|
|
13
|
+
| validate | Confirm with the user that the ACs match their intent. |
|
|
14
|
+
|
|
15
|
+
## Produces
|
|
16
|
+
|
|
17
|
+
- **SMART acceptance criteria** in the form `AC-N: when X, then Y`.
|
|
18
|
+
- One-line invariants: "A response time over 500ms is a regression".
|
|
19
|
+
- Optional: a `requirements.md` artifact in the project dir.
|
|
20
|
+
|
|
21
|
+
The validate gate **re-derives** this via `wicked-loom` (`scripts/qe/vault_gate.py` shells `wicked-loom gate`, which shells `wicked-vault cross-check`): the recorded `smart-acceptance-criteria`
|
|
22
|
+
artifact is re-hashed and its structural verifier re-run, never trusting
|
|
23
|
+
a self-asserted "the ACs are testable". 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
|
|
24
|
+
than claiming a PASS. `--no-require` opts a throwaway/low-rigor run back
|
|
25
|
+
to the doctrine-light claim-only path. This is a discrete (light) gate —
|
|
26
|
+
the deterministic check proves *shape* (each AC is measurable); if the
|
|
27
|
+
AC *quality* needs an independent sign-off, the judgment tier
|
|
28
|
+
(`wicked-vault analyze-evidence` / `--with-attestations`) is available.
|
|
29
|
+
|
|
30
|
+
## HITL
|
|
31
|
+
|
|
32
|
+
`discrete:validate-gate` — the validate phase is a hard checkpoint. Don't
|
|
33
|
+
proceed past validate without explicit user agreement on the AC set.
|
|
34
|
+
|
|
35
|
+
## How to run
|
|
36
|
+
|
|
37
|
+
### elicit
|
|
38
|
+
|
|
39
|
+
1. Use `/wicked-garden:product:elicit` if requirements analysis is needed,
|
|
40
|
+
or jump in directly when the surface is small.
|
|
41
|
+
2. Ask 3–5 questions. Each should be answerable in one line and target a
|
|
42
|
+
specific dimension: scope, success metric, failure mode, edge case,
|
|
43
|
+
non-goal.
|
|
44
|
+
3. **Don't ask open-ended "tell me more about X".** Force the user to pick
|
|
45
|
+
between concrete options.
|
|
46
|
+
|
|
47
|
+
### structure
|
|
48
|
+
|
|
49
|
+
1. If a vault is resolvable
|
|
50
|
+
(`scripts/qe/vault_gate.py resolve` → `available: true`), declare the
|
|
51
|
+
re-derivable contract for this phase so the validate gate has a bar to
|
|
52
|
+
check against: `wicked-vault init` (once per repo) then
|
|
53
|
+
`wicked-vault declare-contract --scope <scope> --phase specify --spec contract.json`
|
|
54
|
+
— `required_evidence` should pin `smart-acceptance-criteria`
|
|
55
|
+
(kind `spec-doc`) to a `regex_match` verifier proving the criteria are
|
|
56
|
+
testable/measurable (e.g. each AC carries a measurable assertion or a
|
|
57
|
+
Given/When/Then shape). Skip silently if no vault.
|
|
58
|
+
2. Convert each elicited fact into one acceptance criterion: `AC-N: when
|
|
59
|
+
<trigger>, then <observable>`.
|
|
60
|
+
3. Add invariants for things that should NOT change: `INV-N: <thing> must
|
|
61
|
+
stay under <threshold>`.
|
|
62
|
+
4. Keep ACs minimal — 3–7 is the sweet spot. More than 10 means you're
|
|
63
|
+
treating ACs as design.
|
|
64
|
+
5. Record the AC artifact as re-derivable evidence (vault present;
|
|
65
|
+
**wicked-vault ≥ 0.4.0**):
|
|
66
|
+
`wicked-vault record --scope <scope> --phase specify
|
|
67
|
+
--claim smart-acceptance-criteria --kind spec-doc
|
|
68
|
+
--artifact <path/to/requirements.md>
|
|
69
|
+
--criteria "<the testability bar>"
|
|
70
|
+
--verifier regex_match:'(?im)^(AC|INV)-\d+:'
|
|
71
|
+
--actor "${WICKED_VAULT_ACTOR:-garden-prove}" --run`. The **`--actor`**
|
|
72
|
+
records under an explicit identity so that if AC quality needs an
|
|
73
|
+
independent sign-off (the optional `--with-attestations` judgment tier
|
|
74
|
+
above), vault ≥ 0.4.0 will let that attestation through instead of
|
|
75
|
+
refusing it as a weak/ambient identity. The verifier re-runs against
|
|
76
|
+
the artifact later — a claim you can't re-derive is not evidence. No
|
|
77
|
+
vault → fall back to the claim-only path.
|
|
78
|
+
|
|
79
|
+
### validate
|
|
80
|
+
|
|
81
|
+
1. Show the user the AC list.
|
|
82
|
+
2. Ask: "is anything missing? is anything wrong? is anything overspecified?"
|
|
83
|
+
3. **Hard gate**: do not exit specify until the user explicitly approves the
|
|
84
|
+
AC set. "Looks good" is enough; silence is not.
|
|
85
|
+
4. If they want changes, loop back to elicit or structure as appropriate.
|
|
86
|
+
|
|
87
|
+
## When to stop
|
|
88
|
+
|
|
89
|
+
Specify is done when the user has signed off on the AC list AND the
|
|
90
|
+
produces-gate is satisfied. Check the gate — don't self-assert it:
|
|
91
|
+
`scripts/qe/prove.py <claim> --by "<command>" --scope <scope> --phase specify` (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 specify`
|
|
92
|
+
(exit 0 = satisfied). This is a re-derived PASS over the declared
|
|
93
|
+
contract: the AC artifact is re-hashed and its structural verifier
|
|
94
|
+
re-run. A REJECT means the recorded ACs don't clear the testability bar —
|
|
95
|
+
fix the criteria, not the claim. An `unavailable` verdict means the
|
|
96
|
+
required vault isn't installed — run `/wicked-garden:setup`. Then hand off
|
|
97
|
+
to `build` (when the next step is implementation), `decide` (when you've
|
|
98
|
+
uncovered competing options), or `explore` (when the act of writing ACs
|
|
99
|
+
revealed the problem isn't well understood).
|
|
100
|
+
|
|
101
|
+
## Anti-patterns
|
|
102
|
+
|
|
103
|
+
- **Don't write design inside ACs.** "AC-1: implementation uses Redis"
|
|
104
|
+
is a design choice, not an acceptance criterion. Use `decide` for that.
|
|
105
|
+
- **Don't merge multiple criteria into one.** Split them so each is
|
|
106
|
+
individually testable.
|
|
107
|
+
- **Don't auto-pass the validate gate.** The whole point is the user
|
|
108
|
+
agrees this is what they wanted.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# triage — classify and route
|
|
2
|
+
|
|
3
|
+
The entry archetype. Every prompt that doesn't already carry an archetype tag
|
|
4
|
+
starts here. Triage is not a workflow on its own — it's a routing decision.
|
|
5
|
+
|
|
6
|
+
## Phase shape
|
|
7
|
+
|
|
8
|
+
| Phase | Goal |
|
|
9
|
+
|----------|-----------------------------------------------|
|
|
10
|
+
| classify | Pick the right archetype (or set of archetypes) and hand off. |
|
|
11
|
+
|
|
12
|
+
## Produces
|
|
13
|
+
|
|
14
|
+
- A routing decision: which archetype(s) this prompt belongs in.
|
|
15
|
+
|
|
16
|
+
## HITL
|
|
17
|
+
|
|
18
|
+
`none` — fully automated. The detector runs, the directive emits, the
|
|
19
|
+
agent picks up the playbook from there.
|
|
20
|
+
|
|
21
|
+
## How to run
|
|
22
|
+
|
|
23
|
+
1. **Read the prompt.** What is the user actually asking for?
|
|
24
|
+
2. **Run the detector.** Call `scripts/crew/archetypes_v11.py detect` with
|
|
25
|
+
the prompt and any known signals.
|
|
26
|
+
3. **Inspect the matches.**
|
|
27
|
+
- Single high-confidence match (≥ 0.7): hand off to that archetype's
|
|
28
|
+
playbook.
|
|
29
|
+
- Multiple medium matches (0.5–0.7): pick the one with the strongest
|
|
30
|
+
evidence; if you can't, ask the user which shape they want.
|
|
31
|
+
- Only triage matched: ask a clarifying question naming what's
|
|
32
|
+
missing — usually the work isn't ambiguous, the prompt is.
|
|
33
|
+
|
|
34
|
+
## When to stop in triage
|
|
35
|
+
|
|
36
|
+
Triage exits as soon as you've named the next archetype. Do **not**
|
|
37
|
+
do work inside triage — every minute spent here is a minute the
|
|
38
|
+
real work isn't moving.
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
| Prompt | Routes to |
|
|
43
|
+
|---------------------------------------------------|----------------------|
|
|
44
|
+
| "implement caching for the dashboard" | build |
|
|
45
|
+
| "drop legacy_id column" | build + migrate |
|
|
46
|
+
| "checkout is down — 5xx spiking" | incident |
|
|
47
|
+
| "redis or memcached for sessions?" | decide |
|
|
48
|
+
| "review the new auth middleware" | review |
|
|
49
|
+
| "what should we do about rate limiting?" | explore |
|
|
50
|
+
| "write acceptance criteria for the export" | specify |
|
|
51
|
+
| "kick off canary for the pricing change" | ship |
|
|
52
|
+
| "fix typo in README" | (suppressed — simple-edit, no archetype) |
|
|
53
|
+
|
|
54
|
+
## Anti-patterns
|
|
55
|
+
|
|
56
|
+
- **Don't classify into a tier.** "standard rigor" is not an archetype.
|
|
57
|
+
Triage picks a *shape*, not a depth dial.
|
|
58
|
+
- **Don't stack triage onto an active archetype.** If the user is already
|
|
59
|
+
inside `build`, a follow-up "and also run the migration" doesn't restart
|
|
60
|
+
triage — it adds `migrate` as a co-archetype.
|
|
61
|
+
- **Don't write code in triage.** If your hands are at the keyboard,
|
|
62
|
+
you've already left triage.
|