@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,253 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# cf-token-scope — verify a Cloudflare API token's retained scope after a widen,
|
|
3
|
+
# and (with --target-entrypoint) confirm a newly-added scope is live.
|
|
4
|
+
#
|
|
5
|
+
# Deterministic, read-only probe. The widen itself is driven by Playwright MCP
|
|
6
|
+
# per the skill (SKILL.md) — this script never touches the browser and never
|
|
7
|
+
# mutates anything (no Doppler write, no infra apply).
|
|
8
|
+
#
|
|
9
|
+
# It runs the ADR-130 retained-scope probe set against CF_API_TOKEN_RULESETS and
|
|
10
|
+
# is fail-closed in three layers (per learning
|
|
11
|
+
# 2026-07-23-live-api-fail-closed-guard-counts-degraded-200-as-empty-and-control-probe-must-cover-every-scheme):
|
|
12
|
+
# 1. status — 403 / 000 / 5xx / empty / no-newline / non-numeric = FAIL.
|
|
13
|
+
# 2. body-shape — a 200 passes ONLY when the JSON body has success==true AND
|
|
14
|
+
# .result is an array. A degraded 200 (e.g.
|
|
15
|
+
# {"success":false,...} OR {"success":true,"result":null}) is a
|
|
16
|
+
# FAIL. Never key on `.result | length` — jq reads null as 0.
|
|
17
|
+
# 3. per-scheme control — the probes span two schemes: four zone phases and one
|
|
18
|
+
# account list. The account list is itself the account-scheme
|
|
19
|
+
# control (must be an authorized 200; an account 404 = FAIL). A
|
|
20
|
+
# zone 404 (ADR-130's "phase exists, empty") is trusted ONLY for
|
|
21
|
+
# http_config_settings — the one phase whose 403-on-missing was
|
|
22
|
+
# empirically verified — and only under an authorized zone
|
|
23
|
+
# control (http_request_dynamic_redirect). Every other phase's
|
|
24
|
+
# 404 fails closed (a dropped scope that 404s must not pass).
|
|
25
|
+
#
|
|
26
|
+
# The probe set is a CANARY for the whole-list REPLACE failure mode (a dashboard
|
|
27
|
+
# "save" that replaces rather than appends drops every scope at once → every probe
|
|
28
|
+
# catches it). It is NOT exhaustive per-permission coverage: Zone WAF
|
|
29
|
+
# (firewall_custom) is now probed, but Transform Rules (response_headers_transform)
|
|
30
|
+
# and account Filter Lists are not, so a surgical single-permission drop of those
|
|
31
|
+
# can pass. The probe issues GET, so it attests READ reachability, not :Edit
|
|
32
|
+
# retention. See SKILL.md § Sharp Edges.
|
|
33
|
+
|
|
34
|
+
set -euo pipefail
|
|
35
|
+
|
|
36
|
+
# (#7797) Refuse to run under shell tracing. UNCONDITIONAL — deliberately NOT
|
|
37
|
+
# gated on a non-emptiness test of the credential variable, because
|
|
38
|
+
# CF_API_TOKEN_RULESETS is acquired by `doppler secrets get` BELOW this point, so a
|
|
39
|
+
# conditional arm would test an empty variable at guard time, open, and then trace
|
|
40
|
+
# the acquisition itself.
|
|
41
|
+
#
|
|
42
|
+
# STREAM CONTRACT: this script's stdout is a DATA channel — SKILL.md's probe-set
|
|
43
|
+
# contract documents `PASS: …` verdict lines a consumer reads. So the refusal is
|
|
44
|
+
# emitted as a `FAIL:` verdict in this module's own vocabulary: it cannot be
|
|
45
|
+
# mistaken for a PASS row, which a bare `[FATAL] …` line could be if the consumer
|
|
46
|
+
# only greps for verdicts. Stdout, not stderr, because agent runtimes surface
|
|
47
|
+
# stdout and swallow stderr (constitution.md > Code Style).
|
|
48
|
+
case "$-" in
|
|
49
|
+
*x*)
|
|
50
|
+
printf 'FAIL: refusing to run under xtrace — this script handles a live credential and -x would print it (see #7797). No probe was issued.\n'
|
|
51
|
+
exit 78
|
|
52
|
+
;;
|
|
53
|
+
esac
|
|
54
|
+
|
|
55
|
+
# (#7873) `--disable` closes ~/.curlrc and `--noproxy '*'` closes the proxy vars,
|
|
56
|
+
# but neither touches the env that subverts TLS ITSELF. SSLKEYLOGFILE writes the
|
|
57
|
+
# session keys and the CA vars substitute the trust store, so a CURL_CA_BUNDLE
|
|
58
|
+
# MITM of the Cloudflare token works with every other guard fully intact.
|
|
59
|
+
unset SSLKEYLOGFILE CURL_CA_BUNDLE SSL_CERT_FILE SSL_CERT_DIR CURL_HOME \
|
|
60
|
+
HOSTALIASES LOCALDOMAIN RES_OPTIONS
|
|
61
|
+
|
|
62
|
+
DOPPLER_PROJECT="soleur"
|
|
63
|
+
DOPPLER_CONFIG="prd_terraform"
|
|
64
|
+
TOKEN_SECRET="CF_API_TOKEN_RULESETS"
|
|
65
|
+
ZONE_SECRET="CF_ZONE_ID"
|
|
66
|
+
ACCT_SECRET="CF_ACCOUNT_ID"
|
|
67
|
+
API="https://api.cloudflare.com/client/v4"
|
|
68
|
+
|
|
69
|
+
# The ADR-130 retained-scope zone phases. http_request_dynamic_redirect is the
|
|
70
|
+
# known-granted zone control (ADR-130 § Consequences: the 200 control probe).
|
|
71
|
+
# http_request_firewall_custom (Zone WAF:Edit) is added to the retained set
|
|
72
|
+
# because it is a hijack-class scope on the same token (ADR-130 axis 1).
|
|
73
|
+
ZONE_CONTROL="http_request_dynamic_redirect"
|
|
74
|
+
ZONE_PHASES=(http_config_settings http_request_dynamic_redirect http_request_cache_settings http_request_firewall_custom)
|
|
75
|
+
|
|
76
|
+
# 403-vs-404-on-missing-scope semantics are EMPIRICALLY VERIFIED (ADR-130 probe
|
|
77
|
+
# #6746) for ONLY http_config_settings: a missing scope there returns 403, never
|
|
78
|
+
# 404, so a 404 is unambiguously "phase exists, empty" and passes. For every other
|
|
79
|
+
# phase that fact is UNVERIFIED, so a 404 fails closed — a dropped scope that
|
|
80
|
+
# returned 404 instead of 403 must never read as green (user-impact P1, #6892).
|
|
81
|
+
trust404_for() { [[ "$1" == "http_config_settings" ]] && echo 1 || echo 0; }
|
|
82
|
+
|
|
83
|
+
usage() {
|
|
84
|
+
cat <<'EOF'
|
|
85
|
+
Usage:
|
|
86
|
+
cf-token-scope.sh [--target-entrypoint <phase>] [--dry-run]
|
|
87
|
+
|
|
88
|
+
Runs the ADR-130 retained-scope probe set against CF_API_TOKEN_RULESETS
|
|
89
|
+
(read-only). The widen itself is driven via Playwright MCP — see SKILL.md.
|
|
90
|
+
|
|
91
|
+
Flags:
|
|
92
|
+
--target-entrypoint <phase> Also probe <phase> and assert the target scope is
|
|
93
|
+
present (use after a widen; confirm the
|
|
94
|
+
403->present transition against your baseline).
|
|
95
|
+
--dry-run Print the probe commands (token unexpanded) and
|
|
96
|
+
run nothing.
|
|
97
|
+
-h, --help Show this help.
|
|
98
|
+
|
|
99
|
+
Exit codes:
|
|
100
|
+
0 every retained scope authorized (and the target, if given)
|
|
101
|
+
2 usage error, missing prerequisite binary, or absent Doppler secret
|
|
102
|
+
3 probe failed — a scope was dropped, degraded, or denied
|
|
103
|
+
EOF
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
TARGET=""
|
|
107
|
+
DRY_RUN=0
|
|
108
|
+
while [[ $# -gt 0 ]]; do
|
|
109
|
+
case "$1" in
|
|
110
|
+
--target-entrypoint)
|
|
111
|
+
if [[ -z "${2:-}" ]]; then
|
|
112
|
+
echo "cf-token-scope: --target-entrypoint requires a phase name" >&2
|
|
113
|
+
exit 2
|
|
114
|
+
fi
|
|
115
|
+
TARGET="$2"; shift 2 ;;
|
|
116
|
+
--dry-run) DRY_RUN=1; shift ;;
|
|
117
|
+
-h|--help) usage; exit 0 ;;
|
|
118
|
+
*) echo "cf-token-scope: unknown argument: $1" >&2; usage >&2; exit 2 ;;
|
|
119
|
+
esac
|
|
120
|
+
done
|
|
121
|
+
|
|
122
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
123
|
+
printf '%s\n' "# dry-run — would read the token read-only and probe (nothing executed):"
|
|
124
|
+
printf '%s\n' "TOK=\$(doppler secrets get $TOKEN_SECRET -p $DOPPLER_PROJECT -c $DOPPLER_CONFIG --plain)"
|
|
125
|
+
printf '%s\n' "ZONE=\$(doppler secrets get $ZONE_SECRET -p $DOPPLER_PROJECT -c $DOPPLER_CONFIG --plain)"
|
|
126
|
+
printf '%s\n' "ACCT=\$(doppler secrets get $ACCT_SECRET -p $DOPPLER_PROJECT -c $DOPPLER_CONFIG --plain)"
|
|
127
|
+
# The token is passed from a private fd (never argv) — mirror that here so a
|
|
128
|
+
# copy-pasted recipe does not leak the token to ps / /proc (security #6892).
|
|
129
|
+
# The recipes also carry `--disable` literally first (it aborts ~/.curlrc
|
|
130
|
+
# parsing, and later is too late) and `--noproxy '*'`, so a copy-pasted probe
|
|
131
|
+
# teaches the confined form rather than the one this change removes (#7873).
|
|
132
|
+
for p in "${ZONE_PHASES[@]}" ${TARGET:+"$TARGET"}; do
|
|
133
|
+
printf '%s\n' "curl --disable --noproxy '*' -sS --max-time 15 -H @<(printf 'Authorization: Bearer %s' \"\$TOK\") $API/zones/\$ZONE/rulesets/phases/$p/entrypoint"
|
|
134
|
+
done
|
|
135
|
+
printf '%s\n' "curl --disable --noproxy '*' -sS --max-time 15 -H @<(printf 'Authorization: Bearer %s' \"\$TOK\") $API/accounts/\$ACCT/rulesets"
|
|
136
|
+
exit 0
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Prerequisites.
|
|
140
|
+
for bin in curl doppler jq; do
|
|
141
|
+
command -v "$bin" >/dev/null 2>&1 || {
|
|
142
|
+
echo "cf-token-scope: missing required binary: $bin" >&2
|
|
143
|
+
exit 2
|
|
144
|
+
}
|
|
145
|
+
done
|
|
146
|
+
|
|
147
|
+
get_secret() {
|
|
148
|
+
local name="$1" val
|
|
149
|
+
val="$(doppler secrets get "$name" -p "$DOPPLER_PROJECT" -c "$DOPPLER_CONFIG" --plain 2>/dev/null || true)"
|
|
150
|
+
if [[ -z "$val" ]]; then
|
|
151
|
+
echo "cf-token-scope: $name is empty or absent in Doppler $DOPPLER_PROJECT/$DOPPLER_CONFIG" >&2
|
|
152
|
+
exit 2
|
|
153
|
+
fi
|
|
154
|
+
printf '%s' "$val"
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
TOK="$(get_secret "$TOKEN_SECRET")"
|
|
158
|
+
ZONE="$(get_secret "$ZONE_SECRET")"
|
|
159
|
+
ACCT="$(get_secret "$ACCT_SECRET")"
|
|
160
|
+
# shellcheck disable=SC2317 # invoked indirectly via the EXIT trap
|
|
161
|
+
cleanup() { unset TOK ZONE ACCT; }
|
|
162
|
+
trap cleanup EXIT
|
|
163
|
+
|
|
164
|
+
# Body-shape layer: a 200 is authorized ONLY with success==true AND .result of the
|
|
165
|
+
# type the endpoint's scheme returns — a zone .../entrypoint returns a single
|
|
166
|
+
# ruleset OBJECT; the account /rulesets list returns an ARRAY. A degraded 200
|
|
167
|
+
# ({"success":false,...} or {"success":true,"result":null}) fails either way (null
|
|
168
|
+
# is neither object nor array). $2 is the expected type: object (zone) | array (account).
|
|
169
|
+
authorized_body() {
|
|
170
|
+
printf '%s' "$1" | jq -e --arg t "$2" '.success == true and (.result | type == $t)' >/dev/null 2>&1
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
ZONE_CONTROL_OK=0
|
|
174
|
+
|
|
175
|
+
# check <url> <scheme:zone|account> <trust404:0|1> — probes one URL, sets VERDICT,
|
|
176
|
+
# returns 0 (pass: authorized / empty-404-under-control-when-trusted) or 1 (fail).
|
|
177
|
+
# The Authorization header is passed from a private fd so the token never lands
|
|
178
|
+
# in the process argv (readable via ps / /proc/<pid>/cmdline).
|
|
179
|
+
check() {
|
|
180
|
+
local url="$1" scheme="$2" trust404="${3:-0}" resp code body want_type
|
|
181
|
+
want_type="object"; [[ "$scheme" == "account" ]] && want_type="array"
|
|
182
|
+
resp="$(curl --disable --noproxy '*' -sS --max-time 15 -w '\n%{http_code}' \
|
|
183
|
+
-H @<(printf 'Authorization: Bearer %s' "$TOK") "$url" 2>/dev/null || true)"
|
|
184
|
+
if [[ "$resp" != *$'\n'* ]]; then VERDICT="empty (no response)"; return 1; fi
|
|
185
|
+
code="${resp##*$'\n'}"
|
|
186
|
+
body="${resp%$'\n'*}"
|
|
187
|
+
if [[ ! "$code" =~ ^[0-9]+$ ]]; then VERDICT="empty (non-numeric status)"; return 1; fi
|
|
188
|
+
if [[ "$code" == "200" ]]; then
|
|
189
|
+
if authorized_body "$body" "$want_type"; then VERDICT="authorized (200)"; return 0; fi
|
|
190
|
+
VERDICT="degraded (200 body not success/$want_type)"; return 1
|
|
191
|
+
fi
|
|
192
|
+
# A 404 is trusted as "phase exists, empty" ONLY for an entrypoint whose
|
|
193
|
+
# 403-on-missing semantics are verified (trust404=1) AND under an authorized
|
|
194
|
+
# zone control. Every other 404 fails closed.
|
|
195
|
+
if [[ "$code" == "404" ]]; then
|
|
196
|
+
if [[ "$scheme" == "zone" && "$ZONE_CONTROL_OK" == "1" && "$trust404" == "1" ]]; then
|
|
197
|
+
VERDICT="empty (404, verified phase exists)"; return 0
|
|
198
|
+
fi
|
|
199
|
+
VERDICT="denied (404, unverified — fail-closed)"; return 1
|
|
200
|
+
fi
|
|
201
|
+
VERDICT="denied ($code)"; return 1
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
report() { printf ' %-42s %s\n' "$1" "$2"; }
|
|
205
|
+
|
|
206
|
+
FAILED=0
|
|
207
|
+
|
|
208
|
+
echo "cf-token-scope: probing CF_API_TOKEN_RULESETS retained scope (read-only)"
|
|
209
|
+
|
|
210
|
+
# 1. Zone control first — every zone 404's trust depends on it. The control must
|
|
211
|
+
# be an authorized 200 (trust404=0: a control that only 404s proves nothing).
|
|
212
|
+
if check "$API/zones/$ZONE/rulesets/phases/$ZONE_CONTROL/entrypoint" zone 0; then ZONE_CONTROL_OK=1; fi
|
|
213
|
+
report "$ZONE_CONTROL" "$VERDICT"
|
|
214
|
+
[[ "$ZONE_CONTROL_OK" == "1" ]] || FAILED=1
|
|
215
|
+
|
|
216
|
+
# 2. Remaining retained zone phases (trust404 per the verified-phase rule).
|
|
217
|
+
for p in "${ZONE_PHASES[@]}"; do
|
|
218
|
+
[[ "$p" == "$ZONE_CONTROL" ]] && continue
|
|
219
|
+
check "$API/zones/$ZONE/rulesets/phases/$p/entrypoint" zone "$(trust404_for "$p")" || FAILED=1
|
|
220
|
+
report "$p" "$VERDICT"
|
|
221
|
+
done
|
|
222
|
+
|
|
223
|
+
# 3. Account list — the account-scheme control (an account 404 is a FAIL).
|
|
224
|
+
check "$API/accounts/$ACCT/rulesets" account 0 || FAILED=1
|
|
225
|
+
report "accounts/<acct>/rulesets" "$VERDICT"
|
|
226
|
+
|
|
227
|
+
# 4. Target entrypoint (the newly-widened scope), if given. TARGET_PRESENT gates
|
|
228
|
+
# the success line so it cannot print unless the target probe actually passed.
|
|
229
|
+
TARGET_PRESENT=0
|
|
230
|
+
if [[ -n "$TARGET" ]]; then
|
|
231
|
+
if check "$API/zones/$ZONE/rulesets/phases/$TARGET/entrypoint" zone "$(trust404_for "$TARGET")"; then
|
|
232
|
+
TARGET_PRESENT=1
|
|
233
|
+
else
|
|
234
|
+
FAILED=1
|
|
235
|
+
fi
|
|
236
|
+
report "target: $TARGET" "$VERDICT"
|
|
237
|
+
fi
|
|
238
|
+
|
|
239
|
+
echo
|
|
240
|
+
if [[ "$FAILED" -eq 0 ]]; then
|
|
241
|
+
echo "PASS: no scope dropped"
|
|
242
|
+
# "present", not "added": a single run cannot observe the 403->authorized
|
|
243
|
+
# transition — the operator confirms that against the pre-widen baseline.
|
|
244
|
+
[[ -n "$TARGET" && "$TARGET_PRESENT" == "1" ]] && \
|
|
245
|
+
echo "PASS: target scope present ($TARGET) — confirm the 403->present transition against your pre-widen baseline"
|
|
246
|
+
exit 0
|
|
247
|
+
fi
|
|
248
|
+
|
|
249
|
+
if [[ "$ZONE_CONTROL_OK" != "1" ]]; then
|
|
250
|
+
echo "FAIL: zone control ($ZONE_CONTROL) is not authorized — the token is likely bad or missing its base scope, not a single dropped scope." >&2
|
|
251
|
+
fi
|
|
252
|
+
echo "FAIL: retained-scope probe failed — inspect the denied/degraded entrypoints above." >&2
|
|
253
|
+
exit 3
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: changelog
|
|
3
|
+
description: "This skill should be used when creating changelogs for recent merges. Analyzes PR labels, issues, and descriptions to generate formatted summaries."
|
|
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
|
+
# Changelog Generator
|
|
11
|
+
|
|
12
|
+
Generate a fun, engaging changelog for an internal development team by summarizing the latest merges to the main branch, highlighting new features, bug fixes, and giving credit to the developers.
|
|
13
|
+
|
|
14
|
+
## Time Period
|
|
15
|
+
|
|
16
|
+
- For daily changelogs: Look at PRs merged in the last 24 hours
|
|
17
|
+
- For weekly summaries: Look at PRs merged in the last 7 days
|
|
18
|
+
- Always specify the time period in the title (e.g., "Daily" vs "Weekly")
|
|
19
|
+
- Default: Get the latest changes from the last day from the main branch of the repository
|
|
20
|
+
|
|
21
|
+
## PR Analysis
|
|
22
|
+
|
|
23
|
+
Analyze the provided GitHub changes and related issues. Look for:
|
|
24
|
+
|
|
25
|
+
1. New features that have been added
|
|
26
|
+
2. Bug fixes that have been implemented
|
|
27
|
+
3. Any other significant changes or improvements
|
|
28
|
+
4. References to specific issues and their details
|
|
29
|
+
5. Names of contributors who made the changes
|
|
30
|
+
6. Use gh cli to lookup the PRs as well and the description of the PRs
|
|
31
|
+
7. Check PR labels to identify feature type (feature, bug, chore, etc.)
|
|
32
|
+
8. Look for breaking changes and highlight them prominently
|
|
33
|
+
9. Include PR numbers for traceability
|
|
34
|
+
10. Check if PRs are linked to issues and include issue context
|
|
35
|
+
|
|
36
|
+
## Content Priorities
|
|
37
|
+
|
|
38
|
+
1. Breaking changes (if any) - MUST be at the top
|
|
39
|
+
2. User-facing features
|
|
40
|
+
3. Critical bug fixes
|
|
41
|
+
4. Performance improvements
|
|
42
|
+
5. Developer experience improvements
|
|
43
|
+
6. Documentation updates
|
|
44
|
+
|
|
45
|
+
## Formatting Guidelines
|
|
46
|
+
|
|
47
|
+
Create a changelog summary with the following guidelines:
|
|
48
|
+
|
|
49
|
+
1. Keep it concise and to the point
|
|
50
|
+
2. Highlight the most important changes first
|
|
51
|
+
3. Group similar changes together (e.g., all new features, all bug fixes)
|
|
52
|
+
4. Include issue references where applicable
|
|
53
|
+
5. Mention the names of contributors, giving them credit for their work
|
|
54
|
+
6. Add a touch of humor or playfulness to make it engaging
|
|
55
|
+
7. Use emojis sparingly to add visual interest
|
|
56
|
+
8. Keep total message under 2000 characters for Discord
|
|
57
|
+
9. Use consistent emoji for each section
|
|
58
|
+
10. Format code/technical terms in backticks
|
|
59
|
+
11. Include PR numbers in parentheses (e.g., "Fixed login bug (#123)")
|
|
60
|
+
|
|
61
|
+
## Deployment Notes
|
|
62
|
+
|
|
63
|
+
When relevant, include:
|
|
64
|
+
|
|
65
|
+
- Database migrations required
|
|
66
|
+
- Environment variable updates needed
|
|
67
|
+
- Manual intervention steps post-deploy
|
|
68
|
+
- Dependencies that need updating
|
|
69
|
+
|
|
70
|
+
The final output should be formatted as follows:
|
|
71
|
+
|
|
72
|
+
<change_log>
|
|
73
|
+
|
|
74
|
+
# 🚀 [Daily/Weekly] Change Log: [Current Date]
|
|
75
|
+
|
|
76
|
+
## 🚨 Breaking Changes (if any)
|
|
77
|
+
|
|
78
|
+
[List any breaking changes that require immediate attention]
|
|
79
|
+
|
|
80
|
+
## 🌟 New Features
|
|
81
|
+
|
|
82
|
+
[List new features here with PR numbers]
|
|
83
|
+
|
|
84
|
+
## 🐛 Bug Fixes
|
|
85
|
+
|
|
86
|
+
[List bug fixes here with PR numbers]
|
|
87
|
+
|
|
88
|
+
## 🛠️ Other Improvements
|
|
89
|
+
|
|
90
|
+
[List other significant changes or improvements]
|
|
91
|
+
|
|
92
|
+
## 🙌 Shoutouts
|
|
93
|
+
|
|
94
|
+
[Mention contributors and their contributions]
|
|
95
|
+
|
|
96
|
+
## 🎉 Fun Fact of the Day
|
|
97
|
+
|
|
98
|
+
[Include a brief, work-related fun fact or joke]
|
|
99
|
+
|
|
100
|
+
</change_log>
|
|
101
|
+
|
|
102
|
+
## Style Guide Review
|
|
103
|
+
|
|
104
|
+
Review the changelog using the EVERY_WRITE_STYLE.md file and go one by one to ensure adherence to the style guide. Use multiple agents, run in parallel to make it faster.
|
|
105
|
+
|
|
106
|
+
Remember, the final output should only include the content within the <change_log> tags. Do not include any thought process or original data in the output.
|
|
107
|
+
|
|
108
|
+
## Discord Posting (Optional)
|
|
109
|
+
|
|
110
|
+
Post changelogs to Discord by adding a webhook URL:
|
|
111
|
+
|
|
112
|
+
First get the webhook URL with `printenv DISCORD_WEBHOOK_URL`, then post using curl with the literal URL:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
curl -H "Content-Type: application/json" \
|
|
116
|
+
-d "{\"content\": \"{{CHANGELOG}}\"}" \
|
|
117
|
+
"<webhook-url>"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Replace `<webhook-url>` with the actual Discord webhook URL.
|
|
121
|
+
|
|
122
|
+
To get a webhook URL, go to Discord server > Server Settings > Integrations > Webhooks > New Webhook.
|
|
123
|
+
|
|
124
|
+
## Error Handling
|
|
125
|
+
|
|
126
|
+
- If no changes in the time period, post a "quiet day" message: "🌤️ Quiet day! No new changes merged."
|
|
127
|
+
- If unable to fetch PR details, list the PR numbers for manual review
|
|
128
|
+
- Always validate message length before posting to Discord (max 2000 chars)
|
|
129
|
+
|
|
130
|
+
## Schedule Recommendations
|
|
131
|
+
|
|
132
|
+
- Run daily at 6 AM NY time for previous day's changes
|
|
133
|
+
- Run weekly summary on Mondays for the previous week
|
|
134
|
+
- Special runs after major releases or deployments
|
|
135
|
+
|
|
136
|
+
## Audience Considerations
|
|
137
|
+
|
|
138
|
+
Adjust the tone and detail level based on the channel:
|
|
139
|
+
|
|
140
|
+
- **Dev team channels**: Include technical details, performance metrics, code snippets
|
|
141
|
+
- **Product team channels**: Focus on user-facing changes and business impact
|
|
142
|
+
- **Leadership channels**: Highlight progress on key initiatives and blockers
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-to-prd
|
|
3
|
+
description: "This skill should be used when generating a PRD from a Next.js codebase for buyer/investor/agent handoff. Walks tracked files, redacts secrets, writes structured markdown to knowledge-base/product/prd/."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- soleur-cloud-mode:start -->
|
|
7
|
+
**Cloud Mode (Devin):** before pipeline work run `bash "${CLAUDE_PLUGIN_ROOT}/scripts/cloud-detect.sh"`. If `CLAUDE_PLUGIN_ROOT` is unset (cloud exec shells do not export it), resolve the root by IDENTITY, never by script basename: for `d` in `"$HOME/.local/share/devin/cli/plugins/cache"` and `/opt/.devin/plugins`, skip unless `[ -d "$d" ]`, then `MANIFEST="$(find "$d" -path '*/.claude-plugin/plugin.json' -exec grep -l '"name"[[:space:]]*:[[:space:]]*"soleur"' {} + 2>/dev/null | head -1)"`, `ROOT="${MANIFEST%/.claude-plugin/plugin.json}"` — one resolution, two consumers: `$ROOT/scripts/cloud-detect.sh` and `$ROOT/scripts/precommit-guard.sh`. (Shape check, not authentication: a planted `{"name":"soleur"}` dir passes — ADR-179 A11.) `local` or `not-local:no-devin-env` proceeds normally; any other `not-local:<reason>` applies `<plugin-root>/devin/INSTRUCTIONS.md` §Cloud Mode: emit the `--banner`, fan out sequentially with `Reviewed-Coverage: sequential-fallback` disclosure (never claim an independent review ran), `message_user` ack before any secrets read or production mutation, and run `precommit-guard.sh` before any `git commit` — hooks do not fire in cloud.
|
|
8
|
+
<!-- soleur-cloud-mode:end -->
|
|
9
|
+
|
|
10
|
+
<!-- grok-harness-invoke:start -->
|
|
11
|
+
**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.
|
|
12
|
+
<!-- grok-harness-invoke:end -->
|
|
13
|
+
|
|
14
|
+
# Code-to-PRD
|
|
15
|
+
|
|
16
|
+
Reverse-engineer a Next.js codebase (App Router + Pages Router) into a PRD markdown document the founder can hand to a buyer, investor, or coding agent. Output lands at `knowledge-base/product/prd/<project>-prd.md`. v1 ships Next.js-only; Rails/Django and exhaustive field inventory deferred to v2 (#3794).
|
|
17
|
+
|
|
18
|
+
## When to Use
|
|
19
|
+
|
|
20
|
+
- Inherited Next.js prototype heading into buyer/investor due diligence.
|
|
21
|
+
- Founder needs to onboard a coding agent or contractor to an unfamiliar codebase.
|
|
22
|
+
- Sell-side IP handoff where the founder needs a structured artifact but cannot share raw source.
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
|
|
26
|
+
Single PRD at `knowledge-base/product/prd/<project>-prd.md` where `<project>` is the kebab-cased `package.json` `name`. **A second run with a target whose `package.json` `name` matches an earlier run overwrites the prior PRD** — the script emits a loud `WARNING — overwriting existing PRD at ...` on stderr so a wrong-codebase PRD does not reach a buyer's data room silently. Commit or rename the previous PRD before regenerating against a different codebase.
|
|
27
|
+
|
|
28
|
+
The PRD contains:
|
|
29
|
+
|
|
30
|
+
1. **Banners** — dual non-removable disclaimers (due-diligence + PII/confidentiality) + inline `### How to Read This PRD` subsection explaining redaction tokens.
|
|
31
|
+
2. **Overview** — project name, framework detected, walk stats.
|
|
32
|
+
3. **Routes** — App Router (`app/**/page.{tsx,jsx,ts,js}`, `app/**/route.{ts,js}`) and Pages Router (`pages/**/*.{tsx,jsx,ts,js}` excluding `pages/_*`).
|
|
33
|
+
4. **State Shapes** — top-level `useState`/`useReducer`/server-component props (best-effort regex).
|
|
34
|
+
5. **API & External Dependencies** — `fetch()` literal URLs + `@/lib/api*`/`@/server/*` imports + `process.env.*` names (values never read) + third-party SDK packages from `package.json`.
|
|
35
|
+
6. **Coverage Caveats** — frameworks not scanned + extraction techniques + path-filter exclusion counts + Art. 9 special-category disclaimer.
|
|
36
|
+
7. **Gap Analysis** — produced by `soleur:product:spec-flow-analyzer` Task spawn after the PRD is written and verified.
|
|
37
|
+
8. **MIT Attribution** — footer pointing at `plugins/soleur/NOTICE`.
|
|
38
|
+
|
|
39
|
+
## Redaction (3-layer, fail-closed)
|
|
40
|
+
|
|
41
|
+
The skill is user-brand-critical (`single-user incident` threshold). Redaction is automated and fail-closed; the founder is NOT the last line of defense.
|
|
42
|
+
|
|
43
|
+
- **Layer 1 — path exclusion.** Walker uses `git -C <target> ls-files -c -o --exclude-standard` (honors `.gitignore`) and an explicit deny-list: `.env*`, `secrets.*`, `*.pem`, `*.key`, `credentials.*`, `master.key`, `.git/**`. Symlinks resolving outside `<target>` are rejected via `realpath`.
|
|
44
|
+
- **Layer 2 — pre-write sentinel.** Rendered PRD passes through [redact-sentinel.sh](../incident/scripts/redact-sentinel.sh) immediately before disk write. Exit code 1 (matches found) MUST abort the write. No partial PRD ever lands on disk.
|
|
45
|
+
- **Layer 3 — pre-write verifier.** `gitleaks detect --source <rendered-file> --no-git --report-format json` is the independent verifier, run over the exact bytes about to be written. A finding (exit 1) or a scan that does not complete (exit 2) means the PRD is not written, and any previous PRD at the output path is left untouched. A runnable `gitleaks` is a Phase 0 preflight precondition — the skill refuses to start when it is missing or cannot run.
|
|
46
|
+
|
|
47
|
+
## Preconditions
|
|
48
|
+
|
|
49
|
+
- A runnable `gitleaks` on PATH (Layer 3 verifier). CI pins 8.24.2; a version-manager shim with no version set is refused at preflight.
|
|
50
|
+
- `<target>` contains a `package.json` at the root.
|
|
51
|
+
- `<target>` is under git OR contains tracked files (`git ls-files` returns ≥1 entry).
|
|
52
|
+
- Framework detected as Next.js (presence of `next.config.{js,ts,mjs}` alongside `package.json`).
|
|
53
|
+
|
|
54
|
+
## Resources
|
|
55
|
+
|
|
56
|
+
- [prd-template.md](./references/prd-template.md) — canonical PRD section order + frontmatter (Phase 4).
|
|
57
|
+
- [banner-template.md](./references/banner-template.md) — dual banners + inline How-to-Read content (Phase 4).
|
|
58
|
+
- [code-to-prd.sh](./scripts/code-to-prd.sh) — entry-point script.
|
|
59
|
+
|
|
60
|
+
## Implementation Status
|
|
61
|
+
|
|
62
|
+
Scaffold landed (Phase 0); full implementation in progress per `knowledge-base/project/plans/archive/20261013-014038-2026-05-15-feat-code-to-prd-skill-plan.md`. See `knowledge-base/project/specs/archive/20261013-014038-feat-code-to-prd-2726/tasks.md` for phase progress.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
_Adapted from `alirezarezvani/claude-skills` (MIT) — see [plugins/soleur/NOTICE](../../NOTICE)._
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- BANNER:DUE-DILIGENCE — non-removable per code-to-prd FR7 -->
|
|
2
|
+
> **Due-diligence disclaimer.** This PRD is auto-generated from source code by `code-to-prd` (#2726). It is a best-effort regex-driven snapshot, not an exhaustive specification. Routes, state shapes, and external dependencies are extracted from filesystem walk + grep — no AST analysis is performed in v1. Verify any load-bearing claim against the source tree before relying on it for an acquisition, valuation, or audit decision.
|
|
3
|
+
|
|
4
|
+
<!-- BANNER:PII-CONFIDENTIALITY — non-removable per code-to-prd FR7 -->
|
|
5
|
+
> **Confidentiality / PII notice.** This PRD may reference business logic, environment-variable names, and route topology. Secret values, JWTs, API keys, and the 16 redaction classes enumerated in `plugins/soleur/skills/incident/scripts/redact-engine.py` are scrubbed at write-time by a 3-layer fail-closed pipeline (path filter → sentinel → gitleaks); the sentinel NFKC-normalizes and strips invisible characters before matching (defeats Unicode-confusable evasion). Redacted tokens render as `<≤4-prefix>***<≤4-suffix>` (or `***` for short tokens). Treat this document as containing the business posture of the codebase — share it with the same care you would the codebase itself.
|
|
6
|
+
|
|
7
|
+
### How to Read This PRD
|
|
8
|
+
|
|
9
|
+
- **Redaction-token format.** When a token would have appeared in the source, the PRD shows `<≤4-prefix>***<≤4-suffix>` (or `***` for short tokens) instead. The token format is the redaction signature, not a leak.
|
|
10
|
+
- **Redacted ≠ leaked.** A redaction marker means the scanner *found and removed* a secret. Nothing sensitive landed in this document.
|
|
11
|
+
- **If you see a token shape (`sk_…`, `ghp_…`, `eyJ…`, etc.) in plaintext:** the source file contained that secret. Rotate the credential, move it to `.env`, and regenerate the PRD.
|
|
12
|
+
- **Coverage Caveats** at the end of this PRD enumerates what was excluded, which frameworks were not scanned, and the GDPR Art. 9 special-category gap. Read it before sharing.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# PRD Template — code-to-prd output structure
|
|
2
|
+
|
|
3
|
+
Canonical section order for `knowledge-base/product/prd/<project>-prd.md` emitted by `plugins/soleur/skills/code-to-prd/scripts/code-to-prd.sh`. Mirrored by the `prd.md` template in `plugins/soleur/skills/spec-templates/SKILL.md`.
|
|
4
|
+
|
|
5
|
+
## Required frontmatter
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
---
|
|
9
|
+
project: "<package.json name, kebab-case>"
|
|
10
|
+
framework: "next.js"
|
|
11
|
+
generator: "code-to-prd@v1"
|
|
12
|
+
generated_at: "<ISO-8601 UTC>"
|
|
13
|
+
walker_count: <int>
|
|
14
|
+
walker_excluded: <int>
|
|
15
|
+
---
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Section order (FR7)
|
|
19
|
+
|
|
20
|
+
1. **Banners** — dual non-removable disclaimers + inline `### How to Read This PRD` (verbatim from [banner-template.md](./banner-template.md)).
|
|
21
|
+
2. **Overview** — project name, framework detected, walk stats (tracked-file count, excluded-file count).
|
|
22
|
+
3. **Routes**
|
|
23
|
+
- App Router — `app/**/page.{tsx,jsx,ts,js}` + `app/**/route.{ts,js}` (with HTTP methods).
|
|
24
|
+
- Pages Router — `pages/**/*.{tsx,jsx,ts,js}` excluding `pages/_*`.
|
|
25
|
+
4. **State Shapes** — top-level `useState`/`useReducer`/server-component props (regex, best-effort).
|
|
26
|
+
5. **API & External Dependencies** — `fetch()` literal URLs + `@/lib/api*`/`@/server/*` imports + `process.env.*` names (values never read) + third-party SDK packages from `package.json`.
|
|
27
|
+
6. **Coverage Caveats** — FOUR mandatory subsections (FR10.1):
|
|
28
|
+
- Frameworks not scanned (Rails, Django, etc.).
|
|
29
|
+
- Extraction techniques used (regex-only, no AST).
|
|
30
|
+
- What was excluded by path filter (count + category, not paths).
|
|
31
|
+
- GDPR Art. 9 special-category disclaimer.
|
|
32
|
+
7. **Gap Analysis** — populated by spawning the agent `soleur:product:spec-flow-analyzer` against the PRD path (FR8). When it is unavailable, `scripts/code-to-prd.sh` writes a degraded-success placeholder of the form `SKIPPED (<agent> unavailable at <ISO-8601>)`. That line names the agent by its BARE LEAF on purpose: it is a human-readable status in a generated document, never a dispatch, so it is deliberately not the canonical id the rest of this file uses.
|
|
33
|
+
8. **MIT Attribution footer** — single line pointing at `plugins/soleur/NOTICE`.
|
|
34
|
+
|
|
35
|
+
## Banner contract
|
|
36
|
+
|
|
37
|
+
Banners are **non-removable** — operator-edit of the rendered PRD is allowed, but the dual-banner block must remain intact. Verbatim string match enforced by Phase 6 test assertion #6.
|
|
38
|
+
|
|
39
|
+
## Coverage Caveats contract
|
|
40
|
+
|
|
41
|
+
The `## Coverage Caveats` block MUST be non-empty on every run. "None" is forbidden. The four subsections are mandatory regardless of extractor coverage — even on a maximally simple input.
|