@soleur/opencode 0.0.0-stage → 3.354.2
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 +660 -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 +29 -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 +361 -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 +171 -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 +818 -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 +411 -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 +509 -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 +115 -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 +165 -0
- package/scripts/sync-opencode-adapter.ts +498 -0
- package/scripts/sync-pr-behind.sh +647 -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 +67 -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 +143 -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 +120 -0
- package/skills/fix-issue/references/exclude-label-jq-snippet.md +97 -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 +670 -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 +331 -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 +141 -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 +1620 -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-evidence-comment.md +36 -0
- package/skills/review/references/review-todo-structure.md +165 -0
- package/skills/review/references/risk-tier-and-fix-rounds.md +97 -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 +3023 -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/cleanup-merged-archival.md +39 -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/delegated-act-authoring-form.md +7 -0
- package/skills/ship/references/detached-battery-verdict.md +13 -0
- package/skills/ship/references/epic-close-sweep.md +62 -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 +179 -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/verification-scaffold/SKILL.md +73 -0
- package/skills/verification-scaffold/references/gitleaks.toml.template +13 -0
- package/skills/verification-scaffold/references/guardrail-audit.md +156 -0
- package/skills/verification-scaffold/references/guards/block-stash-hook.sh.template +72 -0
- package/skills/verification-scaffold/references/guards/commit-on-main-hook.sh.template +82 -0
- package/skills/verification-scaffold/references/guards/orphan-test-check.sh.template +102 -0
- package/skills/verification-scaffold/references/guards/precommit-guard.sh.template +115 -0
- package/skills/verification-scaffold/references/guards/secret-scan-hook.sh.template +176 -0
- package/skills/verification-scaffold/references/guards/verification-gates.yml.template +49 -0
- package/skills/verification-scaffold/references/guards/wrapper-boundary.sh.template +47 -0
- package/skills/verification-scaffold/references/guards.tsv +21 -0
- package/skills/verification-scaffold/references/verification-readme.template +55 -0
- package/skills/verification-scaffold/scripts/verification-scaffold.sh +785 -0
- package/skills/verification-scaffold/test/bite-proof.test.sh +159 -0
- package/skills/verification-scaffold/test/generator.test.sh +319 -0
- package/skills/verification-scaffold/test/manifest.test.sh +144 -0
- package/skills/work/SKILL.md +1480 -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,436 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture
|
|
3
|
+
description: "This skill should be used when managing Architecture Decision Records or C4 diagrams."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- grok-harness-invoke:start -->
|
|
7
|
+
**Grok Build (`plugins/soleur/lib/harness.ts` `invokeSkill()`):** Read this SKILL.md in this process and run it to completion. A one-segment `soleur:<name>` in this document names a SKILL — on Grok Build, Read `plugins/soleur/skills/<name>/SKILL.md` in this process; it is not a nested tool_use. A multi-segment id such as `soleur:<domain>:<name>` names an AGENT: spawn it, never Read it, and on Grok Build spawn_subagent takes the id with its colons replaced by hyphens (`agentIdToGrokSubagentType`). **Claude Code:** Skill tool for a skill (`soleur:<name>`), Task tool with `subagent_type` for an agent. Forbidden is executing a subset, not the Read.
|
|
8
|
+
<!-- grok-harness-invoke:end -->
|
|
9
|
+
|
|
10
|
+
# Architecture as Code
|
|
11
|
+
|
|
12
|
+
Create, manage, and query Architecture Decision Records (ADRs) and maintain an interactive [LikeC4](https://likec4.dev/) architecture model. ADRs are version-controlled markdown; the C4 model is version-controlled LikeC4 DSL (`.c4`). All artifacts live in `knowledge-base/engineering/architecture/`.
|
|
13
|
+
|
|
14
|
+
<!-- operator-typed-render:start -->
|
|
15
|
+
**Any message this skill PRINTS that tells the operator to run a skill or command renders at emit time.** The doc names it canonically (`soleur:<name>`, ADR-226); before printing, render it as the active harness's **operator-typed form** per `formatSkillInvocation` (`plugins/soleur/lib/harness.ts`), which owns the per-harness slash and sigil forms — the operator types that string into a fresh session where no routing contract is in context, so a bare canonical name is model-discretion there rather than a dispatch. This covers abort messages, `AskUserQuestion` prompts and options, `Display`/`echo` lines and resume prompts alike; an agent-read instruction stays canonical.
|
|
16
|
+
<!-- operator-typed-render:end -->
|
|
17
|
+
|
|
18
|
+
## Sub-commands
|
|
19
|
+
|
|
20
|
+
| Command | Description |
|
|
21
|
+
|---------|-------------|
|
|
22
|
+
| `architecture create [title]` | Create a new ADR with the next sequential number |
|
|
23
|
+
| `architecture list` | Display all ADRs with status, title, and date |
|
|
24
|
+
| `architecture supersede <N> [title]` | Mark ADR-N as superseded and create its replacement |
|
|
25
|
+
| `architecture diagram [type]` | Create or update the LikeC4 model and its views (context, container, component) |
|
|
26
|
+
| `architecture add-container <id>` | Add a container/database element to the model |
|
|
27
|
+
| `architecture add-component <id>` | Add a component element to the model |
|
|
28
|
+
| `architecture add-relationship <from> <to>` | Add a relationship between two model elements |
|
|
29
|
+
| `architecture render` | Validate the LikeC4 project (`likec4 validate`) and report element/view counts |
|
|
30
|
+
| `architecture assess [feature]` | Assess a feature against the NFR register and principles register |
|
|
31
|
+
| `architecture principle list` | Display the architecture principles register |
|
|
32
|
+
|
|
33
|
+
If no sub-command is provided, display the table above and ask which sub-command to run.
|
|
34
|
+
|
|
35
|
+
## Arguments
|
|
36
|
+
|
|
37
|
+
`$ARGUMENTS` is parsed for a sub-command and optional parameters:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
architecture [sub-command] [arguments...]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Phase 0: Prerequisites
|
|
46
|
+
|
|
47
|
+
Verify the knowledge-base directory exists:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
if [[ ! -d "knowledge-base" ]]; then
|
|
51
|
+
echo "No knowledge-base/ directory found. Create one first or run soleur:sync."
|
|
52
|
+
# Stop execution
|
|
53
|
+
fi
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Create the architecture directories if they do not exist:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
mkdir -p knowledge-base/engineering/architecture/decisions
|
|
60
|
+
mkdir -p knowledge-base/engineering/architecture/diagrams
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Branch safety check (defense-in-depth):** Run `git branch --show-current`. If the result is `main` or `master`, abort with: "Error: architecture skill cannot run on main/master. Checkout a feature branch first."
|
|
64
|
+
|
|
65
|
+
**Vocabulary.** Before committing a word that names a concept, check it against `knowledge-base/project/glossary.md` and use the sense its pointer settles; if the word is materially ambiguous and has no entry, hedge in the artifact and name the ambiguity. The instruction is stated once in [glossary-format.md](../kb-glossary/references/glossary-format.md) §The consumer pointer and is not restated here.
|
|
66
|
+
|
|
67
|
+
**Rejected-concepts substrate.** Before recording a decision that refuses a *concept* rather than a
|
|
68
|
+
*mechanism*, read [ADR-234](../../../../knowledge-base/engineering/architecture/decisions/ADR-234-rejected-concepts-are-a-distinct-kb-substrate.md):
|
|
69
|
+
an ADR's `## Alternatives Considered` table is scoped to the mechanisms of one decision, so a
|
|
70
|
+
concept-level refusal belongs in the no-list at `knowledge-base/project/rejected/` instead, where the
|
|
71
|
+
intake pre-check can find it by concept. The two are siblings, not substitutes — the no-list cites ADR
|
|
72
|
+
tables as a store the lookup also checks, and imports nothing from them.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Sub-command: create
|
|
77
|
+
|
|
78
|
+
Create a new ADR with the next sequential number.
|
|
79
|
+
|
|
80
|
+
### Steps
|
|
81
|
+
|
|
82
|
+
1. **Determine next ADR number.** List existing ADRs in `knowledge-base/engineering/architecture/decisions/`:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
ls knowledge-base/engineering/architecture/decisions/ADR-*.md 2>/dev/null | sort -V | tail -1
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Extract the highest number and increment by 1. If no ADRs exist, start at 001.
|
|
89
|
+
|
|
90
|
+
2. **Get the title.** If a title was provided in `$ARGUMENTS`, use it. Otherwise, use AskUserQuestion: "What architectural decision are you recording?"
|
|
91
|
+
|
|
92
|
+
3. **Generate the filename.** Convert the title to kebab-case: `ADR-<NNN>-<kebab-title>.md`
|
|
93
|
+
|
|
94
|
+
4. **Read the ADR template** from [adr-template.md](./references/adr-template.md). The template now documents two labeled body shapes (terse / rich) under the `## Choosing the shape` section. Read that section before proceeding.
|
|
95
|
+
|
|
96
|
+
5. **Ask the shape rubric.** Present the 5 triggers from the template's `## Choosing the shape` section and pick between the terse and rich shapes. Use AskUserQuestion with options:
|
|
97
|
+
|
|
98
|
+
- "No — terse (3 sections)"
|
|
99
|
+
- "Yes — rich (8 sections)"
|
|
100
|
+
- "Unsure — walk me through each trigger"
|
|
101
|
+
|
|
102
|
+
If the contributor picks "Unsure," ask each of the 5 triggers as its own yes/no AskUserQuestion. Compute: any yes → rich, all no → terse.
|
|
103
|
+
|
|
104
|
+
**Pipeline mode default.** If running inside `soleur:one-shot` or any other non-interactive caller (no AskUserQuestion available, only `$ARGUMENTS` context), default to **terse**. Rich-shape ADRs in pipeline mode require the caller to pass `shape: rich` explicitly in `$ARGUMENTS`, or the rubric falls through to terse.
|
|
105
|
+
|
|
106
|
+
6. **Write the ADR file.** Create `knowledge-base/engineering/architecture/decisions/ADR-<NNN>-<kebab-title>.md` using the chosen shape's body block from the template. The filename is the sole ordinal authority; do not add an `adr:` frontmatter key. Fill in frontmatter:
|
|
107
|
+
- `title: <title>`
|
|
108
|
+
- `status: active`
|
|
109
|
+
- `date: <today YYYY-MM-DD>`
|
|
110
|
+
|
|
111
|
+
7. **Gather context.** Ask the user (or use `$ARGUMENTS` context if running in pipeline). The prompt list branches on the shape chosen in step 5:
|
|
112
|
+
|
|
113
|
+
**Terse branch (3 prompts):**
|
|
114
|
+
|
|
115
|
+
- **Context:** What motivates this decision?
|
|
116
|
+
- **Decision:** What is the change being made?
|
|
117
|
+
- **Consequences:** What becomes easier or harder?
|
|
118
|
+
|
|
119
|
+
**Rich branch (8 prompts):**
|
|
120
|
+
|
|
121
|
+
- **Context:** What motivates this decision?
|
|
122
|
+
- **Considered Options:** What alternatives were evaluated? (list with pros/cons and links to tentative C4 model changes)
|
|
123
|
+
- **Decision:** Which option was chosen and why?
|
|
124
|
+
- **Consequences:** What becomes easier or harder?
|
|
125
|
+
- **Cost Impacts:** How much does this change increase or reduce costs? (reference `knowledge-base/operations/expenses.md` for baseline; use "None" if no impact)
|
|
126
|
+
- **NFR Impacts:** Which non-functional requirements are affected? Read [nfr-reference.md](./references/nfr-reference.md) for the assessment checklist and common patterns by decision type. Reference NFR IDs from `knowledge-base/engineering/architecture/nfr-register.md`. Use "None" if no impact.
|
|
127
|
+
- **Principle Alignment:** Which architectural principles does this decision align with or deviate from? Read `knowledge-base/engineering/architecture/principles-register.md` for the register. Reference AP-NNN IDs. Use "None" if no impact.
|
|
128
|
+
- **Diagram:** (optional) Should a LikeC4 diagram be included or updated?
|
|
129
|
+
|
|
130
|
+
8. **Write the ADR body** with the gathered context. If a diagram was requested (rich branch only), update the consolidated LikeC4 model using [likec4-reference.md](./references/likec4-reference.md) (see the `diagram` sub-command) and embed the relevant view with a ` ```likec4-view ` block.
|
|
131
|
+
|
|
132
|
+
8.5. **Domain-model register check.** If this ADR records or changes a **business rule** — an entity invariant, an ownership/access model, or a relationship encoded in a migration constraint / RLS policy / resolver-guard — update the affected row(s) in [`knowledge-base/engineering/architecture/domain-model.md`](../../../../knowledge-base/engineering/architecture/domain-model.md) in the same change: add or amend the rule with a citation back to this ADR. Rule IDs are immutable — supersede (mark + link the successor row), never reuse. If the ADR is purely a technology/process decision with no entity-invariant impact, skip silently.
|
|
133
|
+
|
|
134
|
+
9. **Announce:** "Created ADR-<NNN>: <title> at `knowledge-base/engineering/architecture/decisions/ADR-<NNN>-<kebab-title>.md`"
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Sub-command: list
|
|
139
|
+
|
|
140
|
+
Display all ADRs with their status, number, title, and date.
|
|
141
|
+
|
|
142
|
+
### Steps
|
|
143
|
+
|
|
144
|
+
1. **Scan the decisions directory:**
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
ls knowledge-base/engineering/architecture/decisions/ADR-*.md 2>/dev/null
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
2. **If no ADRs exist:** Display "No ADRs found. Run `soleur:architecture create` to create one."
|
|
151
|
+
|
|
152
|
+
3. **For each ADR file:** Read the YAML frontmatter and extract `adr`, `title`, `status`, `date`.
|
|
153
|
+
|
|
154
|
+
4. **Display as a table:**
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
| # | Title | Status | Date |
|
|
158
|
+
|---|-------|--------|------|
|
|
159
|
+
| ADR-001 | Use LikeC4 for diagrams | active | 2026-03-27 |
|
|
160
|
+
| ADR-002 | PWA-first architecture | superseded | 2026-03-20 |
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Sub-command: supersede
|
|
166
|
+
|
|
167
|
+
Mark an existing ADR as superseded and create its replacement.
|
|
168
|
+
|
|
169
|
+
### Steps
|
|
170
|
+
|
|
171
|
+
1. **Parse the ADR number** from `$ARGUMENTS`. If not provided, use AskUserQuestion: "Which ADR number to supersede?"
|
|
172
|
+
|
|
173
|
+
2. **Find the existing ADR** by matching `ADR-<NNN>-*.md` in `knowledge-base/engineering/architecture/decisions/`.
|
|
174
|
+
|
|
175
|
+
3. **If not found:** Display "ADR-<NNN> not found." and stop.
|
|
176
|
+
|
|
177
|
+
4. **If already superseded:** Display "ADR-<NNN> is already superseded by ADR-<M>." and stop.
|
|
178
|
+
|
|
179
|
+
5. **Get the replacement title.** If provided in `$ARGUMENTS`, use it. Otherwise, use AskUserQuestion: "What is the title of the replacement decision?"
|
|
180
|
+
|
|
181
|
+
6. **Create the replacement ADR** using the `create` sub-command flow (next sequential number). Add `supersedes: ADR-<NNN>` to the YAML frontmatter.
|
|
182
|
+
|
|
183
|
+
7. **Update the original ADR.** Read the file and update:
|
|
184
|
+
- `status: superseded`
|
|
185
|
+
- Add `superseded-by: ADR-<NEW>`
|
|
186
|
+
|
|
187
|
+
8. **Announce:** "ADR-<NNN> superseded by ADR-<NEW>: <title>"
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Sub-command: diagram
|
|
192
|
+
|
|
193
|
+
Create or update the canonical **LikeC4** model. Soleur uses ONE consolidated
|
|
194
|
+
model — every element is declared once and the views scope it to each C4 level
|
|
195
|
+
with clickable drill-down (Context → Container → Component). The model is
|
|
196
|
+
rendered interactively in the web Knowledge Base viewer; static Mermaid C4 is no
|
|
197
|
+
longer emitted.
|
|
198
|
+
|
|
199
|
+
**Read [likec4-reference.md](./references/likec4-reference.md) now** for the
|
|
200
|
+
complete LikeC4 DSL syntax before editing any model.
|
|
201
|
+
|
|
202
|
+
### Project layout
|
|
203
|
+
|
|
204
|
+
> **`.c4` edits are not gated for this workflow.** The `c4-edit` runtime flag
|
|
205
|
+
> (commit `3c8849655`) gates ONLY direct end-user edits in the in-browser webapp
|
|
206
|
+
> editor (`PUT /api/kb/c4`, default OFF). It does **not** gate a workflow: Concierge
|
|
207
|
+
> and the Claude Code plugin terminal are equally-trusted agent contexts that edit
|
|
208
|
+
> the `.c4` files on the filesystem (Edit/Write) and commit them via this skill —
|
|
209
|
+
> they never route through the webapp endpoint. Edit `.c4` directly; do not defer a
|
|
210
|
+
> model change to "ask the Concierge."
|
|
211
|
+
|
|
212
|
+
The model lives as a LikeC4 project under
|
|
213
|
+
`knowledge-base/engineering/architecture/diagrams/`:
|
|
214
|
+
|
|
215
|
+
- `spec.c4` — `specification` block: element kinds (actor, system, container, database, component) and tags.
|
|
216
|
+
- `model.c4` — `model` block: every element (nested systems → containers → components) and every relationship, declared once.
|
|
217
|
+
- `views.c4` — `views` block: one `view <id> [of <element>]` per C4 level. `view <id> of <element>` gives the parent element an automatic drill-down button.
|
|
218
|
+
- `<view>.md` — thin pages embedding a view for the KB viewer via a fenced ` ```likec4-view ` block whose body is the view id, plus a `## Notes` section.
|
|
219
|
+
|
|
220
|
+
### Steps
|
|
221
|
+
|
|
222
|
+
1. **Gather context.** Read to understand the system:
|
|
223
|
+
- `knowledge-base/project/README.md` and `knowledge-base/project/components/`
|
|
224
|
+
- Existing ADRs in `knowledge-base/engineering/architecture/decisions/`
|
|
225
|
+
- The current `.c4` project in the diagrams dir — **READ all three files in full** (`model.c4`, `views.c4`, `spec.c4`), never a single keyword grep (do not duplicate elements that already exist).
|
|
226
|
+
|
|
227
|
+
**External-actor / external-system completeness sweep (do this before concluding "nothing to add").** For the change at hand, enumerate every (a) external human actor (who sends/receives the data — correspondents, reviewers, recipients), (b) external system/vendor (inbound webhook, outbound API, third-party store), (c) container/data-store touched, and (d) actor↔surface access relationship that changes. For each, confirm it is already modeled; if not, add it (element + `#external` tag if outside the platform boundary + the relationship edges + the `views.c4` `include` line so it RENDERS). A `grep` for the feature's own noun returning zero is NOT evidence of absence — the gap is usually an external actor/vendor named by role/vendor, not the feature (e.g. an inbound-email "Correspondent" actor + a "Resend" system for an email feature). Also fix any element **description** the change falsifies (e.g. a "Solo founder" actor when the change adds multi-Owner sharing). See `knowledge-base/project/learnings/2026-06-18-c4-impact-requires-reading-all-diagrams-and-enumerating-external-actors.md`.
|
|
228
|
+
|
|
229
|
+
2. **Edit the consolidated model** (`spec.c4` / `model.c4`), following
|
|
230
|
+
[likec4-reference.md](./references/likec4-reference.md). Key rules:
|
|
231
|
+
- Declare each element exactly once; nest children inside their parent (`system { container { component } }`). Nesting creates the C4 boundary automatically — there is no separate boundary keyword.
|
|
232
|
+
- Relationships: `from -> to "label" { technology "HTTPS" }`. Reference nested elements by qualified path in views (`platform.webapp.dashboard`).
|
|
233
|
+
- Tag third-party systems `#external`.
|
|
234
|
+
|
|
235
|
+
3. **Edit the views** (`views.c4`): ensure a view exists per level you want to
|
|
236
|
+
show. Wire drill-down with `view <id> of <parent>` so the parent element in
|
|
237
|
+
the higher-level view links into it.
|
|
238
|
+
|
|
239
|
+
4. **Write/refresh the view page(s).** For each view that needs a KB page, write
|
|
240
|
+
`knowledge-base/engineering/architecture/diagrams/<view>.md`:
|
|
241
|
+
|
|
242
|
+
````markdown
|
|
243
|
+
# <Title> (C4 Level N)
|
|
244
|
+
|
|
245
|
+
Generated: YYYY-MM-DD
|
|
246
|
+
|
|
247
|
+
```likec4-view
|
|
248
|
+
<view-id>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Notes
|
|
252
|
+
|
|
253
|
+
[Context about the diagram, references to relevant ADRs]
|
|
254
|
+
````
|
|
255
|
+
|
|
256
|
+
5. **Validate** (see `render` below) and **announce**:
|
|
257
|
+
"LikeC4 model updated — N elements, M relationships, K views."
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Sub-commands: add-container, add-component, add-relationship
|
|
262
|
+
|
|
263
|
+
Incremental edits to the consolidated model. Each is a focused patch to the
|
|
264
|
+
`.c4` files (no Mermaid). After any patch, run `render` (see below) to
|
|
265
|
+
**validate** the source, then regenerate `model.likec4.json` with `render` and commit it
|
|
266
|
+
with the `.c4` change. (In the Soleur repository itself a `c4-model-regenerate`
|
|
267
|
+
pre-commit hook does this on commit; other repositories have no such hook.)
|
|
268
|
+
|
|
269
|
+
- **add-container `<id>`** / **add-component `<id>`** — add an element inside the
|
|
270
|
+
correct parent in `model.c4` (`container` / `database` / `component` kind),
|
|
271
|
+
with `technology` and `description`. Add it to the relevant `view`'s `include`
|
|
272
|
+
list in `views.c4` if it should appear.
|
|
273
|
+
- **add-relationship `<from> <to>`** — append `from -> to "label" { technology "…" }`
|
|
274
|
+
to `model.c4`, using existing element ids (qualified if nested).
|
|
275
|
+
|
|
276
|
+
Gather the label/technology/description from `$ARGUMENTS` or via AskUserQuestion.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Sub-command: render
|
|
281
|
+
|
|
282
|
+
Validate the LikeC4 project and rebuild the precomputed model the web viewer
|
|
283
|
+
renders. The Knowledge Base viewer does NOT run the `likec4` toolchain at
|
|
284
|
+
runtime (it would pull vite/esbuild into production deps); it reads the
|
|
285
|
+
committed, layouted `model.likec4.json`.
|
|
286
|
+
|
|
287
|
+
**Run this after every `.c4` edit and commit the result.** Only the Soleur repository
|
|
288
|
+
regenerates on commit automatically (its `c4-model-regenerate` lefthook hook, backed by
|
|
289
|
+
`plugins/soleur/test/c4-model-freshness.test.sh` in CI); in any other repository an
|
|
290
|
+
unregenerated `model.likec4.json` stays stale until someone runs this:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# Canonical regen (pinned, off-tree-validated, idempotent) — same primitive the
|
|
294
|
+
# pre-commit hook and the merge resolver run; renders the current repository:
|
|
295
|
+
bash "${CLAUDE_PLUGIN_ROOT}/scripts/render-c4-model.sh"
|
|
296
|
+
|
|
297
|
+
# Or validate only (line-numbered diagnostics) without rewriting the artifact:
|
|
298
|
+
# --no-use-dot keeps the drift check on the same wasm layout the artifact was
|
|
299
|
+
# rendered with — a dot-layout verdict would disagree with committed bytes.
|
|
300
|
+
cd knowledge-base/engineering/architecture/diagrams
|
|
301
|
+
npx -y likec4@1.50.0 validate --no-use-dot .
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
The pinned `1.50.0` is load-bearing: it MUST match `apps/web-platform/Dockerfile`
|
|
305
|
+
|
|
306
|
+
- `package.json` (`@likec4/core` / `@likec4/diagram`), guarded by
|
|
307
|
+
`c4-likec4-version-pin.test.ts`. Never pin to a floating tag (the unpinned
|
|
308
|
+
`likec4` / a moving release) — a CLI/client schema skew silently corrupts the
|
|
309
|
+
rendered diagram. `render-c4-model.sh` renders
|
|
310
|
+
off-tree and refuses to publish an empty/invalid/zero-view model, so a broken
|
|
311
|
+
`.c4` or a failed layout can never clobber the good committed artifact.
|
|
312
|
+
|
|
313
|
+
On success, report element / relationship / view counts (read the
|
|
314
|
+
`elements` / `relations` / `views` key counts from `model.likec4.json`). On
|
|
315
|
+
failure, branch on the refusal class — do NOT uniformly "fix the source":
|
|
316
|
+
|
|
317
|
+
- **Source validation error or empty/degenerate model** — surface the
|
|
318
|
+
line-numbered diagnostics and fix the `.c4` source before continuing.
|
|
319
|
+
- **"elements but no views — a layout failure"** — the `.c4` source is
|
|
320
|
+
innocent; editing it cannot help. Read the render log tail the refusal
|
|
321
|
+
prints, retry the render once, and if it persists reproduce with the
|
|
322
|
+
`export json --no-use-dot` command the message names, then report the
|
|
323
|
+
outcome rather than hand-editing the model.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Sub-command: assess
|
|
328
|
+
|
|
329
|
+
Assess a feature or plan against the NFR register to identify which non-functional requirements are relevant and what their current status is.
|
|
330
|
+
|
|
331
|
+
**Read [nfr-reference.md](./references/nfr-reference.md) now** for the assessment checklist and common NFR patterns by decision type.
|
|
332
|
+
|
|
333
|
+
### Steps
|
|
334
|
+
|
|
335
|
+
1. **Get the feature description.** If provided in `$ARGUMENTS`, use it. Otherwise, check for a plan file on the current branch:
|
|
336
|
+
|
|
337
|
+
- If on a `feat-*` branch, look for `knowledge-base/project/plans/*<feature-slug>*-plan.md`
|
|
338
|
+
- If a plan exists, read it and extract the feature description from the Overview section
|
|
339
|
+
- Otherwise, use AskUserQuestion: "What feature or change are you assessing?"
|
|
340
|
+
|
|
341
|
+
2. **Read the NFR register** at `knowledge-base/engineering/architecture/nfr-register.md`.
|
|
342
|
+
|
|
343
|
+
3. **Read the principles register** at `knowledge-base/engineering/architecture/principles-register.md`. If it does not exist, skip principle alignment in step 5b.
|
|
344
|
+
|
|
345
|
+
4. **Identify affected containers and links.** Read the Container & Link Inventory in the NFR register. Map the feature to specific C4 containers and links it touches (e.g., a new external service adds a network link; a new UI feature affects Dashboard and API Routes).
|
|
346
|
+
|
|
347
|
+
5. **Classify the feature** against the decision type patterns from [nfr-reference.md](./references/nfr-reference.md):
|
|
348
|
+
|
|
349
|
+
- New external service integration
|
|
350
|
+
- Infrastructure change
|
|
351
|
+
- New user-facing feature
|
|
352
|
+
- Data model change
|
|
353
|
+
- Security change
|
|
354
|
+
- Deployment change
|
|
355
|
+
|
|
356
|
+
6. **Assess each NFR category.** For each of the 7 categories (Observability, Resilience, Testing, Configuration & Delivery, Scaling & Recovery, Security, Data Quality), determine:
|
|
357
|
+
|
|
358
|
+
- Which specific NFRs are relevant to the affected containers/links
|
|
359
|
+
- Current per-container/link status from the NFR register tables
|
|
360
|
+
- Whether this feature improves, degrades, or has no effect on each NFR for the affected containers/links
|
|
361
|
+
- Any evidence gaps (rows with "Applicable: Yes" but no evidence documented)
|
|
362
|
+
- Any new NFRs that should be added to the register
|
|
363
|
+
|
|
364
|
+
7. **Assess principle alignment.** For each principle in the register (AP-001 through AP-NNN), determine: relevant to this feature (yes/no), alignment status (Aligned/Deviation/N/A), and brief rationale. Skip if the principles register was not found in step 3.
|
|
365
|
+
|
|
366
|
+
8. **Output the assessment** as a per-container table:
|
|
367
|
+
|
|
368
|
+
```text
|
|
369
|
+
## NFR Assessment: [Feature Name]
|
|
370
|
+
|
|
371
|
+
### Affected Containers/Links
|
|
372
|
+
|
|
373
|
+
- Dashboard, API Routes, Agent Runtime -> New External Service (new link)
|
|
374
|
+
|
|
375
|
+
### Assessment
|
|
376
|
+
|
|
377
|
+
| NFR | Requirement | Container/Link | Status | Impact | Evidence Gap |
|
|
378
|
+
|-----|-------------|----------------|--------|--------|-------------|
|
|
379
|
+
| NFR-001 | Logging | New Service | — | Needs attention | No logging configured |
|
|
380
|
+
| NFR-026 | Encryption In-Transit | Agent Runtime -> New Service | — | Needs attention | HTTPS required |
|
|
381
|
+
| NFR-007 | Circuit Breaker | Agent Runtime -> New Service | — | Risk introduced | No fallback for new dependency |
|
|
382
|
+
| NFR-026 | Encryption In-Transit | Founder -> Dashboard | Implemented | No change | Cloudflare |
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
If the principles register was loaded, add a Principle Alignment section:
|
|
386
|
+
|
|
387
|
+
```text
|
|
388
|
+
### Principle Alignment
|
|
389
|
+
|
|
390
|
+
| Principle | Title | Status | Note |
|
|
391
|
+
|-----------|-------|--------|------|
|
|
392
|
+
| AP-001 | Terraform-only provisioning | Aligned | New infra uses Terraform |
|
|
393
|
+
| AP-008 | Doppler secrets | N/A | No new secrets |
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
9. **Recommend actions.** For each NFR with "Needs attention" or "Risk introduced" impact, propose a specific action referencing the affected container/link (e.g., "Add circuit breaker on Agent Runtime -> Stripe link", "Configure structured logging for New Service container"). For each principle with "Deviation" status, explain the deviation and whether an exception is justified.
|
|
397
|
+
|
|
398
|
+
10. **Offer to create an ADR.** If the assessment reveals architectural decisions (e.g., choosing to accept a risk, implementing a new NFR, deviating from a principle), ask: "Create an ADR to document these decisions?" Principle alignment will be pre-filled from the assessment.
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Sharp Edges
|
|
403
|
+
|
|
404
|
+
- **A re-open or review trigger keyed on an issue CLOSING fires at the merge of the PR that fixes it, when zero post-fix data exists.** Bind an ADR trigger to a sample floor or a date ("≥N rows after the fix merged, or T+6 weeks"), have the fixing PR carry `Ref #N`, and close the issue only after the re-run. **Why:** #8399 — ADR-229's "when #8470 closes, re-run the triage" would have reported all-clear on an empty sample. See `knowledge-base/project/learnings/2026-09-21-a-re-open-trigger-keyed-on-an-issue-closing-fires-at-the-fixing-merge.md`.
|
|
405
|
+
|
|
406
|
+
- **An ADR ordinal derived across ALL `origin/*` refs still goes stale within a day — re-derive immediately before merge, and scope the renumber sweep to YOUR files.** `ls decisions/` is not enough (it misses sibling branches) and neither is a one-time cross-ref sweep (a sibling merges, or claims the next two, while your PR is in review). Derive with `for r in $(git for-each-ref --format='%(refname)' refs/remotes/origin); do git ls-tree --name-only "$r" knowledge-base/engineering/architecture/decisions/; done | grep -oE 'ADR-[0-9]+' | sort -u -t- -k2 -n | tail`, and re-run it as the last step before merge. When renumbering, sweep only the files YOUR branch owns — the colliding ADR's own citations (plugin scripts, `model.c4`, `model.likec4.json`, session-state) must not move, and a blanket search-replace will take them. **Why:** #7441 — ADR-178 was free across 65 refs at plan time; #7426 landed it the next day and 179/180 were claimed by two sibling branches by the time it was re-checked, so it renumbered to 181 with 27 citations swept and 8 deliberately left alone.
|
|
407
|
+
|
|
408
|
+
- **Regenerating a generated artifact during a merge: render from the merged tree's git objects into private staging, never in the live worktree.** Every worktree state a mid-merge render can meet (interrupt, concurrent edit, a likec4 config loaded as code, a symlink out of the repo) needs its own guard; `git merge-tree --write-tree` plus `git cat-file blob` removes those states by construction. The resolver's design is recorded in the ADR-235 amendment of 2026-09-23. See `knowledge-base/project/learnings/2026-09-23-every-guard-i-wrote-defended-a-worktree-the-render-never-needed.md`.
|
|
409
|
+
|
|
410
|
+
## ADR vs Learning
|
|
411
|
+
|
|
412
|
+
ADRs and learnings serve different purposes:
|
|
413
|
+
|
|
414
|
+
| | ADR | Learning |
|
|
415
|
+
|---|-----|---------|
|
|
416
|
+
| **When** | At decision time | After implementation |
|
|
417
|
+
| **What** | "Why we chose X over Y" | "What went wrong and how we fixed it" |
|
|
418
|
+
| **Format** | Context / Decision / Consequences | Problem / Solution / Key Insight |
|
|
419
|
+
| **Location** | `knowledge-base/engineering/architecture/decisions/` | `knowledge-base/project/learnings/` |
|
|
420
|
+
| **Lifecycle** | Active → Superseded | Evergreen (archived when stale) |
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Sub-command: principle list
|
|
425
|
+
|
|
426
|
+
Display the architecture principles register.
|
|
427
|
+
|
|
428
|
+
### Steps
|
|
429
|
+
|
|
430
|
+
1. **Read the principles register** at `knowledge-base/engineering/architecture/principles-register.md`.
|
|
431
|
+
|
|
432
|
+
2. **If the file does not exist:** Display "No principles register found. Create one at `knowledge-base/engineering/architecture/principles-register.md`."
|
|
433
|
+
|
|
434
|
+
3. **Display the principles table** from the register, preserving the markdown table format.
|
|
435
|
+
|
|
436
|
+
4. **Display the enforcement tiers table** below the principles table.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# ADR Template
|
|
2
|
+
|
|
3
|
+
Use this template when creating Architecture Decision Records. Read `## Choosing the shape` first to pick between the terse (3-section) and rich (8-section) body layouts.
|
|
4
|
+
|
|
5
|
+
## YAML Frontmatter
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
---
|
|
9
|
+
title: [Decision Title]
|
|
10
|
+
status: active | superseded
|
|
11
|
+
date: YYYY-MM-DD
|
|
12
|
+
superseded-by: ADR-NNN # only when status is superseded
|
|
13
|
+
supersedes: ADR-NNN # only when this ADR replaces another
|
|
14
|
+
---
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
> The ordinal lives in the **filename only** (`ADR-NNN-slug.md`) — do NOT add an
|
|
18
|
+
> `adr:` frontmatter key. A frontmatter ordinal can disagree with the filename
|
|
19
|
+
> and make `ADR-NNN` references ambiguous; `scripts/check-adr-ordinals.sh` layer 4
|
|
20
|
+
> rejects any `adr:` key (#6800).
|
|
21
|
+
|
|
22
|
+
## Choosing the shape
|
|
23
|
+
|
|
24
|
+
ADRs come in two shapes. Pick at create-time based on the rubric below — do not mix sections from the two shapes.
|
|
25
|
+
|
|
26
|
+
- **Terse (3 sections)** — Context, Decision, Consequences. Matches Michael Nygard's original 2011 ADR pattern. Optimized for read-speed and ease of authoring; readable in under 60 seconds. Use for narrow, one-decision records. Exemplar: [ADR-007 (Doppler secrets management)](../../../../knowledge-base/engineering/architecture/decisions/ADR-007-doppler-secrets-management.md) — 19 lines, three sections, no amendment.
|
|
27
|
+
> ADR-006 was this exemplar until 2026-09-09. It still has the terse *standing* shape — Context, Decision, Consequences — but #7836 appended a long dated `## Amendment` audit record to it, so it no longer reads as a 60-second example of the form. An amendment is a fourth *record*, not a fourth standing section; the shape rubric below is unchanged by it.
|
|
28
|
+
- **Rich (8 sections)** — Context, Considered Options, Decision, Consequences, Cost Impacts, NFR Impacts, Principle Alignment, Diagram. Matches the MADR (Markdown Architectural Decision Records) 3.0 "full" template, extended with Soleur-specific Cost Impacts, NFR Impacts, and Principle Alignment sections. Optimized for audit-trail on cross-cutting decisions. Exemplar: [ADR-021 (KB binary-serving pattern)](../../../../knowledge-base/engineering/architecture/decisions/ADR-021-kb-binary-serving-pattern.md).
|
|
29
|
+
|
|
30
|
+
### Rubric — pick rich when any one trigger is true
|
|
31
|
+
|
|
32
|
+
Default to terse. Use rich when **any one** of the following is true. Each trigger is a yes/no question whose answer is checkable against a file that already exists in the repo.
|
|
33
|
+
|
|
34
|
+
1. **Cross-cutting code surface.** Does the decision govern behavior in **2+ existing** routes/modules/skills at write time? Check: grep the decision's named helper, module, or concept across the repo and count the existing consumers. Example: ADR-021 governs `serveKbFile` consumed by two routes at write time → yes. ADR-006 governs a Terraform backend config pattern that each new `main.tf` reuses independently, with zero shared consumers at write time → no. Forward-looking "every future X" patterns do NOT hit this trigger on their own — wait until 2+ consumers exist, then supersede with a rich ADR if warranted. This keeps the rubric observable (grep can answer it) rather than subjective.
|
|
35
|
+
2. **Material cost impact.** Does the decision introduce a new paid vendor, change a billing tier, or eliminate a paid service? Check: does the decision appear in or change anything in `knowledge-base/operations/expenses.md`?
|
|
36
|
+
3. **NFR-moving.** Does the decision change the status of one or more NFRs in `knowledge-base/engineering/architecture/nfr-register.md` from one tier to another (e.g., Partial → Implemented)? Check: diff the expected NFR register state before and after implementation.
|
|
37
|
+
4. **Principle deviation.** Does the decision deviate from an AP-NNN principle in `knowledge-base/engineering/architecture/principles-register.md` and require a documented exception? Check: name which AP-NNN and why the exception is justified. If the answer is "none, aligned with all principles," this trigger is not hit.
|
|
38
|
+
5. **Teeth-bearing alternatives.** Did the contributor seriously evaluate 2+ concrete alternatives (named libraries, patterns, architectures, or vendors) AND is the rejection rationale load-bearing for future readers who might otherwise revisit the same decision? Check: can you name Option B and Option C with substantive pros/cons without making them up?
|
|
39
|
+
|
|
40
|
+
If **zero triggers** are hit, use the terse shape. If **one or more triggers** are hit, use the rich shape.
|
|
41
|
+
|
|
42
|
+
The rubric is intentionally asymmetric: a single genuine trigger (e.g., an NFR move or a principle deviation) is load-bearing on its own and justifies the rich shape.
|
|
43
|
+
|
|
44
|
+
**Pipeline-mode default.** When `soleur:architecture create` runs non-interactively (e.g., inside `soleur:one-shot`), the rubric cannot be asked interactively and the default falls to **terse**. Rich-shape ADRs in pipeline mode require the caller to pass `shape: rich` explicitly in `$ARGUMENTS`. Interactive callers always see the full rubric prompt.
|
|
45
|
+
|
|
46
|
+
### What NOT to use as a trigger
|
|
47
|
+
|
|
48
|
+
- **"The decision feels important."** Importance is orthogonal to section count. A terse ADR about a one-line choice can be more consequential than a rich ADR about an eight-way tradeoff.
|
|
49
|
+
- **"There are a lot of stakeholders."** Stakeholder count drives review process, not ADR shape. A terse ADR can capture the outcome of a 10-person review cleanly.
|
|
50
|
+
- **"I want to write a longer ADR."** The 8 sections are not padding opportunities. An 8-section ADR with `None` in Cost/NFR/Principle Alignment is worse than a 3-section ADR — the reader wades through four `None` stanzas before reaching Consequences.
|
|
51
|
+
|
|
52
|
+
Pick the shape as a whole, not by cherry-picking sections across the two.
|
|
53
|
+
|
|
54
|
+
## Body Sections — Terse (3 sections)
|
|
55
|
+
|
|
56
|
+
Use this block when zero rubric triggers are hit. This is the default shape.
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# ADR-NNN: [Decision Title]
|
|
60
|
+
|
|
61
|
+
## Context
|
|
62
|
+
|
|
63
|
+
[What is the issue that motivates this decision? What forces are at play?]
|
|
64
|
+
|
|
65
|
+
## Decision
|
|
66
|
+
|
|
67
|
+
[What is the change we are making? State the decision clearly.]
|
|
68
|
+
|
|
69
|
+
## Consequences
|
|
70
|
+
|
|
71
|
+
[What becomes easier or harder as a result of this decision?
|
|
72
|
+
Include both positive and negative consequences.]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Body Sections — Rich (8 sections)
|
|
76
|
+
|
|
77
|
+
Use this block when one or more rubric triggers are hit.
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
# ADR-NNN: [Decision Title]
|
|
81
|
+
|
|
82
|
+
## Context
|
|
83
|
+
|
|
84
|
+
[What is the issue that motivates this decision? What forces are at play?]
|
|
85
|
+
|
|
86
|
+
## Considered Options
|
|
87
|
+
|
|
88
|
+
[List options evaluated with pros, cons, and links to tentative C4 model changes.
|
|
89
|
+
|
|
90
|
+
- **Option A: [name]** — [brief description]. Pros: [...]. Cons: [...].
|
|
91
|
+
- **Option B: [name]** — [brief description]. Pros: [...]. Cons: [...].
|
|
92
|
+
- **Option C: [name]** — [brief description]. Pros: [...]. Cons: [...].]
|
|
93
|
+
|
|
94
|
+
## Decision
|
|
95
|
+
|
|
96
|
+
[What is the change we are making? State the decision clearly and
|
|
97
|
+
reference which option was chosen from the list above.]
|
|
98
|
+
|
|
99
|
+
## Consequences
|
|
100
|
+
|
|
101
|
+
[What becomes easier or harder as a result of this decision?
|
|
102
|
+
Include both positive and negative consequences.]
|
|
103
|
+
|
|
104
|
+
## Cost Impacts
|
|
105
|
+
|
|
106
|
+
[How much is this change planning to increase or reduce costs?
|
|
107
|
+
Include new service subscriptions, infrastructure changes, API usage,
|
|
108
|
+
and any savings from replacing existing services. Use "None" if no
|
|
109
|
+
cost impact. Reference knowledge-base/operations/expenses.md for
|
|
110
|
+
current cost baseline.]
|
|
111
|
+
|
|
112
|
+
## NFR Impacts
|
|
113
|
+
|
|
114
|
+
[Which non-functional requirements does this decision affect?
|
|
115
|
+
Reference NFR IDs from knowledge-base/engineering/architecture/nfr-register.md.
|
|
116
|
+
Use "None" if no NFR impact.
|
|
117
|
+
|
|
118
|
+
Example: "Improves NFR-026 (Encryption In-Transit) from Partial to Implemented.
|
|
119
|
+
No impact on NFR-008 (Low Latency) — additional TLS termination handled by Cloudflare."]
|
|
120
|
+
|
|
121
|
+
## Principle Alignment
|
|
122
|
+
|
|
123
|
+
[Which architectural principles does this decision align with or deviate from?
|
|
124
|
+
Reference principle IDs from knowledge-base/engineering/architecture/principles-register.md.
|
|
125
|
+
Use "None" if no principle impact.
|
|
126
|
+
|
|
127
|
+
Format: AP-NNN (Title): Aligned | Deviation | N/A — brief note
|
|
128
|
+
|
|
129
|
+
Example: "AP-001 (Terraform-only): Aligned — new infrastructure uses Terraform.
|
|
130
|
+
AP-008 (Doppler secrets): Deviation — uses .env file for local-only dev secret. Exception documented."]
|
|
131
|
+
|
|
132
|
+
## Diagram
|
|
133
|
+
|
|
134
|
+
[Optional Mermaid diagram illustrating the decision.
|
|
135
|
+
Use C4 syntax (C4Context, C4Container, C4Component) for architecture diagrams.
|
|
136
|
+
Omit this section entirely if no diagram is informative — do not leave a "None" stub.]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Naming Convention
|
|
140
|
+
|
|
141
|
+
Files are named: `ADR-NNN-kebab-case-title.md`
|
|
142
|
+
|
|
143
|
+
Examples:
|
|
144
|
+
|
|
145
|
+
- `ADR-001-use-mermaid-for-diagrams.md`
|
|
146
|
+
- `ADR-002-pwa-first-architecture.md`
|
|
147
|
+
- `ADR-003-byok-key-storage.md`
|
|
148
|
+
|
|
149
|
+
## Status Lifecycle
|
|
150
|
+
|
|
151
|
+
Two states only:
|
|
152
|
+
|
|
153
|
+
- **active** — current truth, this decision applies
|
|
154
|
+
- **superseded** — replaced by a newer ADR (must include `superseded-by` field linking to the replacement)
|