@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,75 @@
1
+ #!/usr/bin/env bash
2
+ # Deterministic test for scripts/gen-models.sh: the generated models.generated.json
3
+ # must contain exactly the three current model IDs read VERBATIM from the TS registry
4
+ # (single source of truth), each wrapped in the `anthropic:messages:` provider prefix.
5
+ # No hardcoded model literals here — every expected value is re-derived from the registry.
6
+ set -euo pipefail
7
+
8
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ SKILL_DIR="$(cd "$HERE/.." && pwd)"
10
+ ROOT="$(git -C "$SKILL_DIR" rev-parse --show-toplevel)"
11
+ CONST="$ROOT/apps/web-platform/server/inngest/leader-prompts/constants.ts"
12
+ TIERS="$ROOT/apps/web-platform/server/inngest/model-tiers.ts"
13
+ GEN="$SKILL_DIR/scripts/gen-models.sh"
14
+ OUT="$SKILL_DIR/models.generated.json"
15
+ fails=0
16
+
17
+ # Re-derive the expected IDs from the registry (mirrors gen-models.sh extraction).
18
+ extract() { grep -E "^export const $2" "$1" | grep -oE '"claude-[^"]+"' | tr -d '"' | head -1; }
19
+ SONNET=$(extract "$CONST" "SONNET_MODEL")
20
+ HAIKU=$(extract "$CONST" "HAIKU_MODEL")
21
+ OPUS=$(extract "$TIERS" "AUDIT_MODEL")
22
+
23
+ for v in "$SONNET" "$HAIKU" "$OPUS"; do
24
+ if [[ -z "$v" ]]; then echo "FAIL: could not read a model ID from the registry"; exit 1; fi
25
+ done
26
+
27
+ # COMMITTED-ARTIFACT PARITY. Running the generator in place and then asserting
28
+ # against what it just wrote can only prove the generator is self-consistent —
29
+ # it silently CLOBBERS a hand-edit instead of reporting it, so the checked-in
30
+ # file could drift from the registry indefinitely with this test green. Snapshot
31
+ # first, regenerate, and diff: the committed file must already be correct.
32
+ if [[ ! -f "$OUT" ]]; then
33
+ echo "FAIL: $OUT is missing from the repo"; exit 1
34
+ fi
35
+ _committed="$(mktemp)"
36
+ # Single owning trap (ADR-129) — covers every exit path below, including the
37
+ # STALE failure and any unexpected die between allocation and the diff.
38
+ trap 'rm -f "$_committed"' EXIT
39
+ cp "$OUT" "$_committed"
40
+
41
+ bash "$GEN"
42
+
43
+ if ! diff -q "$_committed" "$OUT" >/dev/null 2>&1; then
44
+ echo "FAIL: $OUT is STALE — it differs from what gen-models.sh produces."
45
+ echo " Run: bash $GEN (and commit the result)"
46
+ diff -u "$_committed" "$OUT" || true
47
+ exit 1
48
+ fi
49
+ echo "ok committed artifact matches the generator (no drift)"
50
+
51
+ check() {
52
+ local needle="anthropic:messages:$1"
53
+ if node -e 'const a=require(process.argv[1]); process.exit(a.includes(process.argv[2])?0:1)' "$OUT" "$needle"; then
54
+ echo "ok present: $needle"
55
+ else
56
+ echo "FAIL missing: $needle"
57
+ fails=$((fails + 1))
58
+ fi
59
+ }
60
+ check "$OPUS"
61
+ check "$SONNET"
62
+ check "$HAIKU"
63
+
64
+ # Exactly three providers, no extras, no hardcoded literals leaked.
65
+ COUNT=$(node -e 'const a=require(process.argv[1]); process.stdout.write(String(a.length))' "$OUT")
66
+ if [[ "$COUNT" != "3" ]]; then
67
+ echo "FAIL: expected 3 providers, got $COUNT"
68
+ fails=$((fails + 1))
69
+ fi
70
+
71
+ if [[ "$fails" -gt 0 ]]; then
72
+ echo "gen-models: $fails assertion(s) failed"
73
+ exit 1
74
+ fi
75
+ echo "gen-models: all assertions passed"
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env bash
2
+ # Deterministic unit test for the MEASUREMENT assert (scripts/measure-classification.cjs).
3
+ # No live LLM: every "model output" is a stubbed string. Asserts the contract:
4
+ # - ALWAYS pass: true (the measurement records, never gates)
5
+ # - score 1.0 when the parsed label matches golden_label, 0.0 otherwise
6
+ # - works for BOTH a /go route AND a ticket-triage P-level
7
+ set -euo pipefail
8
+
9
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ SKILL_DIR="$(cd "$HERE/.." && pwd)"
11
+ ASSERT="$SKILL_DIR/scripts/measure-classification.cjs"
12
+ fails=0
13
+
14
+ # run <output> <golden_label> <enum-json> <expect-pass> <expect-score> <label>
15
+ run() {
16
+ local output="$1" golden="$2" enumjson="$3" want_pass="$4" want_score="$5" label="$6"
17
+ local result
18
+ result=$(node -e '
19
+ const fn = require(process.argv[1]);
20
+ const r = fn(process.argv[2], { vars: { golden_label: process.argv[3], enum: JSON.parse(process.argv[4]) } });
21
+ process.stdout.write(JSON.stringify({ pass: r.pass, score: r.score }));
22
+ ' "$ASSERT" "$output" "$golden" "$enumjson" )
23
+ local got_pass got_score
24
+ got_pass=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).pass))' "$result")
25
+ got_score=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).score))' "$result")
26
+ if [[ "$got_pass" != "$want_pass" || "$got_score" != "$want_score" ]]; then
27
+ echo "FAIL [$label]: output='$output' golden='$golden' -> pass=$got_pass score=$got_score (want pass=$want_pass score=$want_score)"
28
+ fails=$((fails + 1))
29
+ else
30
+ echo "ok [$label]: pass=$got_pass score=$got_score"
31
+ fi
32
+ }
33
+
34
+ GO='["fix","drain","clo-attestation","review","legal-threshold","incident","default"]'
35
+ TR='["P1","P2","P3"]'
36
+
37
+ # --- /go route cases ---
38
+ run "fix" "fix" "$GO" "true" "1" "route exact match"
39
+ run "The route is \`fix\`." "fix" "$GO" "true" "1" "route embedded in prose"
40
+ run "default" "fix" "$GO" "true" "0" "route mismatch scores 0 but still passes"
41
+ run "incident" "incident" "$GO" "true" "1" "non-default route match"
42
+ run "banana" "fix" "$GO" "true" "0" "hallucinated route scores 0 but still passes"
43
+
44
+ # --- ticket-triage P-level cases ---
45
+ run "P1" "P1" "$TR" "true" "1" "P-level exact match"
46
+ run "Priority: P2" "P2" "$TR" "true" "1" "P-level embedded in prose"
47
+ run "p3" "P3" "$TR" "true" "1" "P-level case-insensitive match"
48
+ run "P1" "P3" "$TR" "true" "0" "P-level mismatch scores 0 but still passes"
49
+
50
+ # --- file:// enum shape (the promptfoo defaultTest.vars shape — #5358 regression).
51
+ # enum arrives as a RAW STRING; loadEnum must read the SSOT file to score. ---
52
+ fileref() {
53
+ local output="$1" golden="$2" enumref="$3" want_score="$4" label="$5"
54
+ local got
55
+ got=$(node -e '
56
+ const fn = require(process.argv[1]);
57
+ const r = fn(process.argv[2], { vars: { golden_label: process.argv[3], enum: process.argv[4] } });
58
+ process.stdout.write(String(r.score));
59
+ ' "$ASSERT" "$output" "$golden" "$enumref")
60
+ if [[ "$got" != "$want_score" ]]; then
61
+ echo "FAIL [$label]: output='$output' enum='$enumref' -> score=$got (want $want_score)"
62
+ fails=$((fails + 1))
63
+ else
64
+ echo "ok [$label]: score=$got"
65
+ fi
66
+ }
67
+ fileref "fix" "fix" "file://enums/go-routes.json" "1" "file:// enum + correct route scores 1"
68
+ fileref "P2" "P2" "file://enums/triage-levels.json" "1" "file:// enum + correct P-level scores 1"
69
+
70
+ if [[ "$fails" -gt 0 ]]; then
71
+ echo "measure-classification: $fails assertion(s) failed"
72
+ exit 1
73
+ fi
74
+ echo "measure-classification: all assertions passed"
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env bash
2
+ # Deterministic unit test for the shared label parser (scripts/parse-label.cjs).
3
+ # Pins the documented three-tier contract:
4
+ # 1. exact (case-insensitive) match against the whole trimmed output
5
+ # 2. word-boundary search → the EARLIEST-occurring allowed label (not enum order)
6
+ # 3. fallback → the raw first non-empty line (so the gate can reject it)
7
+ # Also pins the documented limitations: hyphenated labels are not split, a label
8
+ # that is a strict substring of a longer token does not match, and hedged/negated
9
+ # prose resolves to the first-mentioned label.
10
+ set -euo pipefail
11
+
12
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ SKILL_DIR="$(cd "$HERE/.." && pwd)"
14
+ PARSER="$SKILL_DIR/scripts/parse-label.cjs"
15
+ fails=0
16
+
17
+ # run <output> <enum-json> <expected-label> <case-label>
18
+ run() {
19
+ local output="$1" enumjson="$2" want="$3" label="$4"
20
+ local got
21
+ got=$(node -e '
22
+ const { extractLabel } = require(process.argv[1]);
23
+ process.stdout.write(String(extractLabel(process.argv[2], JSON.parse(process.argv[3]))));
24
+ ' "$PARSER" "$output" "$enumjson")
25
+ if [[ "$got" != "$want" ]]; then
26
+ echo "FAIL [$label]: output='$output' -> '$got' (want '$want')"
27
+ fails=$((fails + 1))
28
+ else
29
+ echo "ok [$label]: '$got'"
30
+ fi
31
+ }
32
+
33
+ # run_empty <enum-json> <expected> <case-label> (output is the empty/undefined case)
34
+ run_empty() {
35
+ local enumjson="$1" want="$2" label="$3"
36
+ local got
37
+ got=$(node -e '
38
+ const { extractLabel } = require(process.argv[1]);
39
+ const out = process.argv[3] === "__NULL__" ? null : process.argv[3];
40
+ process.stdout.write(String(extractLabel(out, JSON.parse(process.argv[2]))));
41
+ ' "$PARSER" "$enumjson" "$4")
42
+ if [[ "$got" != "$want" ]]; then
43
+ echo "FAIL [$label]: -> '$got' (want '$want')"
44
+ fails=$((fails + 1))
45
+ else
46
+ echo "ok [$label]: '$got'"
47
+ fi
48
+ }
49
+
50
+ GO='["fix","drain","clo-attestation","review","legal-threshold","incident","default"]'
51
+ TR='["P1","P2","P3"]'
52
+
53
+ # --- Tier 1: exact match ---
54
+ run "fix" "$GO" "fix" "tier1 exact route"
55
+ run "P1" "$TR" "P1" "tier1 exact P-level"
56
+ run "p2" "$TR" "P2" "tier1 exact case-insensitive"
57
+ run " review " "$GO" "review" "tier1 exact after trim"
58
+
59
+ # --- Tier 2: word-boundary, EARLIEST-occurrence wins (not enum order) ---
60
+ run "The route is review." "$GO" "review" "tier2 single label in prose"
61
+ run "review, not fix" "$GO" "review" "tier2 earliest wins over enum order (fix precedes review in enum)"
62
+ run "default, or maybe fix" "$GO" "default" "tier2 earliest wins (default precedes fix in text)"
63
+ run "Route: incident" "$GO" "incident" "tier2 label after prompt label"
64
+ run "clo-attestation" "$GO" "clo-attestation" "tier2 hyphenated label not split"
65
+ run "use legal-threshold here" "$GO" "legal-threshold" "tier2 hyphenated label in prose"
66
+ # Documented limitation: negation resolves to the first-mentioned label.
67
+ run "not P1, use P2" "$TR" "P1" "tier2 documented negation limitation (first-mentioned)"
68
+
69
+ # --- Tier 2 substring safety: a strict substring of a longer token must NOT match ---
70
+ run "P10" "$TR" "P10" "tier2 P1 not matched inside P10 (falls to raw)"
71
+
72
+ # --- Tier 3: fallback to raw first non-empty line (gate will reject) ---
73
+ run "banana" "$GO" "banana" "tier3 out-of-enum raw token"
74
+ run $' \nfirst junk line\nsecond' "$GO" "first junk line" "tier3 first non-empty line"
75
+
76
+ # --- Null / empty handling ---
77
+ run_empty "$GO" "" "empty string output" ""
78
+ run_empty "$GO" "" "null output" "__NULL__"
79
+
80
+ # --- loadEnum: the var shapes promptfoo actually passes ---
81
+ # promptfoo's handling of a `defaultTest.vars` `file://*.json` value is
82
+ # version-dependent: it may pass the RESOLVED FILE CONTENTS (JSON array text as a
83
+ # string) OR the literal unresolved `file://...` ref. loadEnum must handle BOTH
84
+ # (plus a direct array), returning [] (gate fails closed) on anything else. The
85
+ # resolved-contents case is the one a prior simplification dropped, vacuuming the
86
+ # gate — these cases lock both shapes so it cannot recur.
87
+ loadenum() {
88
+ local enumval="$1" want_len="$2" want_first="$3" label="$4"
89
+ local got
90
+ got=$(node -e '
91
+ const { loadEnum } = require(process.argv[1]);
92
+ const v = process.argv[2] === "__ARRAY__"
93
+ ? ["a","b","c"]
94
+ : process.argv[2];
95
+ const e = loadEnum({ enum: v });
96
+ process.stdout.write(JSON.stringify({ len: e.length, first: (e[0] ?? null) }));
97
+ ' "$SKILL_DIR/scripts/parse-label.cjs" "$enumval")
98
+ local got_len got_first
99
+ got_len=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).len))' "$got")
100
+ got_first=$(node -e 'process.stdout.write(String(JSON.parse(process.argv[1]).first))' "$got")
101
+ if [[ "$got_len" != "$want_len" || "$got_first" != "$want_first" ]]; then
102
+ echo "FAIL [$label]: enum='$enumval' -> len=$got_len first=$got_first (want len=$want_len first=$want_first)"
103
+ fails=$((fails + 1))
104
+ else
105
+ echo "ok [$label]: len=$got_len first=$got_first"
106
+ fi
107
+ }
108
+
109
+ # promptfoo's file:// var handling is version-dependent: it may pass the literal
110
+ # `file://...` ref OR the RESOLVED FILE CONTENTS (JSON array text). Both must work.
111
+ loadenum "file://enums/go-routes.json" 11 "fix" "loadEnum file:// literal ref (one promptfoo shape)"
112
+ loadenum "file://enums/triage-levels.json" 3 "P1" "loadEnum file:// triage-levels"
113
+ loadenum "enums/go-routes.json" 11 "fix" "loadEnum bare relative path"
114
+ # The resolved-contents shape — what promptfoo actually passes when it resolves a
115
+ # defaultTest.vars file:// ref to the file's CONTENTS. Regression guard for the
116
+ # gate-vacuous bug (loadEnum must JSON.parse a JSON-array-text string, not treat it
117
+ # as a path). JSON array text as a string.
118
+ loadenum '["fix","drain","drain-prs","clo-attestation","review","legal-threshold","incident","implement","questionnaire","glossary","default"]' 11 "fix" "loadEnum JSON-array-text contents (promptfoo file:// resolved-contents shape)"
119
+ loadenum '[ "a", "b", "c" ]' 3 "a" "loadEnum whitespaced JSON-array-text contents"
120
+ loadenum "__ARRAY__" 3 "a" "loadEnum direct array passthrough"
121
+ loadenum "file://enums/does-not-exist.json" 0 "null" "loadEnum unreadable file -> [] (gate fails closed)"
122
+ loadenum "not json and not a path" 0 "null" "loadEnum garbage -> [] (gate fails closed)"
123
+ loadenum "" 0 "null" "loadEnum empty string -> []"
124
+
125
+ if [[ "$fails" -gt 0 ]]; then
126
+ echo "parse-label: $fails assertion(s) failed"
127
+ exit 1
128
+ fi
129
+ echo "parse-label: all assertions passed"
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env bash
2
+ # Deterministic completeness test for the gated-skills registry — NO API.
3
+ # Asserts bidirectional parity between `eval-gate:block:<id>:start` markers in
4
+ # source files and `block_id` entries in gated-skills.json, so a new/renamed
5
+ # gated classifier cannot be added without wiring its projection check.
6
+ # DEDUP — each scanned id appears exactly once in source (sort -u can't hide a dup).
7
+ # PARITY — source-scanned id set == registry block_id set (block-id level).
8
+ # CHARSET — every registry block_id matches ^[a-z][a-z0-9-]*$ (scanner-recognizable).
9
+ # NEGATIVE — in-memory injected id/dup is flagged (verify-the-verifier).
10
+ # Mirrors test/eval-gate.test.sh: pure bash + node one-liners (no jq), accumulate-then-exit.
11
+ set -euo pipefail
12
+
13
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
14
+ SKILL_DIR="$(cd "$HERE/.." && pwd)"
15
+ REPO_ROOT="$(cd "$SKILL_DIR/../../../.." && pwd)"
16
+ REGISTRY="$SKILL_DIR/gated-skills.json"
17
+ fails=0
18
+
19
+ pass() { echo "ok [$1]"; }
20
+ fail() { echo "FAIL [$1]: $2"; fails=$((fails + 1)); }
21
+
22
+ cd "$REPO_ROOT"
23
+
24
+ # Source-marker scan: ids from `eval-gate:block:<id>:start` across plugins/soleur/, minus the
25
+ # eval-harness skill dir itself (its SKILL.md / registry / tests quote the literal markers in
26
+ # prose, so including them would false-positive the parity check). `|| true` keeps a
27
+ # legitimately-empty scan from aborting under errexit — PARITY then reports it cleanly.
28
+ # Scope assumption (fail-open corner, unreachable today): every gated source_file lives under
29
+ # plugins/soleur/ and outside eval-harness/. If the registry ever gains a source_file outside
30
+ # this scan root (or inside eval-harness/), widen/adjust the pathspec or its marker is invisible.
31
+ scan_ids() {
32
+ git grep -hoE 'eval-gate:block:[a-z][a-z0-9-]*:start' \
33
+ -- 'plugins/soleur/' ':(exclude)plugins/soleur/skills/eval-harness/' 2>/dev/null \
34
+ | sed -E 's/eval-gate:block:(.*):start/\1/' || true
35
+ }
36
+
37
+ # Registry block_ids (no jq dependency — node one-liner, mirrors eval-gate.test.sh).
38
+ registry_ids() {
39
+ node -e 'JSON.parse(require("fs").readFileSync(process.argv[1],"utf8")).forEach(e=>console.log(e.block_id))' "$REGISTRY"
40
+ }
41
+
42
+ # --- DEDUP guard: each source id appears exactly once (BEFORE sort -u would hide a dup) ---
43
+ dups="$(scan_ids | sort | uniq -d)"
44
+ if [[ -z "$dups" ]]; then
45
+ pass "DEDUP — each gated block_id appears exactly once in source"
46
+ else
47
+ fail "DEDUP — duplicate source marker(s)" "gated block '$(echo "$dups" | tr '\n' ' ')' appears more than once in source — each block_id maps to one registry source_file"
48
+ fi
49
+
50
+ # --- PARITY (the feature): source-scanned id set == registry id set, block-id level ---
51
+ src_set="$(scan_ids | sort -u)"
52
+ reg_set="$(registry_ids | sort -u)"
53
+
54
+ # Characterize the live scan (Kieran: don't just exit-0; pin the production command's output).
55
+ # Sorted set; update when a gated classifier surface is added/removed (PARITY below is the
56
+ # robust invariant — this literal is the belt-and-suspenders scanner-output pin).
57
+ expected_set=$'go-routing\nincident-threshold\nlane-inference\nticket-triage'
58
+ if [[ "$src_set" == "$expected_set" ]]; then
59
+ pass "live scan characterized as exactly {go-routing, incident-threshold, lane-inference, ticket-triage}"
60
+ else
61
+ fail "live scan characterization" "scanned ids: [$(echo "$src_set" | tr '\n' ' ')] (want: go-routing incident-threshold lane-inference ticket-triage)"
62
+ fi
63
+
64
+ # `|| true` inside the substitution: diff exits 1 on differences, which would otherwise
65
+ # abort the script (set -e + pipefail) BEFORE fail() prints the clear drift message.
66
+ parity_diff="$(diff <(echo "$src_set") <(echo "$reg_set") || true)"
67
+ if [[ -z "$parity_diff" ]]; then
68
+ pass "PARITY — source markers and registry block_ids match"
69
+ else
70
+ fail "PARITY — registry/source drift" "$(echo "$parity_diff" | tr '\n' ' ') ('<' source-only = unregistered marker: add a registry entry + enums/tasks/promptfooconfig + node scripts/gen-skill-prompt.cjs <id>; '>' registry-only = orphan/renamed entry)"
71
+ fi
72
+
73
+ # --- CHARSET guard: every registry block_id is scanner-recognizable ---
74
+ bad_ids=""
75
+ while IFS= read -r id; do
76
+ [[ "$id" =~ ^[a-z][a-z0-9-]*$ ]] || bad_ids+="$id "
77
+ done < <(registry_ids)
78
+ if [[ -z "$bad_ids" ]]; then
79
+ pass "CHARSET — every registry block_id matches ^[a-z][a-z0-9-]*\$"
80
+ else
81
+ fail "CHARSET — non-conforming block_id" "registry block_id(s) '$bad_ids' must match ^[a-z][a-z0-9-]*\$ — the scanner regex only recognizes lowercase-hyphen ids"
82
+ fi
83
+
84
+ # --- NEGATIVE sanity (in-memory; git grep is tracked-only and cannot see a tmp fixture, so a
85
+ # file-based negative would test a different backend than production and false-pass) ---
86
+ # (a) an injected unregistered id must be flagged by the PARITY comparison — exercised through the
87
+ # SAME captured-string idiom the live check uses, and asserting the injected id lands on the
88
+ # source-only ('<') side, so this verifies the verifier rather than just that diff(A+x,A)≠∅.
89
+ inj_src="$(printf '%s\nzz-injected-unregistered' "$src_set" | sort -u)"
90
+ inj_diff="$(diff <(echo "$inj_src") <(echo "$reg_set") || true)"
91
+ if [[ -n "$inj_diff" && "$inj_diff" == *"< zz-injected-unregistered"* ]]; then
92
+ pass "NEGATIVE — injected unregistered id is flagged by PARITY (source-only side)"
93
+ else
94
+ fail "NEGATIVE parity sanity" "injected unregistered id was NOT flagged on the source-only side (got: $(echo "$inj_diff" | tr '\n' ' '))"
95
+ fi
96
+
97
+ # (b) an injected duplicate id must be flagged by the DEDUP guard.
98
+ inj_dups="$(printf '%s\ngo-routing' "$(scan_ids)" | sort | uniq -d)"
99
+ if [[ -n "$inj_dups" ]]; then
100
+ pass "NEGATIVE — injected duplicate id is flagged by DEDUP"
101
+ else
102
+ fail "NEGATIVE dedup sanity" "an injected duplicate id was NOT flagged by the dedup check"
103
+ fi
104
+
105
+ if [[ "$fails" -gt 0 ]]; then
106
+ echo "registry-completeness: $fails assertion(s) failed"
107
+ exit 1
108
+ fi
109
+ echo "registry-completeness: all assertions passed"
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env bash
2
+ # Deterministic unit test for the PURE verdict engine (scripts/verdict.cjs).
3
+ # ZERO live API — every input is a recorded normalized-results fixture.
4
+ #
5
+ # Normalized results shape (the seam the orchestrator wires compound/heal-skill to):
6
+ # currentResults, candidateResults : Array<{ task_id: string, correct: boolean }>
7
+ # — one entry per model×repeat sample per corpus task.
8
+ # targetTask : { task_id } — the row whose candidate samples must pass (>= 0.5).
9
+ # opts : { epsilon?, targetThreshold=0.5 } — epsilon default = 1/(#distinct corpus task_ids).
10
+ #
11
+ # Cases (AC2): (a) accept, (b) reject-corpus-regress, (c) reject-target-fail,
12
+ # (d) epsilon-boundary (inclusive == not-regressed).
13
+ set -euo pipefail
14
+
15
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ SKILL_DIR="$(cd "$HERE/.." && pwd)"
17
+ VERDICT="$SKILL_DIR/scripts/verdict.cjs"
18
+ export SKILL_DIR
19
+
20
+ node -e "$(cat <<'EOF'
21
+ const assert = require("node:assert");
22
+ const path = require("node:path");
23
+ const { computeVerdict } = require(path.join(process.env.SKILL_DIR, "scripts", "verdict.cjs"));
24
+
25
+ let fails = 0;
26
+ function check(label, fn) {
27
+ try { fn(); console.log("ok [" + label + "]"); }
28
+ catch (e) { console.log("FAIL [" + label + "]: " + e.message); fails++; }
29
+ }
30
+
31
+ // Helper: N samples of a task with `c` correct, rest incorrect.
32
+ function samples(task_id, total, correct) {
33
+ const out = [];
34
+ for (let i = 0; i < total; i++) out.push({ task_id, correct: i < correct });
35
+ return out;
36
+ }
37
+
38
+ const TARGET = { task_id: "T" };
39
+
40
+ // --- (a) accept: corpus flat (0.75 -> 0.75), target passes (1.0). epsilon = 1/4 = 0.25
41
+ check("accept: improve target, corpus flat", () => {
42
+ const corpusCur = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0)];
43
+ const corpusCand = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0)];
44
+ const cur = [...corpusCur, ...samples("T",3,1)];
45
+ const cand = [...corpusCand, ...samples("T",3,3)];
46
+ const v = computeVerdict(cur, cand, TARGET, {});
47
+ assert.strictEqual(v.epsilon, 0.25, "epsilon default = 1/4");
48
+ assert.strictEqual(v.corpus_regressed, false);
49
+ assert.strictEqual(v.target_task_passes, true);
50
+ assert.strictEqual(v.accept, true);
51
+ assert.ok(Array.isArray(v.per_task));
52
+ });
53
+
54
+ // --- (b) reject: corpus regresses beyond epsilon (1.0 -> 0.25), target passes
55
+ check("reject: corpus regresses beyond epsilon", () => {
56
+ const cur = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,1), ...samples("T",1,1)];
57
+ const cand = [...samples("t1",1,1), ...samples("t2",1,0), ...samples("t3",1,0), ...samples("t4",1,0), ...samples("T",1,1)];
58
+ const v = computeVerdict(cur, cand, TARGET, {});
59
+ assert.strictEqual(v.corpus_regressed, true);
60
+ assert.strictEqual(v.accept, false);
61
+ });
62
+
63
+ // --- (c) reject: target task fails (<0.5), corpus flat
64
+ check("reject: target task fails (<0.5)", () => {
65
+ const corpus = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0)];
66
+ const cur = [...corpus, ...samples("T",3,2)];
67
+ const cand = [...corpus, ...samples("T",3,1)]; // 1/3 = 0.333 < 0.5
68
+ const v = computeVerdict(cur, cand, TARGET, {});
69
+ assert.strictEqual(v.corpus_regressed, false);
70
+ assert.strictEqual(v.target_task_passes, false);
71
+ assert.strictEqual(v.accept, false);
72
+ });
73
+
74
+ // --- (d) epsilon-boundary: candidate exactly at current_rate - epsilon => NOT regressed
75
+ check("epsilon-boundary inclusive == not regressed", () => {
76
+ // current corpus rate = 1.0, epsilon = 0.25, candidate corpus = 0.75 exactly.
77
+ const cur = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,1), ...samples("T",1,1)];
78
+ const cand = [...samples("t1",1,1), ...samples("t2",1,1), ...samples("t3",1,1), ...samples("t4",1,0), ...samples("T",1,1)];
79
+ const v = computeVerdict(cur, cand, TARGET, {});
80
+ assert.strictEqual(v.current_rate, 1.0);
81
+ assert.strictEqual(v.candidate_rate, 0.75);
82
+ assert.strictEqual(v.corpus_regressed, false, "boundary is inclusive: == is not a regression");
83
+ assert.strictEqual(v.accept, true);
84
+ });
85
+
86
+ // --- (e) reject: corpus below the absolute trust floor (both arms degraded) ---
87
+ // current corpus rate = 0.25 (< MIN_TRUSTED_CORPUS_RATE 0.5); candidate flat at 0.25 so
88
+ // there is no *relative* regression, and the target passes — but the baseline is too
89
+ // degraded to trust, so accept must be forced false.
90
+ check("reject: corpus below trust floor (both arms degraded)", () => {
91
+ const corpus = [...samples("t1",1,1), ...samples("t2",1,0), ...samples("t3",1,0), ...samples("t4",1,0)]; // 0.25
92
+ const cur = [...corpus, ...samples("T",3,3)];
93
+ const cand = [...corpus, ...samples("T",3,3)];
94
+ const v = computeVerdict(cur, cand, TARGET, {});
95
+ assert.strictEqual(v.current_rate, 0.25);
96
+ assert.strictEqual(v.corpus_regressed, false, "flat corpus is not a relative regression");
97
+ assert.strictEqual(v.target_task_passes, true);
98
+ assert.strictEqual(v.corpus_untrustworthy, true);
99
+ assert.strictEqual(v.min_trusted_corpus_rate, 0.5);
100
+ assert.strictEqual(v.accept, false, "untrustworthy baseline forces accept=false");
101
+ });
102
+
103
+ // --- malformed input throws (fail-closed) ---
104
+ check("throws on non-array currentResults", () => {
105
+ assert.throws(() => computeVerdict(null, [], TARGET, {}));
106
+ });
107
+ check("throws on entry missing correct boolean", () => {
108
+ assert.throws(() => computeVerdict([{ task_id: "t1" }], [{ task_id: "t1", correct: true }], TARGET, {}));
109
+ });
110
+ check("throws on missing targetTask.task_id", () => {
111
+ const ok = [...samples("t1",1,1), ...samples("T",1,1)];
112
+ assert.throws(() => computeVerdict(ok, ok, {}, {}));
113
+ });
114
+ check("throws when target has no candidate samples", () => {
115
+ const cur = [...samples("t1",1,1), ...samples("T",1,1)];
116
+ const cand = [...samples("t1",1,1)]; // no T
117
+ assert.throws(() => computeVerdict(cur, cand, TARGET, {}));
118
+ });
119
+
120
+ if (fails > 0) { console.log("verdict: " + fails + " assertion(s) failed"); process.exit(1); }
121
+ console.log("verdict: all assertions passed");
122
+ EOF
123
+ )"
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: every-style-editor
3
+ description: "This skill should be used when reviewing or editing copy for adherence to Every's style guide. It provides systematic line-by-line review for grammar, punctuation, mechanics, and style compliance."
4
+ ---
5
+
6
+ <!-- grok-harness-invoke:start -->
7
+ **Grok Build (`plugins/soleur/lib/harness.ts` `invokeSkill()`):** Read this SKILL.md in this process and run it to completion. A one-segment `soleur:<name>` in this document names a SKILL — on Grok Build, Read `plugins/soleur/skills/<name>/SKILL.md` in this process; it is not a nested tool_use. A multi-segment id such as `soleur:<domain>:<name>` names an AGENT: spawn it, never Read it, and on Grok Build spawn_subagent takes the id with its colons replaced by hyphens (`agentIdToGrokSubagentType`). **Claude Code:** Skill tool for a skill (`soleur:<name>`), Task tool with `subagent_type` for an agent. Forbidden is executing a subset, not the Read.
8
+ <!-- grok-harness-invoke:end -->
9
+
10
+ # Every Style Editor
11
+
12
+ This skill provides a systematic approach to reviewing copy against Every's comprehensive style guide. It transforms Claude into a meticulous line editor and proofreader specializing in grammar, mechanics, and style guide compliance.
13
+
14
+ ## When to Use This Skill
15
+
16
+ Use this skill when:
17
+
18
+ - Reviewing articles, blog posts, newsletters, or any written content
19
+ - Ensuring copy follows Every's specific style conventions
20
+ - Providing feedback on grammar, punctuation, and mechanics
21
+ - Flagging deviations from the Every style guide
22
+ - Preparing clean copy for human editorial review
23
+
24
+ ## Skill Overview
25
+
26
+ This skill enables performing a comprehensive review of written content in four phases:
27
+
28
+ 1. **Initial Assessment** - Understanding context and document type
29
+ 2. **Detailed Line Edit** - Checking every sentence for compliance
30
+ 3. **Mechanical Review** - Verifying formatting and consistency
31
+ 4. **Recommendations** - Providing actionable improvement suggestions
32
+
33
+ ## How to Use This Skill
34
+
35
+ ### Step 1: Initial Assessment
36
+
37
+ Begin by reading the entire piece to understand:
38
+
39
+ - Document type (article, knowledge base entry, social post, etc.)
40
+ - Target audience
41
+ - Overall tone and voice
42
+ - Content context
43
+
44
+ ### Step 2: Detailed Line Edit
45
+
46
+ Review each paragraph systematically, checking for:
47
+
48
+ - Sentence structure and grammar correctness
49
+ - Punctuation usage (commas, semicolons, em dashes, etc.)
50
+ - Capitalization rules (especially job titles, headlines)
51
+ - Word choice and usage (overused words, passive voice)
52
+ - Adherence to Every style guide rules
53
+
54
+ Reference the complete [EVERY_WRITE_STYLE.md](./references/EVERY_WRITE_STYLE.md) for specific rules when in doubt.
55
+
56
+ ### Step 3: Mechanical Review
57
+
58
+ Verify:
59
+
60
+ - Spacing and formatting consistency
61
+ - Style choices applied uniformly throughout
62
+ - Special elements (lists, quotes, citations)
63
+ - Proper use of italics and formatting
64
+ - Number formatting (numerals vs. spelled out)
65
+ - Link formatting and descriptions
66
+
67
+ ### Step 4: Output Results
68
+
69
+ Present findings using this structure:
70
+
71
+ ```
72
+ DOCUMENT REVIEW SUMMARY
73
+ =====================
74
+ Document Type: [type]
75
+ Word Count: [approximate]
76
+ Overall Assessment: [brief overview]
77
+
78
+ ERRORS FOUND: [total number]
79
+
80
+ DETAILED CORRECTIONS
81
+ ===================
82
+
83
+ [For each error found:]
84
+
85
+ **Location**: [Paragraph #, Sentence #]
86
+ **Issue Type**: [Grammar/Punctuation/Mechanics/Style Guide]
87
+ **Original**: "[exact text with error]"
88
+ **Correction**: "[corrected text]"
89
+ **Rule Reference**: [Specific style guide rule violated]
90
+ **Explanation**: [Brief explanation of why this is an error]
91
+
92
+ ---
93
+
94
+ RECURRING ISSUES
95
+ ===============
96
+ [List patterns of errors that appear multiple times]
97
+
98
+ STYLE GUIDE COMPLIANCE CHECKLIST
99
+ ==============================
100
+ ✓ [Rule followed correctly]
101
+ ✗ [Rule violated - with count of violations]
102
+
103
+ FINAL RECOMMENDATIONS
104
+ ===================
105
+ [2-3 actionable suggestions for improving the draft]
106
+ ```
107
+
108
+ ## Style Guide Reference
109
+
110
+ The complete Every style guide is included in [EVERY_WRITE_STYLE.md](./references/EVERY_WRITE_STYLE.md). Key areas to focus on:
111
+
112
+ - **Quick Rules**: Title case for headlines, sentence case elsewhere
113
+ - **Tone**: Active voice, avoid overused words (actually, very, just), be specific
114
+ - **Numbers**: Spell out one through nine; use numerals for 10+
115
+ - **Punctuation**: Oxford commas, em dashes without spaces, proper quotation mark usage
116
+ - **Capitalization**: Lowercase job titles, company as singular (it), teams as plural (they)
117
+ - **Emphasis**: Italics only (no bold for emphasis)
118
+ - **Links**: 2-4 words, don't say "click here"
119
+
120
+ ## Key Principles
121
+
122
+ - **Be specific**: Always quote the exact text with the error
123
+ - **Reference rules**: Cite the specific style guide rule for each correction
124
+ - **Maintain voice**: Preserve the author's voice while correcting errors
125
+ - **Prioritize clarity**: Focus on changes that improve readability
126
+ - **Be constructive**: Frame feedback to help writers improve
127
+ - **Flag ambiguous cases**: When style guide doesn't address an issue, explain options and recommend the clearest choice
128
+
129
+ ## Common Areas to Focus On
130
+
131
+ Based on Every's style guide, pay special attention to:
132
+
133
+ - Punctuation (comma usage, semicolons, apostrophes, quotation marks)
134
+ - Capitalization (proper nouns, titles, sentence starts)
135
+ - Numbers (when to spell out vs. use numerals)
136
+ - Passive voice (replace with active whenever possible)
137
+ - Overused words (actually, very, just)
138
+ - Lists (parallel structure, punctuation, capitalization)
139
+ - Hyphenation (compound adjectives, except adverbs)
140
+ - Word usage (fewer vs. less, they vs. them)
141
+ - Company references (singular "it", teams as plural "they")
142
+ - Job title capitalization