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,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Guardrail Implementation - Actions and Approvals
|
|
6
|
+
|
|
7
|
+
Action whitelisting, pre-flight validation, sandboxed execution, and approval workflows.
|
|
8
|
+
|
|
9
|
+
## Action Guardrails
|
|
10
|
+
|
|
11
|
+
### Pattern 7: Action Whitelisting Framework
|
|
12
|
+
|
|
13
|
+
Comprehensive whitelisting:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
class ActionWhitelist:
|
|
17
|
+
def __init__(self):
|
|
18
|
+
self.allowed_actions = {}
|
|
19
|
+
|
|
20
|
+
def register_action(self, name, allowed_params, constraints):
|
|
21
|
+
"""Register an allowed action with parameter constraints."""
|
|
22
|
+
self.allowed_actions[name] = {
|
|
23
|
+
'params': allowed_params,
|
|
24
|
+
'constraints': constraints
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async def validate_action(self, action_name, params):
|
|
28
|
+
if action_name not in self.allowed_actions:
|
|
29
|
+
raise ForbiddenActionError(f"Action '{action_name}' not whitelisted")
|
|
30
|
+
|
|
31
|
+
action_spec = self.allowed_actions[action_name]
|
|
32
|
+
|
|
33
|
+
# Validate parameters
|
|
34
|
+
for param, value in params.items():
|
|
35
|
+
if param not in action_spec['params']:
|
|
36
|
+
raise ForbiddenParameterError(f"Parameter '{param}' not allowed")
|
|
37
|
+
|
|
38
|
+
# Check parameter constraints
|
|
39
|
+
param_constraints = action_spec['params'][param]
|
|
40
|
+
if not self._validate_constraint(value, param_constraints):
|
|
41
|
+
raise ConstraintViolationError(
|
|
42
|
+
f"Parameter '{param}' violates constraints"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# Check action-level constraints
|
|
46
|
+
for constraint in action_spec['constraints']:
|
|
47
|
+
if not await constraint.check(action_name, params):
|
|
48
|
+
raise ConstraintViolationError(constraint.reason)
|
|
49
|
+
|
|
50
|
+
return True
|
|
51
|
+
|
|
52
|
+
# Example: Register safe actions
|
|
53
|
+
whitelist = ActionWhitelist()
|
|
54
|
+
whitelist.register_action(
|
|
55
|
+
name='read_file',
|
|
56
|
+
allowed_params={
|
|
57
|
+
'path': {'type': str, 'pattern': r'^/safe/path/.*'},
|
|
58
|
+
'max_size': {'type': int, 'max': 1000000}
|
|
59
|
+
},
|
|
60
|
+
constraints=[
|
|
61
|
+
NoProductionAccessConstraint(),
|
|
62
|
+
RateLimitConstraint(max_per_hour=100)
|
|
63
|
+
]
|
|
64
|
+
)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Pattern 8: Pre-Flight Action Validation
|
|
68
|
+
|
|
69
|
+
Validate before executing:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
class PreFlightValidator:
|
|
73
|
+
async def validate(self, action):
|
|
74
|
+
validations = [
|
|
75
|
+
self.check_authorization(action),
|
|
76
|
+
self.check_resource_limits(action),
|
|
77
|
+
self.check_blast_radius(action),
|
|
78
|
+
self.check_reversibility(action)
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
results = await asyncio.gather(*validations)
|
|
82
|
+
|
|
83
|
+
for result in results:
|
|
84
|
+
if not result.passed:
|
|
85
|
+
raise PreFlightFailure(
|
|
86
|
+
check=result.check_name,
|
|
87
|
+
reason=result.reason
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
async def check_blast_radius(self, action):
|
|
91
|
+
"""Check potential impact of action."""
|
|
92
|
+
if action.type == 'delete':
|
|
93
|
+
affected_count = await self.estimate_affected_records(action)
|
|
94
|
+
if affected_count > 1000:
|
|
95
|
+
return ValidationResult(
|
|
96
|
+
passed=False,
|
|
97
|
+
check_name='blast_radius',
|
|
98
|
+
reason=f'Would affect {affected_count} records (limit: 1000)'
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
return ValidationResult(passed=True)
|
|
102
|
+
|
|
103
|
+
async def check_reversibility(self, action):
|
|
104
|
+
"""Ensure action can be reversed."""
|
|
105
|
+
if action.is_irreversible() and not action.has_approval():
|
|
106
|
+
return ValidationResult(
|
|
107
|
+
passed=False,
|
|
108
|
+
check_name='reversibility',
|
|
109
|
+
reason='Irreversible action requires approval'
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
return ValidationResult(passed=True)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Pattern 9: Sandboxed Execution
|
|
116
|
+
|
|
117
|
+
Execute actions in isolated environment:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
class SandboxedExecutor:
|
|
121
|
+
def __init__(self):
|
|
122
|
+
self.sandbox = Sandbox(
|
|
123
|
+
network_access=False,
|
|
124
|
+
file_system_access='/tmp/sandbox',
|
|
125
|
+
max_memory_mb=512,
|
|
126
|
+
max_cpu_percent=50,
|
|
127
|
+
timeout_seconds=30
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
async def execute(self, action):
|
|
131
|
+
# Prepare sandbox
|
|
132
|
+
await self.sandbox.reset()
|
|
133
|
+
|
|
134
|
+
# Copy necessary files/data into sandbox
|
|
135
|
+
await self.sandbox.copy_in(action.required_files)
|
|
136
|
+
|
|
137
|
+
try:
|
|
138
|
+
# Execute in sandbox
|
|
139
|
+
result = await self.sandbox.run(
|
|
140
|
+
action.command,
|
|
141
|
+
timeout=action.timeout or 30
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Copy results out
|
|
145
|
+
output_files = await self.sandbox.copy_out('/tmp/sandbox/output')
|
|
146
|
+
|
|
147
|
+
return ExecutionResult(
|
|
148
|
+
success=True,
|
|
149
|
+
output=result.stdout,
|
|
150
|
+
files=output_files
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
except TimeoutError:
|
|
154
|
+
raise ExecutionTimeoutError()
|
|
155
|
+
|
|
156
|
+
except MemoryError:
|
|
157
|
+
raise MemoryLimitExceeded()
|
|
158
|
+
|
|
159
|
+
finally:
|
|
160
|
+
# Always clean up
|
|
161
|
+
await self.sandbox.cleanup()
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Approval Guardrails
|
|
165
|
+
|
|
166
|
+
### Pattern 10: Risk-Based Approval Routing
|
|
167
|
+
|
|
168
|
+
Route to appropriate approver based on risk:
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
class ApprovalRouter:
|
|
172
|
+
def __init__(self):
|
|
173
|
+
self.risk_assessor = RiskAssessor()
|
|
174
|
+
|
|
175
|
+
async def route_for_approval(self, action):
|
|
176
|
+
risk_score = await self.risk_assessor.assess(action)
|
|
177
|
+
|
|
178
|
+
if risk_score >= 0.8:
|
|
179
|
+
# High risk - requires senior approval
|
|
180
|
+
approvers = ['senior-engineer@company.com', 'security@company.com']
|
|
181
|
+
timeout = timedelta(hours=4)
|
|
182
|
+
|
|
183
|
+
elif risk_score >= 0.5:
|
|
184
|
+
# Medium risk - requires team lead approval
|
|
185
|
+
approvers = ['team-lead@company.com']
|
|
186
|
+
timeout = timedelta(hours=1)
|
|
187
|
+
|
|
188
|
+
elif risk_score >= 0.3:
|
|
189
|
+
# Low risk - any team member can approve
|
|
190
|
+
approvers = self.get_on_call_approvers()
|
|
191
|
+
timeout = timedelta(minutes=30)
|
|
192
|
+
|
|
193
|
+
else:
|
|
194
|
+
# Very low risk - auto-approve
|
|
195
|
+
return ApprovalResult(approved=True, auto_approved=True)
|
|
196
|
+
|
|
197
|
+
return await self.request_approval(
|
|
198
|
+
action=action,
|
|
199
|
+
approvers=approvers,
|
|
200
|
+
timeout=timeout,
|
|
201
|
+
risk_score=risk_score
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
class RiskAssessor:
|
|
205
|
+
async def assess(self, action):
|
|
206
|
+
factors = {
|
|
207
|
+
'is_production': 0.4 if action.env == 'production' else 0.0,
|
|
208
|
+
'is_destructive': 0.3 if action.is_destructive else 0.0,
|
|
209
|
+
'is_irreversible': 0.2 if action.is_irreversible else 0.0,
|
|
210
|
+
'data_volume': min(action.affected_records / 10000, 0.1),
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return sum(factors.values())
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Pattern 11: Approval With Context
|
|
217
|
+
|
|
218
|
+
Provide full context to approver:
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
class ContextualApproval:
|
|
222
|
+
async def request_approval(self, action):
|
|
223
|
+
# Gather context
|
|
224
|
+
context = {
|
|
225
|
+
'action': {
|
|
226
|
+
'type': action.type,
|
|
227
|
+
'description': action.description,
|
|
228
|
+
'parameters': action.params
|
|
229
|
+
},
|
|
230
|
+
'risk_analysis': await self.analyze_risk(action),
|
|
231
|
+
'impact_assessment': await self.assess_impact(action),
|
|
232
|
+
'alternatives': await self.suggest_alternatives(action),
|
|
233
|
+
'rollback_plan': await self.create_rollback_plan(action),
|
|
234
|
+
'similar_past_actions': await self.find_similar_actions(action)
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
# Send to approver with full context
|
|
238
|
+
approval_request = ApprovalRequest(
|
|
239
|
+
action=action,
|
|
240
|
+
context=context,
|
|
241
|
+
requested_by=action.agent_id,
|
|
242
|
+
requested_at=datetime.now()
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
return await self.approval_service.submit(approval_request)
|
|
246
|
+
```
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Guardrail Implementation - Input and Output Patterns
|
|
6
|
+
|
|
7
|
+
Input validation, sanitization, prompt injection detection, and output filtering patterns.
|
|
8
|
+
|
|
9
|
+
## Input Guardrails
|
|
10
|
+
|
|
11
|
+
### Pattern 1: Layered Input Validation
|
|
12
|
+
|
|
13
|
+
Validate at multiple levels for defense in depth.
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
class InputGuardrails:
|
|
17
|
+
def __init__(self):
|
|
18
|
+
self.validators = [
|
|
19
|
+
SizeValidator(max_size=10000),
|
|
20
|
+
EncodingValidator(),
|
|
21
|
+
PromptInjectionDetector(),
|
|
22
|
+
PIIDetector(),
|
|
23
|
+
ContentFilter()
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
async def validate(self, user_input):
|
|
27
|
+
results = []
|
|
28
|
+
|
|
29
|
+
for validator in self.validators:
|
|
30
|
+
result = await validator.validate(user_input)
|
|
31
|
+
results.append(result)
|
|
32
|
+
|
|
33
|
+
if not result.is_valid:
|
|
34
|
+
raise ValidationError(
|
|
35
|
+
validator=validator.name,
|
|
36
|
+
reason=result.reason,
|
|
37
|
+
severity=result.severity
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return ValidationResult(valid=True, checks=results)
|
|
41
|
+
|
|
42
|
+
# Usage
|
|
43
|
+
guardrails = InputGuardrails()
|
|
44
|
+
await guardrails.validate(user_input)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Pattern 2: Sanitization Pipeline
|
|
48
|
+
|
|
49
|
+
Clean inputs progressively:
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
class SanitizationPipeline:
|
|
53
|
+
@staticmethod
|
|
54
|
+
async def sanitize(input_text):
|
|
55
|
+
# Step 1: Normalize
|
|
56
|
+
text = unicodedata.normalize('NFKC', input_text)
|
|
57
|
+
|
|
58
|
+
# Step 2: Remove null bytes
|
|
59
|
+
text = text.replace('\x00', '')
|
|
60
|
+
|
|
61
|
+
# Step 3: Strip control characters (except common whitespace)
|
|
62
|
+
text = ''.join(char for char in text
|
|
63
|
+
if unicodedata.category(char)[0] != 'C'
|
|
64
|
+
or char in '\n\r\t')
|
|
65
|
+
|
|
66
|
+
# Step 4: Limit line length
|
|
67
|
+
lines = text.split('\n')
|
|
68
|
+
text = '\n'.join(line[:1000] for line in lines)
|
|
69
|
+
|
|
70
|
+
# Step 5: Remove injection patterns
|
|
71
|
+
text = await PromptInjectionFilter.filter(text)
|
|
72
|
+
|
|
73
|
+
return text
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Pattern 3: Prompt Injection Detection
|
|
77
|
+
|
|
78
|
+
Detect common injection patterns:
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
class PromptInjectionDetector:
|
|
82
|
+
SUSPICIOUS_PATTERNS = [
|
|
83
|
+
r'ignore\s+(previous|above|all)\s+instructions?',
|
|
84
|
+
r'disregard\s+(previous|above|all)',
|
|
85
|
+
r'forget\s+(previous|above|all)',
|
|
86
|
+
r'new\s+instructions?:',
|
|
87
|
+
r'system:',
|
|
88
|
+
r'<\s*system\s*>',
|
|
89
|
+
r'you\s+are\s+now',
|
|
90
|
+
r'act\s+as\s+if',
|
|
91
|
+
r'pretend\s+you\s+are',
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
async def validate(self, text):
|
|
95
|
+
text_lower = text.lower()
|
|
96
|
+
|
|
97
|
+
for pattern in self.SUSPICIOUS_PATTERNS:
|
|
98
|
+
if re.search(pattern, text_lower):
|
|
99
|
+
return ValidationResult(
|
|
100
|
+
is_valid=False,
|
|
101
|
+
reason=f"Suspicious pattern detected: {pattern}",
|
|
102
|
+
severity="high"
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Check for delimiter confusion
|
|
106
|
+
if '```' in text and 'system' in text_lower:
|
|
107
|
+
return ValidationResult(
|
|
108
|
+
is_valid=False,
|
|
109
|
+
reason="Potential delimiter confusion attack",
|
|
110
|
+
severity="medium"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
return ValidationResult(is_valid=True)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Output Guardrails
|
|
117
|
+
|
|
118
|
+
### Pattern 4: Schema-Based Output Validation
|
|
119
|
+
|
|
120
|
+
Enforce structured outputs:
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
from pydantic import BaseModel, Field, validator
|
|
124
|
+
|
|
125
|
+
class SafeOutput(BaseModel):
|
|
126
|
+
"""Base class for all agent outputs with built-in safety."""
|
|
127
|
+
|
|
128
|
+
content: str = Field(..., max_length=10000)
|
|
129
|
+
confidence: float = Field(..., ge=0.0, le=1.0)
|
|
130
|
+
sources: List[str] = Field(default_factory=list)
|
|
131
|
+
contains_pii: bool = False
|
|
132
|
+
|
|
133
|
+
@validator('content')
|
|
134
|
+
def no_sensitive_data(cls, v):
|
|
135
|
+
# Check for common PII patterns
|
|
136
|
+
pii_patterns = {
|
|
137
|
+
'email': r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
|
|
138
|
+
'ssn': r'\b\d{3}-\d{2}-\d{4}\b',
|
|
139
|
+
'credit_card': r'\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b',
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
for pii_type, pattern in pii_patterns.items():
|
|
143
|
+
if re.search(pattern, v):
|
|
144
|
+
raise ValueError(f'Output contains {pii_type}')
|
|
145
|
+
|
|
146
|
+
return v
|
|
147
|
+
|
|
148
|
+
@validator('confidence')
|
|
149
|
+
def sufficient_confidence(cls, v):
|
|
150
|
+
if v < 0.3:
|
|
151
|
+
raise ValueError('Confidence too low for production use')
|
|
152
|
+
return v
|
|
153
|
+
|
|
154
|
+
# Force agent to use structured output
|
|
155
|
+
class SafeAgent:
|
|
156
|
+
async def generate(self, prompt):
|
|
157
|
+
raw_output = await self.llm.generate(prompt)
|
|
158
|
+
# Parse into validated structure
|
|
159
|
+
return SafeOutput.parse_obj(raw_output)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Pattern 5: Multi-Stage Output Filtering
|
|
163
|
+
|
|
164
|
+
Filter outputs progressively:
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
class OutputGuardrails:
|
|
168
|
+
def __init__(self):
|
|
169
|
+
self.filters = [
|
|
170
|
+
PIIRedactor(),
|
|
171
|
+
ContentSafetyFilter(),
|
|
172
|
+
FactualityChecker(),
|
|
173
|
+
BiasDetector()
|
|
174
|
+
]
|
|
175
|
+
|
|
176
|
+
async def filter(self, output):
|
|
177
|
+
filtered_output = output
|
|
178
|
+
|
|
179
|
+
for filter in self.filters:
|
|
180
|
+
result = await filter.process(filtered_output)
|
|
181
|
+
|
|
182
|
+
if result.should_block:
|
|
183
|
+
raise UnsafeOutputError(
|
|
184
|
+
filter=filter.name,
|
|
185
|
+
reason=result.reason
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
filtered_output = result.filtered_content
|
|
189
|
+
|
|
190
|
+
return filtered_output
|
|
191
|
+
|
|
192
|
+
# Example: PII Redactor
|
|
193
|
+
class PIIRedactor:
|
|
194
|
+
async def process(self, text):
|
|
195
|
+
findings = detect_pii(text)
|
|
196
|
+
|
|
197
|
+
if findings:
|
|
198
|
+
# Redact PII
|
|
199
|
+
redacted = redact_pii(text)
|
|
200
|
+
return FilterResult(
|
|
201
|
+
should_block=False, # Allow but redact
|
|
202
|
+
filtered_content=redacted,
|
|
203
|
+
warnings=[f"Redacted {len(findings)} PII instances"]
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
return FilterResult(
|
|
207
|
+
should_block=False,
|
|
208
|
+
filtered_content=text
|
|
209
|
+
)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Pattern 6: Confidence-Based Output Handling
|
|
213
|
+
|
|
214
|
+
Different handling based on confidence:
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
class ConfidenceBasedOutputHandler:
|
|
218
|
+
async def handle(self, output):
|
|
219
|
+
confidence = output.confidence
|
|
220
|
+
|
|
221
|
+
if confidence >= 0.9:
|
|
222
|
+
# High confidence - auto-approve
|
|
223
|
+
return await self.auto_approve(output)
|
|
224
|
+
|
|
225
|
+
elif confidence >= 0.7:
|
|
226
|
+
# Medium confidence - human review optional
|
|
227
|
+
return await self.queue_for_review(output, priority="low")
|
|
228
|
+
|
|
229
|
+
elif confidence >= 0.5:
|
|
230
|
+
# Low confidence - require human review
|
|
231
|
+
return await self.require_human_review(output)
|
|
232
|
+
|
|
233
|
+
else:
|
|
234
|
+
# Very low confidence - reject
|
|
235
|
+
raise LowConfidenceError(
|
|
236
|
+
f"Confidence {confidence} below threshold"
|
|
237
|
+
)
|
|
238
|
+
```
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Guardrail Implementation - Resources and Monitoring
|
|
6
|
+
|
|
7
|
+
Resource limiting, adaptive rate limiting, anomaly detection, and complete guardrail system architecture.
|
|
8
|
+
|
|
9
|
+
## Resource Guardrails
|
|
10
|
+
|
|
11
|
+
### Pattern 12: Multi-Dimensional Resource Limiting
|
|
12
|
+
|
|
13
|
+
Track multiple resource types:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
class ResourceGovernor:
|
|
17
|
+
def __init__(self, limits):
|
|
18
|
+
self.limits = limits
|
|
19
|
+
self.usage = {
|
|
20
|
+
'tokens': 0,
|
|
21
|
+
'api_calls': 0,
|
|
22
|
+
'execution_time': 0,
|
|
23
|
+
'memory_mb': 0,
|
|
24
|
+
'cost_usd': 0.0
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async def check_and_track(self, resource_type, amount):
|
|
28
|
+
# Check limit
|
|
29
|
+
if self.usage[resource_type] + amount > self.limits[resource_type]:
|
|
30
|
+
raise ResourceLimitExceeded(
|
|
31
|
+
resource=resource_type,
|
|
32
|
+
used=self.usage[resource_type],
|
|
33
|
+
requested=amount,
|
|
34
|
+
limit=self.limits[resource_type]
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Track usage
|
|
38
|
+
self.usage[resource_type] += amount
|
|
39
|
+
|
|
40
|
+
def get_remaining(self, resource_type):
|
|
41
|
+
return self.limits[resource_type] - self.usage[resource_type]
|
|
42
|
+
|
|
43
|
+
# Usage
|
|
44
|
+
governor = ResourceGovernor(limits={
|
|
45
|
+
'tokens': 100000,
|
|
46
|
+
'api_calls': 1000,
|
|
47
|
+
'execution_time': 300, # seconds
|
|
48
|
+
'memory_mb': 1024,
|
|
49
|
+
'cost_usd': 10.0
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
# Before each operation
|
|
53
|
+
await governor.check_and_track('tokens', estimated_tokens)
|
|
54
|
+
await governor.check_and_track('api_calls', 1)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Pattern 13: Adaptive Rate Limiting
|
|
58
|
+
|
|
59
|
+
Adjust limits based on behavior:
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
class AdaptiveRateLimiter:
|
|
63
|
+
def __init__(self):
|
|
64
|
+
self.base_limit = 100 # requests per hour
|
|
65
|
+
self.user_limits = {}
|
|
66
|
+
|
|
67
|
+
async def check_limit(self, user_id):
|
|
68
|
+
limit = self.get_user_limit(user_id)
|
|
69
|
+
usage = await self.get_usage(user_id)
|
|
70
|
+
|
|
71
|
+
if usage >= limit:
|
|
72
|
+
raise RateLimitExceeded()
|
|
73
|
+
|
|
74
|
+
await self.record_request(user_id)
|
|
75
|
+
|
|
76
|
+
def get_user_limit(self, user_id):
|
|
77
|
+
if user_id not in self.user_limits:
|
|
78
|
+
self.user_limits[user_id] = {
|
|
79
|
+
'limit': self.base_limit,
|
|
80
|
+
'trust_score': 0.5
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# Adjust limit based on trust score
|
|
84
|
+
trust_score = self.user_limits[user_id]['trust_score']
|
|
85
|
+
return int(self.base_limit * (0.5 + trust_score))
|
|
86
|
+
|
|
87
|
+
async def update_trust_score(self, user_id, behavior):
|
|
88
|
+
"""Adjust trust based on behavior."""
|
|
89
|
+
if behavior == 'good':
|
|
90
|
+
# Increase trust, raise limit
|
|
91
|
+
self.user_limits[user_id]['trust_score'] = min(
|
|
92
|
+
1.0,
|
|
93
|
+
self.user_limits[user_id]['trust_score'] + 0.1
|
|
94
|
+
)
|
|
95
|
+
elif behavior == 'bad':
|
|
96
|
+
# Decrease trust, lower limit
|
|
97
|
+
self.user_limits[user_id]['trust_score'] = max(
|
|
98
|
+
0.0,
|
|
99
|
+
self.user_limits[user_id]['trust_score'] - 0.2
|
|
100
|
+
)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Monitoring Guardrails
|
|
104
|
+
|
|
105
|
+
### Pattern 14: Anomaly Detection
|
|
106
|
+
|
|
107
|
+
Detect unusual patterns:
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
class AnomalyDetector:
|
|
111
|
+
def __init__(self):
|
|
112
|
+
self.baseline = self.load_baseline()
|
|
113
|
+
|
|
114
|
+
async def check_for_anomalies(self, agent_id, action):
|
|
115
|
+
features = self.extract_features(action)
|
|
116
|
+
|
|
117
|
+
# Compare to baseline
|
|
118
|
+
deviation = self.calculate_deviation(features, self.baseline[agent_id])
|
|
119
|
+
|
|
120
|
+
if deviation > 2.0: # 2 standard deviations
|
|
121
|
+
await self.alert_anomaly(
|
|
122
|
+
agent_id=agent_id,
|
|
123
|
+
action=action,
|
|
124
|
+
deviation=deviation,
|
|
125
|
+
features=features
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
# Optionally block anomalous action
|
|
129
|
+
if deviation > 3.0:
|
|
130
|
+
raise AnomalousActionBlocked()
|
|
131
|
+
|
|
132
|
+
def extract_features(self, action):
|
|
133
|
+
return {
|
|
134
|
+
'time_of_day': datetime.now().hour,
|
|
135
|
+
'action_type': action.type,
|
|
136
|
+
'parameter_count': len(action.params),
|
|
137
|
+
'affected_records': action.affected_records
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Complete Guardrail System
|
|
142
|
+
|
|
143
|
+
### Pattern 15: Layered Guardrail Architecture
|
|
144
|
+
|
|
145
|
+
Combine all patterns:
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
class ComprehensiveGuardrails:
|
|
149
|
+
def __init__(self):
|
|
150
|
+
# Input layer
|
|
151
|
+
self.input_validators = InputGuardrails()
|
|
152
|
+
|
|
153
|
+
# Output layer
|
|
154
|
+
self.output_filters = OutputGuardrails()
|
|
155
|
+
|
|
156
|
+
# Action layer
|
|
157
|
+
self.action_whitelist = ActionWhitelist()
|
|
158
|
+
self.preflight = PreFlightValidator()
|
|
159
|
+
self.approval_router = ApprovalRouter()
|
|
160
|
+
|
|
161
|
+
# Resource layer
|
|
162
|
+
self.resource_governor = ResourceGovernor(...)
|
|
163
|
+
|
|
164
|
+
# Monitoring layer
|
|
165
|
+
self.anomaly_detector = AnomalyDetector()
|
|
166
|
+
self.audit_logger = AuditLogger()
|
|
167
|
+
|
|
168
|
+
async def execute_safely(self, user_input, agent):
|
|
169
|
+
# 1. Input guardrails
|
|
170
|
+
validated_input = await self.input_validators.validate(user_input)
|
|
171
|
+
|
|
172
|
+
# 2. Process through agent
|
|
173
|
+
raw_output = await agent.process(validated_input)
|
|
174
|
+
|
|
175
|
+
# 3. Output guardrails
|
|
176
|
+
safe_output = await self.output_filters.filter(raw_output)
|
|
177
|
+
|
|
178
|
+
# If output includes actions...
|
|
179
|
+
if safe_output.proposed_actions:
|
|
180
|
+
for action in safe_output.proposed_actions:
|
|
181
|
+
# 4. Action guardrails
|
|
182
|
+
await self.action_whitelist.validate_action(
|
|
183
|
+
action.name,
|
|
184
|
+
action.params
|
|
185
|
+
)
|
|
186
|
+
await self.preflight.validate(action)
|
|
187
|
+
|
|
188
|
+
# 5. Approval if needed
|
|
189
|
+
if action.requires_approval():
|
|
190
|
+
approval = await self.approval_router.route_for_approval(action)
|
|
191
|
+
if not approval.approved:
|
|
192
|
+
continue
|
|
193
|
+
|
|
194
|
+
# 6. Resource check
|
|
195
|
+
await self.resource_governor.check_and_track(
|
|
196
|
+
'api_calls', 1
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# 7. Anomaly detection
|
|
200
|
+
await self.anomaly_detector.check_for_anomalies(
|
|
201
|
+
agent.id,
|
|
202
|
+
action
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
# 8. Execute with audit
|
|
206
|
+
result = await self.execute_with_audit(action)
|
|
207
|
+
|
|
208
|
+
return safe_output
|
|
209
|
+
```
|