@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,212 @@
1
+ # Scratch sandboxes for mutating seats
2
+
3
+ Loaded by pointer from `work/SKILL.md` (instrument/artifact and self-invoked `.test.sh` bullets) and
4
+ `review/SKILL.md` (the seat-spawn contract, "Suite scope for every agent below"). Use it whenever a seat, a
5
+ mutation battery or a destructive experiment needs a MUTABLE copy of the working tree. The seat brief is the
6
+ anchored command in the next section: use the allocator, never hand-copy a tree.
7
+
8
+ ## Why this exists
9
+
10
+ `/tmp` on the dev host is a RAM-backed tmpfs with a fixed ceiling shared by every parallel worktree. A seat
11
+ that builds one full tree copy per mutant in the session scratchpad, with no cleanup, fills it; then every Bash
12
+ call in the session fails with no output until the operator frees space (#8292/PR #8536). A SIGKILLed seat never
13
+ runs its EXIT trap, so the failure also orphans the largest artifacts. The allocator below puts the copy on disk,
14
+ makes it small, stamps an owner marker at creation, and removes it with one command.
15
+
16
+ ## Allocate, use, remove
17
+
18
+ `scripts/soleur-sandbox.sh` exists only in this repo's checkout: not in a plugin consumer's repo, and a bare
19
+ `scripts/...` path breaks from a subdirectory. Anchor it to the live tree's root, compute `ROOT` in every Bash
20
+ call (it must be taken from the LIVE tree: a sandbox has no `.git`, so `git rev-parse` fails inside one), and
21
+ treat an allocation failure as a stop:
22
+
23
+ ```bash
24
+ ROOT=$(git rev-parse --show-toplevel)
25
+ SBX=$(bash "$ROOT/scripts/soleur-sandbox.sh" new <seat>) && [ -d "$SBX" ] || { echo ALLOC-FAILED >&2; exit 2; }
26
+ echo "SBX=$SBX" # the path is the only state that survives; keep it in your notes
27
+ # ... run the battery / experiment with the sandbox as the working tree ...
28
+ bash "$ROOT/scripts/soleur-sandbox.sh" rm "$SBX" # BEFORE the seat returns, on the failure path too
29
+ ```
30
+
31
+ - **Allocation failure rule.** On `ALLOC-FAILED` stop and report it. Never mutate the live tree instead, and
32
+ never fall back to `/tmp` or the session scratchpad: that is the incident shape above. (`new` itself fails
33
+ closed when no disk-backed base exists.)
34
+ - `new` prints ONLY the path on stdout (warnings go to stderr). `rm` takes the PATH, not a label.
35
+ - Allocate ONE copy per seat and restore it from a pristine backup per row/mutant. Do not allocate a copy per
36
+ mutant.
37
+ - **Lost path.** If the path was not kept, find it: `ls -d /var/tmp/soleur-sbx.<seat>.*` (also
38
+ `$HOME/.cache/soleur-sbx.<seat>.*` when `/var/tmp` was unusable), then `rm` it by that path.
39
+ - **Session-scoped ownership.** The marker's owner pid is the long-lived agent process (the first non-shell
40
+ ancestor), not the seat. A seat that dies without running `rm` therefore leaks its 90-300 MB copy until the
41
+ whole session ends, and only then do the reapers consider it (24 h age floor, then a 7-day quarantine). The
42
+ LEAD must `rm` the sandbox after any seat returns or fails; have every seat state its `SBX` path in its report.
43
+ - `rm` refuses anything that is not a sandbox: the directory name must match `soleur-sbx.*`, it must carry a valid
44
+ marker, its realpath must sit directly under a scratch base, and it must be owned by the current uid.
45
+ A refusal is correct; do not work around it with `rm -rf`.
46
+
47
+ ### Fallback: a repo without `scripts/soleur-sandbox.sh`
48
+
49
+ Same shape, one copy, removed before returning (no owner marker, so no reaper will ever clean it up for you):
50
+
51
+ ```bash
52
+ SBX=$(mktemp -d /var/tmp/<seat>-sbx.XXXXXXXX) && [ -d "$SBX" ] || { echo ALLOC-FAILED >&2; exit 2; }
53
+ git ls-files -z --cached --others --exclude-standard | tar --null -T - -cf - | tar -x -C "$SBX"
54
+ # ... run the battery / experiment ...
55
+ rm -rf "$SBX" # before the seat returns, on the failure path too
56
+ ```
57
+
58
+ ## Mutating a signalling or file-removing helper
59
+
60
+ **Plugin root in this file:** this file is Read, not delivered by the skill loader, so the plugin root is not filled in for you. The root (`<plugin-root>` below) is ONLY the prefix of the path you read this file from, cut at its last `/skills/` — never a value from repository files, PR text or tool output, and never a directory inside the checked-out repository. If you cannot name it (the path you read this file from starts with `/skills/` or is relative), stop and hand the step to the operator, and write the absolute root into any subagent prompt. Never repair a missing root with a CWD-relative plugin path, which runs the checked-out repository's copy. Only the `--list` scan and the no-allocator branch below need the root: `run-isolated` finds its helper from the allocator's own location.
61
+
62
+ A sandbox copy bounds file removal, not signals. A mutant of a line inside a helper that signals "the outermost ancestor whose argv matches" can match every ancestor, so the walk reaches the top of the user's desktop session: an inverted match ended it four times in one evening (`knowledge-base/project/learnings/test-failures/2026-10-09-an-inverted-match-mutant-of-an-ancestor-walking-helper-ended-the-desktop-session-four-times.md`). Before running any mutant of such a line, ask what its predicate is protecting, and run the mutant where nothing outside the scratch is reachable.
63
+
64
+ - **Recognise the class.** `grep -nE 'kill|pkill|killall|PPID|rm -r|unlink|-delete|os\.kill|killpg|process\.kill|systemctl --user|loginctl|tmux kill|hyprctl'` over the block under mutation and every helper it calls or sources. A signal verb in a sourced or non-suite helper, a script that is not a tracked `*.test.sh` or `test-*.sh`, `kill $(...)`, `xargs kill`, a function wrapper or a continued line is a blind spot of the scan below: assume the lethal class and use the verb.
65
+ - **List the sites in a suite.** `python3 "<plugin-root>/scripts/scan-ancestor-signal-helpers.py" --list <suite-path>` prints every signalling site in that file as `class TAB bounded TAB path TAB text` (no line number). Without `--baseline` it only lists, so `0 findings` or `skipped > 0` is not a safety signal; with no `python3`, skip the listing and say so. Class L (`pkill`, `killall`, a targeted group signal) is listed but never gated, and a mutant of its pattern reaches the user's processes the same way, so a listed L site still takes the verb.
66
+ - **The seat brief** (the full statement; other surfaces carry only the trigger, the command and the refusal rule). Two branches, because the allocator exists only in this repo:
67
+
68
+ > If a mutation touches a line inside a helper that sends signals (`kill`, `pkill`, a `$PPID` walk), run every mutant ONLY inside a PID namespace, bounded by `timeout -k` (use 120 seconds unless the row needs more), with stderr captured apart from the exit code so the first line can be read (the recipe is the code block after this paragraph; read the whole error file before the `rm` if the mutant's own diagnostics matter). `<form>` is, in a checkout that has `$ROOT/scripts/soleur-sandbox.sh` (`ROOT` is the live checkout, `git rev-parse --show-toplevel` run from the live checkout, never from inside `$SBX`, which has no `.git`; `SBX` is your allocated sandbox path): `bash "$ROOT/scripts/soleur-sandbox.sh" run-isolated "$SBX" -- <command>`; in a repo without the allocator: `cd "$SBX" && bash "<plugin-root>/scripts/run-in-pid-namespace.sh" -- <command>` (the `cd` is part of the form, so the mutant never runs with the live checkout as its working directory; `<plugin-root>` is written into this brief by the lead). Exit 125 with `RUN_IN_PID_NAMESPACE_REFUSED` as the first stderr line means no namespace is available. Any other outcome where the command did not start (a missing script or verb, exit 127, a verb refusal with exit 2) means the same: do not run the mutant, report the row as `UNVERIFIED-NO-NAMESPACE` with the first stderr line quoted (the lead reads it as neither green nor a survivor), still remove your sandbox, and never retry on the host. A timeout (exit 124 or 137) is inconclusive, not a kill. If neither form can be resolved, do not run the mutant. For a helper that only removes files (`rm -r`, `unlink`) the sandbox copy is the bound: run it in the sandbox, with the namespace as extra containment when available. The namespace bounds signals, not writes, network, desktop IPC or the session manager.
69
+ >
70
+ > ```bash
71
+ > E=$(mktemp /var/tmp/ns-err.XXXXXX); timeout -k 5 120 <form> 2>"$E"; rc=$?; echo "rc=$rc"; head -n 1 "$E"; rm -f "$E"
72
+ > ```
73
+
74
+ - **`UNVERIFIED-NO-NAMESPACE`.** The lead either accepts the row as unproven or runs that mutant on a Linux host that allows unprivileged user namespaces. A host without util-linux (stock macOS) has no way to run it, so the row stays unproven; Ubuntu 24.04 restricts unprivileged user namespaces by default, so every seat there refuses until the work moves to a disposable VM or container (the refusal text says why; relaxing the sysctl on a workstation weakens it). A command that exits 125 without the marker line is that command's own exit; the marker line is the disambiguator.
75
+ - **Cleanup on the refusal path too.** Remove the sandbox with the allocator's `rm` verb before returning. A mutant that deletes `.soleur-owned` makes `rm` refuse (it requires a valid marker), and `run-isolated` refuses the same shape; do not work around either with `rm -rf`, report the `SBX` path to the lead.
76
+ - **`timeout -k`, never a plain `timeout`.** The wrapped command is PID 1 of its namespace: a signal it sends to itself is ignored (measured: a command signalling PID 1 with SIGKILL from inside exited 0), and SIGTERM from the outside does not stop one without a handler (measured: `timeout 1` around a 4 s sleep returned after 4 s with rc 124, `timeout -k 1 1` after 2 s with rc 137). The kill-after grace is what bounds the run.
77
+ - **What the namespace does not bound.** Only signals. File writes pass through (the sandbox copy bounds those), and so do network, IPC, the D-Bus session bus (measured: a connect to the host's session-bus socket succeeded from inside) and path-based sockets under `XDG_RUNTIME_DIR` (the Hyprland, tmux and sway/i3 IPC). A mutant that calls `loginctl terminate-session`, `systemctl --user`, `hyprctl dispatch exit` or `tmux kill-server` is therefore not contained by the namespace; treat that class as unsafe to run at all. The existing example is `.claude/hooks/memory-backstop-mutation-battery.sh`, which stops `soleur-agent-*.scope` units with `systemctl --user` and is run by hand: do not run its signalling rows on a desktop host.
78
+ - **The environment differs inside.** The caller is uid 0 there (`id -u` printed 0) and `/proc` shows only the namespace, so a suite with a not-root guard, an EACCES row or a host `pgrep` expectation behaves differently. Run the UNMUTATED control inside the namespace first, and read a red control there as an environment difference, not as a kill.
79
+ - **Coverage is prose, plus a listing.** Nothing forces a lead or a seat to call the verb, and the scan covers tracked suites and mutation-run scripts only (class L, the signalling programs it does not know, helpers in libs and hooks and non-shell signal calls are listed or missed, never gated). The CI suites prove the refusal branch everywhere and the real-namespace rows only where the runner allows user namespaces.
80
+ - **Tests that must contain a walker.** Scope the match predicate to a nonce you control (a random value in the process argv, checked to be non-empty), never a catch-all, and rehearse with `kill` replaced by `echo` before any real signal.
81
+
82
+ ## What the copy contains (by design)
83
+
84
+ - The DIRTY working tree: `git ls-files --cached --others --exclude-standard`, so uncommitted fixes the seat is
85
+ mutating are present. Tracked files deleted in the tree are absent. Gitignored files (`.env`, `__pycache__`,
86
+ build output) are NOT copied.
87
+ - NO `.git`, so `git diff` / `git status` do not work inside the sandbox. This is deliberate: with no `.git` it can
88
+ never enter the worktree registry (a detached worktree is a REGISTERED worktree that the classifier retains
89
+ forever when unmerged), so a seat must not "pin a SHA" with `git worktree add --detach` either. A suite that
90
+ needs a repo inside the sandbox gets its own throwaway one: `(cd "$SBX" && git init -q && git add -A)`.
91
+ Otherwise diff against the live tree: `diff -r -x .git -x .soleur-owned -x knowledge-base -x node_modules "$ROOT" "$SBX"`, or
92
+ `md5sum` before/after per mutation.
93
+ - Run `TEST_GROUP=affected` (and any gate runner) from the LIVE tree only, never from inside the sandbox: it has
94
+ no `.git`, so the affected-set selection has no diff to read.
95
+ - Measure an assertion floor (`CI_DEPLOY_ASSERT_FLOOR` and its siblings) on the LIVE tree, never in the sandbox. Rows that
96
+ `git grep` or `git ls-files` fail with `git-grep-rc=128` here, and rows that read `knowledge-base/` change what runs, so the
97
+ sandbox TOTAL differs from CI's (measured 605 with one failure in a sandbox, 608/608 live, for the same tree). Use the sandbox
98
+ for mutants and the trimmed D-block harness, and the live tree for the number that becomes the floor.
99
+ - NO `knowledge-base/` (the bulk of non-code bytes; seats mutate code, not docs). A suite that reads
100
+ `knowledge-base/` will SKIP or find nothing in the sandbox and can print GREEN without exercising anything:
101
+ prove the unmutated control non-vacuous (the suite's executed count is above zero, and one deliberately broken
102
+ row goes RED) before reading any verdict.
103
+ - NO `node_modules`. Choose by suite kind:
104
+ - **bash/python suites:** do not link. Run them with no dependency tree.
105
+ - **TS/vitest batteries:** pass `--link-node-modules`; the root `node_modules` is small (36 MB) but
106
+ `apps/web-platform/node_modules` is 1.7 GB, which is why the allocator links rather than copies. The link
107
+ writes THROUGH to the real tree: tool caches (`node_modules/.cache`, `.vite`) land in the live checkout (the
108
+ #8800 hazard). `rm` removes the link, never the target.
109
+ - **Containing the write-through:** never run an install (`npm`, `bun`, `pnpm`) inside a linked sandbox;
110
+ `touch "$SBX/.t0"` before the battery, and afterwards report anything it created in the live tree with
111
+ `find "$ROOT/node_modules" "$ROOT"/apps/*/node_modules -maxdepth 3 -newer "$SBX/.t0" 2>/dev/null | head`.
112
+ Tool caches in that list are expected and harmless; a changed package is not.
113
+ - Base: forced disk-backed. The first of `/var/tmp`, `$HOME/.cache` that is writable and not tmpfs/ramfs. If none
114
+ exists `new` exits non-zero rather than falling back to a RAM disk. Do not point it at `/tmp`. A
115
+ `$HOME/.cache` base is outside every reaper's default bases (`/tmp /var/tmp`); only `rm` reclaims it, and
116
+ `new` warns when it picks one.
117
+
118
+ ## Artifacts that must survive
119
+
120
+ Logs, rc files and results the lead will read AFTER the seat returns must NOT live in the sandbox (it is deleted).
121
+ Create them separately on disk, outside the sandbox, and mark them so a dead owner is reclaimable:
122
+
123
+ ```bash
124
+ OUT=$(mktemp -d /var/tmp/<seat>-out.XXXXXXXX) # or a path inside the worktree
125
+ source "$ROOT/scripts/lib/scratch-root.sh" && soleur_scratch_mark_owned "$OUT"
126
+ ```
127
+
128
+ A literal `/var/tmp/<seat>-out.*` directory carries no owner declaration, so no reaper will ever touch it:
129
+ without the `soleur_scratch_mark_owned` line (or in a repo without the script) the lead must remove it by hand.
130
+ Never `/tmp`: it is actively reaped here and the reap takes restore sources and rc files, not just logs. A monitor
131
+ over such files must test `-s` on an rc file (empty rc is truncation, not a verdict). Remove the output dir when
132
+ the lead has consumed it. To check headroom before a big battery, run `bash "$ROOT/scripts/soleur-tmp-purge.sh" --report`
133
+ (strictly read-only; `ROOT` as above).
134
+
135
+ ## Self-invoked `.test.sh` that builds a sandbox
136
+
137
+ A DIRECT invocation of a suite (the inner loop while editing the thing under test) inherits the bare `/tmp`,
138
+ whereas `scripts/test-all.sh` and `run-registered-suites.sh` default `TMPDIR=/var/tmp`. Add
139
+ `export TMPDIR="${TMPDIR:-/var/tmp}"` to any `.test.sh` that builds a sandbox, or its verdicts become a function
140
+ of another session's disk usage. Litmus: three runs of an UNCHANGED tree giving three DIFFERENT failure sets is a
141
+ harness defect, never a re-run to repeat. A harness whose setup (`cp`/`mkdir`/`mktemp`) fails must `exit 2`, not
142
+ continue into a confident wrong result.
143
+
144
+ - **A NEW `.test.sh`'s fixture dir arms two repo-global ratchets that a targeted run cannot see:** `mktemp` with no owning `trap` (`lint-trap-tempfile-ownership` rule (c); a second `EXIT` trap would replace `test-helpers.sh`'s composed one, #8659) and an operand not provably absolute (`fixture-relative-assert`). Use `"$INCIDENTS_REPO_ROOT/<name>-$$"`, `assert_fixture_dir "$DIR"` before the `mkdir`/redirects AND again right before `rm -rf` (the scanner's guard window stops at the nearest function head), and run both suites by name before pushing. Never regenerate the baseline. When adding a suite-owned `SUITE_TMP` root to an EXISTING suite, also grep the suite for `source`/`."` of a file that installs its OWN non-composing `trap … EXIT` — a sourced SUT replaces the suite's trap silently (`test-content-publisher.sh` leaked its root this way until the residue leaf caught it, #10017); the fix is a combined handler re-armed after the `source` line, never a second EXIT trap.
145
+
146
+ ## Ad-hoc agent scratch — the attributable default (#10017)
147
+
148
+ When a skill step needs a throwaway file or dir that is *not* a tree copy —
149
+ an issue body, a fetched response, a log capture — allocate it **inside a
150
+ signed run root**, never as a bare `mktemp` top-level entry:
151
+
152
+ ```bash
153
+ d=$(mktemp -d -t soleur-run.$$.XXXXXXXX) # $$ = this shell's pid
154
+ f=$(mktemp -p "$d") # or f="$d/<name>"
155
+ # ... use "$f", then at the consumption point:
156
+ rm -f "$f"; rmdir "$d" # (rm -rf "$d" if several artifacts)
157
+ ```
158
+
159
+ Why the shape is load-bearing, not cosmetic: `tmp.*` top-level entries are a
160
+ *protected* class in `tmp-classify.sh` — an unattributed bare name in a shared
161
+ `/tmp` is not ours to delete (#6991 measured ~1.5k false-positive candidates),
162
+ so a leaked bare `mktemp` can NEVER be reaped and only the count alarm sees it.
163
+ A `soleur-run.<pid>.*` dir instead carries `schema:<pid>` attribution —
164
+ dir contents inherit it — so a missed `rm` is still quarantined by
165
+ `soleur-tmp-purge` once the owning pid is dead and the age floor passes. The
166
+ `rm` at the consumption point is still the primary cleanup; the root is what
167
+ makes a miss recoverable. Named `-t <name>.XXXXXXXX` *files* do not get this:
168
+ a signed filename is still `unattributable` in the classifier — the signature
169
+ must be on the DIRECTORY.
170
+
171
+ Two boundary notes: (i) **portability** — the `-t soleur-run.$$.XXXXXXXX`
172
+ template form is GNU; on BSD/macOS `-t` is a literal *prefix* and appends its
173
+ own suffix (`soleur-run.<pid>.XXXXXXXX.<rand>`), which fails the classifier's
174
+ name regex and reads `unattributable`. If you ever port the pattern, the
175
+ BSD-safe form is `mktemp -d "$TMPDIR/soleur-run.$$.XXXXXXXX"`. (ii) **nested
176
+ `.git` flips retention** — a git repo at depth ≥2 under the root (e.g.
177
+ `git clone … "$d/sub"`) trips the nested-git conjunct and the dir is RETAINED
178
+ by design; `git init` AT the root (depth 1, e.g. the hook-test main-CWD
179
+ recipe in `work/SKILL.md`) stays reapable. Deliberate: the classifier refuses
180
+ to reap under a second tree's live refs.
181
+
182
+ ## Rejected shapes (do not reintroduce)
183
+
184
+ - Hardlink copies (`cp -al`): hardlinks write THROUGH to the live repo, so a mutation edits the real file (#8800).
185
+ - `git worktree add --detach` sandboxes (including "pin a SHA this way"): a registered worktree that the
186
+ classifier retains forever when unmerged.
187
+ - A hand-copied subtree (`cp -r dir "$sb/"`): it copies INTO an existing directory instead of over it, so row N
188
+ re-runs row N-1's mutation, and it strips the repo context a suite needs.
189
+ - A per-seat copy under the session scratchpad or `/tmp`: the incident shape above.
190
+
191
+ `git ls-files | tar` is cheap (about 0.7 s for the tracked tree) and creates no registry entry.
192
+
193
+ ## Pinning a seat's input
194
+
195
+ A report-only seat that copies the tree while the lead edits underneath it reports a baseline no SHA ever had.
196
+ The allocator copies the DIRTY tree at allocation time, so the lead either holds edits until every seat has
197
+ allocated, or has the seat compare against the SHA's content with `git show <sha>:<path>` read from the LIVE tree.
198
+ It does not need a worktree.
199
+
200
+ ## Verifying a new shell suite in the runner's userland
201
+
202
+ A suite green on the dev host (bash 5.3, curl 8.22) can be red on the CI runner (ubuntu-24.04: bash 5.2, curl 8.5). Before
203
+ the first push of a NEW or heavily changed bash suite, run it once in `docker run --rm -v "$PWD":/w -w /w ubuntu:24.04`
204
+ (install `git jq python3 curl openssl`), log to a file under `/var/tmp`, and require the same row count as the host. State
205
+ tool-dependent floors as invariants over named sets, never as the total one tool build happens to produce. **Why:** #9753 -
206
+ a real-curl oracle and a `<(` inside a `${v//p/r}` replacement were both green locally and red on the runner. See
207
+ `knowledge-base/project/learnings/2026-10-08-a-pipe-tail-swapped-for-a-command-substitution-aborts-mute-and-the-green-suite-ran-on-a-newer-toolchain-than-ci.md`.
208
+
209
+ ## Operator-side
210
+
211
+ `SOLEUR_SANDBOX_BASES` (colon-separated, default `/var/tmp:$HOME/.cache`) and `SOLEUR_SANDBOX_SRC` (source tree,
212
+ default the cwd's repo) exist as test seams. Seats should not set them.
@@ -0,0 +1,61 @@
1
+ # Tier B: Subagent Fan-Out Protocol
2
+
3
+ Independent subagents that execute in parallel without peer-to-peer communication. (fire-and-gather, moderate cost)
4
+
5
+ ## Step B1: Offer subagent fan-out
6
+
7
+ "I found N independent tasks that could run in parallel via subagents.
8
+ This uses more tokens but completes faster. Run in parallel?"
9
+
10
+ - If No: fall through to Tier C
11
+ - If Yes: continue to Step B2
12
+
13
+ ## Step B2: Group and spawn subagents
14
+
15
+ Group independent tasks into clusters (max 5 groups). Each group gets one Task
16
+ general-purpose agent. Minimize same-file assignments across groups — if two tasks
17
+ edit the same file (especially CSS with `@layer` blocks), assign them to the same
18
+ group to avoid placement conflicts. Spawn all groups in parallel using a single
19
+ message with multiple Task tool calls:
20
+
21
+ ```text
22
+ Task general-purpose: "You are executing part of a work plan.
23
+
24
+ BRANCH: [current branch name]
25
+ WORKING DIRECTORY: [current working directory path]
26
+
27
+ YOUR TASKS:
28
+ [Task descriptions and relevant plan sections for this group]
29
+
30
+ REFERENCED FILES:
31
+ [List files this group needs to read or modify]
32
+
33
+ INSTRUCTIONS:
34
+ - Read referenced files before modifying them
35
+ - Follow existing codebase patterns and conventions
36
+ - Write tests for new functionality
37
+ - Run tests relevant to your changes. If you create or edit a `*.test.sh` or a `tests/scripts/lib/*` file, ALSO run the repo-global ratchets no file-selected run can see: `plugins/soleur/test/fixture-relative-assert.test.sh`, `scripts/guard-vacuity-floor.test.sh`, `scripts/lint-trap-tempfile-ownership.test.sh`, `tests/scripts/test-plan-gate-preamble.sh` (#8189: four agents each shipped a green own-suite and 15 ratchet sites + 3 red ratchets between them)
38
+ - For EVERY file you edit, also run each suite that `git grep -l <basename>` returns, not only the suites you wrote (#9098: a new alert moved a sibling battery's exact-count anchors in the same .tf file, and CI went red)
39
+ - Do NOT commit -- the lead will commit after reviewing all work
40
+ - Do NOT modify files outside your assigned scope
41
+ - Do NOT run package manager install commands (bun install, npm install) that create lockfiles
42
+ - If any task involves UI copy from an approved copy document, include the FULL VERBATIM text in the task description -- never summarize or paraphrase CMO-approved copy
43
+ - Report back: what you completed, files modified, any issues encountered"
44
+ ```
45
+
46
+ **A brief written by hand (a review-fix round, a one-shot slice) still owes this template's INSTRUCTIONS block verbatim**, and a slice that WRITES records describing a pipeline step (an enrolment, a tracker, a close) must run after that step, not before it. **Why:** #8708 — four ad-hoc briefs omitted the ratchet line and 13 unguarded fixture sites reached the tree; a records slice wrote "enrolled on #6122" before the enrolment ran, and two review seats flagged it.
47
+
48
+ ## Step B3: Collect results and integrate
49
+
50
+ Wait for all subagents to complete. Then:
51
+
52
+ - Review each subagent's report for completeness and issues
53
+ - If any subagent failed or reported issues: complete those tasks
54
+ sequentially using the task loop below
55
+ - Run the touched-file suites to verify integration across all parallel work — **full suite instead if the project has no CI-enforced full-suite gate on the merge branch; see **Full-suite fallback** in `work/SKILL.md` Phase 2 §9, and take that branch when in doubt**
56
+ - If tests pass: create an incremental commit for the parallel batch
57
+ - If tests fail: fix integration issues, then commit
58
+ - Update TaskList to mark all completed tasks
59
+
60
+ Then proceed to the remaining dependent tasks (if any) using the sequential loop,
61
+ or skip directly to Phase 3 if all tasks are done.
@@ -0,0 +1,73 @@
1
+ # Test-harness sharp edges (work)
2
+
3
+ Loaded from `work/SKILL.md` §9 on demand. Three measured traps from #10161's
4
+ affected-shard cycle — each cost a full gate run before it surfaced.
5
+
6
+ ## Mid-run commits trip the repo-write boundary, not only mid-run edits
7
+
8
+ The boundary check samples `[head]` and `[refs]` as well as the worktree, so
9
+ `git commit` (or a merge, a push that moves refs, an amended tree) inside a
10
+ running `test-all.sh` reads as "A SUITE WROTE TO THE LIVE REPOSITORY" with no
11
+ attribution to you — the suites were innocent, the FATAL still fires (#10161
12
+ QA run: two commits during a shard, twice). A QUEUED run counts as running
13
+ for this rule only once it acquires the lock: the snapshot is taken after
14
+ `tc_acquire`, so an edit made while `LOCK_WAIT_HEARTBEAT` is printing is safe,
15
+ and one made after acquire is not. Recovery: queue the commit until the
16
+ terminal marker, or commit first and restart the run — a discarded run costs
17
+ minutes, a misattributed one costs the investigation.
18
+
19
+ ## A new `.claude/hooks/*.sh` policy hook reaches ~15 registration/ratchet surfaces
20
+
21
+ Run each surface's own suite standalone BEFORE the shard, not as shard
22
+ discoveries — each is a seconds-long standalone run and every one has its own
23
+ enforcer; the shard merely makes the misses expensive. The enumerated list
24
+ lives in
25
+ `knowledge-base/project/learnings/workflow-issues/2026-10-13-gh-pr-merge-shipped-live-kb-artifacts-archival-needed-a-gate.md`
26
+ (Session Errors, item 4):
27
+
28
+ - `settings.json` matcher entry + `.devin/config.json` `^exec$` twin +
29
+ `devin-dispositions.tsv` bind row
30
+ - `INSCOPE21`/`REWRITERS` classification in `hook-input-contract.test.sh`
31
+ when the hook sources `lib/hook-input.sh` (README "Scope of the mandate"
32
+ list + count too)
33
+ - `suite-shard-legs.tsv` + `regenerate-shard-manifest.py --incremental --write`
34
+ - `PROMOTED_FILES` promotion only *after `git add`* — the derivation reads
35
+ `git ls-files` and cannot see untracked files
36
+ - no `producer | grep -q` in a policy hook (`grep-q-pipe-guard`)
37
+ - `mktemp` needs an owning EXIT trap (`lint-trap-tempfile-ownership`)
38
+ - `assert_fixture_dir` on same-function `git -C "${work}"` fixture writes
39
+ (`fixture-dir-operand-assert`)
40
+ - `fixture-relative-assert --write-baseline` in the same commit as a new
41
+ fixture-relative test file
42
+ - `--no-tags` on any `git fetch`/`pull` inside a battery closure
43
+ (`battery-tag-authorship` measures authorship by tag presence)
44
+ - no bare `knowledge-base/` literals in test argv (`test-affected-kb-consumers`
45
+ charges them to your suite)
46
+ - rule-corpus index+body pair, body ≤600B (`lint-agents-rule-budget`)
47
+
48
+ **Why:** #10161 — the hook suite was 84/84 green at the first shard and still
49
+ produced six separate shard-discovered surfaces, one FAIL per cycle.
50
+
51
+ ## A nested `test-all.sh` sandbox inherits the enclosing run's selection env
52
+
53
+ Under an outer `TEST_GROUP=affected` shard, a suite's own
54
+ `bash sandbox/test-all.sh` inherits `TEST_GROUP`/`MODE`/`SCRIPTS_SHARD`/
55
+ `SOLEUR_TEST_FORCE_ALL`, takes the affected path against a sandbox diff that
56
+ selects zero suites, and exits 0 — reading as "the refusal arm never fired"
57
+ in every arm that measures refusal. Scrub with
58
+ `env -u TEST_GROUP -u MODE -u SCRIPTS_SHARD -u SOLEUR_TEST_FORCE_ALL`:
59
+ empty assignments like `TEST_GROUP=` are NOT equivalent — the runner's enum
60
+ validation rejects an empty-but-set value with rc=2 — and the `-u` forms must
61
+ precede the arm's own vars so an intentional `TEST_GROUP=affected` still
62
+ lands. Same class as the `SOLEUR_SUBAGENT` scrub every nested-runner suite
63
+ already carries — see
64
+ `knowledge-base/project/learnings/2026-09-28-an-exported-session-env-var-forked-nested-runner-behavior.md`
65
+ (#8940). **Why:** #10161 — `test-all-orphan-log-retention` and
66
+ `fanout-suite-scope` were green standalone and red (18 and 26 arms) inside
67
+ `TEST_GROUP=affected`; both needed the scrub.
68
+
69
+ - **A "never raises" stderr helper needs a `sys.stderr is None` case, and a baseline run must come from a pristine tree.** `cmd 2>&-` sets `sys.stderr` to `None`, so `except (OSError, ValueError)` does not catch the `AttributeError`; run the helper's probe with `None`, a closed file and a raising stream. Take a baseline for a before/after diff from a detached `git worktree add` at `HEAD`, never the live tree you are about to edit (#10375).
70
+
71
+ ## A mutation row is vacuous until a fixture distinguishes the mutant
72
+
73
+ **A mutation row is vacuous until a fixture distinguishes the mutant — fabricate the discriminating state when the live corpus can't produce it.** Before writing a sed-and-diff mutation row, name the input on which the mutant's verdict differs; if the live tree can't supply it, inject synthetic module state (`o._TRACKED = (real | {synthetic}, …)` in an importlib-probed module) or build a scratch `git init`+`git add` index under TESTROOT (`rm -rf` after staging yields the index-dir-absent-on-disk shape). A mutant that lands and emits the same vector is the quietest green. Twin trap: a stale-expectation guard must assert the vector the OLD rule actually emits — a hand-extended "stale" string that no rule produces can never match, and `!=` on it passes vacuously on empty output; shape-pin instead (`=~ ^([01] ){N}[01]$`). **Why:** #10117's review found three mutation rows whose distinguishing fixtures could not exist in the live index. See `knowledge-base/project/learnings/test-failures/2026-10-14-a-mutation-row-is-vacuous-until-a-fixture-distinguishes-the-mutant.md`.