@soleur/opencode 0.0.0-stage → 1.0.0

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 (812) 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 +659 -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 +108 -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 +342 -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 +152 -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 +493 -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 +363 -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 +520 -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 +113 -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 +178 -0
  247. package/scripts/sync-opencode-adapter.ts +479 -0
  248. package/scripts/sync-pr-behind.sh +534 -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 +65 -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 +142 -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 +118 -0
  493. package/skills/fix-issue/references/exclude-label-jq-snippet.md +96 -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 +668 -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 +325 -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 +138 -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 +1621 -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-todo-structure.md +165 -0
  674. package/skills/review/references/risk-tier-and-fix-rounds.md +95 -0
  675. package/skills/review/references/semgrep-custom-rules.yaml +174 -0
  676. package/skills/review/references/ultrathink-phases.md +98 -0
  677. package/skills/review/references/wfs.md +6 -0
  678. package/skills/review/scripts/emit-review-trailer.sh +499 -0
  679. package/skills/review/scripts/ensure-semgrep.sh +99 -0
  680. package/skills/review/scripts/fix-round-seats.sh +197 -0
  681. package/skills/review/test/emit-review-trailer.test.sh +387 -0
  682. package/skills/review/test/ensure-semgrep.test.sh +111 -0
  683. package/skills/review/test/fix-round-seats.test.sh +237 -0
  684. package/skills/review/workflows/README.md +147 -0
  685. package/skills/review/workflows/review.workflow.js +667 -0
  686. package/skills/schedule/SKILL.md +796 -0
  687. package/skills/seo-aeo/SKILL.md +139 -0
  688. package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
  689. package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
  690. package/skills/ship/SKILL.md +3022 -0
  691. package/skills/ship/references/adr-ordinal-collision.md +47 -0
  692. package/skills/ship/references/affected-gate-contract.md +115 -0
  693. package/skills/ship/references/ci-run-diagnosis.md +29 -0
  694. package/skills/ship/references/ci-workflow-authoring.md +68 -0
  695. package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
  696. package/skills/ship/references/cto-ruling-armed-push.md +5 -0
  697. package/skills/ship/references/decision-challenges-render.md +71 -0
  698. package/skills/ship/references/detached-battery-verdict.md +13 -0
  699. package/skills/ship/references/feature-tweet-draft.md +42 -0
  700. package/skills/ship/references/followthrough-issue-body-template.md +47 -0
  701. package/skills/ship/references/followthrough-stub-template.sh +92 -0
  702. package/skills/ship/references/merge-queue-dequeue.md +39 -0
  703. package/skills/ship/references/operator-holds.md +149 -0
  704. package/skills/ship/references/pipeline-tally-render.md +43 -0
  705. package/skills/ship/references/pr-overlap.md +153 -0
  706. package/skills/ship/references/queue-mode.md +7 -0
  707. package/skills/ship/references/ready-run-wait.md +36 -0
  708. package/skills/ship/references/red-on-main-quarantine.md +110 -0
  709. package/skills/ship/references/register-update-pr-pattern.md +88 -0
  710. package/skills/ship/references/settle-then-admin-merge.md +130 -0
  711. package/skills/ship/references/supabase-column-probe.md +13 -0
  712. package/skills/ship/scripts/auto-close-scan.sh +76 -0
  713. package/skills/ship/scripts/battery-owed.sh +403 -0
  714. package/skills/ship/scripts/hold-gate-eval.sh +410 -0
  715. package/skills/ship/scripts/net-issue-flow.sh +665 -0
  716. package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
  717. package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
  718. package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
  719. package/skills/skill-creator/SKILL.md +299 -0
  720. package/skills/skill-creator/references/api-security.md +248 -0
  721. package/skills/skill-creator/references/authoring-levers.md +110 -0
  722. package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
  723. package/skills/skill-creator/references/best-practices.md +431 -0
  724. package/skills/skill-creator/references/common-patterns.md +639 -0
  725. package/skills/skill-creator/references/core-principles.md +193 -0
  726. package/skills/skill-creator/references/executable-code.md +188 -0
  727. package/skills/skill-creator/references/iteration-and-testing.md +509 -0
  728. package/skills/skill-creator/references/official-spec.md +193 -0
  729. package/skills/skill-creator/references/recommended-structure.md +180 -0
  730. package/skills/skill-creator/references/skill-structure.md +396 -0
  731. package/skills/skill-creator/references/using-scripts.md +122 -0
  732. package/skills/skill-creator/references/using-templates.md +120 -0
  733. package/skills/skill-creator/references/workflows-and-validation.md +541 -0
  734. package/skills/skill-creator/scripts/init_skill.py +322 -0
  735. package/skills/skill-creator/scripts/package_skill.py +110 -0
  736. package/skills/skill-creator/scripts/quick_validate.py +64 -0
  737. package/skills/skill-creator/templates/router-skill.md +73 -0
  738. package/skills/skill-creator/templates/simple-skill.md +34 -0
  739. package/skills/skill-creator/workflows/add-reference.md +96 -0
  740. package/skills/skill-creator/workflows/add-script.md +104 -0
  741. package/skills/skill-creator/workflows/add-template.md +83 -0
  742. package/skills/skill-creator/workflows/add-workflow.md +128 -0
  743. package/skills/skill-creator/workflows/audit-skill.md +159 -0
  744. package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
  745. package/skills/skill-creator/workflows/create-new-skill.md +207 -0
  746. package/skills/skill-creator/workflows/get-guidance.md +134 -0
  747. package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
  748. package/skills/skill-creator/workflows/verify-skill.md +226 -0
  749. package/skills/skill-security-scan/SKILL.md +145 -0
  750. package/skills/skill-security-scan/references/disclaimer.md +21 -0
  751. package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
  752. package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
  753. package/skills/skill-security-scan/references/override-mechanism.md +171 -0
  754. package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
  755. package/skills/skill-security-scan/references/regex-patterns.md +136 -0
  756. package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
  757. package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
  758. package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
  759. package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
  760. package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
  761. package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
  762. package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
  763. package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
  764. package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
  765. package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
  766. package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
  767. package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
  768. package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
  769. package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
  770. package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
  771. package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
  772. package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
  773. package/skills/skill-security-scan/scripts/lib.sh +197 -0
  774. package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
  775. package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
  776. package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
  777. package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
  778. package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
  779. package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
  780. package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
  781. package/skills/social-distribute/SKILL.md +485 -0
  782. package/skills/spec-templates/SKILL.md +274 -0
  783. package/skills/sync/SKILL.md +49 -0
  784. package/skills/test-browser/SKILL.md +464 -0
  785. package/skills/test-browser/references/feature-map.md +161 -0
  786. package/skills/test-fix-loop/SKILL.md +159 -0
  787. package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
  788. package/skills/triage/SKILL.md +402 -0
  789. package/skills/trigger-cron/SKILL.md +136 -0
  790. package/skills/trigger-cron/scripts/trigger.sh +198 -0
  791. package/skills/user-set-role/SKILL.md +147 -0
  792. package/skills/user-set-role/scripts/set-role.sh +218 -0
  793. package/skills/user-story-writer/SKILL.md +77 -0
  794. package/skills/ux-audit/SKILL.md +251 -0
  795. package/skills/ux-audit/references/finding.schema.json +62 -0
  796. package/skills/ux-audit/references/route-list.yaml +95 -0
  797. package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
  798. package/skills/ux-audit/scripts/bot-signin.ts +135 -0
  799. package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
  800. package/skills/work/SKILL.md +1479 -0
  801. package/skills/work/references/end-of-work-resume.md +7 -0
  802. package/skills/work/references/hook-test-main-cwd.md +24 -0
  803. package/skills/work/references/key-principles.md +83 -0
  804. package/skills/work/references/property-testing.md +122 -0
  805. package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
  806. package/skills/work/references/work-agent-teams.md +97 -0
  807. package/skills/work/references/work-lifecycle-parallel.md +147 -0
  808. package/skills/work/references/work-lockfile-bumps.md +97 -0
  809. package/skills/work/references/work-scratch-sandboxes.md +212 -0
  810. package/skills/work/references/work-subagent-fanout.md +61 -0
  811. package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
  812. package/skills/xcode-test/SKILL.md +360 -0
@@ -0,0 +1,7 @@
1
+ # End-of-work resume prompt: why the no-marker branch still emits the block
2
+
3
+ Relocated verbatim from `work/SKILL.md` step 3.5 (the skill body is byte-capped against the merge-base; the
4
+ rule itself, the marker literal, `recommend=true` and the "no marker means no `/clear` recommendation" clause
5
+ stay in the skill body because `compaction-state-hook.test.sh` scenarios 25c and 25d assert them there).
6
+
7
+ The no-marker branch is reached by a session that never compacted, by a kill-switched hook (`SOLEUR_DISABLE_COMPACTION_HOOKS=1`), and by every non-Claude harness — the hook is Claude-only and degrades to silence rather than to a false claim. In all three the resume prompt still fires, which is what keeps the retirement of the old unconditional "Tip: After shipping, run `/clear`…" from leaving a dead end.
@@ -0,0 +1,24 @@
1
+ # Hook-Test Feature-Branch-CWD Blind Spot
2
+
3
+ Loaded by `work` Phase-2 suite-fixture guidance. A `.claude/hooks/*.test.sh`
4
+ whose outcome depends on a CWD/branch-resolved gate (`block-commit-on-main`
5
+ via `git rev-parse --abbrev-ref HEAD`, `git worktree list` counts,
6
+ `symbolic-ref HEAD`) passes on the `feat-*`/`fix-*` worktree every local run
7
+ uses, but post-merge CI runs on the merged `main` commit and can fail ONLY
8
+ there (`block-commit-on-main` denies a `git commit`-shaped fixture input →
9
+ masks the gate under test). The local 104/104 is NOT authoritative for these.
10
+
11
+ When the diff touches `.claude/hooks/*.test.sh`, run the suite once from a
12
+ throwaway committed-`main` CWD:
13
+
14
+ ```bash
15
+ d=$(mktemp -d -t soleur-run.$$.XXXXXXXX) # signed root — reapable on a miss (#10017)
16
+ git -C "$d" init -q -b main && git -C "$d" -c user.email=t@t -c user.name=t commit -q --allow-empty -m i
17
+ (cd "$d" && bash <repo>/.claude/hooks/<file>.test.sh)
18
+ ```
19
+
20
+ (`git init` AT the root is depth-1 → the nested-git retain conjunct does not
21
+ fire; the dir stays reapable.) Fix-side: isolate the test from the
22
+ orthogonal gate by running the hook from a non-git/pinned-branch CWD, not
23
+ the ambient process CWD. **Why:** #5192 — guardrails AC1/AC3/AC4 passed
24
+ 104/104 locally, turned main red, fixed in #5209.
@@ -0,0 +1,83 @@
1
+ # Key Principles
2
+
3
+ **Plugin root in this file:** this file is Read, not delivered by the skill loader, so `${CLAUDE_PLUGIN_ROOT}` below is not replaced for you. The root 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. Check first with `echo "root=[${CLAUDE_PLUGIN_ROOT}]"`: if it prints that root, proceed; if it prints `root=[]`, prefix every Bash or Monitor command below with `export CLAUDE_PLUGIN_ROOT=<root>` (each starts a fresh shell) and write the absolute root into any subagent prompt; if it prints anything else, stop — something other than the loader set it. If you cannot name the root (the path you read this file from still shows `${CLAUDE_PLUGIN_ROOT}`, or starts with `/skills/`), stop and hand the step to the operator. Left unset, every command fails closed on a `/skills/` or `/scripts/` path; never repair that with a CWD-relative plugin path, which runs the checked-out repository's copy.
4
+
5
+ Loaded from [work/SKILL.md](../SKILL.md) — moved verbatim: `## Key Principles`, `## Quality Checklist`, and `## When to Use Reviewer Agents` (one contiguous block; byte-ceiling extraction, #9403).
6
+
7
+ ## Start Fast, Execute Faster
8
+
9
+ - Get clarification once at the start, then execute
10
+ - Don't wait for perfect understanding - ask questions and move
11
+ - The goal is to **finish the feature**, not create perfect process
12
+
13
+ ## The Plan is Your Guide
14
+
15
+ - Work documents should reference similar code and patterns
16
+ - Load those references and follow them
17
+ - Don't reinvent - match what exists
18
+
19
+ ## Test As You Go
20
+
21
+ - Run tests after each change, not at the end
22
+ - Fix failures immediately
23
+ - Continuous testing prevents big surprises
24
+
25
+ ## Quality is Built In
26
+
27
+ - Follow existing patterns
28
+ - Write tests for new code
29
+ - Run linting before pushing
30
+ - Use reviewer agents for complex/risky changes only
31
+
32
+ ## Review Before You Ship
33
+
34
+ - Use `skill: soleur:review` after completing implementation
35
+ - Catches issues before they reach PR reviewers
36
+ - Faster feedback than waiting for human review
37
+ - Builds confidence that your code is solid
38
+
39
+ ## Compound Your Learnings
40
+
41
+ - Use `skill: soleur:compound` before creating a PR
42
+ - Document debugging breakthroughs, non-obvious patterns, and framework gotchas
43
+ - Even "simple" implementations can yield valuable insights
44
+ - Future-you and teammates will thank present-you
45
+
46
+ ## Ship Complete Features
47
+
48
+ - Mark all tasks completed before moving on
49
+ - Don't leave features 80% done
50
+ - A finished feature that ships beats a perfect feature that doesn't
51
+
52
+ ## Quality Checklist
53
+
54
+ Before entering Phase 4, verify these Phase 2-3 items are complete:
55
+
56
+ - [ ] All clarifying questions asked and answered
57
+ - [ ] All TodoWrite tasks marked completed
58
+ - [ ] Tests pass (run project's test command)
59
+ - [ ] New source files have corresponding test files
60
+ - [ ] Linting passes (the project linter, plus the lint-ratchet call in Phase 3 when the repo opted in)
61
+ - [ ] Code follows existing patterns
62
+ - [ ] Figma designs match implementation (if applicable)
63
+
64
+ After Phase 4 handoff (one-shot only), the same agent continues executing one-shot steps 4-10 (`soleur:review`, `soleur:qa`, `soleur:compound`, `soleur:ship`, `soleur:test-browser`, `soleur:feature-video`).
65
+
66
+ ## When to Use Reviewer Agents
67
+
68
+ **Don't use by default.** Use reviewer agents only when:
69
+
70
+ - Large refactor affecting many files (10+)
71
+ - Security-sensitive changes (authentication, permissions, data access)
72
+ - Performance-critical code paths
73
+ - Complex algorithms or business logic
74
+ - User explicitly requests thorough review
75
+
76
+ For most features: tests + linting + following patterns is sufficient.
77
+
78
+ - **Stage a new test file before running a repo-global ratchet.** `guard-vacuity-floor`, `fixture-relative-assert` and the orphan-suite lint read `git ls-files`, so a new suite that is still untracked is invisible to them and they report green. Run them after `git add`, never before. See `knowledge-base/project/learnings/2026-10-04-a-new-suite-is-invisible-to-repo-ratchets-until-tracked-and-my-fix-moved-the-event-behind-a-hang.md`.
79
+ - **A state claim in a committed doc is a dated observation plus the command that reads it, never an assertion.** `gh workflow view` prints no state, and `gh workflow list --all` stops at 50 rows, so a workflow can be absent from the answer; read state with `gh api repos/<o>/<r>/actions/workflows/<file> --jq .state` and write the claim conditionally ("when enabled, a merge triggers the apply"). See `knowledge-base/project/learnings/2026-10-04-i-wrote-a-live-state-claim-from-a-tool-that-cannot-show-state-and-scoped-my-guard-pins-to-the-whole-file.md`.
80
+
81
+ - **On a contended box, push and let CI run the heavy verification once the local evidence is in hand.** the runner's `--capacity` probe (or a load average above the core count) says whether a multi-minute battery, a real-docker chain or a mutation matrix of dozens of rows will measure the box rather than the change; CI runs the same suites in a clean environment and a CI monitor reads the result back. Run locally only what is cheap and decisive (the guard suite, a trimmed matrix of the rows the change touches). **Why:** #9395 -- 64-row batteries and real-docker chains ran at load 55-80 and the operator twice interrupted to ask for CI. See `knowledge-base/project/learnings/2026-10-09-a-text-regex-guard-loses-to-spellings-derive-its-grammar-and-samples-from-arrays.md`.
82
+
83
+ - **Re-check the premise when the plan is older than this session.** When the plan or its issue is more than a few hours old, run `git log origin/main --since=<plan mtime> --oneline -- <the plan's Files to Edit>` and `gh pr list --state merged -L 200 --search "<issue number>"`; a hit means the premise may have moved, so re-read the merged diff before editing. **Why:** #10043 — #10039 merged mid-session and fixed the same issue a different way; the flag implementation was built, measured and re-scoped. See `knowledge-base/project/learnings/2026-10-11-my-tests-pinned-the-helper-and-the-regex-ran-on-the-event-loop-i-never-timed.md`.
@@ -0,0 +1,122 @@
1
+ # Property-based testing
2
+
3
+ A reference for the `property` oracle class in `RED(unit|integration|e2e|property)`
4
+ task titles. `property` names the oracle — how the test decides pass/fail — not a
5
+ pyramid layer; the test file still lives at a layer (`unit` is the usual home,
6
+ and `*.property.test.ts` classifies there by path).
7
+
8
+ ## When to reach for it
9
+
10
+ Reach for `property` when the behavior is a contract that must hold for every
11
+ input, not a list of cases you can enumerate:
12
+
13
+ - **Round-trips** — `decode(encode(x)) == x` for all x (serializers, codecs,
14
+ normalizers; escape/unescape pairs only where the transform is truly
15
+ invertible). Through a lossy serializer (JSON `-0`/`NaN`/`undefined`),
16
+ compare `decode(encode(x))` against the canonical form `canonicalize(x)` —
17
+ never `x` itself, never the round-trip expression (a self-oracular RHS
18
+ passes a constantly-wrong codec).
19
+ - **Invariants under mutation** — `sort` is idempotent and a permutation of its
20
+ input; `retry` never exceeds the cap; a reducer keeps a conserved quantity.
21
+ - **Metamorphic relations** — output is monotone in a parameter; appending an
22
+ element to the input can only add results, never remove one.
23
+ - **Two implementations** — a fast path and a reference path must agree
24
+ (differential/property testing); a new SQL function and its TS twin.
25
+ - **Parser/validator boundaries** — every input is either accepted with a valid
26
+ shape or rejected; never silently mangled.
27
+
28
+ Stay with `unit`/`integration`/`e2e` examples when the interesting behavior is a
29
+ small number of named cases, a UI flow, or a contract that only holds at a
30
+ boundary (auth gating, 404 shape) — property tests shine where the input
31
+ alphabet is too large to enumerate.
32
+
33
+ ## The workflow
34
+
35
+ 1. **Start with a pure function.** Property tests want deterministic,
36
+ side-effect-free cores. If the behavior is tangled in I/O, extract the pure
37
+ part first (the TDD gate's RED-first discipline applies unchanged).
38
+ 2. **Say the property in plain English first.** "Every normalized URL re-parses
39
+ to the same host" before `fc.property(...)`. If you cannot state it in one
40
+ sentence, you do not have a property yet — you have a fuzzy unit test.
41
+ 3. **Pick the property's strength.** Weakest: output is well-formed (shape,
42
+ bounds, non-crash). Middle: an invariant relates input to output
43
+ (monotonicity, conservation, idempotence). Strongest: an oracle — a second,
44
+ obviously-correct implementation, or round-trip through an inverse.
45
+ 4. **Generate the input alphabet, not examples.** The generator describes the
46
+ whole space (including empties, unicode, deep nesting, adversarial lengths);
47
+ the library explores it. Write the generator as carefully as the assertion —
48
+ a generator that only produces benign inputs tests nothing.
49
+ 5. **Add a negative control.** Run the property against a deliberately broken
50
+ implementation (mutant) once at write time and confirm it fails. A property
51
+ that survives a mutant is a vacuous assertion, same class as a green test
52
+ that never exercised the branch.
53
+
54
+ ## Counterexample lifecycle
55
+
56
+ When a property test fails, the library reports a counterexample and typically
57
+ **shrinks** it — minimizes the failing input until it is as small as possible.
58
+ That minimized case is the real find.
59
+
60
+ - **Triage the shrunk case, not the original.** The original random input is
61
+ noise; the shrunk one isolates the trigger.
62
+ - **Pin the minimized case as a permanent named regression test.** The
63
+ regression suite (ordinary `unit` example test) replays it deterministically
64
+ every run; the property run guards the rest of the space.
65
+ - **Never pin seeds.** The seed is an accident of one run; the regression
66
+ fixture is a deliberate, named, reviewed input. `// regression fixture:` —
67
+ one line, says what broke.
68
+ - **If the shrinker loops or the minimal case is still large**, the generator's
69
+ alphabet is too wide — narrow it (the bug is usually in a small corner).
70
+
71
+ ## Language → tool map
72
+
73
+ | Language | Library | Entry point |
74
+ |---|---|---|
75
+ | TypeScript / JavaScript | [fast-check](https://fast-check.dev/) (v4 verified 2026-10-20) | `fc.assert(fc.property(arb, fn))` |
76
+ | Python | [Hypothesis](https://hypothesis.works/) (v6 verified 2026-10-20) | `@given(st.<strategy>)` |
77
+ | Rust | [proptest](https://crates.io/crates/proptest) (v1.12 verified 2026-10-20) | `proptest! { #[test] fn t(x in strategy) { … } }` |
78
+ | JVM | jqwik (unverified) | `@Property` |
79
+ | Haskell | QuickCheck (unverified) | `quickCheck prop` |
80
+ | .NET | FsCheck (unverified) | `Check.Quick` |
81
+
82
+ ### Minimal fast-check example (TypeScript)
83
+
84
+ ```ts
85
+ import fc from "fast-check";
86
+
87
+ // property: normalize is idempotent — applying it twice changes nothing more.
88
+ fc.assert(
89
+ fc.property(fc.webUrl(), (url) => {
90
+ const once = normalizeUrl(url);
91
+ return normalizeUrl(once) === once;
92
+ }),
93
+ );
94
+ ```
95
+
96
+ ### Minimal Hypothesis example (Python)
97
+
98
+ ```python
99
+ from collections import Counter
100
+ from hypothesis import given, strategies as st
101
+
102
+ @given(st.lists(st.integers()))
103
+ def test_sort_is_permutation(xs):
104
+ s = sorted(xs)
105
+ assert Counter(s) == Counter(xs) # same multiset — a permutation
106
+ assert sorted(s) == s # idempotent
107
+ assert all(a <= b for a, b in zip(s, s[1:])) # actually ordered
108
+ ```
109
+
110
+ (Hypothesis also supports `@settings` for run counts and `st.data()` for
111
+ interactive draws — see the tool docs; keep examples like the above pinned to
112
+ verified symbols.)
113
+
114
+ ## House conventions
115
+
116
+ This monorepo's own machinery for property tests lives in
117
+ `apps/web-platform/test/README.md` (suite conventions, `*.property.test.*`
118
+ naming) and `scripts/lib/property-harness.md` (the repo-side harness shipped for
119
+ its own guard corpus — ADR-293). Those paths are this repo's internals; a plugin
120
+ install does not carry them. In user repos, the common convention is
121
+ `*.property.test.*` files beside the layer suites and
122
+ `// regression fixture: <seed-note>` comments on pinned counterexamples.
@@ -0,0 +1,78 @@
1
+ -- Canonical SECURITY DEFINER RPC scaffold for Supabase migrations.
2
+ --
3
+ -- Copy this template when a tenant-client write/read must bypass an RLS or
4
+ -- column-grant restriction (the #4224/#4226 silent-write-drop class). The shape
5
+ -- below is the one the lint test enforces:
6
+ -- apps/web-platform/test/migration-rpc-grants.test.ts
7
+ -- and the hard rule:
8
+ -- cq-pg-security-definer-search-path-pin-pg-temp
9
+ --
10
+ -- Three load-bearing pieces the lint checks for EVERY `SECURITY DEFINER` fn:
11
+ -- 1. `SET search_path = public, pg_temp` (in that order) in the declaration.
12
+ -- 2. A REVOKE that removes EXECUTE from PUBLIC + anon + authenticated.
13
+ -- (Supabase's `ALTER DEFAULT PRIVILEGES ... GRANT EXECUTE TO anon,
14
+ -- authenticated, service_role` makes the named-role REVOKE load-bearing —
15
+ -- a bare `FROM PUBLIC` is NOT enough; the default grant survives it.)
16
+ -- 3. Relations referenced as `public.<table>` (fully qualified) — the pinned
17
+ -- search_path makes unqualified lookups fall back to public then pg_temp,
18
+ -- but qualify anyway so intent is explicit.
19
+ --
20
+ -- Replace <fn_name>, params, and the body. Keep the auth.uid() pin: a
21
+ -- SECURITY DEFINER fn runs as the definer (bypassing RLS), so the function
22
+ -- body is now the ONLY thing enforcing per-caller authorization.
23
+
24
+ CREATE OR REPLACE FUNCTION public.<fn_name>(p_target_id uuid, p_value text)
25
+ RETURNS void
26
+ LANGUAGE plpgsql
27
+ SECURITY DEFINER
28
+ SET search_path = public, pg_temp
29
+ AS $$
30
+ BEGIN
31
+ -- Authorization pin: SECURITY DEFINER bypasses RLS, so re-assert the
32
+ -- caller's right to act on this row here. Use the ownership scope that
33
+ -- matches the resource (auth.uid() = user_id for user-owned rows;
34
+ -- public.is_workspace_member(auth.uid(), <workspace_id>) for shared rows).
35
+ IF NOT EXISTS (
36
+ SELECT 1 FROM public.<table>
37
+ WHERE id = p_target_id
38
+ AND user_id = auth.uid() -- or: AND public.is_workspace_member(...)
39
+ ) THEN
40
+ RAISE EXCEPTION 'not authorized' USING ERRCODE = '42501';
41
+ END IF;
42
+
43
+ -- jti-deny re-assert (ONLY if the referenced tables carry the RESTRICTIVE
44
+ -- `<table>_jti_not_denied` policy, 068/126 shape). That policy protects DIRECT
45
+ -- PostgREST table access, NOT this fn: SECURITY DEFINER bypasses RLS, so a
46
+ -- denylisted-but-unexpired JWT would otherwise read/write via the rpc() path.
47
+ -- A RESTRICTIVE RLS policy protects rows, not RPCs — re-encode EVERY
48
+ -- RLS-boundary property here. Omit for RPCs over non-jti tables. (PR #6239)
49
+ IF public.is_jti_denied_from_jwt() THEN
50
+ RAISE EXCEPTION 'token denied' USING ERRCODE = '42501';
51
+ END IF;
52
+
53
+ UPDATE public.<table>
54
+ SET <column> = p_value
55
+ WHERE id = p_target_id;
56
+ END;
57
+ $$;
58
+
59
+ -- 4-role REVOKE (PUBLIC + the three Supabase default-granted roles). The
60
+ -- service_role line is belt-and-suspenders: the lint requires PUBLIC, anon,
61
+ -- authenticated; include service_role to close the residual default EXECUTE.
62
+ REVOKE ALL ON FUNCTION public.<fn_name>(uuid, text)
63
+ FROM PUBLIC, anon, authenticated, service_role;
64
+
65
+ -- Grant back EXECUTE only to the role(s) that should call it.
66
+ -- SAFE here because this scaffold gates on the NON-forgeable auth.uid().
67
+ --
68
+ -- CALLER-OVERRIDE VARIANT (forgeable identity → service_role ONLY): if the
69
+ -- function instead resolves the caller via COALESCE(p_caller_user_id, auth.uid())
70
+ -- — necessary when the TS wrapper invokes via createServiceClient() (service-role
71
+ -- key) where auth.uid() is NULL — then p_caller_user_id is client-forgeable.
72
+ -- Granting such a function TO authenticated lets any logged-in user call it via
73
+ -- PostgREST with a forged caller id and bypass the owner-gate. In that case GRANT
74
+ -- to service_role ONLY (mirror accept_workspace_invitation mig 076/085), never
75
+ -- authenticated. Rule: a forgeable caller-override param and TO service_role are a
76
+ -- matched pair — copy BOTH halves of the precedent. See
77
+ -- knowledge-base/project/learnings/security-issues/2026-06-01-caller-override-rpc-needs-service-role-only-grant.md (#4762/#4765).
78
+ GRANT EXECUTE ON FUNCTION public.<fn_name>(uuid, text) TO authenticated;
@@ -0,0 +1,97 @@
1
+ # Tier A: Agent Teams Protocol
2
+
3
+ Persistent teammates with peer-to-peer messaging for plans where tasks share context or integration points. (~7x token cost)
4
+
5
+ ## Step A1: Offer Agent Teams
6
+
7
+ Present the user with teammate count, task assignments, and cost context:
8
+
9
+ "I found N independent tasks that could run as an Agent Team.
10
+ This spawns persistent teammates that can coordinate via messaging (~7x token cost).
11
+
12
+ Proposed assignments:
13
+
14
+ - Teammate 1: [tasks]
15
+ - Teammate 2: [tasks]
16
+ ...
17
+
18
+ Run as Agent Team? (Or decline to try subagent fan-out instead)"
19
+
20
+ - If declined: fall through to Tier B
21
+ - If accepted: continue to Step A2
22
+
23
+ ## Step A2: Activate Agent Teams and initialize
24
+
25
+ Enable the experimental Agent Teams feature and initialize the team:
26
+
27
+ ```bash
28
+ export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
29
+ ```
30
+
31
+ Then initialize the team directory with `spawnTeam`:
32
+
33
+ ```text
34
+ spawnTeam("soleur-{branch}")
35
+ ```
36
+
37
+ If `spawnTeam` fails (stale team exists): attempt `cleanup`, retry once.
38
+ If retry still fails, deactivate the flag and fall through to Tier B:
39
+
40
+ ```bash
41
+ unset CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS
42
+ ```
43
+
44
+ ## Step A3: Spawn teammates
45
+
46
+ Spawn teammates via Task tool with `team_name` parameter. Each teammate receives
47
+ task-specific context and instructions:
48
+
49
+ ```text
50
+ Task general-purpose (team_name="soleur-{branch}"): "You are a teammate
51
+ executing part of a work plan.
52
+
53
+ BRANCH: [current branch name]
54
+ WORKING DIRECTORY: [current working directory path]
55
+
56
+ YOUR TASKS:
57
+ [Task descriptions and relevant plan sections for this teammate]
58
+
59
+ FILES YOU MAY MODIFY:
60
+ [Explicit list of files this teammate is allowed to touch]
61
+
62
+ INSTRUCTIONS:
63
+ - Read CLAUDE.md and referenced files before modifying them
64
+ - Follow existing codebase patterns and conventions
65
+ - Write tests for new functionality
66
+ - Run tests relevant to your changes
67
+ - Do NOT commit -- the lead will commit after reviewing all work
68
+ - Do NOT modify files outside the list above
69
+ - Mark each task as completed via TaskUpdate when done"
70
+ ```
71
+
72
+ Assign overlapping tasks to the same teammate to prevent file conflicts.
73
+
74
+ ## Step A4: Monitor, test, commit, and shutdown
75
+
76
+ Lead monitors progress via `TaskList` and coordinates via `write`/`broadcast`.
77
+
78
+ If a teammate fails: retry once via the team. If retry fails, lead completes
79
+ that task sequentially. Other teammates continue unaffected.
80
+
81
+ When all tasks complete:
82
+
83
+ - Run the touched-file suites to verify integration — **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**
84
+ - If tests pass: create incremental commits for the batch
85
+ - If tests fail: fix integration issues, then commit
86
+ - Send `requestShutdown` to all teammates
87
+ - Run `cleanup` to remove team config and task files
88
+ - Deactivate the experimental flag:
89
+
90
+ ```bash
91
+ unset CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS
92
+ ```
93
+
94
+ - Update TaskList to mark all completed tasks
95
+
96
+ Then proceed to the remaining dependent tasks (if any) using the sequential loop,
97
+ or skip directly to Phase 3 if all tasks are done.
@@ -0,0 +1,147 @@
1
+ # Tier 0: Lifecycle Parallelism Protocol
2
+
3
+ Parallel code and test agents working from a shared interface contract. Two agents execute concurrently: one implements source code, the other writes acceptance tests from the contract (ATDD). The coordinator integrates output, commits, and runs test-fix-loop.
4
+
5
+ ## Step 01: Offer (interactive) / Auto-select (pipeline)
6
+
7
+ **Interactive mode:**
8
+
9
+ "This plan has independent code and test workstreams that can run in parallel.
10
+ Tier 0 spawns two agents -- one for implementation, one for acceptance tests --
11
+ from a shared interface contract. Run as Tier 0?"
12
+
13
+ - If declined: fall through to Tier A
14
+ - If accepted: continue to Step 02
15
+
16
+ **Pipeline mode:** Auto-select Tier 0 without prompting. Continue to Step 02.
17
+
18
+ ## Step 02: Generate interface contract
19
+
20
+ Read the plan file and generate a markdown contract at `knowledge-base/project/specs/feat-<name>/interface-contract.md` with exactly two sections:
21
+
22
+ ```markdown
23
+ ## File Scopes
24
+
25
+ | Agent | Files |
26
+ |-------|-------|
27
+ | Agent 1 (Code) | (list every source file, config file, package manifest this agent may create or modify) |
28
+ | Agent 2 (Tests) | (list every test file this agent may create or modify) |
29
+
30
+ ## Public Interfaces
31
+
32
+ (function/class signatures with parameter types, return types, and error types)
33
+ ```
34
+
35
+ **Contract generation rules:**
36
+
37
+ - Derive file scopes from the plan's task descriptions and file references
38
+ - Derive signatures from acceptance criteria and the plan's technical design
39
+ - Every file appears in exactly one agent's scope -- no overlap
40
+ - Version triad files (`plugin.json`, `CHANGELOG.md`, root `README.md`) belong to neither agent -- Ship handles those
41
+ - The plan provides all other context (motivation, data flow, examples). The contract adds only what agents need to avoid collision.
42
+
43
+ Commit the contract before spawning agents:
44
+
45
+ ```bash
46
+ git add knowledge-base/project/specs/feat-<name>/interface-contract.md
47
+ git commit -m "docs: generate interface contract for feat-<name>"
48
+ ```
49
+
50
+ ## Step 03: Spawn 2 parallel agents
51
+
52
+ Spawn both agents in a **single message with two Task tool calls** so they execute concurrently:
53
+
54
+ **Agent 1 (Code):**
55
+
56
+ ```text
57
+ Task general-purpose: "You are Agent 1 (Code) in a parallel lifecycle.
58
+
59
+ BRANCH: [current branch name]
60
+ WORKING DIRECTORY: [absolute worktree path]
61
+
62
+ INTERFACE CONTRACT:
63
+ [Full contract document from Step 02]
64
+
65
+ YOUR FILES:
66
+ [Exact file list from the Agent 1 (Code) row in File Scopes]
67
+
68
+ INSTRUCTIONS:
69
+ - Implement the feature to satisfy the public interfaces in the contract
70
+ - Follow existing codebase patterns (read neighboring files for style)
71
+ - Add dependencies to package manifests if needed
72
+ - Do NOT write test files -- Agent 2 handles all tests
73
+ - Read the plan file for full context: [plan file path]
74
+
75
+ CONSTRAINTS:
76
+ - Do NOT commit
77
+ - Do NOT modify files outside YOUR FILES list
78
+ - Do NOT use the Bash tool
79
+ - Do NOT use WebFetch or WebSearch
80
+ - Do NOT run git commands
81
+ - Run pwd before every file write to verify you are in the worktree
82
+ - Report back: files created/modified, any issues encountered"
83
+ ```
84
+
85
+ **Agent 2 (Tests):**
86
+
87
+ ```text
88
+ Task general-purpose: "You are Agent 2 (Tests) in a parallel lifecycle.
89
+
90
+ BRANCH: [current branch name]
91
+ WORKING DIRECTORY: [absolute worktree path]
92
+
93
+ INTERFACE CONTRACT:
94
+ [Full contract document from Step 02]
95
+
96
+ YOUR FILES:
97
+ [Exact file list from the Agent 2 (Tests) row in File Scopes]
98
+
99
+ INSTRUCTIONS:
100
+ - Write acceptance tests from the interface contract (ATDD RED phase)
101
+ - Tests must validate the public interfaces listed in the contract
102
+ - Use Given/When/Then format where the project convention supports it
103
+ - Do NOT read source files -- write tests from the contract only
104
+ - Use the project's test framework (auto-detect from package.json/Cargo.toml/etc.)
105
+ - Read the plan file for full context: [plan file path]
106
+
107
+ CONSTRAINTS:
108
+ - Do NOT commit
109
+ - Do NOT modify files outside YOUR FILES list
110
+ - Do NOT use the Bash tool
111
+ - Do NOT use WebFetch or WebSearch
112
+ - Do NOT run git commands
113
+ - Run pwd before every file write to verify you are in the worktree
114
+ - Report back: files created/modified, any issues encountered"
115
+ ```
116
+
117
+ ## Step 04: Collect results and commit
118
+
119
+ Wait for both agents to complete. Then:
120
+
121
+ 1. Review each agent's report for completeness and issues
122
+ 2. **If any agent failed:** keep the successful agent's output and complete the remaining work sequentially via Tier C (the task execution loop). Write the failure to `session-state.md` for compound to pick up. Proceed to the commit step below with whatever output exists.
123
+ 3. Stage and commit all agent output:
124
+
125
+ ```bash
126
+ git add .
127
+ git commit -m "feat: parallel agent output (pre-integration)"
128
+ ```
129
+
130
+ The coordinator MUST commit before invoking test-fix-loop. test-fix-loop requires a clean working tree and aborts if uncommitted changes exist.
131
+
132
+ ## Step 05: Integration -- test-fix-loop until GREEN
133
+
134
+ Run the project's test command to check integration.
135
+
136
+ - **If tests pass:** Proceed to Step 06.
137
+ - **If tests fail:** Invoke `skill: soleur:test-fix-loop` to iterate until GREEN.
138
+ - **If test-fix-loop cannot converge:** Flag as contract-test mismatch. Write the failing tests and implementation summary to `session-state.md`. Proceed to Phase 3 for user review.
139
+
140
+ ## Step 06: Write docs sequentially, proceed to Phase 3
141
+
142
+ After GREEN (or after flagging non-convergence):
143
+
144
+ 1. Write documentation sequentially (architecture docs, feature docs). Docs benefit from seeing the final integrated implementation.
145
+ 2. Create an incremental commit for documentation if any docs were written.
146
+ 3. Update TaskList to mark all completed tasks.
147
+ 4. Proceed to Phase 3 (Quality Check).
@@ -0,0 +1,97 @@
1
+ # Lockfile Bumps — Transitive Updates
2
+
3
+ > **Does not apply to this repository as of ADR-191 (#7084).** Soleur carries exactly
4
+ > one lockfile per directory (`package-lock.json`); `bun.lock` is deleted and
5
+ > `scripts/lint-dual-lockfile.sh` fails if one reappears. For a transitive-only bump
6
+ > here, run `npx --yes npm@11 update <pkg>` and validate with `npm ci --ignore-scripts`
7
+ > — npm produces a clean transitive-only diff and no surgical editing is needed.
8
+ >
9
+ > **Ratchet the drain guard in the same PR.** `scripts/assert-dependabot-drain.py`
10
+ > pins per-major advisory floors (`REQUIRED` rows + `FLOOR_ANCHORS`). When an
11
+ > advisory forces a floor up, set each affected row and anchor to the advisory's
12
+ > strictest `first_patched_version` — otherwise a regression to a still-vulnerable
13
+ > version passes the guard silently. Verify with `python3
14
+ > scripts/assert-dependabot-drain.py` and `bash
15
+ > scripts/assert-dependabot-drain.test.sh`.
16
+ >
17
+ > The bun procedure below is retained for **tenant repositories**, which the
18
+ > constraint-scaffold skill also targets and which may legitimately still be bun-based.
19
+
20
+ When a Dependabot security alert (or equivalent) calls for a transitive-only
21
+ bump in a directory that carries dual lockfiles (`package-lock.json` AND
22
+ `bun.lock`), npm's `npm update <pkg>` cleanly produces a transitive-only diff.
23
+ **bun has no equivalent clean transitive-only mode** — every bun command
24
+ either elevates the target to a direct `package.json` dep, re-resolves the
25
+ transitive back to its old version, or bumps every direct caret-ranged dep at
26
+ once. The first-attempt path is a surgical edit of `bun.lock`.
27
+
28
+ ## When This Applies
29
+
30
+ - Diff is intended to touch ONLY `bun.lock` (no `package.json` changes).
31
+ - Target package is a transitive dep, not declared in `package.json`.
32
+ - Goal is a security/version bump within an existing semver range.
33
+
34
+ ## Surgical Pattern
35
+
36
+ 1. Locate the lockfile entry:
37
+
38
+ ```bash
39
+ grep -n '"<pkg>":' apps/web-platform/bun.lock
40
+ ```
41
+
42
+ 2. Replace the version string AND the integrity sha on that line:
43
+
44
+ ```diff
45
+ - "<pkg>": ["<pkg>@OLD", "", {}, "sha512-OLDSHA..."],
46
+ + "<pkg>": ["<pkg>@NEW", "", {}, "sha512-NEWSHA..."],
47
+ ```
48
+
49
+ 3. Get the new sha. Two options (verified bun 1.3.11):
50
+
51
+ - **`bun install --lockfile-only`** in a throwaway branch — regenerates
52
+ `bun.lock` without installing dependencies. Copy the target line, revert
53
+ the throwaway branch, apply surgically on the real branch.
54
+ - **`npm view <pkg>@<version>`** — the integrity algorithm is the same
55
+ across registries.
56
+
57
+ 4. Validate the surgical edit:
58
+
59
+ ```bash
60
+ cd apps/web-platform && bun install --frozen-lockfile
61
+ ```
62
+
63
+ `--frozen-lockfile` refuses to install if the lockfile hash diverges from
64
+ the resolved tree AND validates the integrity sha against the registry
65
+ tarball during install. A passing run is positive evidence the edit is
66
+ consistent.
67
+
68
+ 5. Pre-commit gate — verify no unintended `package.json` drift:
69
+
70
+ ```bash
71
+ git diff --stat origin/main -- '*/package.json'
72
+ ```
73
+
74
+ Output MUST be empty. If `package.json` shows up, you accidentally invoked
75
+ the wrong bun command — revert and retry the surgical pattern.
76
+
77
+ ## Ban List (do NOT use for transitive-only bumps)
78
+
79
+ ```bash
80
+ # DO NOT: elevates the transitive to a direct dep in package.json
81
+ bun update <pkg>
82
+
83
+ # DO NOT: bumps every direct caret-ranged dep (13+ packages, 300+ line churn)
84
+ bun update
85
+ ```
86
+
87
+ ## Sharp Edges
88
+
89
+ - **npm rewrites lockfile `name` in worktrees.** When `package.json` has no `name` field, `npm update` infers it from the directory name. In a worktree (`.worktrees/feat-xyz/`), this rewrites `package-lock.json`'s `"name"` to the worktree directory name. After any `npm update` in a worktree, verify: `git show origin/main:package-lock.json | head -3` and fix if the `name` field drifted. Source: `knowledge-base/project/learnings/2026-05-27-npm-update-rewrites-lockfile-name-in-worktrees.md`.
90
+
91
+ ## Related
92
+
93
+ - AGENTS.md `cq-before-pushing-package-json-changes` triggers on
94
+ `package.json` changes only; transitive-only bumps don't fire it.
95
+ - Source learning:
96
+ `knowledge-base/project/learnings/2026-05-09-bun-lockfile-transitive-bump-requires-surgical-edit.md`
97
+ - Precedent: PR #3488 (Dependabot dual-lockfile bump, 2026-05-09).