@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.
Files changed (832) hide show
  1. package/.claude-plugin/agents.manifest.json +476 -0
  2. package/.claude-plugin/plugin.json +42 -0
  3. package/README.md +44 -2
  4. package/agents/community/.gitkeep +0 -0
  5. package/agents/engineering/cto.md +87 -0
  6. package/agents/engineering/design/ddd-architect.md +95 -0
  7. package/agents/engineering/discovery/agent-finder.md +214 -0
  8. package/agents/engineering/discovery/functional-discovery.md +182 -0
  9. package/agents/engineering/infra/infra-security.md +151 -0
  10. package/agents/engineering/infra/platform-strategist.md +109 -0
  11. package/agents/engineering/infra/terraform-architect.md +171 -0
  12. package/agents/engineering/prompt-engineer.md +37 -0
  13. package/agents/engineering/research/best-practices-researcher.md +115 -0
  14. package/agents/engineering/research/framework-docs-researcher.md +93 -0
  15. package/agents/engineering/research/git-history-analyzer.md +53 -0
  16. package/agents/engineering/research/learnings-researcher.md +285 -0
  17. package/agents/engineering/research/repo-research-analyst.md +118 -0
  18. package/agents/engineering/review/agent-native-reviewer.md +279 -0
  19. package/agents/engineering/review/architecture-strategist.md +61 -0
  20. package/agents/engineering/review/code-quality-analyst.md +92 -0
  21. package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
  22. package/agents/engineering/review/data-integrity-guardian.md +82 -0
  23. package/agents/engineering/review/data-migration-expert.md +98 -0
  24. package/agents/engineering/review/deployment-verification-agent.md +183 -0
  25. package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
  26. package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
  27. package/agents/engineering/review/legacy-code-expert.md +55 -0
  28. package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
  29. package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
  30. package/agents/engineering/review/performance-oracle.md +130 -0
  31. package/agents/engineering/review/security-sentinel.md +167 -0
  32. package/agents/engineering/review/semgrep-sast.md +36 -0
  33. package/agents/engineering/review/test-design-reviewer.md +150 -0
  34. package/agents/engineering/review/user-impact-reviewer.md +70 -0
  35. package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
  36. package/agents/finance/budget-analyst.md +29 -0
  37. package/agents/finance/cfo.md +44 -0
  38. package/agents/finance/financial-reporter.md +30 -0
  39. package/agents/finance/revenue-analyst.md +30 -0
  40. package/agents/legal/clo.md +115 -0
  41. package/agents/legal/legal-compliance-auditor.md +110 -0
  42. package/agents/legal/legal-document-generator.md +134 -0
  43. package/agents/marketing/analytics-analyst.md +25 -0
  44. package/agents/marketing/brand-architect.md +181 -0
  45. package/agents/marketing/cmo.md +76 -0
  46. package/agents/marketing/conversion-optimizer.md +19 -0
  47. package/agents/marketing/copywriter.md +20 -0
  48. package/agents/marketing/fact-checker.md +70 -0
  49. package/agents/marketing/growth-strategist.md +145 -0
  50. package/agents/marketing/paid-media-strategist.md +28 -0
  51. package/agents/marketing/pricing-strategist.md +17 -0
  52. package/agents/marketing/programmatic-seo-specialist.md +25 -0
  53. package/agents/marketing/retention-strategist.md +23 -0
  54. package/agents/marketing/seo-aeo-analyst.md +164 -0
  55. package/agents/operations/coo.md +50 -0
  56. package/agents/operations/ops-advisor.md +78 -0
  57. package/agents/operations/ops-provisioner.md +101 -0
  58. package/agents/operations/ops-research.md +52 -0
  59. package/agents/operations/service-automator.md +278 -0
  60. package/agents/product/business-validator.md +206 -0
  61. package/agents/product/competitive-intelligence.md +89 -0
  62. package/agents/product/cpo.md +63 -0
  63. package/agents/product/design/ux-design-lead.md +209 -0
  64. package/agents/product/spec-flow-analyzer.md +122 -0
  65. package/agents/sales/cro.md +44 -0
  66. package/agents/sales/deal-architect.md +29 -0
  67. package/agents/sales/outbound-strategist.md +29 -0
  68. package/agents/sales/pipeline-analyst.md +29 -0
  69. package/agents/support/cco.md +48 -0
  70. package/agents/support/community-manager.md +570 -0
  71. package/agents/support/ticket-triage.md +70 -0
  72. package/bin/soleur-opencode.js +29 -0
  73. package/commands/go.md +660 -0
  74. package/commands/help.md +273 -0
  75. package/commands/sync.md +977 -0
  76. package/commands/version.md +103 -0
  77. package/hooks/antigravity-hooks.json +84 -0
  78. package/hooks/antigravity-session-start.sh +15 -0
  79. package/hooks/bare-root-cwd-guard.sh +131 -0
  80. package/hooks/browser-snapshot-credential-guard.sh +200 -0
  81. package/hooks/codex-session-start.sh +9 -0
  82. package/hooks/compaction-state.sh +525 -0
  83. package/hooks/destructive-command-guard.sh +1387 -0
  84. package/hooks/devin-session-start.sh +90 -0
  85. package/hooks/ext-filter-detect.sh +171 -0
  86. package/hooks/hooks.json +133 -0
  87. package/hooks/lib/hook-tool-kind.sh +24 -0
  88. package/hooks/lib/log-rotation.sh +176 -0
  89. package/hooks/lib/shell-argv.pl +576 -0
  90. package/hooks/memory-backstop.sh +1114 -0
  91. package/hooks/operator-stage-approval.sh +391 -0
  92. package/hooks/stop-hook.sh +367 -0
  93. package/hooks/unkept-promise-hook.sh +383 -0
  94. package/hooks/version-banner.sh +127 -0
  95. package/hooks/welcome-hook.sh +50 -0
  96. package/install.js +29 -0
  97. package/lib/agent-registry.ts +154 -0
  98. package/lib/c4-canonical-cli.mjs +34 -0
  99. package/lib/c4-canonical.mjs +46 -0
  100. package/lib/c4-from-components.ts +554 -0
  101. package/lib/go-routing.ts +81 -0
  102. package/lib/grok-inspect-contract.ts +311 -0
  103. package/lib/harness-model-map.ts +101 -0
  104. package/lib/harness-parity.ts +726 -0
  105. package/lib/harness-tool-map.ts +180 -0
  106. package/lib/harness.ts +716 -0
  107. package/lib/heartbeat-live-reconcile.ts +1153 -0
  108. package/lib/heartbeat-manifest.ts +361 -0
  109. package/lib/kb-coverage.ts +252 -0
  110. package/lib/pr-merge-poll.ts +103 -0
  111. package/lib/workflow-fidelity.ts +388 -0
  112. package/opencode/INSTRUCTIONS.md +171 -0
  113. package/opencode/agents/engineering/cto.md +10 -0
  114. package/opencode/agents/engineering/design/ddd-architect.md +10 -0
  115. package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
  116. package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
  117. package/opencode/agents/engineering/infra/infra-security.md +10 -0
  118. package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
  119. package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
  120. package/opencode/agents/engineering/prompt-engineer.md +10 -0
  121. package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
  122. package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
  123. package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
  124. package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
  125. package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
  126. package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
  127. package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
  128. package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
  129. package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
  130. package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
  131. package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
  132. package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
  133. package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
  134. package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
  135. package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
  136. package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
  137. package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
  138. package/opencode/agents/engineering/review/performance-oracle.md +10 -0
  139. package/opencode/agents/engineering/review/security-sentinel.md +10 -0
  140. package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
  141. package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
  142. package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
  143. package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
  144. package/opencode/agents/finance/budget-analyst.md +10 -0
  145. package/opencode/agents/finance/cfo.md +10 -0
  146. package/opencode/agents/finance/financial-reporter.md +10 -0
  147. package/opencode/agents/finance/revenue-analyst.md +10 -0
  148. package/opencode/agents/legal/clo.md +10 -0
  149. package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
  150. package/opencode/agents/legal/legal-document-generator.md +10 -0
  151. package/opencode/agents/marketing/analytics-analyst.md +10 -0
  152. package/opencode/agents/marketing/brand-architect.md +10 -0
  153. package/opencode/agents/marketing/cmo.md +10 -0
  154. package/opencode/agents/marketing/conversion-optimizer.md +10 -0
  155. package/opencode/agents/marketing/copywriter.md +10 -0
  156. package/opencode/agents/marketing/fact-checker.md +10 -0
  157. package/opencode/agents/marketing/growth-strategist.md +10 -0
  158. package/opencode/agents/marketing/paid-media-strategist.md +10 -0
  159. package/opencode/agents/marketing/pricing-strategist.md +10 -0
  160. package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
  161. package/opencode/agents/marketing/retention-strategist.md +10 -0
  162. package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
  163. package/opencode/agents/operations/coo.md +10 -0
  164. package/opencode/agents/operations/ops-advisor.md +10 -0
  165. package/opencode/agents/operations/ops-provisioner.md +10 -0
  166. package/opencode/agents/operations/ops-research.md +10 -0
  167. package/opencode/agents/operations/service-automator.md +10 -0
  168. package/opencode/agents/product/business-validator.md +10 -0
  169. package/opencode/agents/product/competitive-intelligence.md +10 -0
  170. package/opencode/agents/product/cpo.md +10 -0
  171. package/opencode/agents/product/design/ux-design-lead.md +10 -0
  172. package/opencode/agents/product/spec-flow-analyzer.md +10 -0
  173. package/opencode/agents/sales/cro.md +10 -0
  174. package/opencode/agents/sales/deal-architect.md +10 -0
  175. package/opencode/agents/sales/outbound-strategist.md +10 -0
  176. package/opencode/agents/sales/pipeline-analyst.md +10 -0
  177. package/opencode/agents/support/cco.md +10 -0
  178. package/opencode/agents/support/community-manager.md +10 -0
  179. package/opencode/agents/support/ticket-triage.md +10 -0
  180. package/opencode/commands/go.md +10 -0
  181. package/opencode/commands/help.md +10 -0
  182. package/opencode/commands/sync.md +10 -0
  183. package/opencode/commands/version.md +11 -0
  184. package/opencode/opencode.json +8 -0
  185. package/opencode/plugin.ts +818 -0
  186. package/package.json +36 -4
  187. package/scripts/admin-merge-ready.sh +545 -0
  188. package/scripts/admin-merge-ready.test.sh +753 -0
  189. package/scripts/affected-tests.sh +908 -0
  190. package/scripts/affected-tests.test.sh +1797 -0
  191. package/scripts/alpha-metrics.sh +78 -0
  192. package/scripts/alpha-metrics.test.sh +115 -0
  193. package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
  194. package/scripts/audit-flag-flip.sh +107 -0
  195. package/scripts/check-red-on-main.sh +316 -0
  196. package/scripts/ci-head-verdict.sh +411 -0
  197. package/scripts/cloud-detect.sh +193 -0
  198. package/scripts/delegation-verify.sh +657 -0
  199. package/scripts/delegation-verify.test.sh +1424 -0
  200. package/scripts/deploy-arm.sh +475 -0
  201. package/scripts/domain-model-drift.sh +419 -0
  202. package/scripts/emit-decision.sh +144 -0
  203. package/scripts/emit-decision.test.sh +144 -0
  204. package/scripts/ext-filter-divergence-corpus.txt +15 -0
  205. package/scripts/ext-filter-divergence.sh +189 -0
  206. package/scripts/generate-c4-from-components.ts +442 -0
  207. package/scripts/grok-fidelity-gate.sh +68 -0
  208. package/scripts/grok-pre-push-gate.sh +232 -0
  209. package/scripts/harness-discovery-smoke.ts +906 -0
  210. package/scripts/harness-parity-census.ts +92 -0
  211. package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
  212. package/scripts/install-opencode-adapter.ts +509 -0
  213. package/scripts/lib/affected-tests/common.sh +365 -0
  214. package/scripts/lib/affected-tests/go.sh +157 -0
  215. package/scripts/lib/affected-tests/js.sh +188 -0
  216. package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
  217. package/scripts/lib/affected-tests/python.sh +185 -0
  218. package/scripts/lib/context-sanitize.sh +49 -0
  219. package/scripts/lib/domain-model-lib.sh +180 -0
  220. package/scripts/lib/ext-filter-grammar.tsv +34 -0
  221. package/scripts/lib/operator-script.sh +1236 -0
  222. package/scripts/lib/proc.sh +580 -0
  223. package/scripts/lib/session-state.sh +748 -0
  224. package/scripts/lib/tmp-classify.sh +843 -0
  225. package/scripts/lib/wrapper-boundary.sh +47 -0
  226. package/scripts/lint-ratchet.py +1547 -0
  227. package/scripts/monitor-pr-checks.sh +441 -0
  228. package/scripts/pipeline-tally.sh +756 -0
  229. package/scripts/pipeline-tally.test.sh +740 -0
  230. package/scripts/plugin-version.sh +528 -0
  231. package/scripts/precommit-guard.sh +115 -0
  232. package/scripts/precommit-guard.test.sh +254 -0
  233. package/scripts/reconcile-live-heartbeats.ts +705 -0
  234. package/scripts/render-c4-model.sh +217 -0
  235. package/scripts/resolve-git-root.sh +55 -0
  236. package/scripts/resolve-regenerable-conflicts.sh +363 -0
  237. package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
  238. package/scripts/ruff-requirements.txt +22 -0
  239. package/scripts/run-in-pid-namespace.sh +98 -0
  240. package/scripts/run-in-pid-namespace.test.sh +290 -0
  241. package/scripts/scan-ancestor-signal-helpers.py +556 -0
  242. package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
  243. package/scripts/setup-ralph-loop.sh +238 -0
  244. package/scripts/sync-cursor-name-map.ts +316 -0
  245. package/scripts/sync-grok-agent-compat.ts +188 -0
  246. package/scripts/sync-npm-package.ts +165 -0
  247. package/scripts/sync-opencode-adapter.ts +498 -0
  248. package/scripts/sync-pr-behind.sh +647 -0
  249. package/scripts/sync-pr-behind.test.sh +252 -0
  250. package/scripts/taste-profile-update.sh +180 -0
  251. package/scripts/taste-profile-update.test.sh +167 -0
  252. package/scripts/write-budget-marker.sh +23 -0
  253. package/scripts/write-kb-coverage.ts +113 -0
  254. package/skills/admin-ip-refresh/SKILL.md +81 -0
  255. package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
  256. package/skills/agent-browser/SKILL.md +698 -0
  257. package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
  258. package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
  259. package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
  260. package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
  261. package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
  262. package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
  263. package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
  264. package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
  265. package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
  266. package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
  267. package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
  268. package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
  269. package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
  270. package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
  271. package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
  272. package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
  273. package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
  274. package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
  275. package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
  276. package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
  277. package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
  278. package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
  279. package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
  280. package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
  281. package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
  282. package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
  283. package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
  284. package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
  285. package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
  286. package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
  287. package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
  288. package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
  289. package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
  290. package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
  291. package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
  292. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
  293. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
  294. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
  295. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
  296. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
  297. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
  298. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
  299. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
  300. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
  301. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
  302. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
  303. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
  304. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
  305. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
  306. package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
  307. package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
  308. package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
  309. package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
  310. package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
  311. package/skills/agent-native-architecture/SKILL.md +479 -0
  312. package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
  313. package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
  314. package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
  315. package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
  316. package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
  317. package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
  318. package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
  319. package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
  320. package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
  321. package/skills/agent-native-architecture/references/product-implications.md +478 -0
  322. package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
  323. package/skills/agent-native-architecture/references/self-modification.md +294 -0
  324. package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
  325. package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
  326. package/skills/agent-native-audit/SKILL.md +300 -0
  327. package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
  328. package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
  329. package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  330. package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
  331. package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  332. package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
  333. package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  334. package/skills/architecture/SKILL.md +436 -0
  335. package/skills/architecture/references/adr-template.md +154 -0
  336. package/skills/architecture/references/likec4-reference.md +136 -0
  337. package/skills/architecture/references/nfr-reference.md +126 -0
  338. package/skills/archive-kb/SKILL.md +86 -0
  339. package/skills/archive-kb/scripts/archive-kb.sh +300 -0
  340. package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
  341. package/skills/atdd-developer/SKILL.md +65 -0
  342. package/skills/brainstorm/SKILL.md +701 -0
  343. package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
  344. package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
  345. package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
  346. package/skills/brainstorm/references/ui-surface-terms.md +42 -0
  347. package/skills/brainstorm-techniques/SKILL.md +231 -0
  348. package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
  349. package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
  350. package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
  351. package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
  352. package/skills/campaign-calendar/SKILL.md +145 -0
  353. package/skills/cf-token-scope/SKILL.md +164 -0
  354. package/skills/cf-token-scope/references/widen-playbook.md +114 -0
  355. package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
  356. package/skills/changelog/SKILL.md +142 -0
  357. package/skills/code-to-prd/SKILL.md +66 -0
  358. package/skills/code-to-prd/references/banner-template.md +12 -0
  359. package/skills/code-to-prd/references/prd-template.md +41 -0
  360. package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
  361. package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
  362. package/skills/code-to-prd/test/fixture/.env.example +7 -0
  363. package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
  364. package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
  365. package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
  366. package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
  367. package/skills/code-to-prd/test/fixture/package.json +6 -0
  368. package/skills/cohort-status/SKILL.md +62 -0
  369. package/skills/community/SKILL.md +210 -0
  370. package/skills/community/scripts/bsky-community.sh +644 -0
  371. package/skills/community/scripts/bsky-setup.sh +631 -0
  372. package/skills/community/scripts/community-router.sh +93 -0
  373. package/skills/community/scripts/discord-community.sh +487 -0
  374. package/skills/community/scripts/discord-setup.sh +784 -0
  375. package/skills/community/scripts/github-community.sh +706 -0
  376. package/skills/community/scripts/hn-community.sh +233 -0
  377. package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
  378. package/skills/community/scripts/linkedin-community.sh +750 -0
  379. package/skills/community/scripts/linkedin-setup.sh +758 -0
  380. package/skills/community/scripts/x-community.sh +890 -0
  381. package/skills/community/scripts/x-setup.sh +713 -0
  382. package/skills/community/test/community-argv.test.sh +2922 -0
  383. package/skills/community/test/github-community.test.sh +981 -0
  384. package/skills/competitive-analysis/SKILL.md +69 -0
  385. package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
  386. package/skills/compound/SKILL.md +673 -0
  387. package/skills/compound/scripts/token-efficiency-report.sh +334 -0
  388. package/skills/compound/test/phase-16.test.sh +379 -0
  389. package/skills/compound-capture/SKILL.md +791 -0
  390. package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
  391. package/skills/compound-capture/assets/resolution-template.md +116 -0
  392. package/skills/compound-capture/references/yaml-schema.md +67 -0
  393. package/skills/compound-capture/schema.yaml +181 -0
  394. package/skills/constraint-scaffold/SKILL.md +175 -0
  395. package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
  396. package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
  397. package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
  398. package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
  399. package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
  400. package/skills/constraint-scaffold/references/shared-runner.template +135 -0
  401. package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
  402. package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
  403. package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
  404. package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
  405. package/skills/constraint-scaffold/test/generator.test.sh +93 -0
  406. package/skills/constraint-scaffold/test/parity.test.sh +285 -0
  407. package/skills/content-writer/SKILL.md +242 -0
  408. package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
  409. package/skills/cron-delete/SKILL.md +56 -0
  410. package/skills/cron-list/SKILL.md +54 -0
  411. package/skills/deepen-plan/SKILL.md +937 -0
  412. package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
  413. package/skills/deploy/SKILL.md +115 -0
  414. package/skills/deploy/references/hetzner-setup.md +67 -0
  415. package/skills/deploy/scripts/deploy.sh +37 -0
  416. package/skills/deploy-docs/SKILL.md +95 -0
  417. package/skills/dhh-rails-style/SKILL.md +203 -0
  418. package/skills/dhh-rails-style/references/architecture.md +717 -0
  419. package/skills/dhh-rails-style/references/controllers.md +323 -0
  420. package/skills/dhh-rails-style/references/frontend.md +556 -0
  421. package/skills/dhh-rails-style/references/gems.md +316 -0
  422. package/skills/dhh-rails-style/references/models.md +388 -0
  423. package/skills/dhh-rails-style/references/testing.md +354 -0
  424. package/skills/discord-content/SKILL.md +126 -0
  425. package/skills/docs-site/SKILL.md +214 -0
  426. package/skills/drain-labeled-backlog/SKILL.md +203 -0
  427. package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
  428. package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
  429. package/skills/drain-prs/SKILL.md +143 -0
  430. package/skills/drain-prs/scripts/triage-prs.sh +192 -0
  431. package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
  432. package/skills/dspy-ruby/SKILL.md +634 -0
  433. package/skills/dspy-ruby/assets/config-template.rb +359 -0
  434. package/skills/dspy-ruby/assets/module-template.rb +326 -0
  435. package/skills/dspy-ruby/assets/signature-template.rb +143 -0
  436. package/skills/dspy-ruby/references/core-concepts.md +268 -0
  437. package/skills/dspy-ruby/references/optimization.md +623 -0
  438. package/skills/dspy-ruby/references/providers.md +335 -0
  439. package/skills/eval-harness/README.md +194 -0
  440. package/skills/eval-harness/SKILL.md +157 -0
  441. package/skills/eval-harness/enums/go-routes.json +13 -0
  442. package/skills/eval-harness/enums/incident-threshold.json +5 -0
  443. package/skills/eval-harness/enums/lane.json +5 -0
  444. package/skills/eval-harness/enums/tool-selection.json +20 -0
  445. package/skills/eval-harness/enums/triage-levels.json +5 -0
  446. package/skills/eval-harness/gated-skills.json +34 -0
  447. package/skills/eval-harness/models.generated.json +5 -0
  448. package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
  449. package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
  450. package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
  451. package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
  452. package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
  453. package/skills/eval-harness/prompts/go-baseline.txt +6 -0
  454. package/skills/eval-harness/prompts/go-skill.txt +21 -0
  455. package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
  456. package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
  457. package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
  458. package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
  459. package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
  460. package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
  461. package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
  462. package/skills/eval-harness/prompts/triage-skill.txt +10 -0
  463. package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
  464. package/skills/eval-harness/scripts/extract-block.cjs +87 -0
  465. package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
  466. package/skills/eval-harness/scripts/gen-models.sh +41 -0
  467. package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
  468. package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
  469. package/skills/eval-harness/scripts/parse-label.cjs +93 -0
  470. package/skills/eval-harness/scripts/verdict.cjs +132 -0
  471. package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
  472. package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
  473. package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
  474. package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
  475. package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
  476. package/skills/eval-harness/test/eval-gate.test.sh +132 -0
  477. package/skills/eval-harness/test/extract-block.test.sh +87 -0
  478. package/skills/eval-harness/test/gate-classification.test.sh +77 -0
  479. package/skills/eval-harness/test/gen-models.test.sh +75 -0
  480. package/skills/eval-harness/test/measure-classification.test.sh +74 -0
  481. package/skills/eval-harness/test/parse-label.test.sh +129 -0
  482. package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
  483. package/skills/eval-harness/test/verdict.test.sh +123 -0
  484. package/skills/every-style-editor/SKILL.md +142 -0
  485. package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  486. package/skills/feature-tweet/SKILL.md +199 -0
  487. package/skills/feature-video/SKILL.md +412 -0
  488. package/skills/feature-video/scripts/check_deps.sh +281 -0
  489. package/skills/file-todos/SKILL.md +267 -0
  490. package/skills/file-todos/assets/todo-template.md +166 -0
  491. package/skills/fix-issue/SKILL.md +278 -0
  492. package/skills/fix-issue/references/agent-authored-exclusion.md +120 -0
  493. package/skills/fix-issue/references/exclude-label-jq-snippet.md +97 -0
  494. package/skills/flag-bootstrap/SETUP.md +142 -0
  495. package/skills/flag-create/SKILL.md +145 -0
  496. package/skills/flag-create/scripts/create.sh +273 -0
  497. package/skills/flag-delete/SKILL.md +167 -0
  498. package/skills/flag-delete/scripts/delete.sh +288 -0
  499. package/skills/flag-list/SKILL.md +99 -0
  500. package/skills/flag-list/scripts/list.sh +275 -0
  501. package/skills/flag-set-role/SKILL.md +229 -0
  502. package/skills/flag-set-role/scripts/flip.sh +774 -0
  503. package/skills/frontend-anti-slop/SKILL.md +106 -0
  504. package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
  505. package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
  506. package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
  507. package/skills/frontend-design/SKILL.md +77 -0
  508. package/skills/gdpr-gate/NOTICE +136 -0
  509. package/skills/gdpr-gate/SKILL.md +341 -0
  510. package/skills/gdpr-gate/references/fields.md +160 -0
  511. package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
  512. package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
  513. package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
  514. package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
  515. package/skills/gdpr-gate/references/layers/frontend.md +249 -0
  516. package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
  517. package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
  518. package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
  519. package/skills/gdpr-gate/references/legal-consent.md +140 -0
  520. package/skills/gdpr-gate/references/non-negotiables.md +60 -0
  521. package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
  522. package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
  523. package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
  524. package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
  525. package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
  526. package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
  527. package/skills/gemini-imagegen/SKILL.md +283 -0
  528. package/skills/gemini-imagegen/requirements.txt +5 -0
  529. package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
  530. package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
  531. package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
  532. package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
  533. package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
  534. package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
  535. package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
  536. package/skills/git-worktree/SKILL.md +534 -0
  537. package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
  538. package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
  539. package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
  540. package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
  541. package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
  542. package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
  543. package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
  544. package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
  545. package/skills/go/SKILL.md +54 -0
  546. package/skills/growth/SKILL.md +164 -0
  547. package/skills/harvest-debt/SKILL.md +78 -0
  548. package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
  549. package/skills/heal-skill/SKILL.md +173 -0
  550. package/skills/help/SKILL.md +46 -0
  551. package/skills/incident/NOTICE +39 -0
  552. package/skills/incident/SKILL.md +395 -0
  553. package/skills/incident/scripts/dry-run.sh +448 -0
  554. package/skills/incident/scripts/redact-engine.py +412 -0
  555. package/skills/incident/scripts/redact-sentinel.sh +44 -0
  556. package/skills/incident/templates/pir.md +139 -0
  557. package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
  558. package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
  559. package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
  560. package/skills/incident/test/fixtures/positive-corpus.md +87 -0
  561. package/skills/incident/test/redact-sentinel.test.sh +1420 -0
  562. package/skills/invoice/SKILL.md +206 -0
  563. package/skills/kb-glossary/SKILL.md +71 -0
  564. package/skills/kb-glossary/references/glossary-format.md +111 -0
  565. package/skills/kb-glossary/references/rejected-request-register.md +115 -0
  566. package/skills/kb-search/SKILL.md +276 -0
  567. package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
  568. package/skills/legal-audit/SKILL.md +161 -0
  569. package/skills/legal-generate/NOTICE +242 -0
  570. package/skills/legal-generate/SKILL.md +244 -0
  571. package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
  572. package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
  573. package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
  574. package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
  575. package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
  576. package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
  577. package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
  578. package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
  579. package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
  580. package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
  581. package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
  582. package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
  583. package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
  584. package/skills/linear-fetch/SKILL.md +247 -0
  585. package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
  586. package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
  587. package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
  588. package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
  589. package/skills/linear-fetch/test/parity.test.sh +112 -0
  590. package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
  591. package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
  592. package/skills/merge-pr/SKILL.md +670 -0
  593. package/skills/model-launch-review/SKILL.md +255 -0
  594. package/skills/model-launch-review/scripts/audit-models.sh +501 -0
  595. package/skills/one-shot/SKILL.md +316 -0
  596. package/skills/one-shot/references/token-discipline.md +74 -0
  597. package/skills/operator-bootstrap/SKILL.md +412 -0
  598. package/skills/operator-bootstrap/template.sh +439 -0
  599. package/skills/operator-digest/SKILL.md +287 -0
  600. package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
  601. package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
  602. package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
  603. package/skills/operator-rephrase/SKILL.md +98 -0
  604. package/skills/pencil-setup/SKILL.md +201 -0
  605. package/skills/pencil-setup/scripts/check_deps.sh +556 -0
  606. package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
  607. package/skills/pencil-setup/scripts/package-lock.json +1172 -0
  608. package/skills/pencil-setup/scripts/package.json +14 -0
  609. package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
  610. package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
  611. package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
  612. package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
  613. package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
  614. package/skills/plan/SKILL.md +1140 -0
  615. package/skills/plan/references/differential-migration-testing.md +185 -0
  616. package/skills/plan/references/plan-community-discovery.md +42 -0
  617. package/skills/plan/references/plan-founder-check.md +137 -0
  618. package/skills/plan/references/plan-functional-overlap.md +25 -0
  619. package/skills/plan/references/plan-host-fanout.md +51 -0
  620. package/skills/plan/references/plan-issue-templates.md +779 -0
  621. package/skills/plan/references/plan-network-outage-checklist.md +131 -0
  622. package/skills/plan/references/plan-scope-check.md +126 -0
  623. package/skills/plan/references/plan-sharp-edges.md +331 -0
  624. package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
  625. package/skills/plan/references/webapp-cwv-observability.md +143 -0
  626. package/skills/plan-review/SKILL.md +91 -0
  627. package/skills/plan-review/lib/named-panel.mjs +58 -0
  628. package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
  629. package/skills/postmerge/SKILL.md +642 -0
  630. package/skills/postmerge/references/deploy-status-debugging.md +141 -0
  631. package/skills/postmerge/references/graceful-degradation.md +20 -0
  632. package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
  633. package/skills/preflight/SKILL.md +1553 -0
  634. package/skills/preflight/references/check-13-founder-check.md +286 -0
  635. package/skills/preflight/scripts/founder-check.py +1640 -0
  636. package/skills/preflight/scripts/parse-form-a.awk +107 -0
  637. package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
  638. package/skills/product-roadmap/SKILL.md +357 -0
  639. package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
  640. package/skills/provision-cloudflare/SKILL.md +67 -0
  641. package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
  642. package/skills/provision-doppler/SKILL.md +58 -0
  643. package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
  644. package/skills/provision-github/SKILL.md +59 -0
  645. package/skills/provision-github/scripts/provision-github.sh +300 -0
  646. package/skills/provision-hetzner/SKILL.md +76 -0
  647. package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
  648. package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
  649. package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
  650. package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
  651. package/skills/qa/SKILL.md +263 -0
  652. package/skills/qa/references/browser-preflight.md +22 -0
  653. package/skills/questionnaire-generate/SKILL.md +328 -0
  654. package/skills/questionnaire-generate/references/questionnaire.template +60 -0
  655. package/skills/rclone/SKILL.md +162 -0
  656. package/skills/rclone/scripts/check_setup.sh +63 -0
  657. package/skills/release-announce/SKILL.md +65 -0
  658. package/skills/release-docs/SKILL.md +92 -0
  659. package/skills/reproduce-bug/SKILL.md +358 -0
  660. package/skills/resolve-debt/SKILL.md +85 -0
  661. package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
  662. package/skills/resolve-parallel/SKILL.md +45 -0
  663. package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
  664. package/skills/resolve-pr-parallel/SKILL.md +68 -0
  665. package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
  666. package/skills/resolve-todo-parallel/SKILL.md +57 -0
  667. package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
  668. package/skills/review/SKILL.md +1620 -0
  669. package/skills/review/references/anti-slop-scanner-hook.md +40 -0
  670. package/skills/review/references/defect-classes-migrations.md +9 -0
  671. package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
  672. package/skills/review/references/review-e2e-testing.md +116 -0
  673. package/skills/review/references/review-evidence-comment.md +36 -0
  674. package/skills/review/references/review-todo-structure.md +165 -0
  675. package/skills/review/references/risk-tier-and-fix-rounds.md +97 -0
  676. package/skills/review/references/semgrep-custom-rules.yaml +174 -0
  677. package/skills/review/references/ultrathink-phases.md +98 -0
  678. package/skills/review/references/wfs.md +6 -0
  679. package/skills/review/scripts/emit-review-trailer.sh +499 -0
  680. package/skills/review/scripts/ensure-semgrep.sh +99 -0
  681. package/skills/review/scripts/fix-round-seats.sh +197 -0
  682. package/skills/review/test/emit-review-trailer.test.sh +387 -0
  683. package/skills/review/test/ensure-semgrep.test.sh +111 -0
  684. package/skills/review/test/fix-round-seats.test.sh +237 -0
  685. package/skills/review/workflows/README.md +147 -0
  686. package/skills/review/workflows/review.workflow.js +667 -0
  687. package/skills/schedule/SKILL.md +796 -0
  688. package/skills/seo-aeo/SKILL.md +139 -0
  689. package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
  690. package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
  691. package/skills/ship/SKILL.md +3023 -0
  692. package/skills/ship/references/adr-ordinal-collision.md +47 -0
  693. package/skills/ship/references/affected-gate-contract.md +115 -0
  694. package/skills/ship/references/ci-run-diagnosis.md +29 -0
  695. package/skills/ship/references/ci-workflow-authoring.md +68 -0
  696. package/skills/ship/references/cleanup-merged-archival.md +39 -0
  697. package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
  698. package/skills/ship/references/cto-ruling-armed-push.md +5 -0
  699. package/skills/ship/references/decision-challenges-render.md +71 -0
  700. package/skills/ship/references/delegated-act-authoring-form.md +7 -0
  701. package/skills/ship/references/detached-battery-verdict.md +13 -0
  702. package/skills/ship/references/epic-close-sweep.md +62 -0
  703. package/skills/ship/references/feature-tweet-draft.md +42 -0
  704. package/skills/ship/references/followthrough-issue-body-template.md +47 -0
  705. package/skills/ship/references/followthrough-stub-template.sh +92 -0
  706. package/skills/ship/references/merge-queue-dequeue.md +39 -0
  707. package/skills/ship/references/operator-holds.md +179 -0
  708. package/skills/ship/references/pipeline-tally-render.md +43 -0
  709. package/skills/ship/references/pr-overlap.md +153 -0
  710. package/skills/ship/references/queue-mode.md +7 -0
  711. package/skills/ship/references/ready-run-wait.md +36 -0
  712. package/skills/ship/references/red-on-main-quarantine.md +110 -0
  713. package/skills/ship/references/register-update-pr-pattern.md +88 -0
  714. package/skills/ship/references/settle-then-admin-merge.md +130 -0
  715. package/skills/ship/references/supabase-column-probe.md +13 -0
  716. package/skills/ship/scripts/auto-close-scan.sh +76 -0
  717. package/skills/ship/scripts/battery-owed.sh +403 -0
  718. package/skills/ship/scripts/hold-gate-eval.sh +410 -0
  719. package/skills/ship/scripts/net-issue-flow.sh +665 -0
  720. package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
  721. package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
  722. package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
  723. package/skills/skill-creator/SKILL.md +299 -0
  724. package/skills/skill-creator/references/api-security.md +248 -0
  725. package/skills/skill-creator/references/authoring-levers.md +110 -0
  726. package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
  727. package/skills/skill-creator/references/best-practices.md +431 -0
  728. package/skills/skill-creator/references/common-patterns.md +639 -0
  729. package/skills/skill-creator/references/core-principles.md +193 -0
  730. package/skills/skill-creator/references/executable-code.md +188 -0
  731. package/skills/skill-creator/references/iteration-and-testing.md +509 -0
  732. package/skills/skill-creator/references/official-spec.md +193 -0
  733. package/skills/skill-creator/references/recommended-structure.md +180 -0
  734. package/skills/skill-creator/references/skill-structure.md +396 -0
  735. package/skills/skill-creator/references/using-scripts.md +122 -0
  736. package/skills/skill-creator/references/using-templates.md +120 -0
  737. package/skills/skill-creator/references/workflows-and-validation.md +541 -0
  738. package/skills/skill-creator/scripts/init_skill.py +322 -0
  739. package/skills/skill-creator/scripts/package_skill.py +110 -0
  740. package/skills/skill-creator/scripts/quick_validate.py +64 -0
  741. package/skills/skill-creator/templates/router-skill.md +73 -0
  742. package/skills/skill-creator/templates/simple-skill.md +34 -0
  743. package/skills/skill-creator/workflows/add-reference.md +96 -0
  744. package/skills/skill-creator/workflows/add-script.md +104 -0
  745. package/skills/skill-creator/workflows/add-template.md +83 -0
  746. package/skills/skill-creator/workflows/add-workflow.md +128 -0
  747. package/skills/skill-creator/workflows/audit-skill.md +159 -0
  748. package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
  749. package/skills/skill-creator/workflows/create-new-skill.md +207 -0
  750. package/skills/skill-creator/workflows/get-guidance.md +134 -0
  751. package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
  752. package/skills/skill-creator/workflows/verify-skill.md +226 -0
  753. package/skills/skill-security-scan/SKILL.md +145 -0
  754. package/skills/skill-security-scan/references/disclaimer.md +21 -0
  755. package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
  756. package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
  757. package/skills/skill-security-scan/references/override-mechanism.md +171 -0
  758. package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
  759. package/skills/skill-security-scan/references/regex-patterns.md +136 -0
  760. package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
  761. package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
  762. package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
  763. package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
  764. package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
  765. package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
  766. package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
  767. package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
  768. package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
  769. package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
  770. package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
  771. package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
  772. package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
  773. package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
  774. package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
  775. package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
  776. package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
  777. package/skills/skill-security-scan/scripts/lib.sh +197 -0
  778. package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
  779. package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
  780. package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
  781. package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
  782. package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
  783. package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
  784. package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
  785. package/skills/social-distribute/SKILL.md +485 -0
  786. package/skills/spec-templates/SKILL.md +274 -0
  787. package/skills/sync/SKILL.md +49 -0
  788. package/skills/test-browser/SKILL.md +464 -0
  789. package/skills/test-browser/references/feature-map.md +161 -0
  790. package/skills/test-fix-loop/SKILL.md +159 -0
  791. package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
  792. package/skills/triage/SKILL.md +402 -0
  793. package/skills/trigger-cron/SKILL.md +136 -0
  794. package/skills/trigger-cron/scripts/trigger.sh +198 -0
  795. package/skills/user-set-role/SKILL.md +147 -0
  796. package/skills/user-set-role/scripts/set-role.sh +218 -0
  797. package/skills/user-story-writer/SKILL.md +77 -0
  798. package/skills/ux-audit/SKILL.md +251 -0
  799. package/skills/ux-audit/references/finding.schema.json +62 -0
  800. package/skills/ux-audit/references/route-list.yaml +95 -0
  801. package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
  802. package/skills/ux-audit/scripts/bot-signin.ts +135 -0
  803. package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
  804. package/skills/verification-scaffold/SKILL.md +73 -0
  805. package/skills/verification-scaffold/references/gitleaks.toml.template +13 -0
  806. package/skills/verification-scaffold/references/guardrail-audit.md +156 -0
  807. package/skills/verification-scaffold/references/guards/block-stash-hook.sh.template +72 -0
  808. package/skills/verification-scaffold/references/guards/commit-on-main-hook.sh.template +82 -0
  809. package/skills/verification-scaffold/references/guards/orphan-test-check.sh.template +102 -0
  810. package/skills/verification-scaffold/references/guards/precommit-guard.sh.template +115 -0
  811. package/skills/verification-scaffold/references/guards/secret-scan-hook.sh.template +176 -0
  812. package/skills/verification-scaffold/references/guards/verification-gates.yml.template +49 -0
  813. package/skills/verification-scaffold/references/guards/wrapper-boundary.sh.template +47 -0
  814. package/skills/verification-scaffold/references/guards.tsv +21 -0
  815. package/skills/verification-scaffold/references/verification-readme.template +55 -0
  816. package/skills/verification-scaffold/scripts/verification-scaffold.sh +785 -0
  817. package/skills/verification-scaffold/test/bite-proof.test.sh +159 -0
  818. package/skills/verification-scaffold/test/generator.test.sh +319 -0
  819. package/skills/verification-scaffold/test/manifest.test.sh +144 -0
  820. package/skills/work/SKILL.md +1480 -0
  821. package/skills/work/references/end-of-work-resume.md +7 -0
  822. package/skills/work/references/hook-test-main-cwd.md +24 -0
  823. package/skills/work/references/key-principles.md +83 -0
  824. package/skills/work/references/property-testing.md +122 -0
  825. package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
  826. package/skills/work/references/work-agent-teams.md +97 -0
  827. package/skills/work/references/work-lifecycle-parallel.md +147 -0
  828. package/skills/work/references/work-lockfile-bumps.md +97 -0
  829. package/skills/work/references/work-scratch-sandboxes.md +212 -0
  830. package/skills/work/references/work-subagent-fanout.md +61 -0
  831. package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
  832. package/skills/xcode-test/SKILL.md +360 -0
@@ -0,0 +1,477 @@
1
+ export const meta = {
2
+ name: 'plan-review-workflow',
3
+ description:
4
+ 'Workflow-backed soleur:plan-review — read the plan, fan a FIXED eng panel (DHH + Kieran + code-simplicity, +architecture-strategist +spec-flow-analyzer at the single-user-incident threshold) plus a relevance-gated NAMED CEO/design/devex panel (cpo/cmo/ux-design-lead/cto) in parallel, then consolidate via the delete-over-fix rule and tag each decision with a decisionClass (mechanical|taste|user-challenge) per decision-principles.md so taste findings are surfaced, never silently auto-applied.',
5
+ // Phase titles mirror the phase() calls below so progress groups line up.
6
+ phases: [
7
+ { title: 'Load', detail: 'read the plan file + detect the brand-survival threshold + independent relevance signals for the named panel' },
8
+ { title: 'Review', detail: 'eng panel (3 baseline, +2 at threshold) + relevance-gated named panel (0–4), in parallel' },
9
+ { title: 'Consolidate', detail: 'orthogonal-axis merge with delete-over-fix on co-fired scopes + decisionClass tagging' },
10
+ ],
11
+ }
12
+
13
+ // ---------------------------------------------------------------------------
14
+ // API-budget disclosure (per hr-autonomous-loop-skill-api-budget-disclosure).
15
+ // This workflow fans out ONE agent per reviewer in the panel. The ENG panel is
16
+ // 3 (baseline) or 5 (single-user-incident threshold). The relevance-gated NAMED
17
+ // panel adds 0–4 agents (cpo/cmo/ux-design-lead/cto), spawned ONLY when the
18
+ // plan is relevant to the lens (independent content scan — never always-on, so
19
+ // a pure-infra plan pays for at most the devex lens). Plus 1 consolidation
20
+ // agent — i.e. between 4 (baseline, no named) and 10 (threshold + full named)
21
+ // agents total per run. Named reviewers are C-suite / never-downgrade
22
+ // (ADR-053 tier 3) → they stay `inherit`; no new model pin. Each agent is a real
23
+ // Anthropic API session billed against the session key; BSL-1.1 disclaims
24
+ // runtime/API cost. Both panel sizes are computed and reported in the Load phase
25
+ // log before fan-out, so the count is confirmable before any agent spawns.
26
+ // ---------------------------------------------------------------------------
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Input. args may be a bare string (the plan file path) or an object:
30
+ // { plan } — path to the plan markdown to review
31
+ // ---------------------------------------------------------------------------
32
+ const planPath = (typeof args === 'string' ? args : args?.plan) || ''
33
+ if (!planPath) {
34
+ throw new Error('plan-review-workflow requires a plan file path (args = "path/to/plan.md" or { plan }).')
35
+ }
36
+
37
+ // The literal sentinel the plan must declare in its `## User-Brand Impact`
38
+ // section to escalate the baseline 3-agent panel to the 5-agent panel.
39
+ // SKILL.md §"Brand-survival threshold: single-user incident".
40
+ const THRESHOLD_SENTINEL = 'Brand-survival threshold: single-user incident'
41
+
42
+ // ---------------------------------------------------------------------------
43
+ // Reviewer registry. Each lens reuses the REAL Soleur agent via agentType, so
44
+ // the workflow inherits that agent's system prompt and only appends the
45
+ // StructuredOutput instruction. `panel` tags which orthogonal axis the
46
+ // reviewer belongs to (SKILL.md consolidation rule): the simplification panel
47
+ // (DHH + code-simplicity) and the correctness panel (Kieran +
48
+ // architecture-strategist + spec-flow) are treated as orthogonal axes.
49
+ // ---------------------------------------------------------------------------
50
+ const REVIEWERS = {
51
+ 'dhh-rails': {
52
+ agentType: 'soleur:engineering:review:dhh-rails-reviewer',
53
+ panel: 'simplification',
54
+ lens: 'Rails philosophy — JS-framework contamination, unnecessary abstraction, overengineering in the plan',
55
+ },
56
+ 'kieran-rails': {
57
+ agentType: 'soleur:engineering:review:kieran-rails-reviewer',
58
+ panel: 'correctness',
59
+ lens: 'strict Rails conventions and convention drift — naming, controller complexity, Turbo patterns',
60
+ },
61
+ 'code-simplicity': {
62
+ agentType: 'soleur:engineering:review:code-simplicity-reviewer',
63
+ panel: 'simplification',
64
+ lens: 'code-simplicity — per mechanism: which user ask does it satisfy (check the plan\'s ## Scope Check Ask Mapping / Plan-Item Provenance)? Flag scope that should be cut rather than built — an inferred item or a mechanism serving no ask is a named finding',
65
+ },
66
+ // --- threshold-gated additions (single-user-incident brand-survival) ---
67
+ architecture: {
68
+ agentType: 'soleur:engineering:review:architecture-strategist',
69
+ panel: 'correctness',
70
+ lens: 'blast radius and system-design fit — how a single-user incident propagates across the architecture',
71
+ },
72
+ 'spec-flow': {
73
+ agentType: 'soleur:product:spec-flow-analyzer',
74
+ panel: 'correctness',
75
+ lens: 'spec/flow gaps — FRs added without implementation, missing states, broken user flows',
76
+ },
77
+ // --- named CEO/design/devex panel (relevance-gated; ADR-084 / #5985) ---
78
+ // These reviewers critique the FINISHED plan through business/design/devex
79
+ // lenses. Their findings are frequently TASTE, so consolidation routes them
80
+ // through decisionClass and never auto-applies. They are C-suite /
81
+ // never-downgrade (ADR-053 tier 3) → no model pin; they stay `inherit`.
82
+ cpo: {
83
+ agentType: 'soleur:product:cpo',
84
+ panel: 'named',
85
+ lens: 'product strategy, positioning, scope-vs-roadmap fit — is this the right thing to build for the operator and the roadmap?',
86
+ },
87
+ cmo: {
88
+ agentType: 'soleur:marketing:cmo',
89
+ panel: 'named',
90
+ lens: 'market/GTM implications, brand-voice, messaging risk in any user-facing copy the plan introduces',
91
+ },
92
+ 'ux-design-lead': {
93
+ agentType: 'soleur:product:design:ux-design-lead',
94
+ panel: 'named',
95
+ lens: 'user-flow completeness, UX decay, design-taste risk in user-facing surfaces',
96
+ },
97
+ // cto's DEVEX lens is deliberately DISTINCT from architecture-strategist's
98
+ // structural/blast-radius lens so the two do not produce duplicate findings.
99
+ cto: {
100
+ agentType: 'soleur:engineering:cto',
101
+ panel: 'named',
102
+ lens: 'developer/operator experience, maintenance/DX cost, build-vs-buy, ongoing engineering strategy — NOT blast-radius/structural (that is architecture-strategist)',
103
+ },
104
+ }
105
+
106
+ // FIXED eng panels. The SCRIPT (not a model) owns who reviews: the 3-agent
107
+ // baseline catches overengineering and convention drift; the 5-agent panel
108
+ // adds blast-radius (architecture-strategist) and flow gaps (spec-flow-analyzer)
109
+ // when the single-user-incident threshold fires.
110
+ const BASELINE_PANEL = ['dhh-rails', 'kieran-rails', 'code-simplicity']
111
+ const THRESHOLD_PANEL = ['architecture', 'spec-flow']
112
+
113
+ // ---------------------------------------------------------------------------
114
+ // Named-panel composition (ADR-084 / #5985). DUPLICATE of
115
+ // `../lib/named-panel.mjs` — the Workflow runtime has no import/filesystem
116
+ // access, so the pure decision function is inlined here (self-contained
117
+ // convention, like safeTitle/safeId). Keep this copy LOGIC-IDENTICAL to the lib
118
+ // module: the drift guard in test/plan-review-named-panel.test.ts normalizes
119
+ // away comments/export/whitespace and asserts the two function bodies match, so
120
+ // a logic edit to either copy fails CI. CPO Condition 1: activation is driven by
121
+ // an INDEPENDENT content scan (the detect step's signals), never by trusting the
122
+ // plan's own `## Domain Review` verdict.
123
+ // ---------------------------------------------------------------------------
124
+ const NAMED_LENSES = ['cpo', 'cmo', 'cto', 'ux-design-lead']
125
+ function computeNamedPanel(signals) {
126
+ const s = signals || {}
127
+ const active = new Set()
128
+ // Step 1 — mechanical UI-surface scan (independent): a UI-surface hit forces
129
+ // ux-design-lead + cpo regardless of the Domain Review verdict.
130
+ if (s.uiSurfaceHit) {
131
+ active.add('ux-design-lead')
132
+ active.add('cpo')
133
+ }
134
+ // Step 2 — fresh independent relevance read (NOT the verdict line). Step 3
135
+ // (threshold bias) is applied UPSTREAM at the detect prompt — it nudges the
136
+ // fuzzy signals toward true when the threshold is declared, keeping this
137
+ // function a pure, deterministic mapping of signals→lenses (AC11/AC12).
138
+ if (s.productSignal) active.add('cpo')
139
+ if (s.marketingSignal) active.add('cmo')
140
+ if (s.uxSignal) active.add('ux-design-lead')
141
+ if (s.devexSignal) active.add('cto')
142
+ // Step 4 — if none activate, the named panel is empty (eng panel still runs).
143
+ return NAMED_LENSES.filter((k) => active.has(k))
144
+ }
145
+
146
+ // ---------------------------------------------------------------------------
147
+ // Schemas — validated at the tool-call layer, so agents retry on mismatch.
148
+ // ---------------------------------------------------------------------------
149
+ const REVIEW_SCHEMA = {
150
+ type: 'object',
151
+ required: ['findings', 'verdict'],
152
+ additionalProperties: false,
153
+ properties: {
154
+ verdict: { type: 'string', enum: ['approve', 'approve-with-changes', 'request-changes'], description: "this reviewer's overall stance on the plan" },
155
+ findings: {
156
+ type: 'array',
157
+ items: {
158
+ type: 'object',
159
+ required: ['id', 'title', 'severity', 'scope', 'kind', 'description'],
160
+ additionalProperties: false,
161
+ properties: {
162
+ id: { type: 'string', description: 'short stable slug, unique within this reviewer' },
163
+ title: { type: 'string' },
164
+ severity: { type: 'string', enum: ['P0', 'P1', 'P2', 'P3'] },
165
+ scope: { type: 'string', description: 'the plan section / feature / capability the finding targets (used to detect cross-panel co-fire)' },
166
+ kind: { type: 'string', enum: ['simplify-cut', 'correctness-bug', 'convention-drift', 'flow-gap', 'blast-radius', 'product-strategy', 'market-gtm', 'ux-design', 'devex', 'other'], description: 'classifies the finding so the consolidator can apply delete-over-fix (eng) and decisionClass (named)' },
167
+ description: { type: 'string' },
168
+ suggestedChange: { type: 'string' },
169
+ decisionClass: { type: 'string', enum: ['mechanical', 'taste', 'user-challenge'], description: 'this reviewer\'s suggested class per decision-principles.md (the consolidator adjudicates the final class). Named-panel findings touching user-visible/money/scope default to taste; a finding arguing the operator\'s stated scope should change is user-challenge.' },
170
+ },
171
+ },
172
+ },
173
+ },
174
+ }
175
+
176
+ const CONSOLIDATION_SCHEMA = {
177
+ type: 'object',
178
+ required: ['decisions', 'summary'],
179
+ additionalProperties: false,
180
+ properties: {
181
+ summary: { type: 'string', description: 'overall recommendation for the plan author' },
182
+ deleteOverFixApplied: { type: 'boolean', description: 'true if any co-fired scope was resolved by cutting it rather than fixing each finding' },
183
+ decisions: {
184
+ type: 'array',
185
+ items: {
186
+ type: 'object',
187
+ required: ['scope', 'resolution', 'rationale', 'sourceFindingIds', 'decisionClass'],
188
+ additionalProperties: false,
189
+ properties: {
190
+ scope: { type: 'string' },
191
+ resolution: { type: 'string', enum: ['delete', 'fix', 'keep'], description: "delete = cut the scope (dissolves its findings); fix = address findings inline; keep = no change" },
192
+ rationale: { type: 'string' },
193
+ sourceFindingIds: { type: 'array', items: { type: 'string' }, description: 'ids of the reviewer findings this decision consolidates' },
194
+ coFired: { type: 'boolean', description: 'true when BOTH the simplification and correctness panels fired on this scope' },
195
+ decisionClass: { type: 'string', enum: ['mechanical', 'taste', 'user-challenge'], description: 'per decision-principles.md (ADR-084): mechanical = one right answer, auto-appliable by the consumer; taste = user-visible/money/scope call, surfaced never auto-applied; user-challenge = argues the operator\'s stated direction should change, never auto-decided. Named-panel findings default to taste; on ambiguity bias to the more-surfaced class (unsure taste-vs-user-challenge → user-challenge).' },
196
+ },
197
+ },
198
+ },
199
+ },
200
+ }
201
+
202
+ // ---------------------------------------------------------------------------
203
+ // Prompt builders.
204
+ // ---------------------------------------------------------------------------
205
+ function reviewPrompt(key) {
206
+ const r = REVIEWERS[key]
207
+ const isNamed = r.panel === 'named'
208
+ const namedGuidance = isNamed
209
+ ? `
210
+
211
+ You are a NAMED CEO/design/devex reviewer. TWO hard rules:
212
+ 1. **Structured advisory only — do NOT use AskUserQuestion.** Return your findings as structured output; never ask the operator a question. (This runs in a headless Task subagent that cannot answer — an AskUserQuestion would hang the pipeline.)
213
+ 2. **Set "decisionClass" on each finding.** Your findings touch user-visible / money / scope, so they DEFAULT to "taste" (surfaced to the operator, never silently auto-applied). Use "user-challenge" for any finding arguing the operator's STATED scope/direction should change (drop/merge/split/add). Reserve "mechanical" only for a clearly factual/typo/broken-link fix. On ambiguity, bias to the more-surfaced class.`
214
+ : `
215
+
216
+ Structured advisory only — do NOT use AskUserQuestion (this runs in a headless Task subagent that cannot answer). Set "decisionClass": eng correctness/simplification findings are "mechanical" (auto-appliable) — EXCEPT a simplify-cut of operator-requested scope, which is "user-challenge".`
217
+ return `You are reviewing an IMPLEMENTATION PLAN (not code) through ONE lens: ${r.lens}.
218
+
219
+ Read the plan at \`${safePlan}\` in full (use your Read tool). Review the PLAN's design, scope, and approach — there is no diff and no code to run.
220
+
221
+ Report ONLY findings within your lens. For each finding:
222
+ - Assign severity P0 (plan-blocking) / P1 (must address) / P2 (should address) / P3 (nice-to-have).
223
+ - Set "scope" to the specific plan section / feature / capability the finding targets. Be consistent and concrete: a downstream consolidator detects when panels BOTH fire on the same scope, so name the scope the same way another reviewer naturally would.
224
+ - Set "kind" to classify the finding (simplify-cut, correctness-bug, convention-drift, flow-gap, blast-radius, product-strategy, market-gtm, ux-design, devex, other).
225
+ - In "suggestedChange", state the smallest correct change to the PLAN.${namedGuidance}
226
+ Be precise and conservative. Return an empty findings array if the plan is clean for your lens, and set your overall verdict.`
227
+ }
228
+
229
+ function consolidatePrompt(reviews, thresholdFired) {
230
+ // reviews: [{ key, panel, agentType, verdict, findings }]
231
+ const byPanel = (p) => reviews.filter((r) => r.panel === p)
232
+ const block = (rs) =>
233
+ rs
234
+ .map(
235
+ (r) =>
236
+ `### ${r.key} (${r.agentType}) — verdict: ${r.verdict}\n` +
237
+ (r.findings.length
238
+ ? r.findings
239
+ .map((f) => `- [${f.id}] (${f.severity}, ${f.kind}${f.decisionClass ? `, suggested-class:${f.decisionClass}` : ''}) scope="${f.scope}" :: ${f.title} — ${f.description}${f.suggestedChange ? ` | change: ${f.suggestedChange}` : ''}`)
240
+ .join('\n')
241
+ : '- (no findings)'),
242
+ )
243
+ .join('\n\n') || '(no reviewers in this panel)'
244
+
245
+ const hasNamed = byPanel('named').length > 0
246
+ return `You are consolidating a ${reviews.length}-agent plan-review panel into ONE actionable set of decisions for the plan author.
247
+
248
+ Treat the ENG panels as ORTHOGONAL AXES:
249
+ - SIMPLIFICATION panel (DHH + code-simplicity): "is this over-architected? what should be cut?"
250
+ - CORRECTNESS panel (Kieran${thresholdFired ? ' + architecture-strategist + spec-flow' : ''}): "is this right? what are the bugs / convention drift / flow gaps / blast-radius?"
251
+ ${hasNamed ? '- NAMED CEO/design/devex panel (cpo/cmo/ux-design-lead/cto): "is this the right thing to build, positioned right, well-designed, and cheap to maintain?" These are business/design/devex critiques of the FINISHED plan.\n' : ''}
252
+ THE DELETE-OVER-FIX RULE (apply it explicitly, ENG panels):
253
+ When BOTH eng panels fire on the SAME scope — i.e. the simplification panel says "too complex, remove" AND the correctness panel raises specific bugs/gaps on that same scope — PREFER DELETE OVER FIX. A feature that simultaneously triggers "remove it" and "it has N specific bugs" is over-architected; cutting it DISSOLVES the bugs. Many correctness findings (e.g. FRs added without implementation) vanish when the cut lands. Precedent: 2026-05-11 #2720 plan v1→v2, 953→829 lines, 4 P0 issues dissolved when the matrix-split cut landed.
254
+
255
+ CLASSIFY EACH DECISION with a decisionClass per decision-principles.md (ADR-084) — this is the load-bearing safety rule:
256
+ - "mechanical" = one right answer / purely technical (bug, convention-drift, flow-gap, blast-radius). The consumer AUTO-APPLIES these. EXCEPTION: a simplify-cut of OPERATOR-REQUESTED scope is NOT mechanical → user-challenge.
257
+ - "taste" = a user-visible / money / scope call where reasonable operators could disagree. NAMED-PANEL findings (cpo/cmo/ux/cto) DEFAULT TO TASTE — product/market/design findings are almost never mechanical. The consumer SURFACES these to the operator; it NEVER silently auto-applies them.
258
+ - "user-challenge" = the finding argues the operator's STATED scope/direction should change (drop/merge/split/add). Never auto-decided.
259
+ - This is a SINGLE-SIGNAL classification (your judgment only) — plan-review is NOT one of ADR-084's two both-signals consult gates. On ambiguity, bias to the MORE-SURFACED class (unsure taste-vs-user-challenge → user-challenge). Do NOT invent a second consult.
260
+
261
+ For each distinct scope:
262
+ - Decide resolution = delete | fix | keep. Set coFired=true when both ENG panels fired on it; for a co-fired scope, default to "delete" and only choose "fix" if cutting the scope is clearly infeasible (state why in rationale).
263
+ - Set decisionClass (mechanical | taste | user-challenge) per the rules above. Never tag a named-panel product/market/design/scope finding "mechanical" on ambiguity.
264
+ - List the sourceFindingIds you are consolidating so dissolved findings are traceable.
265
+ Set deleteOverFixApplied=true if you cut at least one co-fired scope, and write a short author-facing summary.
266
+
267
+ === SIMPLIFICATION PANEL ===
268
+ ${block(byPanel('simplification'))}
269
+
270
+ === CORRECTNESS PANEL ===
271
+ ${block(byPanel('correctness'))}
272
+ ${hasNamed ? `\n=== NAMED CEO/design/devex PANEL (findings default to taste — surface, do not auto-apply) ===\n${block(byPanel('named'))}` : ''}`
273
+ }
274
+
275
+ // ---------------------------------------------------------------------------
276
+ // Harden the plan path before it reaches a shell argv. The path arrives from
277
+ // args (operator/caller-supplied) and is interpolated into prompts that
278
+ // instruct agents to read it; agents that drop to a shell must not be able to
279
+ // smuggle metacharacters. Strip control chars + shell metacharacters, collapse
280
+ // whitespace, cap length. (Used for the logged/displayed form; agents read the
281
+ // file with their Read tool, not a raw shell command.)
282
+ function safePath(raw) {
283
+ return String(raw)
284
+ .replace(/[\x00-\x1f\x7f]/g, ' ') // control chars incl. newlines
285
+ .replace(/[`$"'\\;|&<>(){}[\]!*?~#]/g, ' ') // shell metacharacters, backslash, brackets
286
+ .replace(/\s+/g, ' ')
287
+ .trim()
288
+ .slice(0, 240)
289
+ }
290
+ const safePlan = safePath(planPath)
291
+
292
+ // ---------------------------------------------------------------------------
293
+ // Budget floor. The consolidation agent is the load-bearing final step; reserve
294
+ // headroom so a long review fan-out never starves it. NEVER silently skip —
295
+ // log if the floor is hit. The panel is small and bounded, so this is a guard
296
+ // rather than a throttle.
297
+ // ---------------------------------------------------------------------------
298
+ const CONSOLIDATE_FLOOR = 40_000 // output tokens to reserve for consolidation
299
+ function budgetOk() {
300
+ return !budget.total || budget.remaining() > CONSOLIDATE_FLOOR
301
+ }
302
+
303
+ // ---------------------------------------------------------------------------
304
+ // Run.
305
+ // ---------------------------------------------------------------------------
306
+ // ---------------------------------------------------------------------------
307
+ // ADR-110: semantic tier → harness spawn value. Workflow runtime has no import
308
+ // (same constraint as plan-review named-panel inlining). Source of truth:
309
+ // plugins/soleur/lib/harness-model-map.ts — keep this copy byte-identical.
310
+ // <!-- harness-model-map:start -->
311
+ function resolveWorkflowModel(tier) {
312
+ var env = (typeof process !== 'undefined' && process.env) ? process.env : {}
313
+ var claude = !!env.CLAUDECODE
314
+ var opencode = !claude && !!env.OPENCODE
315
+ var grok = !claude && !opencode && (env.GROK_HOME || env.GROK_AGENT || env.GROK_DEFAULT_MODEL || env.GROK_SUBAGENTS)
316
+ var map = grok
317
+ ? { cheap: 'grok-4.5', standard: 'grok-4.7', strong: 'grok-4.7', advisor: 'grok-4.7', inherit: 'inherit' }
318
+ : claude
319
+ ? { cheap: 'haiku', standard: 'sonnet', strong: 'opus', advisor: 'fable', inherit: 'inherit' }
320
+ : opencode
321
+ ? { cheap: 'opencode/glm-5.3-flash-free', standard: 'opencode/big-pickle', strong: 'opencode/big-pickle', advisor: 'opencode/big-pickle', inherit: 'inherit' }
322
+ : { cheap: 'inherit', standard: 'inherit', strong: 'inherit', advisor: 'inherit', inherit: 'inherit' }
323
+ var resolved = map[tier]
324
+ if (!resolved) throw new Error('unknown semantic tier: ' + String(tier))
325
+ return resolved
326
+ }
327
+ ;(function (hostAgent) {
328
+ agent = function agent(prompt, opts) {
329
+ if (opts && typeof opts.model === 'string') {
330
+ opts.model = resolveWorkflowModel(opts.model)
331
+ }
332
+ return hostAgent(prompt, opts)
333
+ }
334
+ })(agent)
335
+ // <!-- harness-model-map:end -->
336
+ // ---------------------------------------------------------------------------
337
+
338
+ phase('Load')
339
+ // Read the plan ONCE via a lightweight agent so the threshold detection is a
340
+ // real read of the file's `## User-Brand Impact` section, not a guess. The
341
+ // agent returns only whether the literal sentinel is present.
342
+ const DETECT_SCHEMA = {
343
+ type: 'object',
344
+ required: ['thresholdDeclared', 'uiSurfaceHit', 'productSignal', 'marketingSignal', 'uxSignal', 'devexSignal'],
345
+ additionalProperties: false,
346
+ properties: {
347
+ thresholdDeclared: { type: 'boolean', description: `true iff the plan literally declares "${THRESHOLD_SENTINEL}" (in its ## User-Brand Impact section)` },
348
+ evidence: { type: 'string', description: 'the matching threshold line, or empty if absent' },
349
+ // INDEPENDENT relevance signals for the named panel (CPO Condition 1 — do
350
+ // NOT read the plan's `## Domain Review` verdict line; judge from the actual
351
+ // content of the Files sections + the plan body).
352
+ uiSurfaceHit: { type: 'boolean', description: 'true iff `## Files to Create` or `## Files to Edit` contains a UI-surface path (components/**/*.tsx, app/**/page.tsx, app/**/layout.tsx, or an .njk/.html/.vue/.svelte/.astro/email-template path). Judge from the FILE PATHS, not from any "Domains relevant" verdict line.' },
353
+ productSignal: { type: 'boolean', description: 'true iff the plan BODY (Overview, Files, User-Brand Impact) shows product/scope/roadmap-fit language — a product-strategy call is at stake.' },
354
+ marketingSignal: { type: 'boolean', description: 'true iff the plan introduces user-facing copy or has market/GTM/brand/messaging implications.' },
355
+ uxSignal: { type: 'boolean', description: 'true iff the plan touches user-facing flows / visual surfaces / UX.' },
356
+ devexSignal: { type: 'boolean', description: 'true iff the plan edits code/infra/tooling/build (developer or operator experience is affected).' },
357
+ },
358
+ }
359
+ log('tier pins: detect-threshold→standard (mechanical step per ADR-053; reviewers + consolidate inherit the session model)')
360
+ const detect = await agent(
361
+ `Read the implementation plan at \`${safePlan}\` (use your Read tool), then return TWO independent judgments. Do NOT review the plan.
362
+
363
+ 1. thresholdDeclared: true ONLY on a LITERAL match of the sentinel
364
+ "${THRESHOLD_SENTINEL}"
365
+ (it would appear in a "## User-Brand Impact" section). Do not infer from tone.
366
+
367
+ 2. Relevance signals for a named CEO/design/devex review panel. Judge each INDEPENDENTLY from the plan's actual content — DO NOT read or trust any "Domains relevant: ..." verdict line (that line is the very authoring step this panel exists to double-check):
368
+ - uiSurfaceHit: does \`## Files to Create\`/\`## Files to Edit\` list a UI-surface path (components/**/*.tsx, app/**/page.tsx, app/**/layout.tsx, .njk/.html/.vue/.svelte/.astro/email template)? Judge from the file paths.
369
+ - productSignal: product/scope/roadmap-fit call at stake?
370
+ - marketingSignal: user-facing copy, or market/GTM/brand/messaging implications?
371
+ - uxSignal: user-facing flows / visual surfaces / UX touched?
372
+ - devexSignal: code/infra/tooling/build edited (developer/operator experience affected)?
373
+
374
+ Threshold bias: if you set thresholdDeclared=true, resolve any BORDERLINE relevance signal toward true (stakes are high — bias to surfacing a named lens rather than skipping it). Do NOT fabricate a signal with no basis in the plan — a pure-infra plan still activates only devex even at the threshold.`,
375
+ // Pinned 'standard': schema-constrained detection/scan is mechanical (ADR-053).
376
+ { label: 'detect-threshold', phase: 'Load', schema: DETECT_SCHEMA, model: 'standard' },
377
+ )
378
+
379
+ const thresholdFired = !!detect?.thresholdDeclared
380
+ const engPanel = thresholdFired ? [...BASELINE_PANEL, ...THRESHOLD_PANEL] : [...BASELINE_PANEL]
381
+ // Named panel from the INDEPENDENT relevance signals (never the verdict line).
382
+ const namedPanel = computeNamedPanel(detect || {})
383
+ const panel = [...engPanel, ...namedPanel]
384
+ log(
385
+ `Plan: ${safePlan}. Brand-survival threshold ${thresholdFired ? 'DECLARED' : 'absent'} → ` +
386
+ `eng panel ${engPanel.length} (${engPanel.join(', ')}); named panel ${namedPanel.length}` +
387
+ `${namedPanel.length ? ` (${namedPanel.join(', ')})` : ' (none — not relevant)'}` +
388
+ ` + 1 consolidator = ${panel.length + 1} agents.`,
389
+ )
390
+
391
+ phase('Review')
392
+ // BARRIER: every reviewer reads the same plan independently; consolidation
393
+ // needs all of them. A dead reviewer becomes null → filter(Boolean).
394
+ const reviewResults = (
395
+ await parallel(
396
+ panel.map((key) => () =>
397
+ agent(reviewPrompt(key), {
398
+ label: `review:${key}`,
399
+ phase: 'Review',
400
+ schema: REVIEW_SCHEMA,
401
+ agentType: REVIEWERS[key].agentType,
402
+ }).then((res) => (res ? { key, panel: REVIEWERS[key].panel, agentType: REVIEWERS[key].agentType, verdict: res.verdict, findings: res.findings || [] } : null)),
403
+ ),
404
+ )
405
+ ).filter(Boolean)
406
+
407
+ const totalFindings = reviewResults.reduce((n, r) => n + r.findings.length, 0)
408
+ log(`Reviews in: ${reviewResults.length}/${panel.length} reviewers, ${totalFindings} findings total.`)
409
+
410
+ phase('Consolidate')
411
+ let consolidation = null
412
+ if (!reviewResults.length) {
413
+ log('No reviewer returned — nothing to consolidate.')
414
+ } else if (!budgetOk()) {
415
+ // Conservative: surface the raw panel rather than spend below the floor.
416
+ log(`⚠ budget floor (${CONSOLIDATE_FLOOR}) reached — skipping consolidation agent; returning raw panel findings.`)
417
+ } else {
418
+ consolidation = await agent(consolidatePrompt(reviewResults, thresholdFired), {
419
+ label: 'consolidate',
420
+ phase: 'Consolidate',
421
+ schema: CONSOLIDATION_SCHEMA,
422
+ })
423
+ }
424
+
425
+ // ---------------------------------------------------------------------------
426
+ // Structured summary.
427
+ // ---------------------------------------------------------------------------
428
+ const decisions = consolidation?.decisions || []
429
+ const classCount = (c) => decisions.filter((d) => d.decisionClass === c).length
430
+ const report = {
431
+ plan: safePlan,
432
+ thresholdDeclared: thresholdFired,
433
+ panel: {
434
+ size: panel.length,
435
+ reviewers: panel.map((k) => ({ key: k, agentType: REVIEWERS[k].agentType, panel: REVIEWERS[k].panel })),
436
+ simplification: panel.filter((k) => REVIEWERS[k].panel === 'simplification'),
437
+ correctness: panel.filter((k) => REVIEWERS[k].panel === 'correctness'),
438
+ named: namedPanel,
439
+ },
440
+ relevanceSignals: {
441
+ uiSurfaceHit: !!detect?.uiSurfaceHit,
442
+ productSignal: !!detect?.productSignal,
443
+ marketingSignal: !!detect?.marketingSignal,
444
+ uxSignal: !!detect?.uxSignal,
445
+ devexSignal: !!detect?.devexSignal,
446
+ },
447
+ budget: { total: budget.total, spent: budget.spent() },
448
+ totals: {
449
+ reviewersReturned: reviewResults.length,
450
+ reviewersExpected: panel.length,
451
+ findings: totalFindings,
452
+ decisions: decisions.length,
453
+ coFiredScopes: decisions.filter((d) => d.coFired).length,
454
+ deleted: decisions.filter((d) => d.resolution === 'delete').length,
455
+ fixed: decisions.filter((d) => d.resolution === 'fix').length,
456
+ kept: decisions.filter((d) => d.resolution === 'keep').length,
457
+ // Per-decisionClass counts — the surface the consumer routes on
458
+ // (mechanical → auto-apply; taste/user-challenge → surface, never auto-apply).
459
+ mechanical: classCount('mechanical'),
460
+ taste: classCount('taste'),
461
+ userChallenge: classCount('user-challenge'),
462
+ },
463
+ deleteOverFixApplied: !!consolidation?.deleteOverFixApplied,
464
+ summary: consolidation?.summary || '(consolidation not run)',
465
+ reviews: reviewResults.map((r) => ({ reviewer: r.key, panel: r.panel, verdict: r.verdict, findingCount: r.findings.length, findings: r.findings })),
466
+ decisions,
467
+ }
468
+
469
+ log(
470
+ `Done: ${reviewResults.length}/${panel.length} reviewers (eng ${engPanel.length}, named ${namedPanel.length}), ${totalFindings} findings → ` +
471
+ `${decisions.length} decisions (${report.totals.deleted} delete, ${report.totals.fixed} fix, ${report.totals.kept} keep; ` +
472
+ `${report.totals.coFiredScopes} co-fired). class: ${report.totals.mechanical} mechanical (auto-apply), ` +
473
+ `${report.totals.taste} taste + ${report.totals.userChallenge} user-challenge (surface, never auto-apply). ` +
474
+ `delete-over-fix ${report.deleteOverFixApplied ? 'applied' : 'not triggered'}.`,
475
+ )
476
+
477
+ return report