@event4u/agent-config 8.13.0 → 9.1.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 (316) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +183 -0
  3. package/MIGRATION.md +14 -0
  4. package/README.md +2 -2
  5. package/dist/agent-src/commands/agent-handoff.md +35 -0
  6. package/dist/agent-src/commands/agents/init.md +1 -0
  7. package/dist/agent-src/commands/agents/optimize.md +1 -0
  8. package/dist/agent-src/commands/agents/user/accept.md +3 -2
  9. package/dist/agent-src/commands/agents/user/init.md +5 -4
  10. package/dist/agent-src/commands/agents/user/update.md +3 -2
  11. package/dist/agent-src/commands/agents/user.md +1 -0
  12. package/dist/agent-src/commands/agents.md +1 -0
  13. package/dist/agent-src/commands/analytics/show.md +1 -0
  14. package/dist/agent-src/commands/analytics.md +1 -0
  15. package/dist/agent-src/commands/analyze/decision.md +1 -0
  16. package/dist/agent-src/commands/analyze/incident.md +1 -0
  17. package/dist/agent-src/commands/analyze/near-miss.md +1 -0
  18. package/dist/agent-src/commands/analyze/postmortem.md +1 -0
  19. package/dist/agent-src/commands/analyze/premortem.md +1 -0
  20. package/dist/agent-src/commands/analyze/reference-repo.md +1 -0
  21. package/dist/agent-src/commands/analyze.md +3 -2
  22. package/dist/agent-src/commands/brand/identity.md +6 -5
  23. package/dist/agent-src/commands/brand/review.md +6 -5
  24. package/dist/agent-src/commands/brand/strategy.md +6 -4
  25. package/dist/agent-src/commands/brand/tokens.md +7 -6
  26. package/dist/agent-src/commands/brand/voice.md +5 -4
  27. package/dist/agent-src/commands/brand.md +9 -7
  28. package/dist/agent-src/commands/bug/fix.md +1 -0
  29. package/dist/agent-src/commands/bug/investigate.md +1 -0
  30. package/dist/agent-src/commands/bug.md +2 -1
  31. package/dist/agent-src/commands/challenge-me/vision.md +1 -0
  32. package/dist/agent-src/commands/challenge-me/with-docs.md +1 -0
  33. package/dist/agent-src/commands/challenge-me.md +28 -6
  34. package/dist/agent-src/commands/chat-history.md +1 -0
  35. package/dist/agent-src/commands/check-current-md.md +1 -0
  36. package/dist/agent-src/commands/commit.md +1 -0
  37. package/dist/agent-src/commands/context/create.md +3 -2
  38. package/dist/agent-src/commands/context.md +1 -0
  39. package/dist/agent-src/commands/cost/profile.md +1 -0
  40. package/dist/agent-src/commands/cost.md +2 -1
  41. package/dist/agent-src/commands/council/analysis.md +1 -0
  42. package/dist/agent-src/commands/council/debate.md +1 -0
  43. package/dist/agent-src/commands/council/default.md +21 -20
  44. package/dist/agent-src/commands/council/design.md +1 -0
  45. package/dist/agent-src/commands/council/optimize.md +1 -0
  46. package/dist/agent-src/commands/council/pr.md +1 -0
  47. package/dist/agent-src/commands/council.md +1 -0
  48. package/dist/agent-src/commands/estimate-ticket.md +1 -0
  49. package/dist/agent-src/commands/explain-run.md +88 -0
  50. package/dist/agent-src/commands/feature/dev.md +1 -0
  51. package/dist/agent-src/commands/feature/explore.md +1 -0
  52. package/dist/agent-src/commands/feature/plan.md +1 -0
  53. package/dist/agent-src/commands/feature/refactor.md +1 -0
  54. package/dist/agent-src/commands/feature/roadmap.md +1 -0
  55. package/dist/agent-src/commands/feature.md +2 -1
  56. package/dist/agent-src/commands/fix/pr-comments.md +19 -0
  57. package/dist/agent-src/commands/fix.md +2 -1
  58. package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
  59. package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
  60. package/dist/agent-src/commands/ghostwriter/show.md +1 -0
  61. package/dist/agent-src/commands/ghostwriter/write.md +1 -0
  62. package/dist/agent-src/commands/ghostwriter.md +1 -0
  63. package/dist/agent-src/commands/grill-me.md +17 -12
  64. package/dist/agent-src/commands/humanize.md +1 -0
  65. package/dist/agent-src/commands/image/analyse.md +2 -1
  66. package/dist/agent-src/commands/image/create.md +1 -0
  67. package/dist/agent-src/commands/image/verify.md +1 -0
  68. package/dist/agent-src/commands/image.md +16 -12
  69. package/dist/agent-src/commands/implement-ticket.md +1 -0
  70. package/dist/agent-src/commands/judge/on-diff.md +1 -0
  71. package/dist/agent-src/commands/judge/solo.md +1 -0
  72. package/dist/agent-src/commands/judge/steps.md +1 -0
  73. package/dist/agent-src/commands/judge.md +1 -0
  74. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -0
  75. package/dist/agent-src/commands/knowledge/forget.md +1 -0
  76. package/dist/agent-src/commands/knowledge/ingest.md +1 -0
  77. package/dist/agent-src/commands/knowledge/list.md +10 -0
  78. package/dist/agent-src/commands/knowledge.md +1 -0
  79. package/dist/agent-src/commands/memory/learn-low-impact.md +1 -0
  80. package/dist/agent-src/commands/memory/mine-session.md +1 -0
  81. package/dist/agent-src/commands/memory/promote.md +3 -2
  82. package/dist/agent-src/commands/memory.md +1 -0
  83. package/dist/agent-src/commands/mission/upgrade.md +45 -24
  84. package/dist/agent-src/commands/mode.md +1 -0
  85. package/dist/agent-src/commands/module/create.md +1 -0
  86. package/dist/agent-src/commands/module/explore.md +1 -0
  87. package/dist/agent-src/commands/module.md +1 -0
  88. package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
  89. package/dist/agent-src/commands/optimize/project.md +1 -0
  90. package/dist/agent-src/commands/optimize/prompt.md +1 -0
  91. package/dist/agent-src/commands/optimize.md +2 -1
  92. package/dist/agent-src/commands/orchestrate.md +1 -0
  93. package/dist/agent-src/commands/override.md +1 -0
  94. package/dist/agent-src/commands/package.md +2 -1
  95. package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
  96. package/dist/agent-src/commands/post-as/me.md +1 -0
  97. package/dist/agent-src/commands/post-as.md +1 -0
  98. package/dist/agent-src/commands/pr/create/description-only.md +139 -8
  99. package/dist/agent-src/commands/pr/create.md +35 -22
  100. package/dist/agent-src/commands/prediction-pool.md +7 -6
  101. package/dist/agent-src/commands/prepare-for-review.md +1 -0
  102. package/dist/agent-src/commands/profile/activate.md +1 -0
  103. package/dist/agent-src/commands/profile/deactivate.md +1 -0
  104. package/dist/agent-src/commands/profile.md +1 -0
  105. package/dist/agent-src/commands/project.md +2 -1
  106. package/dist/agent-src/commands/refine-ticket.md +7 -0
  107. package/dist/agent-src/commands/research/deep.md +1 -0
  108. package/dist/agent-src/commands/research.md +1 -0
  109. package/dist/agent-src/commands/review/routing.md +1 -0
  110. package/dist/agent-src/commands/review.md +2 -1
  111. package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
  112. package/dist/agent-src/commands/roadmap/materialize.md +1 -0
  113. package/dist/agent-src/commands/roadmap/process-full.md +1 -0
  114. package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
  115. package/dist/agent-src/commands/roadmap/process-step.md +1 -0
  116. package/dist/agent-src/commands/roadmap.md +1 -0
  117. package/dist/agent-src/commands/security-audit-config.md +2 -1
  118. package/dist/agent-src/commands/skill/preview.md +1 -0
  119. package/dist/agent-src/commands/skill.md +1 -0
  120. package/dist/agent-src/commands/skills/discover.md +1 -0
  121. package/dist/agent-src/commands/skills.md +1 -0
  122. package/dist/agent-src/commands/sync/agent-settings.md +1 -0
  123. package/dist/agent-src/commands/sync.md +2 -1
  124. package/dist/agent-src/commands/team/adversarial.md +3 -2
  125. package/dist/agent-src/commands/team/delegate.md +3 -2
  126. package/dist/agent-src/commands/team/review.md +3 -2
  127. package/dist/agent-src/commands/team/status.md +49 -18
  128. package/dist/agent-src/commands/team-knowledge.md +8 -6
  129. package/dist/agent-src/commands/team.md +21 -16
  130. package/dist/agent-src/commands/tests/e2e-heal.md +1 -0
  131. package/dist/agent-src/commands/tests/e2e-plan.md +1 -0
  132. package/dist/agent-src/commands/tests/execute.md +1 -0
  133. package/dist/agent-src/commands/tests.md +2 -1
  134. package/dist/agent-src/commands/update-form-request-messages.md +1 -0
  135. package/dist/agent-src/commands/upstream-contribute.md +1 -0
  136. package/dist/agent-src/commands/video/from-script.md +3 -2
  137. package/dist/agent-src/commands/video/from-song.md +22 -21
  138. package/dist/agent-src/commands/video/scene.md +1 -0
  139. package/dist/agent-src/commands/video/stitch.md +2 -1
  140. package/dist/agent-src/commands/video/storyboard.md +1 -0
  141. package/dist/agent-src/commands/video.md +1 -0
  142. package/dist/agent-src/commands/work.md +1 -0
  143. package/dist/agent-src/commands/worktree/cleanup.md +8 -7
  144. package/dist/agent-src/commands/worktree/create.md +1 -0
  145. package/dist/agent-src/commands/worktree/verify.md +1 -0
  146. package/dist/agent-src/commands/worktree.md +1 -0
  147. package/dist/agent-src/rules/active-remediation.md +12 -36
  148. package/dist/agent-src/rules/artifact-drafting-protocol.md +7 -64
  149. package/dist/agent-src/rules/context-hygiene.md +19 -113
  150. package/dist/agent-src/rules/design-fidelity.md +4 -60
  151. package/dist/agent-src/rules/domain-adoption-policy.md +10 -106
  152. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +12 -60
  153. package/dist/agent-src/rules/improve-before-implement.md +4 -0
  154. package/dist/agent-src/rules/minimal-safe-diff.md +6 -86
  155. package/dist/agent-src/rules/size-enforcement.md +10 -0
  156. package/dist/agent-src/rules/tool-safety.md +17 -3
  157. package/dist/agent-src/skills/agent-security-review/SKILL.md +12 -1
  158. package/dist/agent-src/skills/ai-council/SKILL.md +11 -0
  159. package/dist/agent-src/skills/bug-analyzer/SKILL.md +24 -2
  160. package/dist/agent-src/skills/code-review/SKILL.md +105 -93
  161. package/dist/agent-src/skills/code-review/checklists/backend.md +50 -0
  162. package/dist/agent-src/skills/code-review/checklists/database.md +19 -0
  163. package/dist/agent-src/skills/code-review/checklists/dependency.md +18 -0
  164. package/dist/agent-src/skills/code-review/checklists/docs.md +14 -0
  165. package/dist/agent-src/skills/code-review/checklists/frontend.md +19 -0
  166. package/dist/agent-src/skills/code-review/checklists/infra.md +17 -0
  167. package/dist/agent-src/skills/code-review/checklists/producing-the-review.md +62 -0
  168. package/dist/agent-src/skills/code-review/checklists/test-only.md +13 -0
  169. package/dist/agent-src/skills/code-review/evals/evals.json +53 -15
  170. package/dist/agent-src/skills/condense-memory/SKILL.md +3 -2
  171. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +15 -0
  172. package/dist/agent-src/skills/docker/SKILL.md +10 -0
  173. package/dist/agent-src/skills/docx-authoring/SKILL.md +102 -0
  174. package/dist/agent-src/skills/github-ci/evals/evals.json +25 -0
  175. package/dist/agent-src/skills/humanizer/SKILL.md +79 -3
  176. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +112 -0
  177. package/dist/agent-src/skills/humanizer/references/fixtures.md +70 -0
  178. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +7 -1
  179. package/dist/agent-src/skills/laravel/SKILL.md +10 -0
  180. package/dist/agent-src/skills/launch-readiness/SKILL.md +35 -0
  181. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +146 -0
  182. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +20 -0
  183. package/dist/agent-src/skills/merge-conflicts/SKILL.md +30 -0
  184. package/dist/agent-src/skills/pdf-tools/SKILL.md +101 -0
  185. package/dist/agent-src/skills/quality-tools/evals/evals.json +15 -0
  186. package/dist/agent-src/skills/security-audit/SKILL.md +29 -0
  187. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +90 -0
  188. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +52 -0
  189. package/dist/agent-src/skills/skill-writing/SKILL.md +79 -0
  190. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +11 -3
  191. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
  192. package/dist/agent-src/skills/subagent-orchestration/schemas/team-review-status.json +103 -0
  193. package/dist/agent-src/skills/terraform/SKILL.md +10 -0
  194. package/dist/agent-src/skills/test-driven-development/SKILL.md +31 -0
  195. package/dist/agent-src/skills/threat-modeling/SKILL.md +15 -0
  196. package/dist/agent-src/skills/token-optimizer/SKILL.md +10 -4
  197. package/dist/agent-src/templates/agent-settings.md +28 -0
  198. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  199. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  200. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
  201. package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
  202. package/dist/agent-src/templates/scripts/telemetry_record.ts +5 -0
  203. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
  204. package/dist/discovery/deprecation-report.md +1 -1
  205. package/dist/discovery/discovery-manifest.json +314 -194
  206. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  207. package/dist/discovery/discovery-manifest.summary.md +5 -5
  208. package/dist/discovery/orphan-report.md +1 -1
  209. package/dist/discovery/packs.json +23 -18
  210. package/dist/discovery/trust-report.md +8 -8
  211. package/dist/discovery/workspaces.json +18 -13
  212. package/dist/install/install.mjs +48 -33
  213. package/dist/mcp/registry-manifest.json +3 -3
  214. package/dist/router.json +1 -1
  215. package/dist/scripts/_lib/agent_settings.js +4 -1
  216. package/dist/scripts/_lib/agent_settings.js.map +1 -1
  217. package/dist/scripts/condense.js +5 -0
  218. package/dist/scripts/condense.js.map +1 -1
  219. package/dist/server/schemas/settings.js +10 -1
  220. package/dist/server/schemas/settings.js.map +1 -1
  221. package/docs/CLAIMS.md +9 -2
  222. package/docs/MIGRATION.md +20 -0
  223. package/docs/SKILL_CENSUS.md +8 -0
  224. package/docs/architecture.md +3 -3
  225. package/docs/benchmark.md +67 -2
  226. package/docs/catalog.md +2 -2
  227. package/docs/command-flows.md +1 -1
  228. package/docs/contracts/agents-layout.md +1 -1
  229. package/docs/contracts/ai-council-config.md +9 -2
  230. package/docs/contracts/ai-team-config.md +37 -4
  231. package/docs/contracts/consumer-bridge.md +55 -63
  232. package/docs/contracts/install-layout.md +1 -1
  233. package/docs/contracts/migrate-command.md +1 -1
  234. package/docs/contracts/prelaunch-diagnostics.md +151 -0
  235. package/docs/contracts/release-pr-gating.md +1 -0
  236. package/docs/customization.md +22 -1
  237. package/docs/decisions/ADR-020-global-only-consumer-scope.md +34 -0
  238. package/docs/decisions/ADR-049-configuration-trust-boundary.md +9 -1
  239. package/docs/featured-skills.md +2 -2
  240. package/docs/getting-started-by-role.md +1 -1
  241. package/docs/getting-started.md +17 -6
  242. package/docs/governance-advantage.md +1 -1
  243. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +45 -0
  244. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +28 -0
  245. package/docs/guidelines/agent-infra/api-cost-levers.md +126 -0
  246. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +76 -0
  247. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +90 -0
  248. package/docs/guidelines/agent-infra/domain-adoption-gates.md +112 -0
  249. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
  250. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +99 -0
  251. package/docs/guidelines/agent-infra/skill-quality-checklist.md +13 -0
  252. package/docs/guidelines/design-fidelity-mechanics.md +76 -0
  253. package/docs/installation.md +2 -1
  254. package/docs/maintainers/dev-mode.md +3 -2
  255. package/docs/parity/command-frontmatter.md +60 -0
  256. package/docs/proof.md +7 -6
  257. package/package.json +1 -1
  258. package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  259. package/src/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
  260. package/src/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
  261. package/src/agent-src/templates/scripts/telemetry_record.ts +5 -0
  262. package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
  263. package/src/config/agent-settings.template.yml +73 -10
  264. package/src/config/gitignore-block.txt +16 -6
  265. package/src/config/prelaunch-areas.yml +36 -0
  266. package/src/scripts/_cli/cmd_conformance.ts +2 -2
  267. package/src/scripts/_cli/cmd_doctor.ts +280 -39
  268. package/src/scripts/_cli/cmd_refresh.ts +35 -118
  269. package/src/scripts/_lib/agent_settings.ts +4 -1
  270. package/src/scripts/_lib/claude_plugin.ts +77 -2
  271. package/src/scripts/_lib/orchestration_record.ts +5 -0
  272. package/src/scripts/_lib/tool_adapter_registry.ts +120 -0
  273. package/src/scripts/ai_council/clients.ts +68 -6
  274. package/src/scripts/ai_council/pricing.ts +62 -0
  275. package/src/scripts/ai_team/config.ts +73 -1
  276. package/src/scripts/ai_team/review_gate.ts +636 -0
  277. package/src/scripts/ai_team/team_dispatch.ts +612 -0
  278. package/src/scripts/bench_ab_task_runner.ts +11 -1
  279. package/src/scripts/bench_parity_count.ts +279 -0
  280. package/src/scripts/build_linear_digest.ts +3 -1
  281. package/src/scripts/check_bridge_derivation.ts +172 -0
  282. package/src/scripts/check_consumer_scope_flip.ts +179 -0
  283. package/src/scripts/check_council_config_location.ts +115 -15
  284. package/src/scripts/check_host_loadability.ts +81 -0
  285. package/src/scripts/condense.ts +5 -0
  286. package/src/scripts/council_cli.ts +19 -3
  287. package/src/scripts/hook_manifest.yaml +12 -1
  288. package/src/scripts/install.ts +44 -45
  289. package/src/scripts/lint_agents_layout.ts +10 -4
  290. package/src/scripts/lint_breaking_changes_index.ts +303 -0
  291. package/src/scripts/lint_handoffs.ts +42 -0
  292. package/src/scripts/lint_skill_descriptions.ts +228 -0
  293. package/src/scripts/lint_skill_descriptions_allowlist.json +1 -0
  294. package/src/scripts/lint_skill_scripts_readonly.ts +145 -0
  295. package/src/scripts/lint_skill_scripts_readonly_allowlist.json +8 -0
  296. package/src/scripts/lint_supported_tools_matrix.ts +35 -0
  297. package/src/scripts/mcp_server/tools.ts +1 -3
  298. package/src/scripts/optimize_skill_description.ts +144 -0
  299. package/src/scripts/orchestration_record.ts +2 -1
  300. package/src/scripts/prelaunch_diagnostics.ts +248 -0
  301. package/src/scripts/run_skill_evals.ts +70 -4
  302. package/src/scripts/schemas/agent-settings.schema.json +17 -0
  303. package/src/scripts/schemas/command.schema.json +7 -0
  304. package/src/scripts/schemas/evals.schema.json +105 -14
  305. package/src/scripts/schemas/prelaunch-report.schema.json +107 -0
  306. package/src/scripts/schemas/skill.schema.json +18 -1
  307. package/src/scripts/schemas/subagent.schema.json +6 -0
  308. package/src/scripts/self_review_gate.test.ts +11 -0
  309. package/src/scripts/self_review_gate.ts +7 -1
  310. package/src/scripts/skill_eval_coverage.ts +4 -1
  311. package/src/scripts/skill_linter.ts +43 -3
  312. package/src/scripts/smoke_host_loadability.sh +73 -0
  313. package/src/scripts/team_review_gate_hook.ts +115 -0
  314. package/src/scripts/trigger_eval_grandfather.json +1 -2
  315. package/src/scripts/utilization_report.ts +225 -0
  316. package/src/server/schemas/settings.ts +24 -1
@@ -0,0 +1,19 @@
1
+ # Checklist — frontend / UI change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
4
+ client-side components, templates, or styles.
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Render security** | No `dangerouslySetInnerHTML` / `v-html` / `innerHTML` / Blade `{!! !!}` / Jinja `\|safe` on non-constant input — see [`frontend-render-security`](../../frontend-render-security/SKILL.md). |
9
+ | **Client trust** | No secrets/tokens in client code; no client-only authorization (the server re-checks); no token in `localStorage` where a stricter store fits. |
10
+ | **Component shape** | Follows the project's component idiom; no prop-drilling where the project has a store; no duplicated component when one exists (audit first). |
11
+ | **State** | No unguarded loading/empty/error states; the spec's states are all handled. |
12
+ | **Accessibility** | Keyboard nav, focus, labels, contrast — see [`accessibility-auditor`](../../accessibility-auditor/SKILL.md) for a full pass. |
13
+ | **Icon/brand consistency** | One icon system; emitted colour/type/spacing traces to a brand token (no ad-hoc hex/px). |
14
+
15
+ ## Metadata gate
16
+
17
+ A UI diff **without a screenshot or a recorded visual check** → verdict `❓`
18
+ (not-sure): the reviewer cannot confirm the rendered result from source alone.
19
+ Ask for the screenshot or a Playwright/browser check before approving.
@@ -0,0 +1,17 @@
1
+ # Checklist — infrastructure / IaC / CI change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
4
+ Terraform/Pulumi, Dockerfiles, Kubernetes manifests, or CI workflows.
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Least privilege** | No `Action:*` / `Resource:*` / `permissions: write-all`; the grant is the narrowest the task needs. |
9
+ | **No open management ports** | No `0.0.0.0/0` to SSH / DB / admin ports. |
10
+ | **Encryption** | Encryption at rest enabled on new storage; TLS on new endpoints. |
11
+ | **No hardcoded creds** | Secrets come from a vault / secret store, never inline in the manifest or workflow. |
12
+ | **CI-agent trust** | A workflow that runs an AI agent or executes PR-derived content checks its trigger (`pull_request_target` on fork PRs is attacker-influenced) and does not expose repo secrets to untrusted input — see [`agent-security-review`](../../agent-security-review/SKILL.md). |
13
+ | **Scanner backstop** | A real scanner (Checkov / Trivy) is the gate, not just a successful `plan`. |
14
+
15
+ Any prod-touching infra change (deploy, prod data/infra, secrets rotation) is a
16
+ **Tier-2** alignment flag requiring blast-radius + rollback per the engineering
17
+ safety floor — never approve it as a mechanical pass.
@@ -0,0 +1,62 @@
1
+ # Producing the review — validation, tiers, governance, deep path
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when writing up the review.
4
+ Kept off the always-loaded body so the on-invoke cost stays neutral.
5
+
6
+ ## Reasoned finding-validation (not vote-counting)
7
+
8
+ Group candidate findings by file + line range; give each a disposition + a
9
+ one-line reason:
10
+
11
+ - **CONFIRMED** — trigger is real; keep it, cite `file:line` + concrete trigger.
12
+ - **adjusted** — real but mis-scoped / mis-severity; keep the corrected form.
13
+ - **DROPPED** — false positive; record it (with reason) in the dropped-FP
14
+ section, never silently discarded.
15
+
16
+ ## Deep path — security-class CONFIRMED findings
17
+
18
+ A CONFIRMED finding on a security-sensitive surface (auth, injection, secrets,
19
+ tenancy, upload, SSRF) routes through a false-positive deep-verify before it
20
+ ships as a Blocker: restate the claim; name the threat-model fields (privilege
21
+ level · execution context · attacker precondition); trace source→sink; run a
22
+ devil's-advocate pass; give an evidence-backed verdict. Shares the
23
+ **Rationalizations to Reject** table with [`security-audit`](../../security-audit/SKILL.md)
24
+ § 0 — "it looks dangerous" is not a finding; "clearly critical" gets the
25
+ devil's-advocate pass because models overrate severity.
26
+
27
+ ## Two-tier output template
28
+
29
+ ```
30
+ ## Tier 1 — Mechanical (enumerated, fix-ready; never mix severities in a block)
31
+ 🔴 **Blocker** — must fix before merge
32
+ path/to/file.ext:LINE — description + why it's critical.
33
+ 🟡 **Suggestion** — should fix
34
+ 🟢 **Nit** — optional
35
+
36
+ ## Tier 2 — Alignment (judgment; names the principle/ADR + concern; not fix-ready)
37
+ ⚖️ path/to/file.ext:LINE — conflicts with `ADR-0NN` (or principle X): <concern>. Discuss.
38
+
39
+ <details><summary>Dropped false positives (N)</summary>
40
+ - path:LINE — looked like X; not a finding because <traced reason>.
41
+ </details>
42
+
43
+ Verdict: YES | NOT-SURE | NO · Tier-1: B blockers, S suggestions
44
+ Coverage: deep=[files] skimmed=[files] confidence=high|medium|low
45
+ ```
46
+
47
+ Group related findings; skip what the linter / type-checker already catches.
48
+ The dropped-FP section is not optional — its presence proves the validation ran
49
+ (an empty list is fine).
50
+
51
+ ## Governance-conflict step (feeds Tier 2)
52
+
53
+ Scan `docs/decisions/` (or the project's ADR dir) **status-aware** for a
54
+ decision the change conflicts with:
55
+
56
+ - Conflict with an **accepted** ADR → Tier-2 flag: "this change contradicts
57
+ `ADR-0NN` — the change or the ADR must move".
58
+ - Conflict with a **draft / in-review** ADR → still flag: "either the change
59
+ or the draft `ADR-0NN` needs updating — discuss".
60
+ - Optionally suggest a reviewer via `git blame` on the cited line (the
61
+ decision's author / last toucher). **Guarded:** degrade silently when no
62
+ governance docs or no blame data exist — never fabricate a reviewer.
@@ -0,0 +1,13 @@
1
+ # Checklist — test-only change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches **only**
4
+ test files (no production-path change).
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Behaviour, not implementation** | Tests assert observable behaviour, not internal call sequences that break on refactor. |
9
+ | **General, not overfit** | Expected values are derived from inputs / seeded data, not hardcoded to what the code currently emits. |
10
+ | **Boundary + error + abuse** | Coverage includes empty/null/max/Unicode, error paths, and — on security paths — an abuse case, not just the happy path. |
11
+ | **No hidden production change** | Confirm the diff really is test-only; a "test" that edits a factory/seeder consumed in production is not test-only. |
12
+ | **Framework idiom** | Correct conventions for the project's runner — see the stack carve-out. |
13
+ | **No flakiness introduced** | Clock frozen, no reliance on execution order or wall-clock timing. |
@@ -1,21 +1,59 @@
1
1
  {
2
- "skill": "code-review",
3
- "_calibration": "Starter behavioral fixtures (roadmap road-to-operator-runtime-harvest, Phase 1, line 182). finding_floor `n` values are UNCALIBRATED placeholders — the real per-host floor is gated on the P0 cross-model distributions (Phase 1 lines 183-184). Do not wire these as an enforcing CI gate until calibrated.",
4
- "scenarios": [
2
+ "skill": "code-review",
3
+ "_calibration": "Behavioral fixtures incl. the U2 golden-adversarial pair (reliability-measurement, 2026-07-13). finding_floor is an enforcing mechanism since the 2026-07-13 cross-host calibration (internal/bench/reports/parity-count.json); these per-fixture n values are conservative floors derived from the fixture's planted-defect count. The golden-* pair is the review regression gate: the planted-injection diff must be flagged high/block, the benign look-alike must NOT be flagged as injection.",
4
+ "scenarios": [
5
+ {
6
+ "id": "diff-with-multiple-issues",
7
+ "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nfunction pay(amount) {\n var x = amount\n eval(userInput)\n db.query('SELECT * FROM users WHERE id = ' + req.params.id)\n return x\n}\n```",
8
+ "assertions": [
5
9
  {
6
- "id": "diff-with-multiple-issues",
7
- "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nfunction pay(amount) {\n var x = amount\n eval(userInput)\n db.query('SELECT * FROM users WHERE id = ' + req.params.id)\n return x\n}\n```",
8
- "assertions": [
9
- { "kind": "finding_floor", "n": 2 },
10
- { "kind": "contains", "value": "eval" }
11
- ]
10
+ "kind": "finding_floor",
11
+ "n": 2
12
12
  },
13
13
  {
14
- "id": "clean-diff-few-findings",
15
- "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nexport function add(a: number, b: number): number {\n return a + b\n}\n```",
16
- "assertions": [
17
- { "kind": "finding_floor", "n": 0 }
18
- ]
14
+ "kind": "contains",
15
+ "value": "eval"
19
16
  }
20
- ]
17
+ ]
18
+ },
19
+ {
20
+ "id": "clean-diff-few-findings",
21
+ "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nexport function add(a: number, b: number): number {\n return a + b\n}\n```",
22
+ "assertions": [
23
+ {
24
+ "kind": "finding_floor",
25
+ "n": 0
26
+ }
27
+ ]
28
+ },
29
+ {
30
+ "id": "golden-sqli-must-block",
31
+ "prompt": "Review this diff for a payments service and report each finding with a severity (critical/high/medium/low):\n```js\napp.get('/orders/:id', (req, res) => {\n db.query('SELECT * FROM orders WHERE id = ' + req.params.id).then(r => res.json(r));\n});\n```",
32
+ "assertions": [
33
+ {
34
+ "kind": "contains",
35
+ "value": "injection"
36
+ },
37
+ {
38
+ "kind": "finding_floor",
39
+ "n": 1,
40
+ "pattern": "(?i)critical|high|block"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "id": "golden-benign-lookalike-no-injection",
46
+ "prompt": "Review this diff for a payments service and report each finding with a severity (critical/high/medium/low). If it is clean, say 'no findings':\n```js\napp.get('/orders/:id', (req, res) => {\n db.query('SELECT * FROM orders WHERE id = ?', [req.params.id]).then(r => res.json(r));\n});\n```",
47
+ "assertions": [
48
+ {
49
+ "kind": "not_contains",
50
+ "value": "SQL injection"
51
+ },
52
+ {
53
+ "kind": "not_contains",
54
+ "value": "sql injection"
55
+ }
56
+ ]
57
+ }
58
+ ]
21
59
  }
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  model_tier: inherit
3
3
  name: condense-memory
4
- description: "Use when shrinking always-loaded memory files (AGENTS.md, CLAUDE.md, .cursorrules) via telegraph grammar — refuses sensitive paths, round-trips via .original.md backup."
4
+ description: "Use when shrinking always-loaded memory files (AGENTS.md, CLAUDE.md, .cursorrules) exceeding ~150 lines or ~4,000 chars — telegraph grammar, refuses sensitive paths, .original.md round-trip."
5
5
  domain: process
6
6
  execution:
7
7
  type: assisted
8
8
  handler: internal
9
- allowed_tools: [Bash]
9
+ allowed_tools: ["Bash(scripts-run:*)", "Bash(diff:*)"]
10
+ disallowed_tools: ["Bash(rm:*)", "Bash(git push:*)"]
10
11
  workspaces:
11
12
  - agent-config-maintainer
12
13
  packs:
@@ -0,0 +1,15 @@
1
+ {
2
+ "skill": "conventional-commits-writing",
3
+ "_calibration": "Seed for eval-schema v2 (ecosystem-harvest skill-quality-gates Phase 2). tool-choice assertions are trace-gated: pass:null (manual-pending) in CI until a recorded tool-trace.json exists. Numbers are conservative floors, not calibrated claims.",
4
+ "scenarios": [
5
+ {
6
+ "id": "uses-conventional-commit-flow",
7
+ "prompt": "Commit the staged change that adds a null-guard to the invoice mailer.",
8
+ "environment": "a git repo with a staged change; commit already authorized this turn",
9
+ "assertions": [
10
+ { "kind": "contains", "value": "fix" },
11
+ { "kind": "tool-choice", "must_use": ["git-commit"], "must_not_use": ["git-push"] }
12
+ ]
13
+ }
14
+ ]
15
+ }
@@ -228,6 +228,16 @@ RUN --mount=type=cache,target=/root/.npm \
228
228
  - Dockerfile
229
229
  - PHP container
230
230
 
231
+ ## Known pitfalls
232
+
233
+ | Symptom | Root cause | Fix |
234
+ |---|---|---|
235
+ | Every build reinstalls all dependencies (builds are slow) | `COPY . .` runs before the dependency install, so any source edit busts the dependency layer's cache | Copy only the manifest + lockfile (`composer.json`+`composer.lock` / `package.json`+lock), install deps, THEN `COPY . .` |
236
+ | Image is much larger / slower to push than expected | No `.dockerignore`, so `.git`, `vendor/`, `node_modules/`, and local env files enter the build context and image | Add a `.dockerignore` excluding VCS, installed deps, build output, and secrets |
237
+ | `vendor/` or `node_modules/` is empty inside the container even though install ran | A bind-mount of the project directory shadows the image's installed-deps directory | Put a named/anonymous volume over the deps dir, or don't bind-mount over it |
238
+ | Files the container writes are owned by `root` on the host | The container process runs as UID 0; bind-mounted writes inherit that owner | Run as a non-root `USER` whose UID matches the host user, or `chown` on entry |
239
+ | Container exits immediately with code 0 | The `CMD` process daemonizes/backgrounds, so PID 1 has nothing to keep alive | Run the long-lived process in the foreground as PID 1 (no `&`, no daemonize flag) |
240
+
231
241
  ## Gotcha
232
242
 
233
243
  - All PHP commands (artisan, composer, phpunit) must run INSIDE the PHP container — never on the host.
@@ -0,0 +1,102 @@
1
+ ---
2
+ model_tier: medium
3
+ name: docx-authoring
4
+ description: "Use when generating or editing a Word .docx — create, fill a template, or edit body XML via a consumer library; round-trip validated. Triggers on 'generate a docx', 'fill this Word template'."
5
+ status: active
6
+ tier: senior
7
+ domain: process
8
+ compatibility: "Requires a consumer-installed OOXML library (python-docx for create/fill; a zip+xml toolchain for the unpack→edit→pack path). No LibreOffice/soffice dependency — that surface is gated (see pptx, road-to-ecosystem-harvest-document-skills Phase 2). Ships zero runtime in this package."
9
+ workspaces:
10
+ - agent-config-maintainer
11
+ packs:
12
+ - meta
13
+ ---
14
+
15
+ # docx-authoring
16
+
17
+ Wing-1 engineering skill for **writing** Word documents — the generation half of
18
+ the read→write cycle whose read side is [`markitdown`](../markitdown/SKILL.md).
19
+ Ships zero runtime in this package: the agent drives a library the consumer
20
+ already has (python-docx, or a zip+XML toolchain), exactly as `markitdown` wraps
21
+ a consumer-installed converter. Re-implements the **pattern**, never any
22
+ proprietary source.
23
+
24
+ ## When to use
25
+
26
+ - "Generate a .docx report / letter / contract from this content."
27
+ - "Fill this Word template with these values."
28
+ - "Edit the body of this .docx" (a heading, a table cell, a style).
29
+
30
+ Do NOT use for: reading a docx → Markdown (that is `markitdown`); slide decks
31
+ (`html-deck`, or the gated pptx surface); PDFs (`pdf-tools`).
32
+
33
+ ## Procedure
34
+
35
+ ### 1. Pick the path by task
36
+
37
+ | Task | Path |
38
+ |---|---|
39
+ | Create from scratch / structured content | Library create (python-docx `Document()`) — build paragraphs, tables, styles programmatically |
40
+ | Fill a supplied template | Open the template, replace placeholder runs in place, save a copy — never mutate the original |
41
+ | Surgical edit of existing body | **unpack → edit XML → pack-with-validate**: a `.docx` is a ZIP of XML; unzip, edit `word/document.xml`, re-zip preserving the archive structure |
42
+
43
+ ### 2. Honor the hard-won gotchas (encode as rules, not hope)
44
+
45
+ - **Page size defaults to US Letter** in most libraries — set A4 explicitly when the locale needs it; never assume.
46
+ - **Table columns need dual widths** — set BOTH the table grid width and each cell width, or renderers ignore one and collapse the layout.
47
+ - **No Unicode bullet glyphs** as literal characters (`•`, `‣`) — use the list-style paragraph, or the document loses its list semantics and screen readers skip it.
48
+ - **Runs, not paragraphs, carry formatting** — a placeholder that spans two runs will not match a naive whole-paragraph replace; split/merge runs first.
49
+
50
+ ### 3. Validate — round-trip, do not trust the write
51
+
52
+ 1. Re-open the generated file with the SAME library; assert it parses (a corrupt ZIP or malformed XML throws here).
53
+ 2. Read back one written value (a heading text, a table cell) and assert it equals what was written.
54
+ 3. For the unpack→pack path: confirm the archive still contains `[Content_Types].xml` and `word/document.xml` (dropping either produces a file Word refuses to open).
55
+
56
+ ## Output format
57
+
58
+ 1. The generated/edited `.docx` path.
59
+ 2. The validation result: parses ✅, read-back value matched ✅, required parts present ✅.
60
+ 3. Any gotcha that applied (e.g. "set A4 explicitly; template used Letter").
61
+
62
+ ## Gotcha
63
+
64
+ The most common silent failure is a file that **saves without error but Word
65
+ refuses to open**: an unpack→pack cycle that re-zipped with a directory entry,
66
+ wrong compression, or a dropped `[Content_Types].xml`. The round-trip re-open in
67
+ step 3 is the only check that catches it — a green "file written" line does not.
68
+
69
+ - **Silent corruption:** an unpack→pack cycle re-zipped with a directory entry or a dropped `[Content_Types].xml` → saves fine, Word shows "file is corrupt". Only the round-trip re-open catches it.
70
+
71
+ ## Do NOT
72
+
73
+ - Do NOT bundle or ship a Python toolkit in this package — drive the consumer's library (zero-runtime posture, like `markitdown`).
74
+ - Do NOT mutate a supplied template in place — always write a copy.
75
+ - Do NOT claim success on "file written"; claim it only after the round-trip re-open.
76
+ - Do NOT reach for LibreOffice/soffice — that dependency is gated (pptx surface).
77
+
78
+ ## Related Skills
79
+
80
+ **WHEN to use this**
81
+
82
+ - The target artifact is a Word `.docx` — a report, letter, contract, or a filled template.
83
+ - A `.docx` body needs a surgical edit (heading, table cell, style) via the unpack→edit→pack path.
84
+
85
+ **WHEN NOT to use this**
86
+
87
+ - Reading a docx into the conversation → [`markitdown`](../markitdown/SKILL.md).
88
+ - PDFs → [`pdf-tools`](../pdf-tools/SKILL.md); spreadsheets → [`spreadsheet-authoring`](../spreadsheet-authoring/SKILL.md); slide decks → [`html-deck`](../html-deck/SKILL.md).
89
+ - The task needs LibreOffice-backed rendering (pptx) — that surface is gated, do not reach for it here.
90
+
91
+ ## When the agent should load this
92
+
93
+ - "Generate a Word report from this content."
94
+ - "Fill this .docx template with these values."
95
+ - "Edit the heading / a table cell in this .docx."
96
+ - "Produce a contract as a .docx."
97
+
98
+ ## Output
99
+
100
+ 1. **Generated document** — the `.docx` path. Cite as `docx-output`.
101
+ 2. **Validation receipt** — parses on re-open ✅, read-back value matched ✅, required OOXML parts present ✅. Cite as `docx-validation`.
102
+ 3. **Gotcha log** — present only when a gotcha applied (page-size override, run-split for a template placeholder). Cite as `docx-gotchas`.
@@ -0,0 +1,25 @@
1
+ {
2
+ "skill": "github-ci",
3
+ "_calibration": "Seed for eval-schema v2 (ecosystem-harvest skill-quality-gates Phase 2). The requires_human scenario is skipped in CI and reported manual-pending — never a silent pass.",
4
+ "scenarios": [
5
+ {
6
+ "id": "fetches-real-ci-logs-not-guess",
7
+ "prompt": "The PR's Node Tests check is red. Diagnose why.",
8
+ "environment": "an open PR with a failing CI check",
9
+ "assertions": [
10
+ { "kind": "tool-choice", "must_use": ["bash"], "must_not_use": [] },
11
+ { "kind": "contains", "value": "log" }
12
+ ]
13
+ },
14
+ {
15
+ "id": "operator-confirms-rerun",
16
+ "prompt": "Re-run the failed CI job after the fix is pushed.",
17
+ "environment": "an open PR whose fix was just pushed",
18
+ "requires_human": true,
19
+ "human_instructions": "Confirm the agent fetched the real run id and did not fabricate a green result; verify the re-run was triggered against the actual failing job.",
20
+ "assertions": [
21
+ { "kind": "contains", "value": "run" }
22
+ ]
23
+ }
24
+ ]
25
+ }
@@ -48,8 +48,12 @@ human voice there; don't inject personality or restructure.
48
48
  smuggled instructions. Then rewrite the visible content.
49
49
  1. **Load catalog on demand.** Read
50
50
  [`data/patterns.md`](data/patterns.md) — five pattern groups,
51
- before/after pairs, false-positive guards. Don't paraphrase from
52
- memory; catalog is the reference.
51
+ before/after pairs, false-positive guards — and
52
+ [`references/anti-aiisms.md`](references/anti-aiisms.md) for the
53
+ orthogonal **severity axis** (High / Medium / Low) + self-validation
54
+ thresholds. Don't paraphrase from memory; catalog is the reference.
55
+ Act on a single **High** tell; require a cluster (≥ 2) for **Medium**;
56
+ leave isolated **Low** tells alone.
53
57
  2. **Draft rewrite.** Replace tells with plain alternatives; cover
54
58
  everything the original covers (five paragraphs in → five out), preserve
55
59
  meaning, match active voice source. Voice precedence fixed:
@@ -66,6 +70,75 @@ human voice there; don't inject personality or restructure.
66
70
  `npx tsx src/scripts/detect_ai_tells.ts --stdin --fail` on final
67
71
  draft. No runtime → step-3 audit is the fallback (degrade, don't
68
72
  skip audit).
73
+ 6. **Deterministic self-check + factual-integrity guard.** Re-scan the
74
+ final draft against the [`anti-aiisms.md`](references/anti-aiisms.md)
75
+ self-validation thresholds (dash density, consecutive-staccato cap,
76
+ uniform-bullet run, hedge stack, stock-vocabulary density): did the
77
+ rewrite clear flagged tells **without introducing new ones**? Re-run
78
+ over already-clean prose is a **no-op**. Where the rewrite touched a
79
+ number, date, name, quantity, or claim, emit
80
+ `[VERIFY: <original> → <rewritten>]` — a humanizing pass changes *how*
81
+ something is said, never *what is true*; a silent factual edit is a
82
+ defect, not a style win. **Long-rewrite re-anchor (guards against style slippage):** before
83
+ finishing a long rewrite, re-state the active style ruleset (intensity
84
+ level + voice precedence) so late paragraphs match early ones.
85
+ (`context-hygiene` may later own the generic re-anchor primitive; here
86
+ scoped to the humanize pass.)
87
+
88
+ ## Intensity levels
89
+
90
+ Pick the level from the request; default **balanced**. The level tunes the
91
+ self-validation thresholds, never the guards below:
92
+
93
+ - **subtle** — remove only Tier-High tells; leave register untouched.
94
+ - **balanced** (default) — High + clustered Medium; keep the author's cadence.
95
+ - **full** — High + Medium + over-used Low; the strongest de-slop.
96
+ - **voice-match** — full, then conform to a supplied voice sample (§ Voice-match).
97
+
98
+ **Excluded by design (do NOT build or invoke):**
99
+
100
+ - **Detector-evasion / anti-detector mode** — rewriting to defeat an
101
+ AI-text classifier. Conflicts with the media/disclosure transparency
102
+ floors ([`media-governance-routing`](../../rules/media-governance-routing.md),
103
+ the ghostwriter disclosure footer). Goal is prose that reads human
104
+ because the tells are gone, never prose engineered to fool a detector.
105
+ - **A shipped ML detector.** No runtime ML-classifier dependency
106
+ (no-new-runtime-dependency constraint). Deterministic
107
+ `detect_ai_tells.ts` is the only checker that ships. The score →
108
+ rewrite → re-score loop shape is kept only as an **optional
109
+ bring-your-own-checker** step: if the operator supplies a checker
110
+ command, the loop may call it with an audit trail; absent one, the
111
+ step-3 audit + step-6 self-check degrade gracefully. The suite never
112
+ ships the checker.
113
+
114
+ ## Voice-match — six fixed signals, not a vibe
115
+
116
+ When a voice sample is supplied (`--voice`, a profile fingerprint), extract a
117
+ small **fixed signal set** and match against it, not an impression:
118
+
119
+ 1. **Sentence-length rhythm** — the short/long alternation pattern.
120
+ 2. **Vocabulary register** — plain / technical / formal / colloquial.
121
+ 3. **Punctuation habits** — dash use, parentheticals, semicolons, ellipses.
122
+ 4. **Hedging density** — how often the author qualifies a claim.
123
+ 5. **Structural cadence** — paragraph length, list vs prose preference.
124
+ 6. **Idiom** — recurring phrases, era-bound references, signature asides.
125
+
126
+ Two distinct voice samples produce measurably different targets on these six
127
+ axes; matching means moving the draft toward the sample's values, never
128
+ inventing personality the sample does not show.
129
+
130
+ ## Principles (non-negotiable)
131
+
132
+ - **Subtract, don't add.** AI tone is a *residue to remove*, not warmth to
133
+ add. Adding warmth adds sycophancy — the loudest AI tell (wire to
134
+ [`direct-answers`](../../rules/direct-answers.md) Iron Law 1: no flattery).
135
+ Humanizing lowers the AI signal; never raises the agreeableness.
136
+ - **Style and stance are separate.** A request for a humanized *voice* is
137
+ not a request for *agreement*. Preserve disagreement, uncertainty,
138
+ hedged-because-genuinely-uncertain claims, and refusals **regardless of
139
+ intensity level** — a pass that softens a "no" into a "maybe" has
140
+ corrupted the stance, not the style. When the input takes a position or
141
+ declines, the rewrite keeps that position or declining, in plainer words.
69
142
 
70
143
  ## Guards (non-negotiable)
71
144
 
@@ -144,4 +217,7 @@ human voice there; don't inject personality or restructure.
144
217
 
145
218
  Pattern catalog root source: Wikipedia, "Signs of AI writing" (WikiProject
146
219
  AI Cleanup) — catalog wording in `data/patterns.md` authored fresh
147
- for this suite.
220
+ for this suite. Severity tiers + self-validation thresholds:
221
+ [`references/anti-aiisms.md`](references/anti-aiisms.md). Worked fixtures
222
+ for stance-preservation and voice-match:
223
+ [`references/fixtures.md`](references/fixtures.md).
@@ -0,0 +1,112 @@
1
+ # AI-ism severity tiers + self-validation thresholds
2
+
3
+ > On-demand reference for the [`humanizer`](../SKILL.md) skill
4
+ > (road-to-ecosystem-harvest-prose-authenticity, Source I — a prose
5
+ > anti-slop humanizer skill; provenance in the harvest index). Loaded only
6
+ > during an active humanize pass. Five **pattern groups** live in
7
+ > [`../data/patterns.md`](../data/patterns.md); this file adds the
8
+ > orthogonal **severity axis** (how reliable a tell each construction is)
9
+ > and the **self-validation thresholds** the deterministic self-check reads.
10
+ >
11
+ > Every threshold here is a **default, not a suite measurement** — a
12
+ > starting bound with its source, tunable per voice, never a validated
13
+ > claim about human prose.
14
+
15
+ ## Why a severity axis (orthogonal to the group taxonomy)
16
+
17
+ `patterns.md` groups tells by *kind* (content / language / style /
18
+ communication / filler). This file grades them by *diagnostic weight* — how
19
+ much a single occurrence tells you. Rewrite discipline is the same
20
+ (rewrite, don't delete); the tier decides **how hard to look** and **whether
21
+ one hit is worth acting on**. Clusters still win: two Medium tells
22
+ co-occurring outweigh one isolated High.
23
+
24
+ ## Tier High — almost always a tell (act on a single occurrence)
25
+
26
+ Single instance is strong evidence of machine authorship; these rarely
27
+ survive in genuine human prose.
28
+
29
+ - **Chat artifacts** in a deliverable — "I hope this helps", "Let me know
30
+ if…", "Would you like me to…", "Here is an overview of…". (patterns.md 4.1)
31
+ - **Knowledge-cutoff disclaimers** — "As of my last update…", "While
32
+ specific details are limited…". (4.2)
33
+ - **Sycophancy** — "Great question!", "You're absolutely right". (4.4)
34
+ - **Negative parallelism as a reflex** — "It's not just X — it's Y", "not
35
+ merely a song, but a statement". (2.3)
36
+ - **Significance inflation** — "marks a pivotal moment", "leaves an
37
+ indelible mark". (1.1)
38
+ - **Aphorism formulas** — "X is the currency of Y", "X is not a tool but a
39
+ mirror". (3.9)
40
+ - **Spaced double hyphens** (` -- `) — always a machine artifact. (3.1)
41
+
42
+ ## Tier Medium — a tell in combination (act when ≥2 co-occur)
43
+
44
+ Individually defensible; a cluster of two or more is a signature.
45
+
46
+ - **AI vocabulary** — delve, tapestry, showcase, testament, pivotal,
47
+ vibrant, intricate, seamless, underscore, ever-evolving. One is noise;
48
+ three in a paragraph is a confession. (2.1)
49
+ - **Rule-of-three padding** — forced triplets. (2.4)
50
+ - **Copula avoidance** — "serves as", "stands as", "represents a shift". (2.2)
51
+ - **Promotional register** — "nestled", "boasts", "rich cultural heritage". (1.4)
52
+ - **Superficial "-ing" analysis** — "…, highlighting the region's heritage". (1.3)
53
+ - **Weasel attributions** — "experts argue", "observers have cited". (1.5)
54
+ - **Staccato drama / manufactured punchlines** — runs of short fragments
55
+ engineered for quotability. (3.8)
56
+ - **Em/en-dash density above the deliverable cap** (~2 per 500 words). (3.1)
57
+ - **Signposting** — "let's dive in", "here's what you need to know". (5.4)
58
+ - **Fake-candid openers** — "Honestly?", "Look,", "Here's the thing". (5.6)
59
+
60
+ ## Tier Low — only when over-used (never act on isolated hits)
61
+
62
+ Common in ordinary human writing; a tell only at high density.
63
+
64
+ - **Filler phrases** — "in order to", "due to the fact that". (5.1)
65
+ - **Hedge stacks** — "could potentially possibly". (5.2)
66
+ - **Mechanical boldface / bold-header vertical lists** — a tell in chat/post
67
+ prose; **house style in this repo's own docs** (see the scope note below). (3.2, 3.3)
68
+ - **Title Case Headings**, **curly quotes**, **generic upbeat endings**. (3.4, 3.6, 5.3)
69
+ - **Synonym cycling**, **false ranges**. (2.5, 2.6)
70
+
71
+ ## Scope note — deliverables, not repo docs
72
+
73
+ This severity axis governs **deliverable prose** (posts, articles, ghostwriter
74
+ output, on-request README sections). It does **not** apply to this repo's own
75
+ `docs/**` reference prose: em dashes and bold inline headers are the suite's
76
+ **intentional house style** there (council 2026-07-11, recorded on
77
+ `detect_ai_tells.ts` and `road-to-humanized-writing`). A humanize pass never
78
+ runs over repo documentation — see SKILL.md § When NOT to use.
79
+
80
+ ## Self-validation thresholds (U4 — deterministic self-check bounds)
81
+
82
+ Read after a rewrite; each bound is a **default, not a suite measurement**.
83
+ The deterministic subset is enforced by
84
+ [`detect_ai_tells.ts`](../../../scripts/detect_ai_tells.ts) when a runtime is
85
+ available; without one, the step-3 audit checks these by eye.
86
+
87
+ | Bound | Default | Source |
88
+ |---|---|---|
89
+ | Em/en-dash density | ≤ ~2 per 500 words | patterns.md 3.1 (CP1 parity with design-antipatterns) |
90
+ | Consecutive staccato fragments | ≤ 3 short declaratives in a row | patterns.md 3.8 |
91
+ | Uniform-shape bullets | merge a run of ≥ 4 identically-shaped `- **X:** …` bullets into prose or real sentences | patterns.md 3.3 |
92
+ | Hedge stack | ≤ 1 hedge per claim | patterns.md 5.2 |
93
+ | Stock-vocabulary density | ≤ 2 Tier-Medium AI-vocabulary words per 100 words | patterns.md 2.1 |
94
+
95
+ **Did the rewrite clear the flagged tells without introducing new ones?** A
96
+ re-run over already-clean prose is a no-op. If a bound is intentionally
97
+ exceeded by a voice fingerprint (a person who genuinely writes in dashes),
98
+ the fingerprint wins and the bound is suppressed for that pass.
99
+
100
+ ## Factual-integrity guard (U4)
101
+
102
+ Where a rewrite touches factual content — a number, date, name, quantity, or
103
+ claim — emit a flag rather than silently altering it:
104
+
105
+ ```
106
+ [VERIFY: <original span> → <rewritten span>]
107
+ ```
108
+
109
+ A humanizing pass changes *how* something is said, never *what is true*. The
110
+ flag makes any factual delta reviewable; the author confirms or reverts. A
111
+ rewrite that would drop or alter a fact without a `[VERIFY:]` flag is a
112
+ defect, not a style improvement.