@soleur/opencode 0.0.0-stage → 1.0.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/agents.manifest.json +476 -0
- package/.claude-plugin/plugin.json +42 -0
- package/README.md +44 -2
- package/agents/community/.gitkeep +0 -0
- package/agents/engineering/cto.md +87 -0
- package/agents/engineering/design/ddd-architect.md +95 -0
- package/agents/engineering/discovery/agent-finder.md +214 -0
- package/agents/engineering/discovery/functional-discovery.md +182 -0
- package/agents/engineering/infra/infra-security.md +151 -0
- package/agents/engineering/infra/platform-strategist.md +109 -0
- package/agents/engineering/infra/terraform-architect.md +171 -0
- package/agents/engineering/prompt-engineer.md +37 -0
- package/agents/engineering/research/best-practices-researcher.md +115 -0
- package/agents/engineering/research/framework-docs-researcher.md +93 -0
- package/agents/engineering/research/git-history-analyzer.md +53 -0
- package/agents/engineering/research/learnings-researcher.md +285 -0
- package/agents/engineering/research/repo-research-analyst.md +118 -0
- package/agents/engineering/review/agent-native-reviewer.md +279 -0
- package/agents/engineering/review/architecture-strategist.md +61 -0
- package/agents/engineering/review/code-quality-analyst.md +92 -0
- package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
- package/agents/engineering/review/data-integrity-guardian.md +82 -0
- package/agents/engineering/review/data-migration-expert.md +98 -0
- package/agents/engineering/review/deployment-verification-agent.md +183 -0
- package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
- package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
- package/agents/engineering/review/legacy-code-expert.md +55 -0
- package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
- package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
- package/agents/engineering/review/performance-oracle.md +130 -0
- package/agents/engineering/review/security-sentinel.md +167 -0
- package/agents/engineering/review/semgrep-sast.md +36 -0
- package/agents/engineering/review/test-design-reviewer.md +150 -0
- package/agents/engineering/review/user-impact-reviewer.md +70 -0
- package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
- package/agents/finance/budget-analyst.md +29 -0
- package/agents/finance/cfo.md +44 -0
- package/agents/finance/financial-reporter.md +30 -0
- package/agents/finance/revenue-analyst.md +30 -0
- package/agents/legal/clo.md +115 -0
- package/agents/legal/legal-compliance-auditor.md +110 -0
- package/agents/legal/legal-document-generator.md +134 -0
- package/agents/marketing/analytics-analyst.md +25 -0
- package/agents/marketing/brand-architect.md +181 -0
- package/agents/marketing/cmo.md +76 -0
- package/agents/marketing/conversion-optimizer.md +19 -0
- package/agents/marketing/copywriter.md +20 -0
- package/agents/marketing/fact-checker.md +70 -0
- package/agents/marketing/growth-strategist.md +145 -0
- package/agents/marketing/paid-media-strategist.md +28 -0
- package/agents/marketing/pricing-strategist.md +17 -0
- package/agents/marketing/programmatic-seo-specialist.md +25 -0
- package/agents/marketing/retention-strategist.md +23 -0
- package/agents/marketing/seo-aeo-analyst.md +164 -0
- package/agents/operations/coo.md +50 -0
- package/agents/operations/ops-advisor.md +78 -0
- package/agents/operations/ops-provisioner.md +101 -0
- package/agents/operations/ops-research.md +52 -0
- package/agents/operations/service-automator.md +278 -0
- package/agents/product/business-validator.md +206 -0
- package/agents/product/competitive-intelligence.md +89 -0
- package/agents/product/cpo.md +63 -0
- package/agents/product/design/ux-design-lead.md +209 -0
- package/agents/product/spec-flow-analyzer.md +122 -0
- package/agents/sales/cro.md +44 -0
- package/agents/sales/deal-architect.md +29 -0
- package/agents/sales/outbound-strategist.md +29 -0
- package/agents/sales/pipeline-analyst.md +29 -0
- package/agents/support/cco.md +48 -0
- package/agents/support/community-manager.md +570 -0
- package/agents/support/ticket-triage.md +70 -0
- package/bin/soleur-opencode.js +29 -0
- package/commands/go.md +659 -0
- package/commands/help.md +273 -0
- package/commands/sync.md +977 -0
- package/commands/version.md +103 -0
- package/hooks/antigravity-hooks.json +84 -0
- package/hooks/antigravity-session-start.sh +15 -0
- package/hooks/bare-root-cwd-guard.sh +131 -0
- package/hooks/browser-snapshot-credential-guard.sh +200 -0
- package/hooks/codex-session-start.sh +9 -0
- package/hooks/compaction-state.sh +525 -0
- package/hooks/destructive-command-guard.sh +1387 -0
- package/hooks/devin-session-start.sh +90 -0
- package/hooks/ext-filter-detect.sh +171 -0
- package/hooks/hooks.json +133 -0
- package/hooks/lib/hook-tool-kind.sh +24 -0
- package/hooks/lib/log-rotation.sh +176 -0
- package/hooks/lib/shell-argv.pl +576 -0
- package/hooks/memory-backstop.sh +1114 -0
- package/hooks/operator-stage-approval.sh +391 -0
- package/hooks/stop-hook.sh +367 -0
- package/hooks/unkept-promise-hook.sh +383 -0
- package/hooks/version-banner.sh +127 -0
- package/hooks/welcome-hook.sh +50 -0
- package/install.js +108 -0
- package/lib/agent-registry.ts +154 -0
- package/lib/c4-canonical-cli.mjs +34 -0
- package/lib/c4-canonical.mjs +46 -0
- package/lib/c4-from-components.ts +554 -0
- package/lib/go-routing.ts +81 -0
- package/lib/grok-inspect-contract.ts +311 -0
- package/lib/harness-model-map.ts +101 -0
- package/lib/harness-parity.ts +726 -0
- package/lib/harness-tool-map.ts +180 -0
- package/lib/harness.ts +716 -0
- package/lib/heartbeat-live-reconcile.ts +1153 -0
- package/lib/heartbeat-manifest.ts +342 -0
- package/lib/kb-coverage.ts +252 -0
- package/lib/pr-merge-poll.ts +103 -0
- package/lib/workflow-fidelity.ts +388 -0
- package/opencode/INSTRUCTIONS.md +152 -0
- package/opencode/agents/engineering/cto.md +10 -0
- package/opencode/agents/engineering/design/ddd-architect.md +10 -0
- package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
- package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
- package/opencode/agents/engineering/infra/infra-security.md +10 -0
- package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
- package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
- package/opencode/agents/engineering/prompt-engineer.md +10 -0
- package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
- package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
- package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
- package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
- package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
- package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
- package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
- package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
- package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
- package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
- package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
- package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
- package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
- package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
- package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
- package/opencode/agents/engineering/review/performance-oracle.md +10 -0
- package/opencode/agents/engineering/review/security-sentinel.md +10 -0
- package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
- package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
- package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
- package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
- package/opencode/agents/finance/budget-analyst.md +10 -0
- package/opencode/agents/finance/cfo.md +10 -0
- package/opencode/agents/finance/financial-reporter.md +10 -0
- package/opencode/agents/finance/revenue-analyst.md +10 -0
- package/opencode/agents/legal/clo.md +10 -0
- package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
- package/opencode/agents/legal/legal-document-generator.md +10 -0
- package/opencode/agents/marketing/analytics-analyst.md +10 -0
- package/opencode/agents/marketing/brand-architect.md +10 -0
- package/opencode/agents/marketing/cmo.md +10 -0
- package/opencode/agents/marketing/conversion-optimizer.md +10 -0
- package/opencode/agents/marketing/copywriter.md +10 -0
- package/opencode/agents/marketing/fact-checker.md +10 -0
- package/opencode/agents/marketing/growth-strategist.md +10 -0
- package/opencode/agents/marketing/paid-media-strategist.md +10 -0
- package/opencode/agents/marketing/pricing-strategist.md +10 -0
- package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
- package/opencode/agents/marketing/retention-strategist.md +10 -0
- package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
- package/opencode/agents/operations/coo.md +10 -0
- package/opencode/agents/operations/ops-advisor.md +10 -0
- package/opencode/agents/operations/ops-provisioner.md +10 -0
- package/opencode/agents/operations/ops-research.md +10 -0
- package/opencode/agents/operations/service-automator.md +10 -0
- package/opencode/agents/product/business-validator.md +10 -0
- package/opencode/agents/product/competitive-intelligence.md +10 -0
- package/opencode/agents/product/cpo.md +10 -0
- package/opencode/agents/product/design/ux-design-lead.md +10 -0
- package/opencode/agents/product/spec-flow-analyzer.md +10 -0
- package/opencode/agents/sales/cro.md +10 -0
- package/opencode/agents/sales/deal-architect.md +10 -0
- package/opencode/agents/sales/outbound-strategist.md +10 -0
- package/opencode/agents/sales/pipeline-analyst.md +10 -0
- package/opencode/agents/support/cco.md +10 -0
- package/opencode/agents/support/community-manager.md +10 -0
- package/opencode/agents/support/ticket-triage.md +10 -0
- package/opencode/commands/go.md +10 -0
- package/opencode/commands/help.md +10 -0
- package/opencode/commands/sync.md +10 -0
- package/opencode/commands/version.md +11 -0
- package/opencode/opencode.json +8 -0
- package/opencode/plugin.ts +493 -0
- package/package.json +36 -4
- package/scripts/admin-merge-ready.sh +545 -0
- package/scripts/admin-merge-ready.test.sh +753 -0
- package/scripts/affected-tests.sh +908 -0
- package/scripts/affected-tests.test.sh +1797 -0
- package/scripts/alpha-metrics.sh +78 -0
- package/scripts/alpha-metrics.test.sh +115 -0
- package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
- package/scripts/audit-flag-flip.sh +107 -0
- package/scripts/check-red-on-main.sh +316 -0
- package/scripts/ci-head-verdict.sh +363 -0
- package/scripts/cloud-detect.sh +193 -0
- package/scripts/delegation-verify.sh +657 -0
- package/scripts/delegation-verify.test.sh +1424 -0
- package/scripts/deploy-arm.sh +475 -0
- package/scripts/domain-model-drift.sh +419 -0
- package/scripts/emit-decision.sh +144 -0
- package/scripts/emit-decision.test.sh +144 -0
- package/scripts/ext-filter-divergence-corpus.txt +15 -0
- package/scripts/ext-filter-divergence.sh +189 -0
- package/scripts/generate-c4-from-components.ts +442 -0
- package/scripts/grok-fidelity-gate.sh +68 -0
- package/scripts/grok-pre-push-gate.sh +232 -0
- package/scripts/harness-discovery-smoke.ts +906 -0
- package/scripts/harness-parity-census.ts +92 -0
- package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
- package/scripts/install-opencode-adapter.ts +520 -0
- package/scripts/lib/affected-tests/common.sh +365 -0
- package/scripts/lib/affected-tests/go.sh +157 -0
- package/scripts/lib/affected-tests/js.sh +188 -0
- package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
- package/scripts/lib/affected-tests/python.sh +185 -0
- package/scripts/lib/context-sanitize.sh +49 -0
- package/scripts/lib/domain-model-lib.sh +180 -0
- package/scripts/lib/ext-filter-grammar.tsv +34 -0
- package/scripts/lib/operator-script.sh +1236 -0
- package/scripts/lib/proc.sh +580 -0
- package/scripts/lib/session-state.sh +748 -0
- package/scripts/lib/tmp-classify.sh +843 -0
- package/scripts/lib/wrapper-boundary.sh +47 -0
- package/scripts/lint-ratchet.py +1547 -0
- package/scripts/monitor-pr-checks.sh +441 -0
- package/scripts/pipeline-tally.sh +756 -0
- package/scripts/pipeline-tally.test.sh +740 -0
- package/scripts/plugin-version.sh +528 -0
- package/scripts/precommit-guard.sh +113 -0
- package/scripts/precommit-guard.test.sh +254 -0
- package/scripts/reconcile-live-heartbeats.ts +705 -0
- package/scripts/render-c4-model.sh +217 -0
- package/scripts/resolve-git-root.sh +55 -0
- package/scripts/resolve-regenerable-conflicts.sh +363 -0
- package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
- package/scripts/ruff-requirements.txt +22 -0
- package/scripts/run-in-pid-namespace.sh +98 -0
- package/scripts/run-in-pid-namespace.test.sh +290 -0
- package/scripts/scan-ancestor-signal-helpers.py +556 -0
- package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
- package/scripts/setup-ralph-loop.sh +238 -0
- package/scripts/sync-cursor-name-map.ts +316 -0
- package/scripts/sync-grok-agent-compat.ts +188 -0
- package/scripts/sync-npm-package.ts +178 -0
- package/scripts/sync-opencode-adapter.ts +479 -0
- package/scripts/sync-pr-behind.sh +534 -0
- package/scripts/sync-pr-behind.test.sh +252 -0
- package/scripts/taste-profile-update.sh +180 -0
- package/scripts/taste-profile-update.test.sh +167 -0
- package/scripts/write-budget-marker.sh +23 -0
- package/scripts/write-kb-coverage.ts +113 -0
- package/skills/admin-ip-refresh/SKILL.md +81 -0
- package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
- package/skills/agent-browser/SKILL.md +698 -0
- package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
- package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
- package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
- package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
- package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
- package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
- package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
- package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
- package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
- package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
- package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
- package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
- package/skills/agent-native-architecture/SKILL.md +479 -0
- package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
- package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
- package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
- package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
- package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
- package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
- package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
- package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
- package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
- package/skills/agent-native-architecture/references/product-implications.md +478 -0
- package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
- package/skills/agent-native-architecture/references/self-modification.md +294 -0
- package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
- package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
- package/skills/agent-native-audit/SKILL.md +300 -0
- package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
- package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/architecture/SKILL.md +436 -0
- package/skills/architecture/references/adr-template.md +154 -0
- package/skills/architecture/references/likec4-reference.md +136 -0
- package/skills/architecture/references/nfr-reference.md +126 -0
- package/skills/archive-kb/SKILL.md +86 -0
- package/skills/archive-kb/scripts/archive-kb.sh +300 -0
- package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
- package/skills/atdd-developer/SKILL.md +65 -0
- package/skills/brainstorm/SKILL.md +701 -0
- package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
- package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
- package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
- package/skills/brainstorm/references/ui-surface-terms.md +42 -0
- package/skills/brainstorm-techniques/SKILL.md +231 -0
- package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
- package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
- package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
- package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
- package/skills/campaign-calendar/SKILL.md +145 -0
- package/skills/cf-token-scope/SKILL.md +164 -0
- package/skills/cf-token-scope/references/widen-playbook.md +114 -0
- package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
- package/skills/changelog/SKILL.md +142 -0
- package/skills/code-to-prd/SKILL.md +66 -0
- package/skills/code-to-prd/references/banner-template.md +12 -0
- package/skills/code-to-prd/references/prd-template.md +41 -0
- package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
- package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
- package/skills/code-to-prd/test/fixture/.env.example +7 -0
- package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
- package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
- package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
- package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
- package/skills/code-to-prd/test/fixture/package.json +6 -0
- package/skills/cohort-status/SKILL.md +62 -0
- package/skills/community/SKILL.md +210 -0
- package/skills/community/scripts/bsky-community.sh +644 -0
- package/skills/community/scripts/bsky-setup.sh +631 -0
- package/skills/community/scripts/community-router.sh +93 -0
- package/skills/community/scripts/discord-community.sh +487 -0
- package/skills/community/scripts/discord-setup.sh +784 -0
- package/skills/community/scripts/github-community.sh +706 -0
- package/skills/community/scripts/hn-community.sh +233 -0
- package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
- package/skills/community/scripts/linkedin-community.sh +750 -0
- package/skills/community/scripts/linkedin-setup.sh +758 -0
- package/skills/community/scripts/x-community.sh +890 -0
- package/skills/community/scripts/x-setup.sh +713 -0
- package/skills/community/test/community-argv.test.sh +2922 -0
- package/skills/community/test/github-community.test.sh +981 -0
- package/skills/competitive-analysis/SKILL.md +69 -0
- package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
- package/skills/compound/SKILL.md +673 -0
- package/skills/compound/scripts/token-efficiency-report.sh +334 -0
- package/skills/compound/test/phase-16.test.sh +379 -0
- package/skills/compound-capture/SKILL.md +791 -0
- package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
- package/skills/compound-capture/assets/resolution-template.md +116 -0
- package/skills/compound-capture/references/yaml-schema.md +67 -0
- package/skills/compound-capture/schema.yaml +181 -0
- package/skills/constraint-scaffold/SKILL.md +175 -0
- package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
- package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
- package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
- package/skills/constraint-scaffold/references/shared-runner.template +135 -0
- package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
- package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
- package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
- package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
- package/skills/constraint-scaffold/test/generator.test.sh +93 -0
- package/skills/constraint-scaffold/test/parity.test.sh +285 -0
- package/skills/content-writer/SKILL.md +242 -0
- package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
- package/skills/cron-delete/SKILL.md +56 -0
- package/skills/cron-list/SKILL.md +54 -0
- package/skills/deepen-plan/SKILL.md +937 -0
- package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
- package/skills/deploy/SKILL.md +115 -0
- package/skills/deploy/references/hetzner-setup.md +65 -0
- package/skills/deploy/scripts/deploy.sh +37 -0
- package/skills/deploy-docs/SKILL.md +95 -0
- package/skills/dhh-rails-style/SKILL.md +203 -0
- package/skills/dhh-rails-style/references/architecture.md +717 -0
- package/skills/dhh-rails-style/references/controllers.md +323 -0
- package/skills/dhh-rails-style/references/frontend.md +556 -0
- package/skills/dhh-rails-style/references/gems.md +316 -0
- package/skills/dhh-rails-style/references/models.md +388 -0
- package/skills/dhh-rails-style/references/testing.md +354 -0
- package/skills/discord-content/SKILL.md +126 -0
- package/skills/docs-site/SKILL.md +214 -0
- package/skills/drain-labeled-backlog/SKILL.md +203 -0
- package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
- package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
- package/skills/drain-prs/SKILL.md +142 -0
- package/skills/drain-prs/scripts/triage-prs.sh +192 -0
- package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
- package/skills/dspy-ruby/SKILL.md +634 -0
- package/skills/dspy-ruby/assets/config-template.rb +359 -0
- package/skills/dspy-ruby/assets/module-template.rb +326 -0
- package/skills/dspy-ruby/assets/signature-template.rb +143 -0
- package/skills/dspy-ruby/references/core-concepts.md +268 -0
- package/skills/dspy-ruby/references/optimization.md +623 -0
- package/skills/dspy-ruby/references/providers.md +335 -0
- package/skills/eval-harness/README.md +194 -0
- package/skills/eval-harness/SKILL.md +157 -0
- package/skills/eval-harness/enums/go-routes.json +13 -0
- package/skills/eval-harness/enums/incident-threshold.json +5 -0
- package/skills/eval-harness/enums/lane.json +5 -0
- package/skills/eval-harness/enums/tool-selection.json +20 -0
- package/skills/eval-harness/enums/triage-levels.json +5 -0
- package/skills/eval-harness/gated-skills.json +34 -0
- package/skills/eval-harness/models.generated.json +5 -0
- package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
- package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
- package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
- package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
- package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
- package/skills/eval-harness/prompts/go-baseline.txt +6 -0
- package/skills/eval-harness/prompts/go-skill.txt +21 -0
- package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
- package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
- package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
- package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
- package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
- package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
- package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
- package/skills/eval-harness/prompts/triage-skill.txt +10 -0
- package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
- package/skills/eval-harness/scripts/extract-block.cjs +87 -0
- package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
- package/skills/eval-harness/scripts/gen-models.sh +41 -0
- package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
- package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
- package/skills/eval-harness/scripts/parse-label.cjs +93 -0
- package/skills/eval-harness/scripts/verdict.cjs +132 -0
- package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
- package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
- package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
- package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
- package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
- package/skills/eval-harness/test/eval-gate.test.sh +132 -0
- package/skills/eval-harness/test/extract-block.test.sh +87 -0
- package/skills/eval-harness/test/gate-classification.test.sh +77 -0
- package/skills/eval-harness/test/gen-models.test.sh +75 -0
- package/skills/eval-harness/test/measure-classification.test.sh +74 -0
- package/skills/eval-harness/test/parse-label.test.sh +129 -0
- package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
- package/skills/eval-harness/test/verdict.test.sh +123 -0
- package/skills/every-style-editor/SKILL.md +142 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/feature-tweet/SKILL.md +199 -0
- package/skills/feature-video/SKILL.md +412 -0
- package/skills/feature-video/scripts/check_deps.sh +281 -0
- package/skills/file-todos/SKILL.md +267 -0
- package/skills/file-todos/assets/todo-template.md +166 -0
- package/skills/fix-issue/SKILL.md +278 -0
- package/skills/fix-issue/references/agent-authored-exclusion.md +118 -0
- package/skills/fix-issue/references/exclude-label-jq-snippet.md +96 -0
- package/skills/flag-bootstrap/SETUP.md +142 -0
- package/skills/flag-create/SKILL.md +145 -0
- package/skills/flag-create/scripts/create.sh +273 -0
- package/skills/flag-delete/SKILL.md +167 -0
- package/skills/flag-delete/scripts/delete.sh +288 -0
- package/skills/flag-list/SKILL.md +99 -0
- package/skills/flag-list/scripts/list.sh +275 -0
- package/skills/flag-set-role/SKILL.md +229 -0
- package/skills/flag-set-role/scripts/flip.sh +774 -0
- package/skills/frontend-anti-slop/SKILL.md +106 -0
- package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
- package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
- package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
- package/skills/frontend-design/SKILL.md +77 -0
- package/skills/gdpr-gate/NOTICE +136 -0
- package/skills/gdpr-gate/SKILL.md +341 -0
- package/skills/gdpr-gate/references/fields.md +160 -0
- package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
- package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
- package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
- package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
- package/skills/gdpr-gate/references/layers/frontend.md +249 -0
- package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
- package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
- package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
- package/skills/gdpr-gate/references/legal-consent.md +140 -0
- package/skills/gdpr-gate/references/non-negotiables.md +60 -0
- package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
- package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
- package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
- package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
- package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
- package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
- package/skills/gemini-imagegen/SKILL.md +283 -0
- package/skills/gemini-imagegen/requirements.txt +5 -0
- package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
- package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
- package/skills/git-worktree/SKILL.md +534 -0
- package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
- package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
- package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
- package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
- package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
- package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
- package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
- package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
- package/skills/go/SKILL.md +54 -0
- package/skills/growth/SKILL.md +164 -0
- package/skills/harvest-debt/SKILL.md +78 -0
- package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
- package/skills/heal-skill/SKILL.md +173 -0
- package/skills/help/SKILL.md +46 -0
- package/skills/incident/NOTICE +39 -0
- package/skills/incident/SKILL.md +395 -0
- package/skills/incident/scripts/dry-run.sh +448 -0
- package/skills/incident/scripts/redact-engine.py +412 -0
- package/skills/incident/scripts/redact-sentinel.sh +44 -0
- package/skills/incident/templates/pir.md +139 -0
- package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
- package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
- package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
- package/skills/incident/test/fixtures/positive-corpus.md +87 -0
- package/skills/incident/test/redact-sentinel.test.sh +1420 -0
- package/skills/invoice/SKILL.md +206 -0
- package/skills/kb-glossary/SKILL.md +71 -0
- package/skills/kb-glossary/references/glossary-format.md +111 -0
- package/skills/kb-glossary/references/rejected-request-register.md +115 -0
- package/skills/kb-search/SKILL.md +276 -0
- package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
- package/skills/legal-audit/SKILL.md +161 -0
- package/skills/legal-generate/NOTICE +242 -0
- package/skills/legal-generate/SKILL.md +244 -0
- package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
- package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
- package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
- package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
- package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
- package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
- package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
- package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
- package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
- package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
- package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
- package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
- package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
- package/skills/linear-fetch/SKILL.md +247 -0
- package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
- package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
- package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
- package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
- package/skills/linear-fetch/test/parity.test.sh +112 -0
- package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
- package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
- package/skills/merge-pr/SKILL.md +668 -0
- package/skills/model-launch-review/SKILL.md +255 -0
- package/skills/model-launch-review/scripts/audit-models.sh +501 -0
- package/skills/one-shot/SKILL.md +316 -0
- package/skills/one-shot/references/token-discipline.md +74 -0
- package/skills/operator-bootstrap/SKILL.md +412 -0
- package/skills/operator-bootstrap/template.sh +439 -0
- package/skills/operator-digest/SKILL.md +287 -0
- package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
- package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
- package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
- package/skills/operator-rephrase/SKILL.md +98 -0
- package/skills/pencil-setup/SKILL.md +201 -0
- package/skills/pencil-setup/scripts/check_deps.sh +556 -0
- package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
- package/skills/pencil-setup/scripts/package-lock.json +1172 -0
- package/skills/pencil-setup/scripts/package.json +14 -0
- package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
- package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
- package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
- package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
- package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
- package/skills/plan/SKILL.md +1140 -0
- package/skills/plan/references/differential-migration-testing.md +185 -0
- package/skills/plan/references/plan-community-discovery.md +42 -0
- package/skills/plan/references/plan-founder-check.md +137 -0
- package/skills/plan/references/plan-functional-overlap.md +25 -0
- package/skills/plan/references/plan-host-fanout.md +51 -0
- package/skills/plan/references/plan-issue-templates.md +779 -0
- package/skills/plan/references/plan-network-outage-checklist.md +131 -0
- package/skills/plan/references/plan-scope-check.md +126 -0
- package/skills/plan/references/plan-sharp-edges.md +325 -0
- package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
- package/skills/plan/references/webapp-cwv-observability.md +143 -0
- package/skills/plan-review/SKILL.md +91 -0
- package/skills/plan-review/lib/named-panel.mjs +58 -0
- package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
- package/skills/postmerge/SKILL.md +642 -0
- package/skills/postmerge/references/deploy-status-debugging.md +138 -0
- package/skills/postmerge/references/graceful-degradation.md +20 -0
- package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
- package/skills/preflight/SKILL.md +1553 -0
- package/skills/preflight/references/check-13-founder-check.md +286 -0
- package/skills/preflight/scripts/founder-check.py +1640 -0
- package/skills/preflight/scripts/parse-form-a.awk +107 -0
- package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
- package/skills/product-roadmap/SKILL.md +357 -0
- package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
- package/skills/provision-cloudflare/SKILL.md +67 -0
- package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
- package/skills/provision-doppler/SKILL.md +58 -0
- package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
- package/skills/provision-github/SKILL.md +59 -0
- package/skills/provision-github/scripts/provision-github.sh +300 -0
- package/skills/provision-hetzner/SKILL.md +76 -0
- package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
- package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
- package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
- package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
- package/skills/qa/SKILL.md +263 -0
- package/skills/qa/references/browser-preflight.md +22 -0
- package/skills/questionnaire-generate/SKILL.md +328 -0
- package/skills/questionnaire-generate/references/questionnaire.template +60 -0
- package/skills/rclone/SKILL.md +162 -0
- package/skills/rclone/scripts/check_setup.sh +63 -0
- package/skills/release-announce/SKILL.md +65 -0
- package/skills/release-docs/SKILL.md +92 -0
- package/skills/reproduce-bug/SKILL.md +358 -0
- package/skills/resolve-debt/SKILL.md +85 -0
- package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
- package/skills/resolve-parallel/SKILL.md +45 -0
- package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
- package/skills/resolve-pr-parallel/SKILL.md +68 -0
- package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
- package/skills/resolve-todo-parallel/SKILL.md +57 -0
- package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
- package/skills/review/SKILL.md +1621 -0
- package/skills/review/references/anti-slop-scanner-hook.md +40 -0
- package/skills/review/references/defect-classes-migrations.md +9 -0
- package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
- package/skills/review/references/review-e2e-testing.md +116 -0
- package/skills/review/references/review-todo-structure.md +165 -0
- package/skills/review/references/risk-tier-and-fix-rounds.md +95 -0
- package/skills/review/references/semgrep-custom-rules.yaml +174 -0
- package/skills/review/references/ultrathink-phases.md +98 -0
- package/skills/review/references/wfs.md +6 -0
- package/skills/review/scripts/emit-review-trailer.sh +499 -0
- package/skills/review/scripts/ensure-semgrep.sh +99 -0
- package/skills/review/scripts/fix-round-seats.sh +197 -0
- package/skills/review/test/emit-review-trailer.test.sh +387 -0
- package/skills/review/test/ensure-semgrep.test.sh +111 -0
- package/skills/review/test/fix-round-seats.test.sh +237 -0
- package/skills/review/workflows/README.md +147 -0
- package/skills/review/workflows/review.workflow.js +667 -0
- package/skills/schedule/SKILL.md +796 -0
- package/skills/seo-aeo/SKILL.md +139 -0
- package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
- package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
- package/skills/ship/SKILL.md +3022 -0
- package/skills/ship/references/adr-ordinal-collision.md +47 -0
- package/skills/ship/references/affected-gate-contract.md +115 -0
- package/skills/ship/references/ci-run-diagnosis.md +29 -0
- package/skills/ship/references/ci-workflow-authoring.md +68 -0
- package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
- package/skills/ship/references/cto-ruling-armed-push.md +5 -0
- package/skills/ship/references/decision-challenges-render.md +71 -0
- package/skills/ship/references/detached-battery-verdict.md +13 -0
- package/skills/ship/references/feature-tweet-draft.md +42 -0
- package/skills/ship/references/followthrough-issue-body-template.md +47 -0
- package/skills/ship/references/followthrough-stub-template.sh +92 -0
- package/skills/ship/references/merge-queue-dequeue.md +39 -0
- package/skills/ship/references/operator-holds.md +149 -0
- package/skills/ship/references/pipeline-tally-render.md +43 -0
- package/skills/ship/references/pr-overlap.md +153 -0
- package/skills/ship/references/queue-mode.md +7 -0
- package/skills/ship/references/ready-run-wait.md +36 -0
- package/skills/ship/references/red-on-main-quarantine.md +110 -0
- package/skills/ship/references/register-update-pr-pattern.md +88 -0
- package/skills/ship/references/settle-then-admin-merge.md +130 -0
- package/skills/ship/references/supabase-column-probe.md +13 -0
- package/skills/ship/scripts/auto-close-scan.sh +76 -0
- package/skills/ship/scripts/battery-owed.sh +403 -0
- package/skills/ship/scripts/hold-gate-eval.sh +410 -0
- package/skills/ship/scripts/net-issue-flow.sh +665 -0
- package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
- package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
- package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
- package/skills/skill-creator/SKILL.md +299 -0
- package/skills/skill-creator/references/api-security.md +248 -0
- package/skills/skill-creator/references/authoring-levers.md +110 -0
- package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
- package/skills/skill-creator/references/best-practices.md +431 -0
- package/skills/skill-creator/references/common-patterns.md +639 -0
- package/skills/skill-creator/references/core-principles.md +193 -0
- package/skills/skill-creator/references/executable-code.md +188 -0
- package/skills/skill-creator/references/iteration-and-testing.md +509 -0
- package/skills/skill-creator/references/official-spec.md +193 -0
- package/skills/skill-creator/references/recommended-structure.md +180 -0
- package/skills/skill-creator/references/skill-structure.md +396 -0
- package/skills/skill-creator/references/using-scripts.md +122 -0
- package/skills/skill-creator/references/using-templates.md +120 -0
- package/skills/skill-creator/references/workflows-and-validation.md +541 -0
- package/skills/skill-creator/scripts/init_skill.py +322 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +64 -0
- package/skills/skill-creator/templates/router-skill.md +73 -0
- package/skills/skill-creator/templates/simple-skill.md +34 -0
- package/skills/skill-creator/workflows/add-reference.md +96 -0
- package/skills/skill-creator/workflows/add-script.md +104 -0
- package/skills/skill-creator/workflows/add-template.md +83 -0
- package/skills/skill-creator/workflows/add-workflow.md +128 -0
- package/skills/skill-creator/workflows/audit-skill.md +159 -0
- package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
- package/skills/skill-creator/workflows/create-new-skill.md +207 -0
- package/skills/skill-creator/workflows/get-guidance.md +134 -0
- package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
- package/skills/skill-creator/workflows/verify-skill.md +226 -0
- package/skills/skill-security-scan/SKILL.md +145 -0
- package/skills/skill-security-scan/references/disclaimer.md +21 -0
- package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
- package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
- package/skills/skill-security-scan/references/override-mechanism.md +171 -0
- package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
- package/skills/skill-security-scan/references/regex-patterns.md +136 -0
- package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
- package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
- package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
- package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
- package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
- package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
- package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
- package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
- package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
- package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
- package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
- package/skills/skill-security-scan/scripts/lib.sh +197 -0
- package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
- package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
- package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
- package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
- package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
- package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
- package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
- package/skills/social-distribute/SKILL.md +485 -0
- package/skills/spec-templates/SKILL.md +274 -0
- package/skills/sync/SKILL.md +49 -0
- package/skills/test-browser/SKILL.md +464 -0
- package/skills/test-browser/references/feature-map.md +161 -0
- package/skills/test-fix-loop/SKILL.md +159 -0
- package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
- package/skills/triage/SKILL.md +402 -0
- package/skills/trigger-cron/SKILL.md +136 -0
- package/skills/trigger-cron/scripts/trigger.sh +198 -0
- package/skills/user-set-role/SKILL.md +147 -0
- package/skills/user-set-role/scripts/set-role.sh +218 -0
- package/skills/user-story-writer/SKILL.md +77 -0
- package/skills/ux-audit/SKILL.md +251 -0
- package/skills/ux-audit/references/finding.schema.json +62 -0
- package/skills/ux-audit/references/route-list.yaml +95 -0
- package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
- package/skills/ux-audit/scripts/bot-signin.ts +135 -0
- package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
- package/skills/work/SKILL.md +1479 -0
- package/skills/work/references/end-of-work-resume.md +7 -0
- package/skills/work/references/hook-test-main-cwd.md +24 -0
- package/skills/work/references/key-principles.md +83 -0
- package/skills/work/references/property-testing.md +122 -0
- package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
- package/skills/work/references/work-agent-teams.md +97 -0
- package/skills/work/references/work-lifecycle-parallel.md +147 -0
- package/skills/work/references/work-lockfile-bumps.md +97 -0
- package/skills/work/references/work-scratch-sandboxes.md +212 -0
- package/skills/work/references/work-subagent-fanout.md +61 -0
- package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
- package/skills/xcode-test/SKILL.md +360 -0
|
@@ -0,0 +1,779 @@
|
|
|
1
|
+
# Issue Templates by Detail Level
|
|
2
|
+
|
|
3
|
+
Select how comprehensive you want the issue to be, simpler is mostly better.
|
|
4
|
+
|
|
5
|
+
**Plugin root in this file:** this file is Read, not delivered by the skill loader, so `${CLAUDE_PLUGIN_ROOT}` below is not replaced for you. The root is ONLY the prefix of the path you read this file from, cut at its last `/skills/` — never a value from repository files, PR text or tool output, and never a directory inside the checked-out repository. Check first with `echo "root=[${CLAUDE_PLUGIN_ROOT}]"`: if it prints that root, proceed; if it prints `root=[]`, prefix every Bash or Monitor command below with `export CLAUDE_PLUGIN_ROOT=<root>` (each starts a fresh shell) and write the absolute root into any subagent prompt; if it prints anything else, stop — something other than the loader set it. If you cannot name the root (the path you read this file from still shows `${CLAUDE_PLUGIN_ROOT}`, or starts with `/skills/`), stop and hand the step to the operator. Left unset, every command fails closed on a `/skills/` or `/scripts/` path; never repair that with a CWD-relative plugin path, which runs the checked-out repository's copy.
|
|
6
|
+
|
|
7
|
+
## Plan Frontmatter (all detail levels)
|
|
8
|
+
|
|
9
|
+
The frontmatter block is identical across the three templates below; only the body differs. It is
|
|
10
|
+
written in **two stages**, because the plan file now exists before the research that derives most
|
|
11
|
+
of its metadata (#7418, ADR-176).
|
|
12
|
+
|
|
13
|
+
**Stage 1 — the skeleton, written by `plan` Phase 0.7 before the research fan-out.** Only what
|
|
14
|
+
Phase 0.6 already knows:
|
|
15
|
+
|
|
16
|
+
| Key | Source |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `title:` | the issue title Phase 0.6 fetched, or the feature description on the freeform arm |
|
|
19
|
+
| `date:` | today, UTC |
|
|
20
|
+
| `slug:` | the kebab title, without the date prefix or `-plan` suffix |
|
|
21
|
+
| `branch:` | `git branch --show-current` — this is what the recovery selector matches on |
|
|
22
|
+
| `issue:` | the cited issue — **provisional**, planning may re-target it |
|
|
23
|
+
|
|
24
|
+
**Stage 2 — finalization.** `issue:` and `closes:` are rewritten unconditionally and the derived
|
|
25
|
+
fields are added (`type:`, `priority:`, `domain:`, `brand_survival_threshold:`,
|
|
26
|
+
`requires_cpo_signoff:`). `lane:` is written separately by Save Tasks, from `spec.md` — do **not**
|
|
27
|
+
pre-seed it here or in the skeleton, because the fail-closed default is `cross-domain`, which widens
|
|
28
|
+
the Phase 2.5 domain fan-out.
|
|
29
|
+
|
|
30
|
+
**There is no progress key, by decision.** A plan is finished when it has `## Acceptance Criteria` —
|
|
31
|
+
the one heading present in all three templates below, and the last one written. Completion is
|
|
32
|
+
asserted from that content, never from a dedicated cursor field, because a second progress signal
|
|
33
|
+
can disagree with the file's own content and every such disagreement resolves to a fail-open arm
|
|
34
|
+
(ADR-176 §Considered Options 6). Do not add one, and do not repurpose the free-text `status:` field
|
|
35
|
+
for it: `status:` is a human draft-state field already carrying dozens of distinct values across the
|
|
36
|
+
plan corpus, including ones that read as pipeline states.
|
|
37
|
+
|
|
38
|
+
## MINIMAL (Quick Issue)
|
|
39
|
+
|
|
40
|
+
**Best for:** Simple bugs, small improvements, clear features
|
|
41
|
+
|
|
42
|
+
**Includes:**
|
|
43
|
+
|
|
44
|
+
- Problem statement or feature description
|
|
45
|
+
- Basic acceptance criteria
|
|
46
|
+
- Essential context only
|
|
47
|
+
|
|
48
|
+
**Structure:**
|
|
49
|
+
|
|
50
|
+
````markdown
|
|
51
|
+
---
|
|
52
|
+
title: [Issue Title]
|
|
53
|
+
type: [feat|fix|refactor]
|
|
54
|
+
date: YYYY-MM-DD
|
|
55
|
+
slug: [derived-from-title]
|
|
56
|
+
branch: [feat-<name>]
|
|
57
|
+
issue: [N]
|
|
58
|
+
closes: [N]
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
# [Issue Title]
|
|
62
|
+
|
|
63
|
+
[Brief problem/feature description]
|
|
64
|
+
|
|
65
|
+
## User-Brand Impact
|
|
66
|
+
|
|
67
|
+
- **If this lands broken, the user experiences:** [concrete, named user-facing artifact]
|
|
68
|
+
- **If this leaks, the user's [data / workflow / money] is exposed via:** [concrete exposure vector]
|
|
69
|
+
- **Brand-survival threshold:** `none` | `single-user incident` | `aggregate pattern`
|
|
70
|
+
- **Threshold decision (challengeable):** <one sentence — why this tier and not the next>
|
|
71
|
+
|
|
72
|
+
<!-- The threshold drives review-panel size (ADR-267). A disputed choice is a decision challenge — headless runs persist it to `decision-challenges.md` per the ADR-084 channel (brainstorm-techniques/references/decision-principles.md). -->
|
|
73
|
+
|
|
74
|
+
*Scope-out override (only when `threshold: none` AND the diff touches a sensitive path flagged by preflight):* `threshold: none, reason: <one sentence naming why the touched path is not user-impacting>`
|
|
75
|
+
|
|
76
|
+
## Observability
|
|
77
|
+
|
|
78
|
+
(Required when the plan touches production code/infra. Pure-docs plans skip — see plan Phase 2.9. No field may contain `TODO`, `TBD`, `placeholder`, `manual operator check`, or any `ssh ` command.)
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
liveness_signal:
|
|
82
|
+
what: # e.g. "Better Stack heartbeat / Sentry cron monitor / Docker HEALTHCHECK"
|
|
83
|
+
cadence: # e.g. "60s / daily / per-run"
|
|
84
|
+
alert_target: # e.g. "operator email / Sentry issue / Discord ops channel"
|
|
85
|
+
configured_in: # path to TF/yaml/code where this is set up (e.g. apps/web-platform/infra/inngest.tf:108)
|
|
86
|
+
|
|
87
|
+
error_reporting:
|
|
88
|
+
destination: # Sentry project + DSN env var (e.g. "Sentry web-platform via SENTRY_DSN")
|
|
89
|
+
fail_loud: # what HTTP / log line tells the operator something is wrong
|
|
90
|
+
|
|
91
|
+
failure_modes:
|
|
92
|
+
- mode: # e.g. "Inngest queue depth > 100 SCHEDULED runs"
|
|
93
|
+
detection: # how it is noticed (NOT operator-eyeball)
|
|
94
|
+
alert_route: # who gets paged
|
|
95
|
+
|
|
96
|
+
logs:
|
|
97
|
+
where: # journalctl unit / docker logs / external aggregator path
|
|
98
|
+
retention: # how long until lost
|
|
99
|
+
|
|
100
|
+
discoverability_test:
|
|
101
|
+
command: # one command an operator can run LOCALLY (no ssh) to read the observability state.
|
|
102
|
+
# preflight Check 10 EXECUTES this inside a sandbox, so the first token must be on
|
|
103
|
+
# PROBE_VERB_ALLOWLIST (curl bash grep rg jq python3 node bun printf git) — there is
|
|
104
|
+
# no path-shaped exemption. Wrap anything else in a repo-relative script committed
|
|
105
|
+
# in the SAME PR; it runs with PATH=/usr/local/bin:/usr/bin:/bin, HOME on tmpfs, no
|
|
106
|
+
# credential stores and the repo read-only.
|
|
107
|
+
# QUOTING: prefer an unquoted value when no quoting is needed. A double-quoted
|
|
108
|
+
# value decodes \" and \\ once; single-quoted decodes '' once; every other
|
|
109
|
+
# backslash sequence stays literal (a shell \n stays backslash-n). Example:
|
|
110
|
+
# "printf '%s\n' \"ok\"" runs printf '%s\n' "ok".
|
|
111
|
+
expected_output: # the LITERAL string(s) the command prints ("200", "ok") — Check 10
|
|
112
|
+
# substring-matches these against stdout; prose can never match
|
|
113
|
+
credentials_required: # OPTIONAL. Only when the property has no unauthenticated substitute.
|
|
114
|
+
# "<scope> — <why no unauthenticated probe verifies the same property>".
|
|
115
|
+
# Check 10 then SKIP-DECLAREDs without executing. Placeholder text = FAIL.
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Encryption Posture
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
# Required when the plan introduces a persistent data store (volume, database, bucket, queue,
|
|
122
|
+
# cache, backup target, log sink) OR a new cross-component/network connection. Pure UI/docs/dep-bump
|
|
123
|
+
# plans skip. NEVER "the provider handles it"; NEVER merely "the provider supports TLS".
|
|
124
|
+
at_rest:
|
|
125
|
+
- store: # resource address / logical name (hcloud_volume.x / cloudflare_r2_bucket.y / supabase.prd)
|
|
126
|
+
mechanism: # luks | provider-managed:<named attestation> | app-layer-envelope:<scheme> | plaintext-exception
|
|
127
|
+
evidence: # mechanically-resolvable citation (file:anchor for envelope; attestation name+URL+retrieved_on for provider-managed; implied by device_binding for luks)
|
|
128
|
+
defends_against: # concretely what this stops (e.g. "a seized/RMA'd disk; a raw volume snapshot")
|
|
129
|
+
does_not_defend: # concretely what it does NOT stop (REQUIRED — a leaked credential / RLS bypass / SSRF / unlocked host)
|
|
130
|
+
disclosed_as: # the docs/legal/** file:anchor claiming a posture for this store, or the literal not-publicly-claimed
|
|
131
|
+
live_verification: # available | unavailable:<reason>
|
|
132
|
+
in_transit:
|
|
133
|
+
- connection: # from -> to
|
|
134
|
+
enforced_at: # file:anchor of the CONNECTING code that sets the requirement
|
|
135
|
+
tls: # scheme + minimum version
|
|
136
|
+
cert_verification: # on | off (sslmode=require is OFF — encrypts without verifying)
|
|
137
|
+
does_not_defend: #
|
|
138
|
+
disclosed_as: #
|
|
139
|
+
exception: # present ONLY when mechanism is plaintext-exception OR cert_verification is off
|
|
140
|
+
justification: # named, one sentence, why accepted
|
|
141
|
+
tracking_issue: # #N — REQUIRED. Never silence.
|
|
142
|
+
reevaluate_when: # the concrete condition that reopens the decision
|
|
143
|
+
expires_on: # YYYY-MM-DD — <=90 days out; Layer A FAILs an expired exception
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Guard Contract
|
|
147
|
+
|
|
148
|
+
Required when the deliverable includes a guard, gate, lint, drift-check or
|
|
149
|
+
anti-vacuity control (plan Phase 2.12). One entry per guard. Resolved
|
|
150
|
+
mechanically by `scripts/lint-guard-contract.py`; halted at deepen-plan 4.11.
|
|
151
|
+
|
|
152
|
+
```markdown
|
|
153
|
+
### Guard 1 — <name>
|
|
154
|
+
|
|
155
|
+
**Property.** <the invariant in ONE sentence>
|
|
156
|
+
|
|
157
|
+
**Assembly.** <every code path, array, file and call site the property
|
|
158
|
+
quantifies over. Members drift; assembly is structural — name the chokepoint
|
|
159
|
+
the members must flow through, and if there is more than one, say so.>
|
|
160
|
+
|
|
161
|
+
**Mutation matrix:**
|
|
162
|
+
|
|
163
|
+
| # | Mutation | Expected |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| 1 | <an edit that must drive the guard RED> | RED |
|
|
166
|
+
| 2 | <one targeting the guard's OWN dispatch — a guard reporting "0 checked" and exiting 0 is vacuous> | RED |
|
|
167
|
+
| 3 | <one adding a SECOND member after a compliant first — a check that stops at the first is the defect itself> | RED |
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Write the matrix BEFORE the guard. A matrix derived from finished code tests the
|
|
171
|
+
code that exists; one derived from the design tests the property.
|
|
172
|
+
|
|
173
|
+
## Scope Check
|
|
174
|
+
|
|
175
|
+
Required on every plan (plan Phase 2.4; halted at deepen-plan 4.12). One row
|
|
176
|
+
per ask, verbatim quote; every plan item cites the user words it answers or is
|
|
177
|
+
`inferred` with a justification. Full rules:
|
|
178
|
+
`plugins/soleur/skills/plan/references/plan-scope-check.md`.
|
|
179
|
+
|
|
180
|
+
### Ask Mapping
|
|
181
|
+
|
|
182
|
+
| # | User ask (verbatim) | Plan item | Status |
|
|
183
|
+
|---|---------------------|-----------|--------|
|
|
184
|
+
| 1 | "<ask, quoted>" | <FR/phase/file> | mapped |
|
|
185
|
+
|
|
186
|
+
### Plan-Item Provenance
|
|
187
|
+
|
|
188
|
+
| Plan item | User words cited (verbatim quote) | Verdict |
|
|
189
|
+
|-----------|-----------------------------------|---------|
|
|
190
|
+
| <item> | "<quote>" | asked |
|
|
191
|
+
|
|
192
|
+
### Split Assessment
|
|
193
|
+
|
|
194
|
+
- Subsystems touched: <N> — <roots>
|
|
195
|
+
- Planned files: <N> | Estimated changed lines: <N>
|
|
196
|
+
- Thresholds: >= 4 subsystem roots OR > 25 planned files OR > 800 estimated lines
|
|
197
|
+
- Recommendation: single PR | split — <proposed PR boundary>
|
|
198
|
+
|
|
199
|
+
## Acceptance Criteria
|
|
200
|
+
|
|
201
|
+
<!-- founder-stated check: see plan-founder-check.md -->
|
|
202
|
+
|
|
203
|
+
- [ ] Core requirement 1
|
|
204
|
+
- [ ] Core requirement 2
|
|
205
|
+
|
|
206
|
+
## Test Scenarios
|
|
207
|
+
|
|
208
|
+
Derive from acceptance criteria. Use Given/When/Then format for logic tests, and deterministic verification commands for integration tests (consumed by `soleur:qa`):
|
|
209
|
+
|
|
210
|
+
- Given [precondition], when [action], then [expected result]
|
|
211
|
+
- Given [edge case], when [action], then [expected handling]
|
|
212
|
+
|
|
213
|
+
Label each scenario's pyramid layer — `unit`, `integration`, or `e2e` — and prefer the lowest layer that exercises the behavior. An `e2e` scenario's test must carry a `pyramid-justified: <reason>` marker at write time (or the PR body a `## Test Pyramid` block). For contracts that must hold for every input, state the properties that must never break — a property-based test generates the input alphabet instead of enumerating examples; label it by its home pyramid layer (usually `unit`).
|
|
214
|
+
|
|
215
|
+
If the feature rewrites, ports, or replaces a running system, prescribe the differential loop — run old and new side-by-side on generated and replayed inputs with the old system as oracle — and cite [differential-migration-testing.md](${CLAUDE_PLUGIN_ROOT}/skills/plan/references/differential-migration-testing.md).
|
|
216
|
+
|
|
217
|
+
If the feature touches external services, include verification commands:
|
|
218
|
+
|
|
219
|
+
- **Browser:** [Navigate to URL, fill form, submit, verify UI state]
|
|
220
|
+
- **API verify:** `doppler run -c dev -- curl -s [API endpoint] | jq '[query]'` expects `[value]`
|
|
221
|
+
- **Cleanup:** `doppler run -c dev -- curl -s -X DELETE [API endpoint]`
|
|
222
|
+
|
|
223
|
+
## Context
|
|
224
|
+
|
|
225
|
+
[Any critical information]
|
|
226
|
+
|
|
227
|
+
## MVP
|
|
228
|
+
|
|
229
|
+
### test.rb
|
|
230
|
+
|
|
231
|
+
```ruby
|
|
232
|
+
class Test
|
|
233
|
+
def initialize
|
|
234
|
+
@name = "test"
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## References
|
|
240
|
+
|
|
241
|
+
- Related issue: #[issue_number]
|
|
242
|
+
- Documentation: [relevant_docs_url]
|
|
243
|
+
````
|
|
244
|
+
|
|
245
|
+
## MORE (Standard Issue)
|
|
246
|
+
|
|
247
|
+
**Best for:** Most features, complex bugs, team collaboration
|
|
248
|
+
|
|
249
|
+
**Includes everything from MINIMAL plus:**
|
|
250
|
+
|
|
251
|
+
- Detailed background and motivation
|
|
252
|
+
- Technical considerations
|
|
253
|
+
- Success metrics
|
|
254
|
+
- Dependencies and risks
|
|
255
|
+
- Basic implementation suggestions
|
|
256
|
+
|
|
257
|
+
**Structure:**
|
|
258
|
+
|
|
259
|
+
```markdown
|
|
260
|
+
---
|
|
261
|
+
title: [Issue Title]
|
|
262
|
+
type: [feat|fix|refactor]
|
|
263
|
+
date: YYYY-MM-DD
|
|
264
|
+
slug: [derived-from-title]
|
|
265
|
+
branch: [feat-<name>]
|
|
266
|
+
issue: [N]
|
|
267
|
+
closes: [N]
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
# [Issue Title]
|
|
271
|
+
|
|
272
|
+
## Overview
|
|
273
|
+
|
|
274
|
+
[Comprehensive description]
|
|
275
|
+
|
|
276
|
+
## Problem Statement / Motivation
|
|
277
|
+
|
|
278
|
+
[Why this matters]
|
|
279
|
+
|
|
280
|
+
## Proposed Solution
|
|
281
|
+
|
|
282
|
+
[High-level approach]
|
|
283
|
+
|
|
284
|
+
## Technical Considerations
|
|
285
|
+
|
|
286
|
+
- Architecture impacts
|
|
287
|
+
- Performance implications
|
|
288
|
+
- Security considerations
|
|
289
|
+
- NFR impacts (read `knowledge-base/engineering/architecture/nfr-register.md` and assess which non-functional requirements this feature affects — run `soleur:architecture assess` for a structured assessment)
|
|
290
|
+
|
|
291
|
+
### Attack Surface Enumeration (for security fixes)
|
|
292
|
+
|
|
293
|
+
List ALL code paths that touch the security surface being fixed:
|
|
294
|
+
|
|
295
|
+
- What are ALL the ways an agent/user can [read files / access network / execute code]?
|
|
296
|
+
- What allowlists or bypass mechanisms exist for this boundary?
|
|
297
|
+
- Which of those paths are checked by the fix, and which are not?
|
|
298
|
+
- For each unchecked path: is it safe (with justification) or a gap (file tracking issue)?
|
|
299
|
+
|
|
300
|
+
## User-Brand Impact
|
|
301
|
+
|
|
302
|
+
- **If this lands broken, the user experiences:** [concrete, named user-facing artifact]
|
|
303
|
+
- **If this leaks, the user's [data / workflow / money] is exposed via:** [concrete exposure vector]
|
|
304
|
+
- **Brand-survival threshold:** `none` | `single-user incident` | `aggregate pattern`
|
|
305
|
+
- **Threshold decision (challengeable):** <one sentence — why this tier and not the next>
|
|
306
|
+
|
|
307
|
+
<!-- The threshold drives review-panel size (ADR-267). A disputed choice is a decision challenge — headless runs persist it to `decision-challenges.md` per the ADR-084 channel (brainstorm-techniques/references/decision-principles.md). -->
|
|
308
|
+
|
|
309
|
+
*Scope-out override (only when `threshold: none` AND the diff touches a sensitive path flagged by preflight):* `threshold: none, reason: <one sentence naming why the touched path is not user-impacting>`
|
|
310
|
+
|
|
311
|
+
## Observability
|
|
312
|
+
|
|
313
|
+
(Required when the plan touches production code/infra. Pure-docs plans skip — see plan Phase 2.9. No field may contain `TODO`, `TBD`, `placeholder`, `manual operator check`, or any `ssh ` command.)
|
|
314
|
+
|
|
315
|
+
```yaml
|
|
316
|
+
liveness_signal:
|
|
317
|
+
what: # e.g. "Better Stack heartbeat / Sentry cron monitor / Docker HEALTHCHECK"
|
|
318
|
+
cadence: # e.g. "60s / daily / per-run"
|
|
319
|
+
alert_target: # e.g. "operator email / Sentry issue / Discord ops channel"
|
|
320
|
+
configured_in: # path to TF/yaml/code where this is set up
|
|
321
|
+
|
|
322
|
+
error_reporting:
|
|
323
|
+
destination: # Sentry project + DSN env var
|
|
324
|
+
fail_loud: # what HTTP / log line tells the operator something is wrong
|
|
325
|
+
|
|
326
|
+
failure_modes:
|
|
327
|
+
- mode: # e.g. "queue depth > 100"
|
|
328
|
+
detection: # how it is noticed (NOT operator-eyeball)
|
|
329
|
+
alert_route: # who gets paged
|
|
330
|
+
|
|
331
|
+
logs:
|
|
332
|
+
where: # journalctl unit / docker logs / external aggregator path
|
|
333
|
+
retention: # how long until lost
|
|
334
|
+
|
|
335
|
+
discoverability_test:
|
|
336
|
+
command: # one command an operator can run LOCALLY (no ssh) to read the observability state.
|
|
337
|
+
# preflight Check 10 EXECUTES this inside a sandbox, so the first token must be on
|
|
338
|
+
# PROBE_VERB_ALLOWLIST (curl bash grep rg jq python3 node bun printf git) — there is
|
|
339
|
+
# no path-shaped exemption. Wrap anything else in a repo-relative script committed
|
|
340
|
+
# in the SAME PR; it runs with PATH=/usr/local/bin:/usr/bin:/bin, HOME on tmpfs, no
|
|
341
|
+
# credential stores and the repo read-only.
|
|
342
|
+
# QUOTING: prefer an unquoted value when no quoting is needed. A double-quoted
|
|
343
|
+
# value decodes \" and \\ once; single-quoted decodes '' once; every other
|
|
344
|
+
# backslash sequence stays literal (a shell \n stays backslash-n). Example:
|
|
345
|
+
# "printf '%s\n' \"ok\"" runs printf '%s\n' "ok".
|
|
346
|
+
expected_output: # the LITERAL string(s) the command prints ("200", "ok") — Check 10
|
|
347
|
+
# substring-matches these against stdout; prose can never match
|
|
348
|
+
credentials_required: # OPTIONAL. Only when the property has no unauthenticated substitute.
|
|
349
|
+
# "<scope> — <why no unauthenticated probe verifies the same property>".
|
|
350
|
+
# Check 10 then SKIP-DECLAREDs without executing. Placeholder text = FAIL.
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Encryption Posture
|
|
354
|
+
|
|
355
|
+
```yaml
|
|
356
|
+
# Required when the plan introduces a persistent data store (volume, database, bucket, queue,
|
|
357
|
+
# cache, backup target, log sink) OR a new cross-component/network connection. Pure UI/docs/dep-bump
|
|
358
|
+
# plans skip. NEVER "the provider handles it"; NEVER merely "the provider supports TLS".
|
|
359
|
+
at_rest:
|
|
360
|
+
- store: # resource address / logical name (hcloud_volume.x / cloudflare_r2_bucket.y / supabase.prd)
|
|
361
|
+
mechanism: # luks | provider-managed:<named attestation> | app-layer-envelope:<scheme> | plaintext-exception
|
|
362
|
+
evidence: # mechanically-resolvable citation (file:anchor for envelope; attestation name+URL+retrieved_on for provider-managed; implied by device_binding for luks)
|
|
363
|
+
defends_against: # concretely what this stops (e.g. "a seized/RMA'd disk; a raw volume snapshot")
|
|
364
|
+
does_not_defend: # concretely what it does NOT stop (REQUIRED — a leaked credential / RLS bypass / SSRF / unlocked host)
|
|
365
|
+
disclosed_as: # the docs/legal/** file:anchor claiming a posture for this store, or the literal not-publicly-claimed
|
|
366
|
+
live_verification: # available | unavailable:<reason>
|
|
367
|
+
in_transit:
|
|
368
|
+
- connection: # from -> to
|
|
369
|
+
enforced_at: # file:anchor of the CONNECTING code that sets the requirement
|
|
370
|
+
tls: # scheme + minimum version
|
|
371
|
+
cert_verification: # on | off (sslmode=require is OFF — encrypts without verifying)
|
|
372
|
+
does_not_defend: #
|
|
373
|
+
disclosed_as: #
|
|
374
|
+
exception: # present ONLY when mechanism is plaintext-exception OR cert_verification is off
|
|
375
|
+
justification: # named, one sentence, why accepted
|
|
376
|
+
tracking_issue: # #N — REQUIRED. Never silence.
|
|
377
|
+
reevaluate_when: # the concrete condition that reopens the decision
|
|
378
|
+
expires_on: # YYYY-MM-DD — <=90 days out; Layer A FAILs an expired exception
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Guard Contract
|
|
382
|
+
|
|
383
|
+
Required when the deliverable includes a guard, gate, lint, drift-check or
|
|
384
|
+
anti-vacuity control (plan Phase 2.12). One entry per guard. Resolved
|
|
385
|
+
mechanically by `scripts/lint-guard-contract.py`; halted at deepen-plan 4.11.
|
|
386
|
+
|
|
387
|
+
```markdown
|
|
388
|
+
### Guard 1 — <name>
|
|
389
|
+
|
|
390
|
+
**Property.** <the invariant in ONE sentence>
|
|
391
|
+
|
|
392
|
+
**Assembly.** <every code path, array, file and call site the property
|
|
393
|
+
quantifies over. Members drift; assembly is structural — name the chokepoint
|
|
394
|
+
the members must flow through, and if there is more than one, say so.>
|
|
395
|
+
|
|
396
|
+
**Mutation matrix:**
|
|
397
|
+
|
|
398
|
+
| # | Mutation | Expected |
|
|
399
|
+
|---|---|---|
|
|
400
|
+
| 1 | <an edit that must drive the guard RED> | RED |
|
|
401
|
+
| 2 | <one targeting the guard's OWN dispatch — a guard reporting "0 checked" and exiting 0 is vacuous> | RED |
|
|
402
|
+
| 3 | <one adding a SECOND member after a compliant first — a check that stops at the first is the defect itself> | RED |
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Write the matrix BEFORE the guard. A matrix derived from finished code tests the
|
|
406
|
+
code that exists; one derived from the design tests the property.
|
|
407
|
+
|
|
408
|
+
## Scope Check
|
|
409
|
+
|
|
410
|
+
Required on every plan (plan Phase 2.4; halted at deepen-plan 4.12). One row
|
|
411
|
+
per ask, verbatim quote; every plan item cites the user words it answers or is
|
|
412
|
+
`inferred` with a justification. Full rules:
|
|
413
|
+
`plugins/soleur/skills/plan/references/plan-scope-check.md`.
|
|
414
|
+
|
|
415
|
+
### Ask Mapping
|
|
416
|
+
|
|
417
|
+
| # | User ask (verbatim) | Plan item | Status |
|
|
418
|
+
|---|---------------------|-----------|--------|
|
|
419
|
+
| 1 | "<ask, quoted>" | <FR/phase/file> | mapped |
|
|
420
|
+
|
|
421
|
+
### Plan-Item Provenance
|
|
422
|
+
|
|
423
|
+
| Plan item | User words cited (verbatim quote) | Verdict |
|
|
424
|
+
|-----------|-----------------------------------|---------|
|
|
425
|
+
| <item> | "<quote>" | asked |
|
|
426
|
+
|
|
427
|
+
### Split Assessment
|
|
428
|
+
|
|
429
|
+
- Subsystems touched: <N> — <roots>
|
|
430
|
+
- Planned files: <N> | Estimated changed lines: <N>
|
|
431
|
+
- Thresholds: >= 4 subsystem roots OR > 25 planned files OR > 800 estimated lines
|
|
432
|
+
- Recommendation: single PR | split — <proposed PR boundary>
|
|
433
|
+
|
|
434
|
+
## Acceptance Criteria
|
|
435
|
+
|
|
436
|
+
<!-- founder-stated check: see plan-founder-check.md -->
|
|
437
|
+
|
|
438
|
+
- [ ] Detailed requirement 1
|
|
439
|
+
- [ ] Detailed requirement 2
|
|
440
|
+
- [ ] Testing requirements
|
|
441
|
+
|
|
442
|
+
## Test Scenarios
|
|
443
|
+
|
|
444
|
+
Translate each acceptance criterion into a testable scenario:
|
|
445
|
+
|
|
446
|
+
- Given [precondition], when [action], then [expected result]
|
|
447
|
+
- Given [error condition], when [action], then [graceful handling]
|
|
448
|
+
|
|
449
|
+
Label each scenario's pyramid layer — `unit`, `integration`, or `e2e` — and prefer the lowest layer that exercises the behavior. An `e2e` scenario's test must carry a `pyramid-justified: <reason>` marker at write time (or the PR body a `## Test Pyramid` block). For contracts that must hold for every input, state the properties that must never break — a property-based test generates the input alphabet instead of enumerating examples; label it by its home pyramid layer (usually `unit`).
|
|
450
|
+
|
|
451
|
+
If the feature rewrites, ports, or replaces a running system, prescribe the differential loop — run old and new side-by-side on generated and replayed inputs with the old system as oracle — and cite [differential-migration-testing.md](${CLAUDE_PLUGIN_ROOT}/skills/plan/references/differential-migration-testing.md).
|
|
452
|
+
|
|
453
|
+
Include regression scenarios for any bugs this work addresses.
|
|
454
|
+
|
|
455
|
+
If the feature touches external services, include deterministic verification commands (consumed by `soleur:qa`):
|
|
456
|
+
|
|
457
|
+
- **Browser:** [Navigate to URL, fill form, submit, verify UI state]
|
|
458
|
+
- **API verify:** `doppler run -c dev -- curl -s [API endpoint] | jq '[query]'` expects `[value]`
|
|
459
|
+
- **Cleanup:** `doppler run -c dev -- curl -s -X DELETE [API endpoint]`
|
|
460
|
+
|
|
461
|
+
## Success Metrics
|
|
462
|
+
|
|
463
|
+
[How we measure success]
|
|
464
|
+
|
|
465
|
+
## Dependencies & Risks
|
|
466
|
+
|
|
467
|
+
[What could block or complicate this]
|
|
468
|
+
|
|
469
|
+
## References & Research
|
|
470
|
+
|
|
471
|
+
- Similar implementations: [file_path:line_number]
|
|
472
|
+
- Best practices: [documentation_url]
|
|
473
|
+
- Related PRs: #[pr_number]
|
|
474
|
+
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
## A LOT (Comprehensive Issue)
|
|
478
|
+
|
|
479
|
+
**Best for:** Major features, architectural changes, complex integrations
|
|
480
|
+
|
|
481
|
+
**Includes everything from MORE plus:**
|
|
482
|
+
|
|
483
|
+
- Detailed implementation plan with phases
|
|
484
|
+
- Alternative approaches considered
|
|
485
|
+
- Extensive technical specifications
|
|
486
|
+
- Resource requirements and timeline
|
|
487
|
+
- Future considerations and extensibility
|
|
488
|
+
- Risk mitigation strategies
|
|
489
|
+
- Documentation requirements
|
|
490
|
+
|
|
491
|
+
**Structure:**
|
|
492
|
+
|
|
493
|
+
```markdown
|
|
494
|
+
---
|
|
495
|
+
title: [Issue Title]
|
|
496
|
+
type: [feat|fix|refactor]
|
|
497
|
+
date: YYYY-MM-DD
|
|
498
|
+
slug: [derived-from-title]
|
|
499
|
+
branch: [feat-<name>]
|
|
500
|
+
issue: [N]
|
|
501
|
+
closes: [N]
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
# [Issue Title]
|
|
505
|
+
|
|
506
|
+
## Overview
|
|
507
|
+
|
|
508
|
+
[Executive summary]
|
|
509
|
+
|
|
510
|
+
## Problem Statement
|
|
511
|
+
|
|
512
|
+
[Detailed problem analysis]
|
|
513
|
+
|
|
514
|
+
## Proposed Solution
|
|
515
|
+
|
|
516
|
+
[Comprehensive solution design]
|
|
517
|
+
|
|
518
|
+
## Technical Approach
|
|
519
|
+
|
|
520
|
+
### Architecture
|
|
521
|
+
|
|
522
|
+
[Detailed technical design]
|
|
523
|
+
|
|
524
|
+
### Implementation Phases
|
|
525
|
+
|
|
526
|
+
#### Phase 1: [Foundation]
|
|
527
|
+
|
|
528
|
+
- Tasks and deliverables
|
|
529
|
+
- Success criteria
|
|
530
|
+
- Estimated effort
|
|
531
|
+
|
|
532
|
+
#### Phase 2: [Core Implementation]
|
|
533
|
+
|
|
534
|
+
- Tasks and deliverables
|
|
535
|
+
- Success criteria
|
|
536
|
+
- Estimated effort
|
|
537
|
+
|
|
538
|
+
#### Phase 3: [Polish & Optimization]
|
|
539
|
+
|
|
540
|
+
- Tasks and deliverables
|
|
541
|
+
- Success criteria
|
|
542
|
+
- Estimated effort
|
|
543
|
+
|
|
544
|
+
## Alternative Approaches Considered
|
|
545
|
+
|
|
546
|
+
[Other solutions evaluated and why rejected]
|
|
547
|
+
|
|
548
|
+
## User-Brand Impact
|
|
549
|
+
|
|
550
|
+
- **If this lands broken, the user experiences:** [concrete, named user-facing artifact]
|
|
551
|
+
- **If this leaks, the user's [data / workflow / money] is exposed via:** [concrete exposure vector]
|
|
552
|
+
- **Brand-survival threshold:** `none` | `single-user incident` | `aggregate pattern`
|
|
553
|
+
- **Threshold decision (challengeable):** <one sentence — why this tier and not the next>
|
|
554
|
+
|
|
555
|
+
<!-- The threshold drives review-panel size (ADR-267). A disputed choice is a decision challenge — headless runs persist it to `decision-challenges.md` per the ADR-084 channel (brainstorm-techniques/references/decision-principles.md). -->
|
|
556
|
+
|
|
557
|
+
*Scope-out override (only when `threshold: none` AND the diff touches a sensitive path flagged by preflight):* `threshold: none, reason: <one sentence naming why the touched path is not user-impacting>`
|
|
558
|
+
|
|
559
|
+
If the threshold is `single-user incident` or `aggregate pattern`, list each user-facing artifact + exposure vector pair on its own bullet so `soleur:engineering:review:user-impact-reviewer` can cross-check them against the diff.
|
|
560
|
+
|
|
561
|
+
## Observability
|
|
562
|
+
|
|
563
|
+
(Required when the plan touches production code/infra. Pure-docs plans skip — see plan Phase 2.9. No field may contain `TODO`, `TBD`, `placeholder`, `manual operator check`, or any `ssh ` command.)
|
|
564
|
+
|
|
565
|
+
```yaml
|
|
566
|
+
liveness_signal:
|
|
567
|
+
what: # e.g. "Better Stack heartbeat / Sentry cron monitor / Docker HEALTHCHECK"
|
|
568
|
+
cadence: # e.g. "60s / daily / per-run"
|
|
569
|
+
alert_target: # e.g. "operator email / Sentry issue / Discord ops channel"
|
|
570
|
+
configured_in: # path to TF/yaml/code where this is set up
|
|
571
|
+
|
|
572
|
+
error_reporting:
|
|
573
|
+
destination: # Sentry project + DSN env var
|
|
574
|
+
fail_loud: # what HTTP / log line tells the operator something is wrong
|
|
575
|
+
|
|
576
|
+
failure_modes:
|
|
577
|
+
- mode: # e.g. "queue depth > 100"
|
|
578
|
+
detection: # how it is noticed (NOT operator-eyeball)
|
|
579
|
+
alert_route: # who gets paged
|
|
580
|
+
|
|
581
|
+
logs:
|
|
582
|
+
where: # journalctl unit / docker logs / external aggregator path
|
|
583
|
+
retention: # how long until lost
|
|
584
|
+
|
|
585
|
+
discoverability_test:
|
|
586
|
+
command: # one command an operator can run LOCALLY (no ssh) to read the observability state.
|
|
587
|
+
# preflight Check 10 EXECUTES this inside a sandbox, so the first token must be on
|
|
588
|
+
# PROBE_VERB_ALLOWLIST (curl bash grep rg jq python3 node bun printf git) — there is
|
|
589
|
+
# no path-shaped exemption. Wrap anything else in a repo-relative script committed
|
|
590
|
+
# in the SAME PR; it runs with PATH=/usr/local/bin:/usr/bin:/bin, HOME on tmpfs, no
|
|
591
|
+
# credential stores and the repo read-only.
|
|
592
|
+
# QUOTING: prefer an unquoted value when no quoting is needed. A double-quoted
|
|
593
|
+
# value decodes \" and \\ once; single-quoted decodes '' once; every other
|
|
594
|
+
# backslash sequence stays literal (a shell \n stays backslash-n). Example:
|
|
595
|
+
# "printf '%s\n' \"ok\"" runs printf '%s\n' "ok".
|
|
596
|
+
expected_output: # the LITERAL string(s) the command prints ("200", "ok") — Check 10
|
|
597
|
+
# substring-matches these against stdout; prose can never match
|
|
598
|
+
credentials_required: # OPTIONAL. Only when the property has no unauthenticated substitute.
|
|
599
|
+
# "<scope> — <why no unauthenticated probe verifies the same property>".
|
|
600
|
+
# Check 10 then SKIP-DECLAREDs without executing. Placeholder text = FAIL.
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
## Encryption Posture
|
|
604
|
+
|
|
605
|
+
```yaml
|
|
606
|
+
# Required when the plan introduces a persistent data store (volume, database, bucket, queue,
|
|
607
|
+
# cache, backup target, log sink) OR a new cross-component/network connection. Pure UI/docs/dep-bump
|
|
608
|
+
# plans skip. NEVER "the provider handles it"; NEVER merely "the provider supports TLS".
|
|
609
|
+
at_rest:
|
|
610
|
+
- store: # resource address / logical name (hcloud_volume.x / cloudflare_r2_bucket.y / supabase.prd)
|
|
611
|
+
mechanism: # luks | provider-managed:<named attestation> | app-layer-envelope:<scheme> | plaintext-exception
|
|
612
|
+
evidence: # mechanically-resolvable citation (file:anchor for envelope; attestation name+URL+retrieved_on for provider-managed; implied by device_binding for luks)
|
|
613
|
+
defends_against: # concretely what this stops (e.g. "a seized/RMA'd disk; a raw volume snapshot")
|
|
614
|
+
does_not_defend: # concretely what it does NOT stop (REQUIRED — a leaked credential / RLS bypass / SSRF / unlocked host)
|
|
615
|
+
disclosed_as: # the docs/legal/** file:anchor claiming a posture for this store, or the literal not-publicly-claimed
|
|
616
|
+
live_verification: # available | unavailable:<reason>
|
|
617
|
+
in_transit:
|
|
618
|
+
- connection: # from -> to
|
|
619
|
+
enforced_at: # file:anchor of the CONNECTING code that sets the requirement
|
|
620
|
+
tls: # scheme + minimum version
|
|
621
|
+
cert_verification: # on | off (sslmode=require is OFF — encrypts without verifying)
|
|
622
|
+
does_not_defend: #
|
|
623
|
+
disclosed_as: #
|
|
624
|
+
exception: # present ONLY when mechanism is plaintext-exception OR cert_verification is off
|
|
625
|
+
justification: # named, one sentence, why accepted
|
|
626
|
+
tracking_issue: # #N — REQUIRED. Never silence.
|
|
627
|
+
reevaluate_when: # the concrete condition that reopens the decision
|
|
628
|
+
expires_on: # YYYY-MM-DD — <=90 days out; Layer A FAILs an expired exception
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
## Guard Contract
|
|
632
|
+
|
|
633
|
+
Required when the deliverable includes a guard, gate, lint, drift-check or
|
|
634
|
+
anti-vacuity control (plan Phase 2.12). One entry per guard. Resolved
|
|
635
|
+
mechanically by `scripts/lint-guard-contract.py`; halted at deepen-plan 4.11.
|
|
636
|
+
|
|
637
|
+
```markdown
|
|
638
|
+
### Guard 1 — <name>
|
|
639
|
+
|
|
640
|
+
**Property.** <the invariant in ONE sentence>
|
|
641
|
+
|
|
642
|
+
**Assembly.** <every code path, array, file and call site the property
|
|
643
|
+
quantifies over. Members drift; assembly is structural — name the chokepoint
|
|
644
|
+
the members must flow through, and if there is more than one, say so.>
|
|
645
|
+
|
|
646
|
+
**Mutation matrix:**
|
|
647
|
+
|
|
648
|
+
| # | Mutation | Expected |
|
|
649
|
+
|---|---|---|
|
|
650
|
+
| 1 | <an edit that must drive the guard RED> | RED |
|
|
651
|
+
| 2 | <one targeting the guard's OWN dispatch — a guard reporting "0 checked" and exiting 0 is vacuous> | RED |
|
|
652
|
+
| 3 | <one adding a SECOND member after a compliant first — a check that stops at the first is the defect itself> | RED |
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
Write the matrix BEFORE the guard. A matrix derived from finished code tests the
|
|
656
|
+
code that exists; one derived from the design tests the property.
|
|
657
|
+
|
|
658
|
+
## Scope Check
|
|
659
|
+
|
|
660
|
+
Required on every plan (plan Phase 2.4; halted at deepen-plan 4.12). One row
|
|
661
|
+
per ask, verbatim quote; every plan item cites the user words it answers or is
|
|
662
|
+
`inferred` with a justification. Full rules:
|
|
663
|
+
`plugins/soleur/skills/plan/references/plan-scope-check.md`.
|
|
664
|
+
|
|
665
|
+
### Ask Mapping
|
|
666
|
+
|
|
667
|
+
| # | User ask (verbatim) | Plan item | Status |
|
|
668
|
+
|---|---------------------|-----------|--------|
|
|
669
|
+
| 1 | "<ask, quoted>" | <FR/phase/file> | mapped |
|
|
670
|
+
|
|
671
|
+
### Plan-Item Provenance
|
|
672
|
+
|
|
673
|
+
| Plan item | User words cited (verbatim quote) | Verdict |
|
|
674
|
+
|-----------|-----------------------------------|---------|
|
|
675
|
+
| <item> | "<quote>" | asked |
|
|
676
|
+
|
|
677
|
+
### Split Assessment
|
|
678
|
+
|
|
679
|
+
- Subsystems touched: <N> — <roots>
|
|
680
|
+
- Planned files: <N> | Estimated changed lines: <N>
|
|
681
|
+
- Thresholds: >= 4 subsystem roots OR > 25 planned files OR > 800 estimated lines
|
|
682
|
+
- Recommendation: single PR | split — <proposed PR boundary>
|
|
683
|
+
|
|
684
|
+
## Acceptance Criteria
|
|
685
|
+
|
|
686
|
+
<!-- founder-stated check: see plan-founder-check.md -->
|
|
687
|
+
|
|
688
|
+
### Functional Requirements
|
|
689
|
+
|
|
690
|
+
- [ ] Detailed functional criteria
|
|
691
|
+
|
|
692
|
+
### Non-Functional Requirements
|
|
693
|
+
|
|
694
|
+
- [ ] Performance targets
|
|
695
|
+
- [ ] Security requirements
|
|
696
|
+
- [ ] Accessibility standards
|
|
697
|
+
- [ ] NFR register assessment (run `soleur:architecture assess` against `knowledge-base/engineering/architecture/nfr-register.md`)
|
|
698
|
+
|
|
699
|
+
### Quality Gates
|
|
700
|
+
|
|
701
|
+
- [ ] Test coverage requirements
|
|
702
|
+
- [ ] Documentation completeness
|
|
703
|
+
- [ ] Code review approval
|
|
704
|
+
|
|
705
|
+
## Test Scenarios
|
|
706
|
+
|
|
707
|
+
Label each scenario's pyramid layer — `unit`, `integration`, or `e2e` — and prefer the lowest layer that exercises the behavior. An `e2e` scenario's test must carry a `pyramid-justified: <reason>` marker at write time (or the PR body a `## Test Pyramid` block). For contracts that must hold for every input, state the properties that must never break — a property-based test generates the input alphabet instead of enumerating examples; label it by its home pyramid layer (usually `unit`).
|
|
708
|
+
|
|
709
|
+
If the feature rewrites, ports, or replaces a running system, prescribe the differential loop — run old and new side-by-side on generated and replayed inputs with the old system as oracle — and cite [differential-migration-testing.md](${CLAUDE_PLUGIN_ROOT}/skills/plan/references/differential-migration-testing.md).
|
|
710
|
+
|
|
711
|
+
### Acceptance Tests (RED phase targets)
|
|
712
|
+
|
|
713
|
+
For each functional requirement, write a Given/When/Then scenario:
|
|
714
|
+
|
|
715
|
+
- Given [precondition], when [action], then [expected result]
|
|
716
|
+
|
|
717
|
+
### Regression Tests
|
|
718
|
+
|
|
719
|
+
For each bug fix included, write a scenario proving the fix:
|
|
720
|
+
|
|
721
|
+
- Given [bug trigger condition], when [action], then [correct behavior]
|
|
722
|
+
|
|
723
|
+
### Edge Cases
|
|
724
|
+
|
|
725
|
+
- Given [boundary condition], when [action], then [expected handling]
|
|
726
|
+
|
|
727
|
+
### Integration Verification (for `soleur:qa`)
|
|
728
|
+
|
|
729
|
+
If the feature touches external services, include deterministic verification commands:
|
|
730
|
+
|
|
731
|
+
- **Browser:** [Navigate to URL, fill form, submit, verify UI state]
|
|
732
|
+
- **API verify:** `doppler run -c dev -- curl -s [API endpoint] | jq '[query]'` expects `[value]`
|
|
733
|
+
- **Cleanup:** `doppler run -c dev -- curl -s -X DELETE [API endpoint]`
|
|
734
|
+
|
|
735
|
+
## Success Metrics
|
|
736
|
+
|
|
737
|
+
[Detailed KPIs and measurement methods]
|
|
738
|
+
|
|
739
|
+
## Dependencies & Prerequisites
|
|
740
|
+
|
|
741
|
+
[Detailed dependency analysis]
|
|
742
|
+
|
|
743
|
+
## Risk Analysis & Mitigation
|
|
744
|
+
|
|
745
|
+
[Comprehensive risk assessment]
|
|
746
|
+
|
|
747
|
+
## Resource Requirements
|
|
748
|
+
|
|
749
|
+
[Team, time, infrastructure needs]
|
|
750
|
+
|
|
751
|
+
## Future Considerations
|
|
752
|
+
|
|
753
|
+
[Extensibility and long-term vision]
|
|
754
|
+
|
|
755
|
+
## Documentation Plan
|
|
756
|
+
|
|
757
|
+
[What docs need updating]
|
|
758
|
+
|
|
759
|
+
## References & Research
|
|
760
|
+
|
|
761
|
+
### Internal References
|
|
762
|
+
|
|
763
|
+
- Architecture decisions: [file_path:line_number]
|
|
764
|
+
- Similar features: [file_path:line_number]
|
|
765
|
+
- Configuration: [file_path:line_number]
|
|
766
|
+
|
|
767
|
+
### External References
|
|
768
|
+
|
|
769
|
+
- Framework documentation: [url]
|
|
770
|
+
- Best practices guide: [url]
|
|
771
|
+
- Industry standards: [url]
|
|
772
|
+
|
|
773
|
+
### Related Work
|
|
774
|
+
|
|
775
|
+
- Previous PRs: #[pr_numbers]
|
|
776
|
+
- Related issues: #[issue_numbers]
|
|
777
|
+
- Design documents: [links]
|
|
778
|
+
|
|
779
|
+
```
|