@event4u/agent-config 5.1.0 → 5.3.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 (490) hide show
  1. package/.agent-src/commands/agent-handoff.md +0 -9
  2. package/.agent-src/commands/agent-status.md +0 -9
  3. package/.agent-src/commands/agents/audit.md +0 -9
  4. package/.agent-src/commands/agents/init.md +0 -9
  5. package/.agent-src/commands/agents/optimize.md +0 -9
  6. package/.agent-src/commands/agents/user/accept.md +0 -9
  7. package/.agent-src/commands/agents/user/init.md +0 -9
  8. package/.agent-src/commands/agents/user/review.md +0 -9
  9. package/.agent-src/commands/agents/user/show.md +0 -9
  10. package/.agent-src/commands/agents/user/update.md +0 -9
  11. package/.agent-src/commands/agents/user.md +0 -9
  12. package/.agent-src/commands/agents.md +0 -9
  13. package/.agent-src/commands/analytics/prune.md +0 -9
  14. package/.agent-src/commands/analytics/show.md +0 -9
  15. package/.agent-src/commands/analytics.md +0 -9
  16. package/.agent-src/commands/analyze-reference-repo.md +0 -9
  17. package/.agent-src/commands/bug-fix.md +0 -9
  18. package/.agent-src/commands/bug-investigate.md +0 -9
  19. package/.agent-src/commands/challenge-me/vision.md +0 -9
  20. package/.agent-src/commands/challenge-me/with-docs.md +0 -9
  21. package/.agent-src/commands/challenge-me.md +0 -9
  22. package/.agent-src/commands/chat-history/import.md +0 -9
  23. package/.agent-src/commands/chat-history/learn.md +0 -9
  24. package/.agent-src/commands/chat-history/show.md +0 -9
  25. package/.agent-src/commands/chat-history.md +0 -9
  26. package/.agent-src/commands/check-current-md.md +0 -9
  27. package/.agent-src/commands/commit/in-chunks.md +0 -9
  28. package/.agent-src/commands/commit.md +0 -9
  29. package/.agent-src/commands/condense.md +0 -9
  30. package/.agent-src/commands/context/create.md +0 -9
  31. package/.agent-src/commands/context/refactor.md +0 -9
  32. package/.agent-src/commands/context.md +0 -9
  33. package/.agent-src/commands/cost-report.md +0 -9
  34. package/.agent-src/commands/council/analysis.md +0 -9
  35. package/.agent-src/commands/council/debate.md +0 -9
  36. package/.agent-src/commands/council/default.md +0 -9
  37. package/.agent-src/commands/council/design.md +0 -9
  38. package/.agent-src/commands/council/optimize.md +0 -9
  39. package/.agent-src/commands/council/pr.md +0 -9
  40. package/.agent-src/commands/council.md +0 -9
  41. package/.agent-src/commands/create-pr/description-only.md +0 -9
  42. package/.agent-src/commands/create-pr.md +0 -9
  43. package/.agent-src/commands/e2e-heal.md +0 -9
  44. package/.agent-src/commands/e2e-plan.md +0 -9
  45. package/.agent-src/commands/estimate-ticket.md +0 -9
  46. package/.agent-src/commands/feature/dev.md +0 -9
  47. package/.agent-src/commands/feature/explore.md +0 -9
  48. package/.agent-src/commands/feature/plan.md +0 -9
  49. package/.agent-src/commands/feature/refactor.md +0 -9
  50. package/.agent-src/commands/feature/roadmap.md +0 -9
  51. package/.agent-src/commands/feature.md +0 -9
  52. package/.agent-src/commands/fix/ci.md +0 -9
  53. package/.agent-src/commands/fix/portability.md +0 -9
  54. package/.agent-src/commands/fix/pr-bot-comments.md +0 -9
  55. package/.agent-src/commands/fix/pr-comments.md +0 -9
  56. package/.agent-src/commands/fix/pr-developer-comments.md +0 -9
  57. package/.agent-src/commands/fix/refs.md +0 -9
  58. package/.agent-src/commands/fix/seeder.md +0 -9
  59. package/.agent-src/commands/fix.md +0 -9
  60. package/.agent-src/commands/ghostwriter/delete.md +0 -9
  61. package/.agent-src/commands/ghostwriter/fetch.md +0 -9
  62. package/.agent-src/commands/ghostwriter/list.md +0 -9
  63. package/.agent-src/commands/ghostwriter/show.md +0 -9
  64. package/.agent-src/commands/ghostwriter/write.md +0 -9
  65. package/.agent-src/commands/ghostwriter.md +0 -9
  66. package/.agent-src/commands/grill-me.md +0 -9
  67. package/.agent-src/commands/implement-ticket.md +0 -9
  68. package/.agent-src/commands/jira-ticket.md +0 -9
  69. package/.agent-src/commands/judge/on-diff.md +0 -9
  70. package/.agent-src/commands/judge/solo.md +0 -9
  71. package/.agent-src/commands/judge/steps.md +0 -9
  72. package/.agent-src/commands/judge.md +0 -9
  73. package/.agent-src/commands/knowledge/forget.md +0 -9
  74. package/.agent-src/commands/knowledge/ingest.md +0 -9
  75. package/.agent-src/commands/knowledge/list.md +0 -9
  76. package/.agent-src/commands/knowledge.md +0 -9
  77. package/.agent-src/commands/memory/add.md +0 -9
  78. package/.agent-src/commands/memory/learn-low-impact.md +0 -9
  79. package/.agent-src/commands/memory/load.md +0 -9
  80. package/.agent-src/commands/memory/mine-session.md +0 -9
  81. package/.agent-src/commands/memory/promote.md +0 -9
  82. package/.agent-src/commands/memory/propose.md +0 -9
  83. package/.agent-src/commands/memory.md +0 -9
  84. package/.agent-src/commands/mode.md +0 -9
  85. package/.agent-src/commands/module/create.md +0 -9
  86. package/.agent-src/commands/module/explore.md +0 -9
  87. package/.agent-src/commands/module.md +0 -9
  88. package/.agent-src/commands/optimize/agents-dir.md +0 -9
  89. package/.agent-src/commands/optimize/augmentignore.md +0 -9
  90. package/.agent-src/commands/optimize/rtk.md +0 -9
  91. package/.agent-src/commands/optimize/skills.md +0 -9
  92. package/.agent-src/commands/optimize-prompt.md +0 -9
  93. package/.agent-src/commands/optimize.md +0 -9
  94. package/.agent-src/commands/orchestrate.md +0 -9
  95. package/.agent-src/commands/override/create.md +0 -9
  96. package/.agent-src/commands/override/manage.md +0 -9
  97. package/.agent-src/commands/override.md +0 -9
  98. package/.agent-src/commands/package-reset.md +0 -9
  99. package/.agent-src/commands/package-test.md +0 -9
  100. package/.agent-src/commands/post-as/ghostwriter.md +0 -9
  101. package/.agent-src/commands/post-as/me.md +0 -9
  102. package/.agent-src/commands/post-as.md +0 -9
  103. package/.agent-src/commands/prepare-for-review.md +0 -9
  104. package/.agent-src/commands/project-analyze.md +0 -9
  105. package/.agent-src/commands/project-health.md +0 -9
  106. package/.agent-src/commands/quality-fix.md +0 -9
  107. package/.agent-src/commands/refine-ticket.md +0 -9
  108. package/.agent-src/commands/research/deep.md +0 -9
  109. package/.agent-src/commands/research/report.md +0 -9
  110. package/.agent-src/commands/research.md +0 -9
  111. package/.agent-src/commands/review-changes.md +0 -9
  112. package/.agent-src/commands/review-routing.md +0 -9
  113. package/.agent-src/commands/roadmap/ai-council.md +0 -9
  114. package/.agent-src/commands/roadmap/create.md +0 -9
  115. package/.agent-src/commands/roadmap/process-full.md +0 -9
  116. package/.agent-src/commands/roadmap/process-phase.md +0 -9
  117. package/.agent-src/commands/roadmap/process-step.md +0 -9
  118. package/.agent-src/commands/roadmap.md +0 -9
  119. package/.agent-src/commands/rule-compliance-audit.md +0 -9
  120. package/.agent-src/commands/set-cost-profile.md +0 -9
  121. package/.agent-src/commands/sync-agent-settings.md +0 -9
  122. package/.agent-src/commands/sync-gitignore/fix.md +0 -9
  123. package/.agent-src/commands/sync-gitignore.md +0 -9
  124. package/.agent-src/commands/tests/create.md +0 -9
  125. package/.agent-src/commands/tests/execute.md +0 -9
  126. package/.agent-src/commands/tests.md +0 -9
  127. package/.agent-src/commands/threat-model.md +0 -9
  128. package/.agent-src/commands/update-form-request-messages.md +0 -9
  129. package/.agent-src/commands/upstream-contribute.md +0 -9
  130. package/.agent-src/commands/video/from-script.md +0 -9
  131. package/.agent-src/commands/video/scene.md +0 -9
  132. package/.agent-src/commands/video/stitch.md +0 -9
  133. package/.agent-src/commands/video/storyboard.md +0 -9
  134. package/.agent-src/commands/video.md +0 -9
  135. package/.agent-src/commands/work.md +0 -9
  136. package/.agent-src/personas/ai-agent.md +0 -2
  137. package/.agent-src/personas/ai-video-technical-director.md +0 -2
  138. package/.agent-src/personas/backend-architect.md +0 -2
  139. package/.agent-src/personas/cmo.md +0 -2
  140. package/.agent-src/personas/critical-challenger.md +0 -2
  141. package/.agent-src/personas/customer-success-lead.md +0 -2
  142. package/.agent-src/personas/developer.md +0 -2
  143. package/.agent-src/personas/discovery-lead.md +0 -2
  144. package/.agent-src/personas/eloquent-tamer.md +0 -2
  145. package/.agent-src/personas/engineering-manager.md +0 -2
  146. package/.agent-src/personas/finance-partner.md +0 -2
  147. package/.agent-src/personas/frontend-engineer.md +0 -2
  148. package/.agent-src/personas/growth-pm.md +0 -2
  149. package/.agent-src/personas/hollywood-director.md +0 -2
  150. package/.agent-src/personas/people-strategist.md +0 -2
  151. package/.agent-src/personas/product-owner.md +0 -1
  152. package/.agent-src/personas/qa.md +0 -2
  153. package/.agent-src/personas/revops-maintainer.md +0 -2
  154. package/.agent-src/personas/revops.md +0 -2
  155. package/.agent-src/personas/security-engineer.md +0 -2
  156. package/.agent-src/personas/senior-engineer.md +0 -2
  157. package/.agent-src/personas/stakeholder.md +0 -2
  158. package/.agent-src/personas/strategist.md +0 -2
  159. package/.agent-src/personas/tech-writer.md +0 -2
  160. package/.agent-src/rules/agent-authority.md +0 -9
  161. package/.agent-src/rules/analysis-skill-routing.md +0 -9
  162. package/.agent-src/rules/architecture.md +0 -9
  163. package/.agent-src/rules/artifact-drafting-protocol.md +0 -9
  164. package/.agent-src/rules/artifact-engagement-recording.md +0 -9
  165. package/.agent-src/rules/ask-when-uncertain.md +0 -9
  166. package/.agent-src/rules/augment-edit-discipline.md +0 -9
  167. package/.agent-src/rules/augment-source-of-truth.md +0 -9
  168. package/.agent-src/rules/autonomous-execution.md +0 -9
  169. package/.agent-src/rules/cli-output-handling.md +0 -9
  170. package/.agent-src/rules/command-suggestion-policy.md +0 -9
  171. package/.agent-src/rules/commit-conventions.md +0 -9
  172. package/.agent-src/rules/commit-policy.md +0 -9
  173. package/.agent-src/rules/context-hygiene.md +0 -9
  174. package/.agent-src/rules/copilot-routing.md +0 -9
  175. package/.agent-src/rules/devcontainer-routing.md +0 -9
  176. package/.agent-src/rules/direct-answers.md +0 -9
  177. package/.agent-src/rules/docker-commands.md +0 -9
  178. package/.agent-src/rules/domain-adoption-policy.md +0 -9
  179. package/.agent-src/rules/domain-safety-disclaimer.md +0 -9
  180. package/.agent-src/rules/domain-safety-pii.md +0 -9
  181. package/.agent-src/rules/domain-safety-retention.md +0 -9
  182. package/.agent-src/rules/downstream-changes.md +0 -9
  183. package/.agent-src/rules/engineering-safety-floor.md +0 -9
  184. package/.agent-src/rules/external-reference-deep-dive.md +0 -9
  185. package/.agent-src/rules/fast-path-marker-visibility.md +0 -9
  186. package/.agent-src/rules/finance-safety-floor.md +0 -6
  187. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +0 -9
  188. package/.agent-src/rules/git-history-discipline.md +0 -9
  189. package/.agent-src/rules/guidelines.md +0 -9
  190. package/.agent-src/rules/improve-before-implement.md +0 -9
  191. package/.agent-src/rules/invite-challenge.md +0 -9
  192. package/.agent-src/rules/language-and-tone.md +0 -9
  193. package/.agent-src/rules/laravel-routing.md +0 -4
  194. package/.agent-src/rules/laravel-translations.md +0 -4
  195. package/.agent-src/rules/linked-projects-onboarding-gate.md +0 -3
  196. package/.agent-src/rules/low-impact-corpus-privacy-floor.md +0 -9
  197. package/.agent-src/rules/markdown-safe-codeblocks.md +0 -9
  198. package/.agent-src/rules/media-governance-routing.md +0 -9
  199. package/.agent-src/rules/minimal-safe-diff.md +0 -9
  200. package/.agent-src/rules/missing-tool-handling.md +0 -9
  201. package/.agent-src/rules/model-recommendation.md +0 -9
  202. package/.agent-src/rules/no-attribution-footers.md +0 -9
  203. package/.agent-src/rules/no-cheap-questions.md +0 -9
  204. package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -9
  205. package/.agent-src/rules/no-pr-progress-comments.md +0 -9
  206. package/.agent-src/rules/no-roadmap-references.md +0 -9
  207. package/.agent-src/rules/non-destructive-by-default.md +0 -9
  208. package/.agent-src/rules/onboarding-gate.md +0 -9
  209. package/.agent-src/rules/package-ci-checks.md +0 -9
  210. package/.agent-src/rules/persona-governance.md +0 -9
  211. package/.agent-src/rules/php-coding.md +0 -4
  212. package/.agent-src/rules/preservation-guard.md +0 -9
  213. package/.agent-src/rules/provider-lifecycle-discipline.md +0 -9
  214. package/.agent-src/rules/reviewer-awareness.md +0 -9
  215. package/.agent-src/rules/roadmap-ci-steps-policy.md +0 -9
  216. package/.agent-src/rules/roadmap-progress-sync.md +0 -9
  217. package/.agent-src/rules/role-mode-adherence.md +0 -9
  218. package/.agent-src/rules/rule-type-governance.md +0 -9
  219. package/.agent-src/rules/runtime-safety.md +0 -9
  220. package/.agent-src/rules/scope-control.md +0 -9
  221. package/.agent-src/rules/security-sensitive-stop.md +0 -9
  222. package/.agent-src/rules/size-enforcement.md +0 -9
  223. package/.agent-src/rules/skill-improvement-trigger.md +0 -9
  224. package/.agent-src/rules/skill-quality.md +0 -9
  225. package/.agent-src/rules/slash-command-routing-policy.md +0 -9
  226. package/.agent-src/rules/strategy-safety-floor.md +0 -6
  227. package/.agent-src/rules/symfony-routing.md +0 -4
  228. package/.agent-src/rules/telegraph-speak.md +0 -9
  229. package/.agent-src/rules/think-before-action.md +0 -9
  230. package/.agent-src/rules/token-efficiency.md +0 -9
  231. package/.agent-src/rules/token-optimizer-maintenance.md +0 -9
  232. package/.agent-src/rules/tool-safety.md +0 -9
  233. package/.agent-src/rules/ui-audit-gate.md +0 -9
  234. package/.agent-src/rules/upstream-proposal.md +0 -9
  235. package/.agent-src/rules/user-interaction.md +0 -9
  236. package/.agent-src/rules/user-interrupt-priority.md +0 -9
  237. package/.agent-src/rules/verify-before-complete.md +0 -9
  238. package/.agent-src/skills/accessibility-auditor/SKILL.md +0 -9
  239. package/.agent-src/skills/activation-design/SKILL.md +0 -4
  240. package/.agent-src/skills/adr-create/SKILL.md +0 -9
  241. package/.agent-src/skills/adversarial-review/SKILL.md +0 -9
  242. package/.agent-src/skills/agent-docs-writing/SKILL.md +0 -9
  243. package/.agent-src/skills/agents-md-thin-root/SKILL.md +0 -9
  244. package/.agent-src/skills/ai-council/SKILL.md +0 -9
  245. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +0 -9
  246. package/.agent-src/skills/analysis-skill-router/SKILL.md +0 -9
  247. package/.agent-src/skills/api-design/SKILL.md +0 -9
  248. package/.agent-src/skills/api-endpoint/SKILL.md +0 -9
  249. package/.agent-src/skills/api-testing/SKILL.md +0 -9
  250. package/.agent-src/skills/architecture-review-lens/SKILL.md +0 -9
  251. package/.agent-src/skills/artisan-commands/SKILL.md +0 -4
  252. package/.agent-src/skills/async-python-patterns/SKILL.md +0 -3
  253. package/.agent-src/skills/authz-review/SKILL.md +0 -9
  254. package/.agent-src/skills/aws-infrastructure/SKILL.md +0 -9
  255. package/.agent-src/skills/blade-ui/SKILL.md +0 -4
  256. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +0 -9
  257. package/.agent-src/skills/bug-analyzer/SKILL.md +0 -9
  258. package/.agent-src/skills/build-buy-partner/SKILL.md +0 -7
  259. package/.agent-src/skills/canvas-design/SKILL.md +0 -3
  260. package/.agent-src/skills/character-consistency/SKILL.md +0 -3
  261. package/.agent-src/skills/check-refs/SKILL.md +0 -9
  262. package/.agent-src/skills/churn-prevention/SKILL.md +0 -5
  263. package/.agent-src/skills/code-refactoring/SKILL.md +0 -9
  264. package/.agent-src/skills/code-review/SKILL.md +0 -9
  265. package/.agent-src/skills/command-routing/SKILL.md +0 -9
  266. package/.agent-src/skills/command-writing/SKILL.md +0 -9
  267. package/.agent-src/skills/comp-banding/SKILL.md +0 -5
  268. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +0 -7
  269. package/.agent-src/skills/competitive-positioning/SKILL.md +0 -5
  270. package/.agent-src/skills/composer-packages/SKILL.md +0 -4
  271. package/.agent-src/skills/condense-memory/SKILL.md +0 -9
  272. package/.agent-src/skills/content-funnel-design/SKILL.md +0 -5
  273. package/.agent-src/skills/context-authoring/SKILL.md +0 -9
  274. package/.agent-src/skills/context-document/SKILL.md +0 -9
  275. package/.agent-src/skills/contracts-cognition/SKILL.md +0 -5
  276. package/.agent-src/skills/conventional-commits-writing/SKILL.md +0 -9
  277. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +0 -9
  278. package/.agent-src/skills/copilot-config/SKILL.md +0 -9
  279. package/.agent-src/skills/customer-research/SKILL.md +0 -4
  280. package/.agent-src/skills/dashboard-design/SKILL.md +0 -9
  281. package/.agent-src/skills/data-flow-mapper/SKILL.md +0 -9
  282. package/.agent-src/skills/data-handling-judgment/SKILL.md +0 -9
  283. package/.agent-src/skills/database/SKILL.md +0 -9
  284. package/.agent-src/skills/dcf-modeling/SKILL.md +0 -6
  285. package/.agent-src/skills/deal-qualification-meddic/SKILL.md +0 -5
  286. package/.agent-src/skills/decision-record/SKILL.md +0 -9
  287. package/.agent-src/skills/deep-reading-analyst/SKILL.md +0 -9
  288. package/.agent-src/skills/defense-in-depth/SKILL.md +0 -9
  289. package/.agent-src/skills/dependency-upgrade/SKILL.md +0 -9
  290. package/.agent-src/skills/description-assist/SKILL.md +0 -9
  291. package/.agent-src/skills/design-review/SKILL.md +0 -9
  292. package/.agent-src/skills/devcontainer/SKILL.md +0 -9
  293. package/.agent-src/skills/developer-like-execution/SKILL.md +0 -9
  294. package/.agent-src/skills/discovery-interview/SKILL.md +0 -4
  295. package/.agent-src/skills/doc-coauthoring/SKILL.md +0 -9
  296. package/.agent-src/skills/docker/SKILL.md +0 -9
  297. package/.agent-src/skills/editorial-calendar/SKILL.md +0 -5
  298. package/.agent-src/skills/eloquent/SKILL.md +0 -4
  299. package/.agent-src/skills/error-handling-patterns/SKILL.md +0 -9
  300. package/.agent-src/skills/estimate-ticket/SKILL.md +0 -5
  301. package/.agent-src/skills/existing-ui-audit/SKILL.md +0 -9
  302. package/.agent-src/skills/expansion-playbook/SKILL.md +0 -5
  303. package/.agent-src/skills/fe-design/SKILL.md +0 -9
  304. package/.agent-src/skills/feature-planning/SKILL.md +0 -5
  305. package/.agent-src/skills/file-editor/SKILL.md +0 -9
  306. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +0 -9
  307. package/.agent-src/skills/flux/SKILL.md +0 -4
  308. package/.agent-src/skills/forecast-accuracy/SKILL.md +0 -5
  309. package/.agent-src/skills/forecasting/SKILL.md +0 -5
  310. package/.agent-src/skills/form-handler/SKILL.md +0 -9
  311. package/.agent-src/skills/fundraising-narrative/SKILL.md +0 -7
  312. package/.agent-src/skills/funnel-analysis/SKILL.md +0 -5
  313. package/.agent-src/skills/git-workflow/SKILL.md +0 -9
  314. package/.agent-src/skills/github-ci/SKILL.md +0 -9
  315. package/.agent-src/skills/grafana/SKILL.md +0 -9
  316. package/.agent-src/skills/gtm-launch/SKILL.md +0 -5
  317. package/.agent-src/skills/guideline-writing/SKILL.md +0 -9
  318. package/.agent-src/skills/hiring-loop-design/SKILL.md +0 -5
  319. package/.agent-src/skills/incident-commander/SKILL.md +0 -9
  320. package/.agent-src/skills/jira-integration/SKILL.md +0 -9
  321. package/.agent-src/skills/jobs-events/SKILL.md +0 -4
  322. package/.agent-src/skills/judge-bug-hunter/SKILL.md +0 -9
  323. package/.agent-src/skills/judge-code-quality/SKILL.md +0 -9
  324. package/.agent-src/skills/judge-security-auditor/SKILL.md +0 -9
  325. package/.agent-src/skills/judge-test-coverage/SKILL.md +0 -9
  326. package/.agent-src/skills/laravel/SKILL.md +0 -4
  327. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +0 -4
  328. package/.agent-src/skills/laravel-dto/SKILL.md +0 -4
  329. package/.agent-src/skills/laravel-horizon/SKILL.md +0 -4
  330. package/.agent-src/skills/laravel-mail/SKILL.md +0 -4
  331. package/.agent-src/skills/laravel-middleware/SKILL.md +0 -4
  332. package/.agent-src/skills/laravel-migration/SKILL.md +0 -4
  333. package/.agent-src/skills/laravel-notifications/SKILL.md +0 -4
  334. package/.agent-src/skills/laravel-pennant/SKILL.md +0 -4
  335. package/.agent-src/skills/laravel-pulse/SKILL.md +0 -4
  336. package/.agent-src/skills/laravel-reverb/SKILL.md +0 -4
  337. package/.agent-src/skills/laravel-scheduling/SKILL.md +0 -4
  338. package/.agent-src/skills/laravel-validation/SKILL.md +0 -4
  339. package/.agent-src/skills/laravel-websocket/SKILL.md +0 -4
  340. package/.agent-src/skills/launch-readiness/SKILL.md +0 -7
  341. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +0 -8
  342. package/.agent-src/skills/lint-skills/SKILL.md +0 -9
  343. package/.agent-src/skills/livewire/SKILL.md +0 -4
  344. package/.agent-src/skills/livewire-architect/SKILL.md +0 -4
  345. package/.agent-src/skills/logging-monitoring/SKILL.md +0 -9
  346. package/.agent-src/skills/market-entry-analysis/SKILL.md +0 -7
  347. package/.agent-src/skills/markitdown/SKILL.md +0 -9
  348. package/.agent-src/skills/mcp/SKILL.md +0 -9
  349. package/.agent-src/skills/mcp-builder/SKILL.md +0 -9
  350. package/.agent-src/skills/md-language-check/SKILL.md +0 -9
  351. package/.agent-src/skills/memory-consolidation/SKILL.md +0 -9
  352. package/.agent-src/skills/merge-conflicts/SKILL.md +0 -9
  353. package/.agent-src/skills/messaging-architecture/SKILL.md +0 -5
  354. package/.agent-src/skills/migration-architect/SKILL.md +0 -9
  355. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +0 -9
  356. package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +0 -9
  357. package/.agent-src/skills/module-management/SKILL.md +0 -9
  358. package/.agent-src/skills/motion-choreographer/SKILL.md +0 -3
  359. package/.agent-src/skills/multi-tenancy/SKILL.md +0 -9
  360. package/.agent-src/skills/nextjs-patterns/SKILL.md +0 -4
  361. package/.agent-src/skills/okr-tree-modeling/SKILL.md +0 -7
  362. package/.agent-src/skills/onboarding-design/SKILL.md +0 -5
  363. package/.agent-src/skills/onboarding-program/SKILL.md +0 -5
  364. package/.agent-src/skills/one-on-one-cadence/SKILL.md +0 -5
  365. package/.agent-src/skills/openapi/SKILL.md +0 -9
  366. package/.agent-src/skills/org-design/SKILL.md +0 -5
  367. package/.agent-src/skills/override-management/SKILL.md +0 -9
  368. package/.agent-src/skills/perf-feedback-craft/SKILL.md +0 -5
  369. package/.agent-src/skills/performance/SKILL.md +0 -9
  370. package/.agent-src/skills/performance-analysis/SKILL.md +0 -9
  371. package/.agent-src/skills/persona-writing/SKILL.md +0 -9
  372. package/.agent-src/skills/pest-testing/SKILL.md +0 -4
  373. package/.agent-src/skills/php-coder/SKILL.md +0 -4
  374. package/.agent-src/skills/php-debugging/SKILL.md +0 -4
  375. package/.agent-src/skills/php-service/SKILL.md +0 -4
  376. package/.agent-src/skills/pipeline-strategy/SKILL.md +0 -5
  377. package/.agent-src/skills/pixar-storyteller/SKILL.md +0 -3
  378. package/.agent-src/skills/playwright-architect/SKILL.md +0 -9
  379. package/.agent-src/skills/playwright-testing/SKILL.md +0 -9
  380. package/.agent-src/skills/po-discovery/SKILL.md +0 -5
  381. package/.agent-src/skills/positioning-strategy/SKILL.md +0 -5
  382. package/.agent-src/skills/privacy-review/SKILL.md +0 -9
  383. package/.agent-src/skills/project-analysis-core/SKILL.md +0 -9
  384. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +0 -9
  385. package/.agent-src/skills/project-analysis-laravel/SKILL.md +0 -4
  386. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +0 -4
  387. package/.agent-src/skills/project-analysis-node-express/SKILL.md +0 -3
  388. package/.agent-src/skills/project-analysis-react/SKILL.md +0 -4
  389. package/.agent-src/skills/project-analysis-symfony/SKILL.md +0 -4
  390. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +0 -4
  391. package/.agent-src/skills/project-analyzer/SKILL.md +0 -9
  392. package/.agent-src/skills/project-docs/SKILL.md +0 -9
  393. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +0 -9
  394. package/.agent-src/skills/prompt-optimizer/SKILL.md +0 -9
  395. package/.agent-src/skills/quality-tools/SKILL.md +0 -9
  396. package/.agent-src/skills/react-native-setup/SKILL.md +0 -4
  397. package/.agent-src/skills/react-shadcn-ui/SKILL.md +0 -4
  398. package/.agent-src/skills/readme-reviewer/SKILL.md +0 -9
  399. package/.agent-src/skills/readme-writing/SKILL.md +0 -9
  400. package/.agent-src/skills/readme-writing-package/SKILL.md +0 -9
  401. package/.agent-src/skills/receiving-code-review/SKILL.md +0 -9
  402. package/.agent-src/skills/refine-prompt/SKILL.md +0 -9
  403. package/.agent-src/skills/refine-ticket/SKILL.md +0 -5
  404. package/.agent-src/skills/release-comms/SKILL.md +0 -5
  405. package/.agent-src/skills/repomix-packer/SKILL.md +0 -9
  406. package/.agent-src/skills/requesting-code-review/SKILL.md +0 -9
  407. package/.agent-src/skills/retention-loops/SKILL.md +0 -5
  408. package/.agent-src/skills/review-routing/SKILL.md +0 -9
  409. package/.agent-src/skills/rice-prioritization/SKILL.md +0 -5
  410. package/.agent-src/skills/risk-officer/SKILL.md +0 -9
  411. package/.agent-src/skills/roadmap-management/SKILL.md +0 -9
  412. package/.agent-src/skills/roadmap-writing/SKILL.md +0 -9
  413. package/.agent-src/skills/rtk-output-filtering/SKILL.md +0 -9
  414. package/.agent-src/skills/rule-refactor/SKILL.md +0 -9
  415. package/.agent-src/skills/rule-writing/SKILL.md +0 -9
  416. package/.agent-src/skills/runway-cognition/SKILL.md +0 -5
  417. package/.agent-src/skills/scenario-modeling/SKILL.md +0 -6
  418. package/.agent-src/skills/scene-expander/SKILL.md +0 -3
  419. package/.agent-src/skills/script-writing/SKILL.md +0 -9
  420. package/.agent-src/skills/secrets-management/SKILL.md +0 -9
  421. package/.agent-src/skills/security/SKILL.md +0 -9
  422. package/.agent-src/skills/security-audit/SKILL.md +0 -9
  423. package/.agent-src/skills/sentry-integration/SKILL.md +0 -9
  424. package/.agent-src/skills/sequential-thinking/SKILL.md +0 -9
  425. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +0 -9
  426. package/.agent-src/skills/skill-management/SKILL.md +0 -8
  427. package/.agent-src/skills/skill-reviewer/SKILL.md +0 -9
  428. package/.agent-src/skills/skill-writing/SKILL.md +0 -8
  429. package/.agent-src/skills/sql-writing/SKILL.md +0 -9
  430. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +0 -5
  431. package/.agent-src/skills/subagent-orchestration/SKILL.md +0 -9
  432. package/.agent-src/skills/symfony-workflow/SKILL.md +0 -4
  433. package/.agent-src/skills/systematic-debugging/SKILL.md +0 -9
  434. package/.agent-src/skills/tailwind-engineer/SKILL.md +0 -9
  435. package/.agent-src/skills/tech-debt-tracker/SKILL.md +0 -9
  436. package/.agent-src/skills/technical-specification/SKILL.md +0 -5
  437. package/.agent-src/skills/terraform/SKILL.md +0 -9
  438. package/.agent-src/skills/terragrunt/SKILL.md +0 -9
  439. package/.agent-src/skills/test-driven-development/SKILL.md +0 -9
  440. package/.agent-src/skills/test-performance/SKILL.md +0 -9
  441. package/.agent-src/skills/testing-anti-patterns/SKILL.md +0 -9
  442. package/.agent-src/skills/threat-modeling/SKILL.md +0 -9
  443. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +0 -5
  444. package/.agent-src/skills/token-optimizer/SKILL.md +0 -9
  445. package/.agent-src/skills/traefik/SKILL.md +0 -9
  446. package/.agent-src/skills/ui-component-architect/SKILL.md +0 -9
  447. package/.agent-src/skills/unit-economics-modeling/SKILL.md +0 -5
  448. package/.agent-src/skills/universal-project-analysis/SKILL.md +0 -9
  449. package/.agent-src/skills/upstream-contribute/SKILL.md +0 -9
  450. package/.agent-src/skills/using-git-worktrees/SKILL.md +0 -9
  451. package/.agent-src/skills/validate-feature-fit/SKILL.md +0 -9
  452. package/.agent-src/skills/verify-completion-evidence/SKILL.md +0 -9
  453. package/.agent-src/skills/video-director/SKILL.md +0 -3
  454. package/.agent-src/skills/vision-articulation/SKILL.md +0 -7
  455. package/.agent-src/skills/voc-extract/SKILL.md +0 -4
  456. package/.agent-src/skills/voice-and-tone-design/SKILL.md +0 -5
  457. package/.claude-plugin/marketplace.json +1 -1
  458. package/CHANGELOG.md +48 -0
  459. package/README.md +5 -0
  460. package/dist/discovery/deprecation-report.md +1 -1
  461. package/dist/discovery/discovery-manifest.json +3 -3
  462. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  463. package/dist/discovery/discovery-manifest.summary.md +2 -2
  464. package/dist/discovery/orphan-report.md +1 -1
  465. package/dist/discovery/packs.json +3 -3
  466. package/dist/discovery/trust-report.md +1 -1
  467. package/dist/discovery/workspaces.json +3 -3
  468. package/dist/mcp/registry-manifest.json +3 -3
  469. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +81 -0
  470. package/docs/decisions/INDEX.md +1 -0
  471. package/docs/distribution/registries.md +29 -0
  472. package/docs/guidelines/agent-infra/skill-quality-checklist.md +25 -0
  473. package/package.json +1 -1
  474. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  475. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  476. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  477. package/scripts/build_discovery_manifest.py +20 -3
  478. package/scripts/check_artefact_checksums.py +11 -4
  479. package/scripts/condense.py +6 -1
  480. package/scripts/lint_commit_subjects.py +139 -0
  481. package/scripts/lint_framework_leakage_allowlist.json +106 -76
  482. package/scripts/lint_frontmatter_boilerplate.py +77 -0
  483. package/scripts/migrate_frontmatter_defaults.py +245 -0
  484. package/scripts/schemas/command.schema.json +7 -5
  485. package/scripts/schemas/persona.schema.json +4 -2
  486. package/scripts/schemas/rule.schema.json +8 -6
  487. package/scripts/schemas/skill.schema.json +8 -6
  488. package/scripts/skill_linter.py +21 -9
  489. package/scripts/smoke/skills.sh +4 -1
  490. package/scripts/validate_frontmatter.py +74 -0
@@ -36,6 +36,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
36
36
  | [ADR-030](ADR-030-claude-code-command-projection.md) | Claude Code Command Projection | accepted | 2026-05-28 | — |
37
37
  | [ADR-031](ADR-031-validation-severity-tiers-and-projection-roundtrip.md) | Validation Severity Tiers And Projection Roundtrip | accepted | 2026-05-29 | — |
38
38
  | [ADR-032](ADR-032-linked-projects-scope.md) | Linked Projects Scope Go Option A | accepted | 2026-05-29 | — |
39
+ | [ADR-033](ADR-033-distribution-identity-npm-primary.md) | Distribution Identity Npm Primary | accepted | 2026-05-29 | — |
39
40
 
40
41
  ## Unnumbered (legacy)
41
42
 
@@ -4,6 +4,35 @@ Track third-party registries / directories we want this package to surface in. S
4
4
 
5
5
  > **Authority** — Phase 2 of [`road-to-product-adoption.md`](../../agents/roadmaps/road-to-product-adoption.md). The autonomous roadmap pass cannot open PRs in third-party repos; this file is the handoff.
6
6
 
7
+ ## Distribution channels — npm-primary
8
+
9
+ Per [`ADR-033`](../decisions/ADR-033-distribution-identity-npm-primary.md), the package is **npm-primary, Packagist deprecated-in-place**. Both lenses of the council deliberation (strategic / operational) converged on a single-channel posture: this is the canonical record of which registries we publish to vs. which we treat as legacy.
10
+
11
+ | Channel | Status | Canonical install | Notes |
12
+ |---|---|---|---|
13
+ | npm — `@event4u/agent-config` | **Primary** | `npm install @event4u/agent-config` or `npx @event4u/agent-config install` | The release pipeline (`scripts/release.py`) runs `npm publish` exclusively; `package.json` is the source of truth for the published version. |
14
+ | Packagist — `event4u/agent-config` | **Deprecated-in-place** | (do not install — see ADR-033) | The 1.0.4 listing is a legacy artefact from the pre-3.x repo namespace. No `composer.json` ships from this repo. Maintainer-side claim/archive action required (see below). |
15
+
16
+ ### Packagist deprecation — human-owner item
17
+
18
+ The Packagist `event4u/agent-config` listing pins at 1.0.4 from a repository state that no longer exists. The autonomous pipeline cannot retire that listing — it requires a maintainer login at `packagist.org/packages/event4u/agent-config`. Two paths exist; either is acceptable per ADR-033.
19
+
20
+ - [ ] **Claim + abandoned-flag the package.** Log in at packagist.org, claim the `event4u/agent-config` namespace, set the package to `abandoned` with the replacement pointer `event4u/agent-config` on npm (or the npm package URL as a body note where Packagist's abandoned-replacement field expects a Composer-namespace value, fall back to a `description` field redirect).
21
+ - [ ] **OR: leave the listing as legacy + add a description-field redirect.** If claim is blocked or out of scope, edit the listing description to add a one-line `> Deprecated — install via npm: \`@event4u/agent-config\`` so any consumer who lands there sees the correct path.
22
+
23
+ This item is **owner-owned**, not autonomous; the roadmap explicitly captures it as such (`road-to-distribution-identity.md` Phase 2 Step 1). Mark the chosen path with `[x]` once executed.
24
+
25
+ ### Breaking-change communication
26
+
27
+ Major-version bumps are policy-correct per [`CONTRIBUTING.md § Versioning policy`](../../CONTRIBUTING.md) (semver — installer-layout changes are major). The auto-generated `CHANGELOG.md § Breaking` section is the **single source of truth** for breaking changes; [`ADR-027`](../decisions/ADR-027-changelog-machine-vs-manual.md) locks the machine-generated path.
28
+
29
+ Consumers who see a major-version bump should follow:
30
+
31
+ 1. [`CHANGELOG.md § Breaking`](../../CHANGELOG.md#breaking) — the diff between the prior and the new major. Every breaking change carries a Conventional-Commits subject prefixed `feat!:` or with a `BREAKING CHANGE:` footer.
32
+ 2. The release-line link in the GitHub release entry for the new version (links the auto-generated changelog section).
33
+
34
+ No bespoke `BREAKING_CHANGES.md` is maintained — the changelog is the authoritative surface.
35
+
7
36
  ## Submission status
8
37
 
9
38
  | # | Registry | URL | Submission shape | Status | PR link |
@@ -27,6 +27,31 @@ Every skill's YAML frontmatter MUST validate against `scripts/schemas/skill.sche
27
27
  Violations are reported by `scripts/skill_linter.py` as `schema_<rule>` errors
28
28
  and fail `python3 scripts/validate_frontmatter.py` and the full CI pipeline.
29
29
 
30
+ ### Omit fields equal to their schema default
31
+
32
+ ```
33
+ NEVER write a frontmatter field whose value equals its schema `default`.
34
+ OMIT IT — the loader injects the default at read time.
35
+ ```
36
+
37
+ A field that carries the schema `default` (e.g. `trust.level: core`,
38
+ `install.default: true`, `lifecycle: active`, `source: package`,
39
+ `command.disable-model-invocation: true`) is redundant:
40
+ `validate_frontmatter.apply_schema_defaults` injects it transparently for
41
+ every consumer (validator, discovery manifest, drift checksum). Writing it
42
+ anyway is boilerplate that `scripts/lint_frontmatter_boilerplate.py` rejects
43
+ (wired into `task ci-fast`). To strip it across the tree, run
44
+ `python3 scripts/migrate_frontmatter_defaults.py`. Background:
45
+ `road-to-abstraction-reduction.md` +
46
+ `agents/evidence/analysis/abstraction-reduction-preflight.md`.
47
+
48
+ > **Changing a default is a breaking change.** The schema `default` is a
49
+ > contract: artefacts that omit the field inherit whatever the default *is at
50
+ > read time*. Flipping a default value (e.g. `lifecycle: active → deprecated`)
51
+ > silently re-defaults every artefact that omits the field — so a default
52
+ > change must pair with a re-run of `migrate_frontmatter_defaults.py` and an
53
+ > explicit review of the affected artefacts.
54
+
30
55
  ## Description Triggering
31
56
 
32
57
  Claude routes skills by their frontmatter `description`. Pushy,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "5.1.0",
3
+ "version": "5.3.0",
4
4
  "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -25,7 +25,12 @@ from typing import Any, Iterable
25
25
  import yaml
26
26
 
27
27
  sys.path.insert(0, str(Path(__file__).resolve().parent))
28
- from validate_frontmatter import _FRONTMATTER_RE, parse_frontmatter # noqa: E402
28
+ from validate_frontmatter import ( # noqa: E402
29
+ _FRONTMATTER_RE,
30
+ apply_schema_defaults,
31
+ load_schema,
32
+ parse_frontmatter,
33
+ )
29
34
  from _lib.agent_src import artefact_roots, logical_relpath, resolve_logical, strip_source_prefix # noqa: E402
30
35
 
31
36
  ROOT = Path(__file__).resolve().parents[1]
@@ -146,11 +151,23 @@ def _trusted(path: Path) -> bool:
146
151
  return any(rel.startswith(r + "/") for r in TRUST_ROOTS)
147
152
 
148
153
 
149
- def _parse(path: Path) -> dict[str, Any] | None:
154
+ # Discovery category frontmatter schema name. `template` has no schema and
155
+ # carries none of the defaulted fields, so it is left raw.
156
+ _CATEGORY_SCHEMA = {"skill": "skill", "rule": "rule", "command": "command"}
157
+
158
+
159
+ def _parse(path: Path, category: str | None = None) -> dict[str, Any] | None:
150
160
  text = path.read_text(encoding="utf-8", errors="replace")
151
161
  fm, _ = parse_frontmatter(text)
152
162
  if not isinstance(fm, dict):
153
163
  return None
164
+ # Inject schema defaults so an artefact that omits a field equal to its
165
+ # default (post abstraction-reduction migration) still presents the field
166
+ # to the required-key checks AND the drift checksum — keeping the checksum
167
+ # byte-stable across the migration (preflight Decision B).
168
+ schema_name = _CATEGORY_SCHEMA.get(category or "")
169
+ if schema_name is not None:
170
+ apply_schema_defaults(fm, load_schema(schema_name))
154
171
  return fm
155
172
 
156
173
 
@@ -252,7 +269,7 @@ def _build(strict: bool) -> tuple[dict[str, Any], list[dict[str, Any]]]:
252
269
  if rel in overrides:
253
270
  documented_unassigned.append({"path": rel, "category": category, "reason": overrides[rel]})
254
271
  continue
255
- fm = _parse(path)
272
+ fm = _parse(path, category)
256
273
  payload, reason = _classify(fm, ws_ids, pack_ids)
257
274
  if reason is not None:
258
275
  unassigned.append({"path": rel, "category": category, "reason": reason})
@@ -32,15 +32,22 @@ DEFAULT_MANIFEST = ROOT / "dist" / "discovery" / "discovery-manifest.json"
32
32
  sys.path.insert(0, str(Path(__file__).resolve().parent))
33
33
  # Import the same hashing primitive the builder uses so normalisation
34
34
  # stays in lockstep with the generator. (ADR-015 §Phase 6.)
35
- from build_discovery_manifest import _artefact_checksum # noqa: E402
36
- from validate_frontmatter import parse_frontmatter # noqa: E402
35
+ from build_discovery_manifest import _CATEGORY_SCHEMA, _artefact_checksum # noqa: E402
36
+ from validate_frontmatter import apply_schema_defaults, load_schema, parse_frontmatter # noqa: E402
37
37
 
38
38
 
39
- def _frontmatter(path: Path) -> dict | None:
39
+ def _frontmatter(path: Path, category: str | None = None) -> dict | None:
40
40
  if not path.exists():
41
41
  return None
42
42
  text = path.read_text(encoding="utf-8", errors="replace")
43
43
  fm, _ = parse_frontmatter(text)
44
+ # Inject the same schema defaults the builder injects, so the recomputed
45
+ # checksum matches the committed manifest byte-for-byte even when the
46
+ # artefact omits a defaulted field (preflight Decision B).
47
+ if isinstance(fm, dict):
48
+ schema_name = _CATEGORY_SCHEMA.get(category or "")
49
+ if schema_name is not None:
50
+ apply_schema_defaults(fm, load_schema(schema_name))
44
51
  return fm
45
52
 
46
53
 
@@ -64,7 +71,7 @@ def _check(manifest_path: Path) -> tuple[int, list[str]]:
64
71
  if not src.exists():
65
72
  errors.append(f"{rel}: source file missing")
66
73
  continue
67
- actual = _artefact_checksum(src, _frontmatter(src))
74
+ actual = _artefact_checksum(src, _frontmatter(src, art.get("category")))
68
75
  if actual != recorded:
69
76
  errors.append(
70
77
  f"{rel}: checksum drift "
@@ -574,7 +574,12 @@ def _parse_trust_and_owner(fm_lines):
574
574
  prefix (`finance-basic` → `finance`), then the first workspace,
575
575
  then `unknown`.
576
576
  """
577
- level = None
577
+ # Default to the schema default `core` so the HUMAN REVIEW banner still
578
+ # renders if a future artefact sets `human_review_required: true` while
579
+ # omitting the (defaulted) `trust.level` line (abstraction-reduction
580
+ # preflight Decision D). The banner only fires when `hrr` is true, so this
581
+ # never affects artefacts that omit the whole trust block.
582
+ level = "core"
578
583
  hrr = False
579
584
  packs: list[str] = []
580
585
  workspaces: list[str] = []
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env python3
2
+ """Reject commit subjects that would leak into the auto-generated changelog.
3
+
4
+ `scripts/release.py` reads commit subjects verbatim from
5
+ `<prev-tag>..HEAD` and writes them into `CHANGELOG.md` sections (notably
6
+ `### Breaking`). A sloppy subject — `wip`, `commit leftovers`, `fixup`,
7
+ short typos — becomes a sloppy public changelog line. Per
8
+ [ADR-033](../docs/decisions/ADR-033-distribution-identity-npm-primary.md)
9
+ and Phase 3 of `road-to-distribution-identity.md` this lint is the
10
+ CI-enforced gate that closes that surface.
11
+
12
+ Rules (PRO commit, range `<base>..<head>`):
13
+
14
+ - Subject length **after** stripping the Conventional-Commits type-prefix
15
+ (`feat:` / `fix(scope):` / `chore!:` / …) must be ≥ 10 characters.
16
+ - Subject must not contain blocklist words as whole tokens:
17
+ `leftover` / `leftovers` / `wip` / `temp` / `tmp` / `fixup`.
18
+ Case-insensitive; matched on word boundaries so legitimate uses like
19
+ `template` or `tempor­ary` (rare) survive — the linter targets the
20
+ short hand-wave forms reviewers see in feedback rounds.
21
+
22
+ Carve-outs:
23
+
24
+ - Merge commits (`Merge pull request …`, `Merge branch …`) are skipped —
25
+ they are GitHub-generated and not consumer-visible in the changelog.
26
+ - Revert commits (`Revert "…"`) are skipped — they ride the original
27
+ subject's discipline.
28
+
29
+ Local invocation defaults to `origin/main..HEAD` (the "what I am about
30
+ to push" range). CI sets `--base $GITHUB_BASE_REF --head $GITHUB_SHA`.
31
+
32
+ Cap: ≤ 150 LOC, stdlib only. Hooked into `task ci` via
33
+ `task lint-commit-subjects`.
34
+ """
35
+ from __future__ import annotations
36
+
37
+ import argparse
38
+ import re
39
+ import subprocess
40
+ import sys
41
+
42
+ BLOCKLIST = frozenset({"leftover", "leftovers", "wip", "temp", "tmp", "fixup"})
43
+ MIN_SUBJECT_LEN = 10
44
+
45
+ # Conventional Commits prefix — `type(scope)!?: message`. Matches the
46
+ # heads our `scripts/release.py` and CHANGELOG section logic respect.
47
+ CONVENTIONAL_PREFIX = re.compile(
48
+ r"^(feat|fix|chore|docs|refactor|test|perf|style|build|ci|revert)"
49
+ r"(\([^)]+\))?!?:\s+",
50
+ re.IGNORECASE,
51
+ )
52
+
53
+ # Skip lines — GitHub-generated merge subjects and revert commits.
54
+ SKIP_PREFIXES = ("Merge pull request", "Merge branch", "Merge remote-tracking",
55
+ 'Revert "')
56
+
57
+
58
+ def fetch_subjects(base: str, head: str) -> list[str]:
59
+ """Return one commit subject per element. Empty on no-range / no-commits."""
60
+ try:
61
+ result = subprocess.run(
62
+ ["git", "log", f"{base}..{head}", "--format=%s", "--no-merges"],
63
+ capture_output=True, text=True, check=True,
64
+ )
65
+ except subprocess.CalledProcessError as exc:
66
+ # CI without a proper base ref (force-push, first commit, weird state).
67
+ # Lint is advisory in that case — never block on git plumbing failures.
68
+ print(f"⚠️ git log {base}..{head} failed: {exc.stderr.strip()}",
69
+ file=sys.stderr)
70
+ return []
71
+ return [line.strip() for line in result.stdout.splitlines() if line.strip()]
72
+
73
+
74
+ def check_subject(subject: str) -> list[str]:
75
+ """Return list of issue strings for the subject; empty = clean."""
76
+ if any(subject.startswith(p) for p in SKIP_PREFIXES):
77
+ return []
78
+ issues: list[str] = []
79
+ body = CONVENTIONAL_PREFIX.sub("", subject, count=1)
80
+ if len(body) < MIN_SUBJECT_LEN:
81
+ issues.append(
82
+ f"subject body < {MIN_SUBJECT_LEN} chars after Conventional-Commits "
83
+ f"prefix: {subject!r}"
84
+ )
85
+ tokens = {t.lower() for t in re.findall(r"[A-Za-z]+", body)}
86
+ hits = sorted(tokens & BLOCKLIST)
87
+ if hits:
88
+ issues.append(
89
+ f"blocklist token(s) {hits} in subject: {subject!r}"
90
+ )
91
+ return issues
92
+
93
+
94
+ def main() -> int:
95
+ parser = argparse.ArgumentParser(description=__doc__)
96
+ parser.add_argument("--base", default="origin/main",
97
+ help="base ref (default: origin/main)")
98
+ parser.add_argument("--head", default="HEAD",
99
+ help="head ref (default: HEAD)")
100
+ parser.add_argument("--quiet", action="store_true",
101
+ help="suppress the clean-pass success line")
102
+ args = parser.parse_args()
103
+
104
+ subjects = fetch_subjects(args.base, args.head)
105
+ if not subjects:
106
+ if not args.quiet:
107
+ print(f"✅ No commit subjects to check in "
108
+ f"{args.base}..{args.head}.")
109
+ return 0
110
+
111
+ failures: list[tuple[str, str]] = []
112
+ for subj in subjects:
113
+ for issue in check_subject(subj):
114
+ failures.append((subj, issue))
115
+
116
+ if failures:
117
+ print(f"❌ {len(failures)} commit-subject issue(s) in "
118
+ f"{args.base}..{args.head}:", file=sys.stderr)
119
+ for _, issue in failures:
120
+ print(f" - {issue}", file=sys.stderr)
121
+ print(
122
+ "\nThese subjects feed the auto-generated CHANGELOG.md via "
123
+ "scripts/release.py — sloppy subjects become sloppy public "
124
+ "changelog lines. Per ADR-033 + "
125
+ "agents/roadmaps/road-to-distribution-identity.md § Phase 3.\n"
126
+ "Fix: rewrite the offending commits (e.g. `git rebase -i "
127
+ f"{args.base}` and `r`eword) with descriptive subjects, "
128
+ "then re-push.",
129
+ file=sys.stderr,
130
+ )
131
+ return 1
132
+
133
+ if not args.quiet:
134
+ print(f"✅ {len(subjects)} commit subject(s) clean.")
135
+ return 0
136
+
137
+
138
+ if __name__ == "__main__":
139
+ raise SystemExit(main())