@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,111 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Hermetic suite for ensure-semgrep.sh (#9964): a resolvable-but-dead semgrep
|
|
3
|
+
# must NOT read as present. Every arm runs the SUT under `env -i` with a
|
|
4
|
+
# curated PATH — no real brew/pipx/python3/timeout can leak in, and HOME is a
|
|
5
|
+
# sandbox dir so the SUT's `$HOME/.local/bin` prepend cannot see the host.
|
|
6
|
+
|
|
7
|
+
set -u
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
SUT="$SCRIPT_DIR/../scripts/ensure-semgrep.sh"
|
|
10
|
+
PASS=0; FAIL=0; TOTAL=0
|
|
11
|
+
|
|
12
|
+
ok() { PASS=$((PASS+1)); TOTAL=$((TOTAL+1)); echo " PASS: $1"; }
|
|
13
|
+
no() { FAIL=$((FAIL+1)); TOTAL=$((TOTAL+1)); echo " FAIL: $1"; }
|
|
14
|
+
assert() { local desc="$1" cond="$2"; if eval "$cond"; then ok "$desc"; else no "$desc"; fi; }
|
|
15
|
+
|
|
16
|
+
D="" D2="" D3="" D4="" D5="" D6="" D7="" D8="" D9=""
|
|
17
|
+
cleanup() { [ -n "$D" ] && rm -rf "$D" "$D2" "$D3" "$D4" "$D5" "$D6" "$D7" "$D8" "$D9"; }
|
|
18
|
+
trap cleanup EXIT
|
|
19
|
+
|
|
20
|
+
# Each arm's dir carries: stubs (semgrep/installers), home/ (empty HOME), and
|
|
21
|
+
# tools/ (symlinks to the real coreutils the stubs need — nothing else).
|
|
22
|
+
mkarm() {
|
|
23
|
+
local dir
|
|
24
|
+
dir="$(mktemp -d)"
|
|
25
|
+
mkdir -p "$dir/home" "$dir/tools"
|
|
26
|
+
for t in chmod cat env ls cp mkdir; do
|
|
27
|
+
command -v "$t" >/dev/null 2>&1 && ln -sf "$(command -v "$t")" "$dir/tools/$t"
|
|
28
|
+
done
|
|
29
|
+
printf '%s\n' "$dir"
|
|
30
|
+
}
|
|
31
|
+
# run_sut <dir> [extra PATH dirs] — curated env: PATH=dir[:extra], HOME=dir/home.
|
|
32
|
+
run_sut() { local dir="$1"; shift; env -i PATH="$dir:$dir/tools${1:+:$1}" HOME="$dir/home" /bin/bash "$SUT"; }
|
|
33
|
+
|
|
34
|
+
dead_semgrep() { printf '#!/bin/sh\necho "ModuleNotFoundError: No module named semgrep" >&2\nexit 1\n' >"$1/semgrep"; chmod +x "$1/semgrep"; }
|
|
35
|
+
live_semgrep() { printf '#!/bin/sh\nif [ "$1" = "--version" ]; then echo "1.99.0"; exit 0; fi\nexit 0\n' >"$1/semgrep"; chmod +x "$1/semgrep"; }
|
|
36
|
+
probe_semgrep() { printf '#!/bin/sh\necho "$1" >>"%s/probe-log"\nif [ "$1" = "--version" ]; then echo "1.99.0"; exit 0; fi\nexit 0\n' "$1" >"$1/semgrep"; chmod +x "$1/semgrep"; }
|
|
37
|
+
# installer stubs assert argv fidelity AND record invocation AND "install" a
|
|
38
|
+
# probe-logging semgrep by copying the arm's pre-written `installed` stub to
|
|
39
|
+
# the target (the SUT re-probes after install — every rc-0 path must show
|
|
40
|
+
# --version ran).
|
|
41
|
+
write_installed() { printf '#!/bin/sh\necho "$1" >>"%s/probe-log"\nif [ "$1" = "--version" ]; then echo "1.99.0"; exit 0; fi\nexit 0\n' "$1" >"$1/installed"; chmod +x "$1/installed"; }
|
|
42
|
+
install_brew() {
|
|
43
|
+
write_installed "$1"
|
|
44
|
+
printf '#!/bin/sh\necho "brew:$1:$2" >>"%s/called"\nif [ "$1" = "install" ] && [ "$2" = "semgrep" ]; then cp "%s/installed" "%s/semgrep"; chmod +x "%s/semgrep"; exit 0; fi\nexit 1\n' "$1" "$1" "$1" "$1" >"$1/brew"; chmod +x "$1/brew"
|
|
45
|
+
}
|
|
46
|
+
fail_stub() { printf '#!/bin/sh\necho "%s" >>"%s/called"\nexit 1\n' "$2" "$1" >"$1/$2"; chmod +x "$1/$2"; }
|
|
47
|
+
|
|
48
|
+
# --- arm A: live semgrep on PATH → rc 0, no installer invoked --------------
|
|
49
|
+
D="$(mkarm)"; live_semgrep "$D"; fail_stub "$D" brew; fail_stub "$D" pipx
|
|
50
|
+
OUT="$(run_sut "$D" 2>/dev/null)"; RC=$?
|
|
51
|
+
assert "live semgrep: exit 0 and its path printed" "[ $RC -eq 0 ] && [[ \"$OUT\" == */semgrep ]]"
|
|
52
|
+
assert "live semgrep: NO installer invoked" "[ ! -f '$D/called' ]"
|
|
53
|
+
|
|
54
|
+
# --- arm B: dead shim + working brew → installs, re-probes, rc 0 -----------
|
|
55
|
+
D2="$(mkarm)"; dead_semgrep "$D2"; install_brew "$D2"
|
|
56
|
+
run_sut "$D2" >/dev/null 2>&1; RC=$?
|
|
57
|
+
assert "dead shim + brew: exit 0 after install" "[ $RC -eq 0 ] && grep -q 'brew:install:semgrep' '$D2/called'"
|
|
58
|
+
assert "dead shim + brew: the post-install re-probe ran --version" "grep -q -- '--version' '$D2/probe-log'"
|
|
59
|
+
|
|
60
|
+
# --- arm C: dead shim + NO installer → rc 2, NOT reported present ----------
|
|
61
|
+
D3="$(mkarm)"; dead_semgrep "$D3"
|
|
62
|
+
ERR="$(run_sut "$D3" 2>&1 >/dev/null)"; RC=$?
|
|
63
|
+
assert "dead shim + no installer: exit 2 (shim reads as absent)" "[ $RC -eq 2 ]"
|
|
64
|
+
assert "dead shim + no installer: diagnostic names the dead shim" "[[ \"$ERR\" == *'resolves at'* ]]"
|
|
65
|
+
assert "dead shim + no installer: points at shim removal, not a missing installer" "[[ \"$ERR\" == *[Ss]'him'* ]]"
|
|
66
|
+
|
|
67
|
+
# --- arm D: installer produces a still-dead binary → falls through, rc 1 ---
|
|
68
|
+
D4="$(mkarm)"; dead_semgrep "$D4"
|
|
69
|
+
printf '#!/bin/sh\necho "brew" >>"%s/called"\nexit 0\n' "$D4" >"$D4/brew"; chmod +x "$D4/brew" # brew "succeeds" but shim stays dead (shadowed)
|
|
70
|
+
fail_stub "$D4" pipx; fail_stub "$D4" python3
|
|
71
|
+
ERR="$(run_sut "$D4" 2>&1 >/dev/null)"; RC=$?
|
|
72
|
+
assert "install-success-but-still-dead: exit 1 (attempted, still dead)" "[ $RC -eq 1 ]"
|
|
73
|
+
assert "install-success-but-still-dead: diagnostic names the dead path" "[[ \"$ERR\" == *'still does not run'* ]]"
|
|
74
|
+
|
|
75
|
+
# --- arm E: absent semgrep + working brew → rc 0 (regression) --------------
|
|
76
|
+
D5="$(mkarm)"; install_brew "$D5"
|
|
77
|
+
run_sut "$D5" >/dev/null 2>&1; RC=$?
|
|
78
|
+
assert "absent + brew: exit 0 with installer invoked AND re-probed" "[ $RC -eq 0 ] && grep -q 'brew:install:semgrep' '$D5/called' && grep -q -- '--version' '$D5/probe-log'"
|
|
79
|
+
|
|
80
|
+
# --- arm F: dead shim + brew fails + pipx succeeds → rc 0 ------------------
|
|
81
|
+
D6="$(mkarm)"; dead_semgrep "$D6"; fail_stub "$D6" brew; fail_stub "$D6" python3
|
|
82
|
+
write_installed "$D6"
|
|
83
|
+
printf '#!/bin/sh\necho "pipx:$1:$2" >>"%s/called"\nif [ "$1" = "install" ] && [ "$2" = "semgrep" ]; then cp "%s/installed" "%s/home/.local/bin/semgrep"; chmod +x "%s/home/.local/bin/semgrep"; exit 0; fi\nexit 1\n' "$D6" "$D6" "$D6" "$D6" >"$D6/pipx"; chmod +x "$D6/pipx"
|
|
84
|
+
mkdir -p "$D6/home/.local/bin"
|
|
85
|
+
run_sut "$D6" >/dev/null 2>&1; RC=$?
|
|
86
|
+
assert "dead shim + brew fails + pipx installs to HOME/.local/bin: exit 0" "[ $RC -eq 0 ] && grep -q 'pipx:install:semgrep' '$D6/called'"
|
|
87
|
+
assert "arm F: the HOME/.local/bin prepend is what made the install visible" "grep -q -- '--version' '$D6/probe-log'"
|
|
88
|
+
|
|
89
|
+
# --- arm G: the probe RUNS on every rc-0 path (vacuity pin) ----------------
|
|
90
|
+
D7="$(mkarm)"; probe_semgrep "$D7"
|
|
91
|
+
run_sut "$D7" >/dev/null 2>&1; RC=$?
|
|
92
|
+
assert "probe runs semgrep --version on the rc-0 path" "[ $RC -eq 0 ] && grep -q -- '--version' '$D7/probe-log'"
|
|
93
|
+
|
|
94
|
+
# --- arm H: python3 -m pip install --user success path, argv-faithful ------
|
|
95
|
+
D8="$(mkarm)"; dead_semgrep "$D8"; fail_stub "$D8" brew; fail_stub "$D8" pipx
|
|
96
|
+
write_installed "$D8"
|
|
97
|
+
printf '#!/bin/sh\necho "python3:$*" >>"%s/called"\nif [ "$1" = "-m" ] && [ "$2" = "pip" ] && [ "$3" = "install" ] && [ "$4" = "--user" ] && [ "$5" = "semgrep" ]; then cp "%s/installed" "%s/home/.local/bin/semgrep"; chmod +x "%s/home/.local/bin/semgrep"; exit 0; fi\nexit 1\n' "$D8" "$D8" "$D8" "$D8" >"$D8/python3"; chmod +x "$D8/python3"
|
|
98
|
+
mkdir -p "$D8/home/.local/bin"
|
|
99
|
+
run_sut "$D8" >/dev/null 2>&1; RC=$?
|
|
100
|
+
assert "dead shim + python3 -m pip --user success: exit 0, argv-faithful" "[ $RC -eq 0 ] && grep -q 'python3:-m pip install --user semgrep' '$D8/called'"
|
|
101
|
+
assert "arm H: re-probe ran the pip-installed binary" "grep -q -- '--version' '$D8/probe-log'"
|
|
102
|
+
|
|
103
|
+
# --- arm I: installer present but FAILED (nothing installed) → rc 1 ------
|
|
104
|
+
D9="$(mkarm)"; dead_semgrep "$D9"; fail_stub "$D9" brew
|
|
105
|
+
ERR="$(run_sut "$D9" 2>&1 >/dev/null)"; RC=$?
|
|
106
|
+
assert "dead shim + brew fails + nothing else: exit 1 (attempted)" "[ $RC -eq 1 ]"
|
|
107
|
+
assert "arm I: rc 1 not rc 2 — an installer WAS attempted" "[[ \"$ERR\" == *'still does not run'* ]]"
|
|
108
|
+
|
|
109
|
+
echo
|
|
110
|
+
echo "=== ensure-semgrep.test.sh: $PASS passed, $FAIL failed ($TOTAL assertions) ==="
|
|
111
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Tests for fix-round-seats.sh — the single path→seat map consumed by both the
|
|
4
|
+
# `none`-tier panel gating and the post-panel fix-commit targeted round (ADR-267).
|
|
5
|
+
#
|
|
6
|
+
# The suite needs NO filesystem fixtures — the SUT is a pure argv→stdout
|
|
7
|
+
# function, so every arm is an invocation plus a stdout/stderr assertion. That
|
|
8
|
+
# also means there is deliberately no mktemp/assert_fixture_dir machinery.
|
|
9
|
+
#
|
|
10
|
+
# Mutation axes covered (Guard 1 of the 9399 plan): per-arm membership, the
|
|
11
|
+
# code-quality floor on unmatched source, multi-area unions, registry
|
|
12
|
+
# validation of emitted AND --finding-seats tokens, the forged-token drop, and
|
|
13
|
+
# the empty-diff contract.
|
|
14
|
+
set -uo pipefail
|
|
15
|
+
export TMPDIR="${TMPDIR:-/var/tmp}"
|
|
16
|
+
|
|
17
|
+
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
SUT="$(cd "${DIR}/../scripts" && pwd)/fix-round-seats.sh"
|
|
19
|
+
WORKFLOW="$(cd "${DIR}/../workflows" && pwd)/review.workflow.js"
|
|
20
|
+
|
|
21
|
+
passes=0
|
|
22
|
+
fails=0
|
|
23
|
+
# INDEPENDENT case counter (ADR-193): moves in assert(), never in the verdict
|
|
24
|
+
# helpers — a counter owned by pass()/fail() dies with the verdict it counts.
|
|
25
|
+
CASES=0
|
|
26
|
+
|
|
27
|
+
pass() { passes=$((passes + 1)); printf ' ok %s\n' "$1"; }
|
|
28
|
+
fail() {
|
|
29
|
+
fails=$((fails + 1))
|
|
30
|
+
printf ' FAIL %s\n' "$1"
|
|
31
|
+
[[ -n "${2:-}" ]] && printf ' %s\n' "$2"
|
|
32
|
+
return 0
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
assert() {
|
|
36
|
+
CASES=$((CASES + 1))
|
|
37
|
+
if eval "$2"; then
|
|
38
|
+
pass "$1"
|
|
39
|
+
else
|
|
40
|
+
fail "$1" "${3:-$2}"
|
|
41
|
+
fi
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
printf '\n=== fix-round-seats ===\n\n'
|
|
45
|
+
|
|
46
|
+
[[ -f "$SUT" ]] || {
|
|
47
|
+
printf '\n[FATAL] SUT missing at %s — nothing to test.\n' "$SUT" >&2
|
|
48
|
+
exit 1
|
|
49
|
+
}
|
|
50
|
+
[[ -f "$WORKFLOW" ]] || {
|
|
51
|
+
printf '\n[FATAL] workflow missing at %s — registry cannot be derived.\n' "$WORKFLOW" >&2
|
|
52
|
+
exit 1
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Canonical seat registry, DERIVED — not restated. Agent-type leaves come from
|
|
56
|
+
# the workflow's DIMENSIONS registry; the deterministic/non-agent seats the
|
|
57
|
+
# workflow carries (shellcheck, anti-slop, gdpr) plus the SKILL-only
|
|
58
|
+
# structural-enumeration seat are appended explicitly.
|
|
59
|
+
registry() {
|
|
60
|
+
grep -oE "agentType: 'soleur:[a-z:-]+'" "$WORKFLOW" | tr -d "'" | awk -F: '{print $NF}'
|
|
61
|
+
printf '%s\n' shellcheck anti-slop gdpr-gate structural-enumeration code-simplicity-reviewer
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
run() { # $1=label; rest=args — captures stdout, stderr, rc without a subshell race
|
|
65
|
+
local label; label="$1"; : "$label"; shift
|
|
66
|
+
OUT="$(bash "$SUT" "$@" 2>"$TMPERR")"; RC=$?
|
|
67
|
+
ERR="$(cat "$TMPERR")"
|
|
68
|
+
}
|
|
69
|
+
TMPERR="$(mktemp -t fixseats-err.XXXXXXXX)"
|
|
70
|
+
trap 'rm -f "$TMPERR"' EXIT
|
|
71
|
+
|
|
72
|
+
# ── ARM 1: migration path → data-integrity + data-migration (+ deploy-verify) ──
|
|
73
|
+
run mig --files 'apps/web-platform/supabase/migrations/20990101000000_x.sql'
|
|
74
|
+
assert "migration path exits 0" '[[ "$RC" -eq 0 ]]' "rc=$RC err=$ERR"
|
|
75
|
+
assert "migration path emits data-integrity-guardian" \
|
|
76
|
+
'grep -qx "data-integrity-guardian" <<<"$OUT"' "out=$OUT"
|
|
77
|
+
assert "migration path emits data-migration-expert" \
|
|
78
|
+
'grep -qx "data-migration-expert" <<<"$OUT"' "out=$OUT"
|
|
79
|
+
assert "migration path emits deployment-verification-agent" \
|
|
80
|
+
'grep -qx "deployment-verification-agent" <<<"$OUT"' "out=$OUT"
|
|
81
|
+
|
|
82
|
+
# ── ARM 2: floor — an unmatched source path still emits code-quality-analyst ──
|
|
83
|
+
# `scripts/lib/` hits no area arm (not web-platform, not plugins/soleur), so the
|
|
84
|
+
# only mapped seat is the deterministic SAST one — the floor must still fire.
|
|
85
|
+
run floor --files 'scripts/lib/foo.ts'
|
|
86
|
+
assert "unmatched source emits code-quality floor" \
|
|
87
|
+
'[[ "$RC" -eq 0 ]] && grep -qx "code-quality-analyst" <<<"$OUT"' "rc=$RC out=$OUT"
|
|
88
|
+
assert "unmatched source also emits semgrep (source extension)" \
|
|
89
|
+
'grep -qx "semgrep-sast" <<<"$OUT"' "out=$OUT"
|
|
90
|
+
# Golden output pins membership AND order AND suppression: nothing else may be
|
|
91
|
+
# emitted for a lone unmatched source path.
|
|
92
|
+
assert "unmatched source emits EXACTLY code-quality + semgrep, in order" \
|
|
93
|
+
'[[ "$OUT" == $'"'"'code-quality-analyst\nsemgrep-sast'"'"' ]]' "out=$OUT"
|
|
94
|
+
assert "unmatched source names the path on stderr (unmapped-paths)" \
|
|
95
|
+
'grep -q "unmapped-paths: scripts/lib/foo.ts" <<<"$ERR"' "err=$ERR"
|
|
96
|
+
|
|
97
|
+
# ── ARM 3: multi-area union does not stop at the first member ─────────────────
|
|
98
|
+
run multi --files $'plugins/soleur/skills/review/test/fix-round-seats.test.sh\napps/web-platform/supabase/migrations/20990101000000_x.sql'
|
|
99
|
+
assert "test file + migration yields BOTH test-design and data-integrity" \
|
|
100
|
+
'grep -qx "test-design-reviewer" <<<"$OUT" && grep -qx "data-integrity-guardian" <<<"$OUT"' "out=$OUT"
|
|
101
|
+
assert "test file + .sh extension also yields shellcheck" \
|
|
102
|
+
'grep -qx "shellcheck" <<<"$OUT"' "out=$OUT"
|
|
103
|
+
|
|
104
|
+
# ── ARM 4: every emitted token resolves against the canonical registry ────────
|
|
105
|
+
run reg --files $'apps/web-platform/supabase/migrations/20990101000000_x.sql\napps/web-platform/server/auth.ts\nplugins/soleur/skills/review/test/fix-round-seats.test.sh'
|
|
106
|
+
_reg="$(registry | sort -u)"
|
|
107
|
+
_bad="$(comm -23 <(sort -u <<<"$OUT") <(printf '%s\n' "$_reg"))"
|
|
108
|
+
assert "all emitted seats resolve against the derived registry" \
|
|
109
|
+
'[[ -z "$_bad" ]]' "unregistered: $_bad"
|
|
110
|
+
|
|
111
|
+
# ── ARM 5: --finding-seats unions the reporting seat ──────────────────────────
|
|
112
|
+
run find --files 'docs/guide.md' --finding-seats user-impact-reviewer
|
|
113
|
+
assert "finding-seat unions into an otherwise path-empty round" \
|
|
114
|
+
'[[ "$RC" -eq 0 ]] && grep -qx "user-impact-reviewer" <<<"$OUT"' "rc=$RC out=$OUT"
|
|
115
|
+
|
|
116
|
+
# ── ARM 6: forged / unknown --finding-seats tokens never reach stdout ──────────
|
|
117
|
+
run forge --files 'docs/guide.md' --finding-seats $'security-sentinel\nBUG-INJECTED'
|
|
118
|
+
assert "newline-forged token is dropped, not echoed" \
|
|
119
|
+
'! grep -qx "BUG-INJECTED" <<<"$OUT"' "out=$OUT"
|
|
120
|
+
assert "newline-forged token warns on stderr" \
|
|
121
|
+
'grep -q "unknown-seat:" <<<"$ERR"' "err=$ERR"
|
|
122
|
+
assert "the real seat in the same arg survives" \
|
|
123
|
+
'grep -qx "security-sentinel" <<<"$OUT"' "out=$OUT"
|
|
124
|
+
run unk --files 'docs/guide.md' --finding-seats 'not-a-seat'
|
|
125
|
+
assert "unknown seat name dropped with warning" \
|
|
126
|
+
'[[ "$RC" -eq 0 ]] && ! grep -qx "not-a-seat" <<<"$OUT" && grep -q "unknown-seat: not-a-seat" <<<"$ERR"' \
|
|
127
|
+
"rc=$RC out=$OUT err=$ERR"
|
|
128
|
+
|
|
129
|
+
# ── ARM 7: empty --files is a distinct exit-0 contract ────────────────────────
|
|
130
|
+
run empty --files ''
|
|
131
|
+
assert "empty file list exits 0 with empty stdout" \
|
|
132
|
+
'[[ "$RC" -eq 0 && -z "$OUT" ]]' "rc=$RC out=$OUT"
|
|
133
|
+
assert "empty file list notes it on stderr" \
|
|
134
|
+
'grep -q "note: empty fix diff" <<<"$ERR"' "err=$ERR"
|
|
135
|
+
|
|
136
|
+
# NB: sensitive-path fixtures name a NONEXISTENT path on purpose — the
|
|
137
|
+
# battery-tag-authorship closure walks filesystem-real path mentions, and a
|
|
138
|
+
# fixture naming a file that runs `git fetch`/`pull` would drag it into the
|
|
139
|
+
# battery's offender census (measured live: session-sync.ts, 3 offenders).
|
|
140
|
+
# ── ARM 8: sensitive path → security-sentinel ─────────────────────────────────
|
|
141
|
+
run sens --files 'apps/web-platform/lib/stripe/__fixture__.ts'
|
|
142
|
+
assert "sensitive path emits security-sentinel" \
|
|
143
|
+
'grep -qx "security-sentinel" <<<"$OUT"' "out=$OUT"
|
|
144
|
+
|
|
145
|
+
# ── ARM 9: docs-only path emits no seats (floor is source-only) ───────────────
|
|
146
|
+
run docs --files 'README.md'
|
|
147
|
+
assert "non-source unmatched path emits nothing" \
|
|
148
|
+
'[[ "$RC" -eq 0 && -z "$OUT" ]]' "rc=$RC out=$OUT"
|
|
149
|
+
|
|
150
|
+
# ── ARM 10: usage error exits 2 ───────────────────────────────────────────────
|
|
151
|
+
run badflag --bogus
|
|
152
|
+
assert "unknown flag exits 2" '[[ "$RC" -eq 2 ]]' "rc=$RC"
|
|
153
|
+
run noargs
|
|
154
|
+
assert "no args exits 2" '[[ "$RC" -eq 2 ]]' "rc=$RC"
|
|
155
|
+
|
|
156
|
+
# ── ARM 11: every map arm has a presence pin ─────────────────────────────────
|
|
157
|
+
# PERSIST isolated (a lib/ path that hits no other arm), PERF, GDPR, and
|
|
158
|
+
# ANTISLOP/AGENT_SURFACE each get a fixture — deleting any single arm must red.
|
|
159
|
+
run persist --files 'apps/web-platform/lib/util.ts'
|
|
160
|
+
assert "persistence lib/ arm emits data-integrity-guardian" \
|
|
161
|
+
'grep -qx "data-integrity-guardian" <<<"$OUT"' "out=$OUT"
|
|
162
|
+
run perf --files 'packages/inngest/foo.ts'
|
|
163
|
+
assert "perf-arm path emits performance-oracle" \
|
|
164
|
+
'grep -qx "performance-oracle" <<<"$OUT"' "out=$OUT"
|
|
165
|
+
run gdprarm --files 'apps/web-platform/lib/auth/x.ts'
|
|
166
|
+
assert "gdpr-arm path emits gdpr-gate" \
|
|
167
|
+
'grep -qx "gdpr-gate" <<<"$OUT"' "out=$OUT"
|
|
168
|
+
run sloparm --files 'apps/web-platform/components/ui/foo.tsx'
|
|
169
|
+
assert "anti-slop+agent-surface arms both fire on a UI path" \
|
|
170
|
+
'grep -qx "anti-slop" <<<"$OUT" && grep -qx "agent-native-reviewer" <<<"$OUT"' "out=$OUT"
|
|
171
|
+
|
|
172
|
+
# ── ARM 12: comma-separated --files must actually SPLIT ───────────────────────
|
|
173
|
+
# SENSITIVE_PATH_RE is ^-anchored, so only the SPLIT second entry can emit
|
|
174
|
+
# security-sentinel — the joined line never matches.
|
|
175
|
+
run comma --files 'docs/a.md,apps/web-platform/lib/stripe/__fixture__.ts'
|
|
176
|
+
assert "comma split is observable (anchored arm on the second entry)" \
|
|
177
|
+
'grep -qx "security-sentinel" <<<"$OUT"' "out=$OUT"
|
|
178
|
+
|
|
179
|
+
# ── ARM 13: --finding-seats vocabulary normalization ─────────────────────────
|
|
180
|
+
# Canonical ids and workflow dimension keys both reduce to leaf names; a forged
|
|
181
|
+
# glob token is never pathname-expanded.
|
|
182
|
+
run vocab --files 'docs/guide.md' --finding-seats 'soleur:engineering:review:security-sentinel,git-history,code-quality'
|
|
183
|
+
assert "canonical id normalizes to leaf" \
|
|
184
|
+
'grep -qx "security-sentinel" <<<"$OUT"' "out=$OUT"
|
|
185
|
+
assert "dimension keys normalize to leaves" \
|
|
186
|
+
'grep -qx "git-history-analyzer" <<<"$OUT" && grep -qx "code-quality-analyst" <<<"$OUT"' "out=$OUT"
|
|
187
|
+
run dupfs --files 'docs/guide.md' --finding-seats 'security-sentinel,security-sentinel'
|
|
188
|
+
assert "duplicate finding-seat dedupes to one line" \
|
|
189
|
+
'[[ "$(grep -c "^security-sentinel$" <<<"$OUT")" -eq 1 ]]' "out=$OUT"
|
|
190
|
+
run glob --files '' --finding-seats '*'
|
|
191
|
+
assert "a forged glob token cannot expand or reach stdout" \
|
|
192
|
+
'[[ "$RC" -eq 0 && -z "$OUT" ]]' "rc=$RC out=$OUT err=$ERR"
|
|
193
|
+
# Discriminating: with `set -f` removed, '*' pathname-expands and stderr shows
|
|
194
|
+
# the expanded filenames instead of the literal token.
|
|
195
|
+
assert "forged glob is reported literally (set -f holds)" \
|
|
196
|
+
'grep -q "unknown-seat: \*" <<<"$ERR"' "err=$ERR"
|
|
197
|
+
|
|
198
|
+
# ── ARM 14: whitespace-only and CRLF file entries are normalized ──────────────
|
|
199
|
+
run blank --files $' \n\t\n'
|
|
200
|
+
assert "whitespace-only --files behaves like empty (no floor, no seats)" \
|
|
201
|
+
'[[ "$RC" -eq 0 && -z "$OUT" ]]' "rc=$RC out=$OUT err=$ERR"
|
|
202
|
+
# Discriminating: a leading-whitespace path only matches the ^-anchored
|
|
203
|
+
# sensitive arm after the leading-trim — removing the trim reds this arm.
|
|
204
|
+
run wsanchored --files ' apps/web-platform/lib/stripe/__fixture__.ts'
|
|
205
|
+
assert "leading-whitespace path still matches the anchored sensitive arm" \
|
|
206
|
+
'grep -qx "security-sentinel" <<<"$OUT"' "out=$OUT"
|
|
207
|
+
# Discriminating: git quote-paths a filename containing spaces; the wrapping
|
|
208
|
+
# quote would defeat the ^-anchored sensitive arm without the strip.
|
|
209
|
+
run quoted --files '"apps/web-platform/lib/stripe/__fixture__.ts"'
|
|
210
|
+
assert "quote-pathed entry still matches the anchored sensitive arm" \
|
|
211
|
+
'grep -qx "security-sentinel" <<<"$OUT"' "out=$OUT"
|
|
212
|
+
run crlf --files $'scripts/lib/foo.ts\r'
|
|
213
|
+
assert "CR-trailing path still matches the source arm" \
|
|
214
|
+
'grep -qx "code-quality-analyst" <<<"$OUT"' "out=$OUT"
|
|
215
|
+
|
|
216
|
+
# ── Accounting conservation (ADR-193 #3) — reported directly, never via verdict helpers ──
|
|
217
|
+
if [[ $((passes + fails)) -ne "$CASES" ]]; then
|
|
218
|
+
printf '\n[FATAL] accounting: passes+fails (%d) != CASES (%d).\n' \
|
|
219
|
+
"$((passes + fails))" "$CASES" >&2
|
|
220
|
+
printf '\n=== fix-round-seats: %d passed, %d failed (%d assertions) ===\n\n' \
|
|
221
|
+
"$passes" "$fails" "$CASES" >&2
|
|
222
|
+
exit 1
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
# ── Anti-vacuity floor (ADR-193 #1) — reads the INDEPENDENT counter ───────────
|
|
226
|
+
FIXSEATS_MIN_ASSERTIONS=36
|
|
227
|
+
if (( CASES < FIXSEATS_MIN_ASSERTIONS )); then
|
|
228
|
+
printf '\n[FATAL] anti-vacuity floor: only %d assertion(s) ran, expected >= %d.\n' \
|
|
229
|
+
"$CASES" "$FIXSEATS_MIN_ASSERTIONS" >&2
|
|
230
|
+
printf '\n=== fix-round-seats: %d passed, %d failed (%d assertions) ===\n\n' \
|
|
231
|
+
"$passes" "$fails" "$CASES" >&2
|
|
232
|
+
exit 1
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
printf '\n=== fix-round-seats: %d passed, %d failed (%d assertions) ===\n\n' \
|
|
236
|
+
"$passes" "$fails" "$CASES"
|
|
237
|
+
[[ "$fails" -eq 0 ]]
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Workflow-backed `soleur:review` (prototype)
|
|
2
|
+
|
|
3
|
+
`review.workflow.js` is a [dynamic workflow](https://claude.com/blog/introducing-dynamic-workflows-in-claude-code)
|
|
4
|
+
re-implementation of the core engine of the `soleur:review` skill. It is a
|
|
5
|
+
**prototype for A/B comparison** against the prose-driven SKILL.md — not a
|
|
6
|
+
replacement. Both can coexist.
|
|
7
|
+
|
|
8
|
+
> **Known divergence:** `SKILL.md` §"Change Classification Gate" step 4 adds a
|
|
9
|
+
> **`design-risk`** signal — a mechanism-introducing PR gets a design-validity
|
|
10
|
+
> pass (simplicity + architecture, plus economics only on a cost claim) *before*
|
|
11
|
+
> the full panel, with mandatory dedup of lenses that already ran. This port does
|
|
12
|
+
> not implement it: its classify agent returns the four classes and the `triggers`
|
|
13
|
+
> object only. A run driven from this script therefore skips the design-validity
|
|
14
|
+
> ordering. The prose skill remains the default and the authority.
|
|
15
|
+
|
|
16
|
+
## What it does
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Classify ──▶ Review ──▶ Verify ──▶ Synthesize ──▶ File
|
|
20
|
+
(1 agent) (always-on (1–3 (dedup + (CONCUR-gated
|
|
21
|
+
+ cond. skeptics provenance scope-out,
|
|
22
|
+
dimensions) refute disposition) dry-run by
|
|
23
|
+
each find.) default)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
1. **Classify** — one agent runs the same change-class predicates as
|
|
27
|
+
`SKILL.md` §"Change Classification Gate" and returns a structured class
|
|
28
|
+
(`code` / `non-code` / `lockfile-only` / `deletion-dominated`) **plus a
|
|
29
|
+
`triggers` object** (Rails, migration, tests, source, bash-only, GDPR,
|
|
30
|
+
user-impact threshold).
|
|
31
|
+
2. **Review** — the script (not the model) maps the class to its **always-on**
|
|
32
|
+
dimension list and the triggers to its **conditional** dimensions, then fans
|
|
33
|
+
out one agent per lens. Each lens reuses the **real Soleur reviewer agent**
|
|
34
|
+
via `agentType`, so it inherits that agent's system prompt.
|
|
35
|
+
3. **Verify** — every finding is handed to 1–3 adversarial skeptics (a
|
|
36
|
+
perspective-diverse panel — correctness / scope / already-handled — when
|
|
37
|
+
`deepReview`) that default to `isReal=false` and must be argued *out* of
|
|
38
|
+
refutation; majority-real survives. **No-barrier pipeline**: a dimension's
|
|
39
|
+
findings start verifying the instant that dimension lands. The fan-out is
|
|
40
|
+
**budget-floored** — if `budget.remaining()` drops below the reserve, the
|
|
41
|
+
remaining findings are surfaced `UNVERIFIED` (kept, not dropped) and the
|
|
42
|
+
skipped set is logged. Never a silent cap.
|
|
43
|
+
4. **Synthesize** — confirmed findings are deduped by `file+title`, then given
|
|
44
|
+
a deterministic `disposition` (`fix-inline` vs `scope-out-candidate`) from
|
|
45
|
+
the SKILL's cost-of-filing rule encoded in code.
|
|
46
|
+
5. **File** — each `scope-out-candidate` is independently co-signed by a
|
|
47
|
+
simplicity-biased **CONCUR gate** (defaults to DISSENT). DISSENT flips the
|
|
48
|
+
finding back to `fix-inline`; CONCUR files a `deferred-scope-out` issue —
|
|
49
|
+
but only when invoked with `{ file: true }`. Otherwise it's a **dry run**
|
|
50
|
+
that emits the would-file issue body for inspection.
|
|
51
|
+
|
|
52
|
+
**Untrusted-input hardening:** finding titles derive from the diff under
|
|
53
|
+
review — potentially attacker-controlled PR content. The title is passed to
|
|
54
|
+
`gh` as a shell argv, so it runs through `safeTitle()` (strips control chars
|
|
55
|
+
+ shell metacharacters, caps length) and a constant `review: ` prefix <!-- markdownlint-disable-line MD038 -->
|
|
56
|
+
(no leading `-` → no argv flag-smuggling); the body always goes via
|
|
57
|
+
`--body-file` so it is never shell-parsed. The agent writes both to temp
|
|
58
|
+
files with its Write tool rather than receiving an interpolated command.
|
|
59
|
+
|
|
60
|
+
## How to run it
|
|
61
|
+
|
|
62
|
+
From a session where the diff under review is reachable (`origin/main...HEAD`):
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Workflow({ scriptPath: "plugins/soleur/skills/review/workflows/review.workflow.js",
|
|
66
|
+
args: "1234" }) // PR number, branch name, or "" for current branch
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`args` may also be an object:
|
|
70
|
+
|
|
71
|
+
| field | effect |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `target` | PR number / branch / `""` (current branch) |
|
|
74
|
+
| `deepReview` | force the full always-on 8-dimension pass **and** a 3-skeptic perspective-diverse verify panel. The literal phrases `deep review` / `full review` in a string `target` trigger the same override, matching the SKILL. |
|
|
75
|
+
| `file` | actually create the `deferred-scope-out` GitHub issues for CONCUR'd candidates. Default (omit) is a dry run that only emits the would-file bodies. |
|
|
76
|
+
|
|
77
|
+
e.g. `args: { target: "1234", deepReview: true, file: true }`.
|
|
78
|
+
|
|
79
|
+
Iterate by editing the file and re-invoking with the same `scriptPath`. To
|
|
80
|
+
resume an interrupted run, add `resumeFromRunId: "<runId>"` — unchanged
|
|
81
|
+
`agent()` calls return cached results instantly.
|
|
82
|
+
|
|
83
|
+
## What it inherits from Workflow that the SKILL can't express today
|
|
84
|
+
|
|
85
|
+
| Capability | SKILL.md (Task-spawn prose) | This workflow |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| Class → fan-out decision | Model interprets a bash decision tree each run | Deterministic JS lookup (`CLASS_DIMENSIONS` + `conditionalDimensions`) |
|
|
88
|
+
| Conditional agents | Prose "if PR contains X, spawn agent Y" | `triggers` flags → deterministic dimension list |
|
|
89
|
+
| Risk-tier panel scaling | SKILL delegates to `references/risk-tier-and-fix-rounds.md` | `resolveTier` (fail-closed sensitive-path clamp) + `scaleAlwaysOn` trigger-gate {data-integrity, agent-native, performance} at `none` tier (ADR-267) |
|
|
90
|
+
| Per-finding verification | None — CONCUR fires only on scope-out *filings* | Every finding adversarially refuted (1–3 skeptics) before surfacing |
|
|
91
|
+
| Review→verify scheduling | Implicit barrier (waits for all reviewers) | No-barrier `pipeline()` — verify starts per-dimension |
|
|
92
|
+
| Disposition (fix vs file) | Prose cost-of-filing gate, model-applied | `disposition()` — code, auditable, identical every run |
|
|
93
|
+
| Scope-out CONCUR gate | Manual self-check the agent CONCUR'd | Structured CONCUR/DISSENT verdict; DISSENT auto-flips to fix-inline |
|
|
94
|
+
| Resume after interruption | Restart from zero | Journaled — cached prefix replays instantly |
|
|
95
|
+
| Token ceiling | Hand-written "API budget" warnings | `budget` floor on the verify fan-out; UNVERIFIED-not-dropped + logged |
|
|
96
|
+
| Structured output | Parse agent prose by hand | Schema-validated, agents retry on mismatch |
|
|
97
|
+
|
|
98
|
+
## Ported so far
|
|
99
|
+
|
|
100
|
+
+ always-on dimension agents (class-gated 2/4/8 fan-out)
|
|
101
|
+
+ conditional dimensions (Rails ×2, migration ×2, test-design, semgrep-SAST,
|
|
102
|
+
shellcheck (bash), real `gdpr-gate` skill, anti-slop Tier-1, user-impact)
|
|
103
|
+
from deterministic `triggers`
|
|
104
|
+
+ deterministic-tool findings auto-confirmed (skip adversarial verify)
|
|
105
|
+
+ 1–3 skeptic adversarial verification, no-barrier pipeline
|
|
106
|
+
+ provenance-driven deterministic disposition
|
|
107
|
+
+ CONCUR-gated `deferred-scope-out` filing (dry-run by default; `{ file: true }`
|
|
108
|
+
to create issues)
|
|
109
|
+
+ `budget` floor on the verify fan-out with logged UNVERIFIED coverage
|
|
110
|
+
|
|
111
|
+
### Deterministic vs. judgment findings
|
|
112
|
+
|
|
113
|
+
Dimensions split into two kinds:
|
|
114
|
+
|
|
115
|
+
+ **LLM-judgment** (the reviewer agents) → every finding is adversarially
|
|
116
|
+
verified (refute-by-default) before it surfaces.
|
|
117
|
+
+ **Deterministic tools/skills** (`semgrep`, `shellcheck`, `anti-slop`, the real
|
|
118
|
+
`gdpr-gate`) → findings are **auto-confirmed as ground truth**, skipping the
|
|
119
|
+
verify stage. Refuting an `SC2086` or a `BRAND-RAW-HEX` hit would be both wrong
|
|
120
|
+
and wasteful; the tool is authoritative. These carry `deterministic: true`.
|
|
121
|
+
|
|
122
|
+
`bashOnly` routes the SAST slot to `shellcheck` instead of `semgrep` (semgrep's
|
|
123
|
+
tree-sitter bash parser is vacuous — SKILL.md note). `anti-slop` high-severity
|
|
124
|
+
`brand` findings are a **required-fix** gate (the scanner exits non-zero).
|
|
125
|
+
|
|
126
|
+
## Still NOT ported (next increments)
|
|
127
|
+
|
|
128
|
+
+ **Follow-through auto-wiring** — filed scope-outs don't yet scaffold the
|
|
129
|
+
`<!-- soleur:followthrough -->` directive + verification script + `chmod`.
|
|
130
|
+
+ **semgrep `ensure-semgrep.sh` exit-code handling** — the `semgrep` dimension
|
|
131
|
+
prompts the bootstrap but doesn't hard-abort the run on a non-zero installer
|
|
132
|
+
exit (the SKILL does).
|
|
133
|
+
+ **Pipeline-mode compact-marker output** for `one-shot` / `work` callers (the
|
|
134
|
+
workflow returns structured JSON instead, which an orchestrator consumes
|
|
135
|
+
directly — arguably moot in workflow form).
|
|
136
|
+
+ **Fix-commit targeted rounds (ADR-267)** — `--fix-round`/`--since` arg
|
|
137
|
+
handling, `PANEL_SHA` snapshotting, and the `structural-enumeration` seat
|
|
138
|
+
(the `aggregate pattern` row's guard-shaped structural pass, a SKILL-only
|
|
139
|
+
`general-purpose` spawn) exist only in the prose skill; the workflow port
|
|
140
|
+
resolves the tier and gates the none-tier panel but does not run fix rounds.
|
|
141
|
+
|
|
142
|
+
## Validation
|
|
143
|
+
|
|
144
|
+
`review.workflow.js`'s control flow (conditional fan-out, pipeline verify,
|
|
145
|
+
majority survival, CONCUR flip, dry-run filing, budget floor) is exercised by a
|
|
146
|
+
stub harness with **no real agents / zero tokens** — see the PR description for
|
|
147
|
+
the matrix. The live A/B on PR #5006 covers the real-agent path.
|