@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
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env python3
2
+ """Migrate artefact frontmatter to omit fields equal to their schema default.
3
+
4
+ Phase 2 of `road-to-abstraction-reduction.md`. For every skill / rule /
5
+ command / persona, drop any frontmatter field whose value equals the
6
+ `default` declared in its `scripts/schemas/*.json` (preflight Decision C:
7
+ value-equals-default, type-safe). Fields without a schema default
8
+ (`skill.execution.type`, `command.type`, `rule.validator_ignore`) are never
9
+ touched.
10
+
11
+ The loader injects the same defaults at read time
12
+ (`validate_frontmatter.apply_schema_defaults`), so consumers see the field
13
+ present regardless. Idempotent: a second run is a no-op.
14
+
15
+ CLI:
16
+ python3 scripts/migrate_frontmatter_defaults.py [--dry-run] [--deltas PATH]
17
+
18
+ Exit codes: 0 always (reports counts); non-zero only on I/O error.
19
+ """
20
+ from __future__ import annotations
21
+
22
+ import argparse
23
+ import sys
24
+ from collections import defaultdict
25
+ from pathlib import Path
26
+ from typing import Any
27
+
28
+ sys.path.insert(0, str(Path(__file__).resolve().parent))
29
+ from validate_frontmatter import load_schema, parse_frontmatter # noqa: E402
30
+ from _lib.agent_src import artefact_roots # noqa: E402
31
+
32
+ ROOT = Path(__file__).resolve().parents[1]
33
+ DEFAULT_DELTAS = ROOT / "agents" / "evidence" / "analysis" / "abstraction-reduction-deltas.md"
34
+
35
+ # (subdir, glob, schema name)
36
+ _CATEGORIES = [
37
+ ("skills", "SKILL.md", "skill"),
38
+ ("rules", "*.md", "rule"),
39
+ ("commands", "*.md", "command"),
40
+ ("personas", "*.md", "persona"),
41
+ ]
42
+
43
+ _FM_RE_OPEN = "---\n"
44
+
45
+
46
+ def _same(value: Any, default: Any) -> bool:
47
+ """Type-safe equality. `True == 1` and `1.0 == 1` must NOT match across
48
+ types (preflight Decision C). bool is checked first because in Python
49
+ `isinstance(True, int)` is True."""
50
+ if isinstance(default, bool):
51
+ return isinstance(value, bool) and value == default
52
+ if isinstance(value, bool):
53
+ return False
54
+ return type(value) is type(default) and value == default
55
+
56
+
57
+ def _plan_drops(fm: dict[str, Any], schema: dict[str, Any]) -> tuple[set[str], set[str], dict[str, set[str]]]:
58
+ """Return (top_level_drops, full_block_drops, partial_block_drops).
59
+
60
+ - top_level_drops: scalar keys whose value == default → drop the line.
61
+ - full_block_drops: object keys where every *present* sub-key is droppable
62
+ → drop the whole block.
63
+ - partial_block_drops: object key → set of droppable sub-keys (block kept).
64
+ """
65
+ top: set[str] = set()
66
+ full: set[str] = set()
67
+ partial: dict[str, set[str]] = {}
68
+ props = schema.get("properties", {})
69
+ for key, prop in props.items():
70
+ if not isinstance(prop, dict):
71
+ continue
72
+ if "default" in prop:
73
+ if key in fm and _same(fm[key], prop["default"]):
74
+ top.add(key)
75
+ elif prop.get("type") == "object" and isinstance(fm.get(key), dict):
76
+ sub_props = prop.get("properties", {})
77
+ droppable = {
78
+ sk for sk, sp in sub_props.items()
79
+ if isinstance(sp, dict) and "default" in sp
80
+ and sk in fm[key] and _same(fm[key][sk], sp["default"])
81
+ }
82
+ if not droppable:
83
+ continue
84
+ present = set(fm[key].keys())
85
+ if present <= droppable:
86
+ full.add(key)
87
+ else:
88
+ partial[key] = droppable
89
+ return top, full, partial
90
+
91
+
92
+ def _indent(line: str) -> int:
93
+ return len(line) - len(line.lstrip(" "))
94
+
95
+
96
+ def _rewrite_fm_body(body: str, top: set[str], full: set[str], partial: dict[str, set[str]]) -> str:
97
+ """Remove the planned lines from a frontmatter body, preserving everything
98
+ else byte-for-byte."""
99
+ lines = body.split("\n")
100
+ out: list[str] = []
101
+ skipping_block = False
102
+ current_block: str | None = None
103
+ for line in lines:
104
+ stripped = line.strip()
105
+ ind = _indent(line)
106
+ if skipping_block:
107
+ # Consume the block's indented children (and blank lines) until a
108
+ # top-level (indent-0, non-blank) line appears.
109
+ if stripped == "" or ind > 0:
110
+ continue
111
+ skipping_block = False
112
+ current_block = None
113
+ if ind == 0 and stripped and not stripped.startswith("#"):
114
+ key = stripped.split(":", 1)[0].strip()
115
+ if key in top:
116
+ continue
117
+ if key in full:
118
+ skipping_block = True
119
+ continue
120
+ current_block = key if key in partial else None
121
+ out.append(line)
122
+ continue
123
+ # Indented line belonging to current_block.
124
+ if current_block is not None and ind > 0 and ":" in stripped:
125
+ sub_key = stripped.split(":", 1)[0].strip()
126
+ if sub_key in partial.get(current_block, set()):
127
+ continue
128
+ out.append(line)
129
+ return "\n".join(out)
130
+
131
+
132
+ def _migrate_file(path: Path, schema: dict[str, Any]) -> int:
133
+ text = path.read_text(encoding="utf-8")
134
+ fm, _ = parse_frontmatter(text)
135
+ if not isinstance(fm, dict):
136
+ return 0
137
+ top, full, partial = _plan_drops(fm, schema)
138
+ if not (top or full or partial):
139
+ return 0
140
+ # Locate the frontmatter body span (after the opening `---\n`).
141
+ if not text.startswith(_FM_RE_OPEN):
142
+ return 0
143
+ end = text.find("\n---\n", len(_FM_RE_OPEN))
144
+ if end == -1:
145
+ return 0
146
+ body = text[len(_FM_RE_OPEN):end]
147
+ new_body = _rewrite_fm_body(body, top, full, partial)
148
+ if new_body == body:
149
+ return 0
150
+ new_text = _FM_RE_OPEN + new_body + text[end:]
151
+ removed = body.count("\n") - new_body.count("\n")
152
+ path.write_text(new_text, encoding="utf-8")
153
+ return removed
154
+
155
+
156
+ def _iter(category_subdir: str, glob: str):
157
+ """Mirror `validate_frontmatter._iter_artefacts` exactly: skills / rules /
158
+ commands recurse; personas are **non-recursive** (`glob`, not `rglob`) so
159
+ advisor personas (`personas/advisors/*.md`, a different schema) and the
160
+ `_template-specialist/` scaffold are never migrated."""
161
+ for root in artefact_roots():
162
+ base = root / category_subdir
163
+ if not base.exists():
164
+ continue
165
+ paths = base.glob(glob) if category_subdir == "personas" else base.rglob(glob)
166
+ for p in sorted(paths):
167
+ if p.is_file() and not p.is_symlink():
168
+ if category_subdir == "personas" and p.name.lower() == "readme.md":
169
+ continue
170
+ yield p
171
+
172
+
173
+ def run(apply: bool, deltas_path: Path) -> int:
174
+ per_class_lines: dict[str, int] = defaultdict(int)
175
+ per_class_files: dict[str, int] = defaultdict(int)
176
+ for subdir, glob, schema_name in _CATEGORIES:
177
+ schema = load_schema(schema_name)
178
+ for path in _iter(subdir, glob):
179
+ if apply:
180
+ removed = _migrate_file(path, schema)
181
+ else:
182
+ # Dry-run: compute the delta without writing.
183
+ text = path.read_text(encoding="utf-8")
184
+ fm, _ = parse_frontmatter(text)
185
+ if not isinstance(fm, dict) or not text.startswith(_FM_RE_OPEN):
186
+ continue
187
+ end = text.find("\n---\n", len(_FM_RE_OPEN))
188
+ if end == -1:
189
+ continue
190
+ body = text[len(_FM_RE_OPEN):end]
191
+ top, full, partial = _plan_drops(fm, schema)
192
+ new_body = _rewrite_fm_body(body, top, full, partial)
193
+ removed = body.count("\n") - new_body.count("\n")
194
+ if removed:
195
+ per_class_lines[schema_name] += removed
196
+ per_class_files[schema_name] += 1
197
+
198
+ total_lines = sum(per_class_lines.values())
199
+ total_files = sum(per_class_files.values())
200
+ verb = "would remove" if not apply else "removed"
201
+ print(f"frontmatter-default migration ({'dry-run' if not apply else 'apply'}):")
202
+ for schema_name, _glob, _sn in [(c[2], c[1], c[2]) for c in _CATEGORIES]:
203
+ if per_class_files.get(schema_name):
204
+ print(f" {schema_name:8s}: {verb} {per_class_lines[schema_name]:5d} lines "
205
+ f"across {per_class_files[schema_name]} files")
206
+ print(f" {'TOTAL':8s}: {verb} {total_lines} lines across {total_files} files")
207
+
208
+ if not apply:
209
+ _write_deltas(deltas_path, per_class_lines, per_class_files, total_lines, total_files)
210
+ print(f" delta report → {deltas_path.relative_to(ROOT)}")
211
+ return 0
212
+
213
+
214
+ def _write_deltas(path: Path, lines: dict[str, int], files: dict[str, int],
215
+ total_lines: int, total_files: int) -> None:
216
+ rows = "\n".join(
217
+ f"| {sn} | {files.get(sn, 0)} | {lines.get(sn, 0)} |"
218
+ for _sd, _g, sn in _CATEGORIES if files.get(sn)
219
+ )
220
+ path.parent.mkdir(parents=True, exist_ok=True)
221
+ path.write_text(
222
+ "# Abstraction-reduction — frontmatter line-count delta\n\n"
223
+ "> Dry-run prediction from `scripts/migrate_frontmatter_defaults.py "
224
+ "--dry-run` (road-to-abstraction-reduction.md Phase 2 § Step 2). Lines\n"
225
+ "> are frontmatter lines dropped because their value equalled the\n"
226
+ "> schema default; the loader re-injects them at read time.\n\n"
227
+ "| Class | Files touched | Lines removed |\n"
228
+ "|---|---:|---:|\n"
229
+ f"{rows}\n"
230
+ f"| **TOTAL** | **{total_files}** | **{total_lines}** |\n",
231
+ encoding="utf-8",
232
+ )
233
+
234
+
235
+ def main(argv: list[str] | None = None) -> int:
236
+ parser = argparse.ArgumentParser(description=__doc__.splitlines()[0])
237
+ parser.add_argument("--dry-run", action="store_true", help="report the delta; write nothing.")
238
+ parser.add_argument("--deltas", type=Path, default=DEFAULT_DELTAS,
239
+ help="dry-run delta report output path.")
240
+ args = parser.parse_args(argv)
241
+ return run(apply=not args.dry_run, deltas_path=args.deltas)
242
+
243
+
244
+ if __name__ == "__main__":
245
+ sys.exit(main())
@@ -25,6 +25,7 @@
25
25
  "disable-model-invocation": {
26
26
  "type": "boolean",
27
27
  "enum": [true],
28
+ "default": true,
28
29
  "description": "Commands are always user-invoked; model-invocation is disabled."
29
30
  },
30
31
  "skills": {
@@ -135,6 +136,7 @@
135
136
  "lifecycle": {
136
137
  "type": "string",
137
138
  "enum": ["active", "deprecated", "experimental", "archived"],
139
+ "default": "active",
138
140
  "description": "ADR-013 lifecycle state."
139
141
  },
140
142
  "trust": {
@@ -142,9 +144,9 @@
142
144
  "additionalProperties": false,
143
145
  "required": ["level", "confidence", "human_review_required"],
144
146
  "properties": {
145
- "level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"]},
146
- "confidence": {"type": "string", "enum": ["high", "medium", "low"]},
147
- "human_review_required": {"type": "boolean"}
147
+ "level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"], "default": "core"},
148
+ "confidence": {"type": "string", "enum": ["high", "medium", "low"], "default": "high"},
149
+ "human_review_required": {"type": "boolean", "default": false}
148
150
  },
149
151
  "description": "ADR-013 trust block. Vocabulary mirrored by scripts/lint_artefact_frontmatter.py."
150
152
  },
@@ -153,8 +155,8 @@
153
155
  "additionalProperties": false,
154
156
  "required": ["default", "removable"],
155
157
  "properties": {
156
- "default": {"type": "boolean"},
157
- "removable": {"type": "boolean"}
158
+ "default": {"type": "boolean", "default": true},
159
+ "removable": {"type": "boolean", "default": false}
158
160
  },
159
161
  "description": "ADR-013 install hints (default-on at consumer install; user-removable)."
160
162
  },
@@ -37,11 +37,13 @@
37
37
  },
38
38
  "version": {
39
39
  "type": "string",
40
- "pattern": "^[0-9]+(\\.[0-9]+){0,2}$"
40
+ "pattern": "^[0-9]+(\\.[0-9]+){0,2}$",
41
+ "default": "1.0"
41
42
  },
42
43
  "source": {
43
44
  "type": "string",
44
- "enum": ["package", "project"]
45
+ "enum": ["package", "project"],
46
+ "default": "package"
45
47
  }
46
48
  }
47
49
  }
@@ -14,7 +14,8 @@
14
14
  },
15
15
  "source": {
16
16
  "type": "string",
17
- "enum": ["package", "project"]
17
+ "enum": ["package", "project"],
18
+ "default": "package"
18
19
  },
19
20
  "description": {
20
21
  "type": "string",
@@ -116,6 +117,7 @@
116
117
  "lifecycle": {
117
118
  "type": "string",
118
119
  "enum": ["active", "deprecated", "experimental", "archived"],
120
+ "default": "active",
119
121
  "description": "ADR-013 lifecycle state."
120
122
  },
121
123
  "trust": {
@@ -123,9 +125,9 @@
123
125
  "additionalProperties": false,
124
126
  "required": ["level", "confidence", "human_review_required"],
125
127
  "properties": {
126
- "level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"]},
127
- "confidence": {"type": "string", "enum": ["high", "medium", "low"]},
128
- "human_review_required": {"type": "boolean"}
128
+ "level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"], "default": "core"},
129
+ "confidence": {"type": "string", "enum": ["high", "medium", "low"], "default": "high"},
130
+ "human_review_required": {"type": "boolean", "default": false}
129
131
  },
130
132
  "description": "ADR-013 trust block. Vocabulary mirrored by scripts/lint_artefact_frontmatter.py."
131
133
  },
@@ -134,8 +136,8 @@
134
136
  "additionalProperties": false,
135
137
  "required": ["default", "removable"],
136
138
  "properties": {
137
- "default": {"type": "boolean"},
138
- "removable": {"type": "boolean"}
139
+ "default": {"type": "boolean", "default": true},
140
+ "removable": {"type": "boolean", "default": false}
139
141
  },
140
142
  "description": "ADR-013 install hints (default-on at consumer install; user-removable)."
141
143
  }
@@ -20,7 +20,8 @@
20
20
  },
21
21
  "source": {
22
22
  "type": "string",
23
- "enum": ["package", "project"]
23
+ "enum": ["package", "project"],
24
+ "default": "package"
24
25
  },
25
26
  "domain": {
26
27
  "type": "string",
@@ -140,6 +141,7 @@
140
141
  "lifecycle": {
141
142
  "type": "string",
142
143
  "enum": ["active", "deprecated", "experimental", "archived"],
144
+ "default": "active",
143
145
  "description": "ADR-013 lifecycle state."
144
146
  },
145
147
  "trust": {
@@ -147,9 +149,9 @@
147
149
  "additionalProperties": false,
148
150
  "required": ["level", "confidence", "human_review_required"],
149
151
  "properties": {
150
- "level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"]},
151
- "confidence": {"type": "string", "enum": ["high", "medium", "low"]},
152
- "human_review_required": {"type": "boolean"}
152
+ "level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"], "default": "core"},
153
+ "confidence": {"type": "string", "enum": ["high", "medium", "low"], "default": "high"},
154
+ "human_review_required": {"type": "boolean", "default": false}
153
155
  },
154
156
  "description": "ADR-013 trust block. Vocabulary mirrored by scripts/lint_artefact_frontmatter.py."
155
157
  },
@@ -158,8 +160,8 @@
158
160
  "additionalProperties": false,
159
161
  "required": ["default", "removable"],
160
162
  "properties": {
161
- "default": {"type": "boolean"},
162
- "removable": {"type": "boolean"}
163
+ "default": {"type": "boolean", "default": true},
164
+ "removable": {"type": "boolean", "default": false}
163
165
  },
164
166
  "description": "ADR-013 install hints (default-on at consumer install; user-removable)."
165
167
  }
@@ -33,6 +33,7 @@ from typing import Iterable, List, Literal, Optional
33
33
  # Sibling module — stdlib-only frontmatter schema validator.
34
34
  sys.path.insert(0, str(Path(__file__).resolve().parent))
35
35
  from validate_frontmatter import ( # noqa: E402
36
+ apply_schema_defaults,
36
37
  parse_frontmatter as parse_frontmatter_for_schema,
37
38
  load_schema,
38
39
  validate as validate_against_schema,
@@ -1511,11 +1512,10 @@ def lint_rule(path: Path, text: str) -> LintResult:
1511
1512
  elif rule_type not in VALID_RULE_TYPES:
1512
1513
  issues.append(Issue("error", "invalid_type", f"Invalid type '{rule_type}'; must be 'always', 'auto', or 'manual'"))
1513
1514
 
1514
- # source field
1515
+ # source field — optional (schema default `package` injected at read);
1516
+ # validate the value only when present.
1515
1517
  rule_source = extract_frontmatter_field(frontmatter, SOURCE_PATTERN)
1516
- if rule_source is None:
1517
- issues.append(Issue("error", "missing_source", "Frontmatter missing 'source' field (must be 'package' or 'project')"))
1518
- elif rule_source not in VALID_RULE_SOURCES:
1518
+ if rule_source is not None and rule_source not in VALID_RULE_SOURCES:
1519
1519
  issues.append(Issue("error", "invalid_source", f"Invalid source '{rule_source}'; must be 'package' or 'project'"))
1520
1520
 
1521
1521
  # description required for auto rules
@@ -1689,12 +1689,10 @@ def lint_command(path: Path, text: str) -> LintResult:
1689
1689
  if not name_match or not name_match.group(1).strip():
1690
1690
  issues.append(Issue("error", "missing_name", "Frontmatter missing 'name' field"))
1691
1691
 
1692
- # disable-model-invocation field
1692
+ # disable-model-invocation field — optional (schema default `true`
1693
+ # injected at read); validate the value only when present.
1693
1694
  dmi_match = DISABLE_MODEL_PATTERN.search(frontmatter)
1694
- if not dmi_match:
1695
- issues.append(Issue("error", "missing_disable_model_invocation",
1696
- "Frontmatter missing 'disable-model-invocation: true' (required for Claude Code)"))
1697
- elif dmi_match.group(1) != "true":
1695
+ if dmi_match and dmi_match.group(1) != "true":
1698
1696
  issues.append(Issue("warning", "disable_model_invocation_false",
1699
1697
  "disable-model-invocation should be 'true' for commands"))
1700
1698
 
@@ -1839,6 +1837,11 @@ def lint_persona(path: Path, text: str) -> LintResult:
1839
1837
  "role": re.compile(r'^role:\s*"?(.+?)"?\s*$', re.MULTILINE),
1840
1838
  "description": re.compile(r'^description:\s*"?(.+?)"?\s*$', re.MULTILINE),
1841
1839
  "tier": re.compile(r'^tier:\s*"?(\w+)"?\s*$', re.MULTILINE),
1840
+ }
1841
+ # `version` (default "1.0") and `source` (default "package") carry schema
1842
+ # defaults — they are injected at read time, so omitting them is valid.
1843
+ # Validate the value only when present; never require presence.
1844
+ optional_defaulted = {
1842
1845
  "version": re.compile(r'^version:\s*"?(.+?)"?\s*$', re.MULTILINE),
1843
1846
  "source": re.compile(r'^source:\s*"?(package|project)"?\s*$', re.MULTILINE),
1844
1847
  }
@@ -1849,6 +1852,10 @@ def lint_persona(path: Path, text: str) -> LintResult:
1849
1852
  issues.append(Issue("error", f"missing_{field}", f"Persona frontmatter must declare `{field}`"))
1850
1853
  else:
1851
1854
  parsed[field] = value
1855
+ for field, pattern in optional_defaulted.items():
1856
+ value = extract_frontmatter_field(frontmatter, pattern)
1857
+ if value:
1858
+ parsed[field] = value
1852
1859
 
1853
1860
  # id matches filename stem
1854
1861
  if "id" in parsed and parsed["id"] != path.stem:
@@ -3091,6 +3098,11 @@ def lint_frontmatter_schema(path: Path, text: str, artifact_type: str) -> List[I
3091
3098
  # rules/commands/personas; avoid double-reporting here.
3092
3099
  return []
3093
3100
 
3101
+ # Inject schema defaults before validating so artefacts that omit a field
3102
+ # equal to its default (post abstraction-reduction migration) still satisfy
3103
+ # `required` — mirrors validate_frontmatter's own loader path.
3104
+ apply_schema_defaults(data, schema)
3105
+
3094
3106
  issues: List[Issue] = []
3095
3107
  for error in validate_against_schema(data, schema):
3096
3108
  code = f"schema_{error.rule}"
@@ -25,7 +25,7 @@ log() { [ "$quiet" = "1" ] || printf '%s\n' "$*"; }
25
25
  result=$(python3 <<'PY'
26
26
  import os, sys, time, hashlib, pathlib, glob
27
27
  sys.path.insert(0, "scripts")
28
- from validate_frontmatter import parse_frontmatter, load_schema, validate
28
+ from validate_frontmatter import parse_frontmatter, load_schema, validate, apply_schema_defaults
29
29
  from _lib.agent_src import artefact_roots
30
30
 
31
31
  # ADR-017: walk every source root, collect skill dirs by logical name.
@@ -60,6 +60,9 @@ for name in sample:
60
60
  if fm is None:
61
61
  failures.append(f"{name}: no frontmatter")
62
62
  continue
63
+ # Inject schema defaults before validating: artefacts may omit a field
64
+ # equal to its default (abstraction-reduction), injected at read time.
65
+ apply_schema_defaults(fm, schema)
63
66
  errs = validate(fm, schema)
64
67
  if errs:
65
68
  for e in errs:
@@ -33,6 +33,7 @@ __all__ = [
33
33
  "validate",
34
34
  "load_schema",
35
35
  "parse_frontmatter",
36
+ "apply_schema_defaults",
36
37
  ]
37
38
 
38
39
  _FRONTMATTER_RE = re.compile(r"^---\n(.*?)\n---\n", re.DOTALL)
@@ -234,6 +235,75 @@ def load_schema(artefact_type: str) -> dict[str, Any]:
234
235
  return data
235
236
 
236
237
 
238
+ # --- Schema-default injection ----------------------------------------------
239
+
240
+ def _object_defaults(schema: dict[str, Any]) -> dict[str, Any]:
241
+ """Build the default value for an absent object property from the
242
+ ``default`` keywords declared on its sub-properties. Returns ``{}`` when
243
+ no sub-property declares a default (so the object is never fabricated).
244
+ """
245
+ out: dict[str, Any] = {}
246
+ for sub_key, sub_schema in (schema.get("properties") or {}).items():
247
+ if not isinstance(sub_schema, dict):
248
+ continue
249
+ if "default" in sub_schema:
250
+ out[sub_key] = sub_schema["default"]
251
+ elif sub_schema.get("type") == "object":
252
+ nested = _object_defaults(sub_schema)
253
+ if nested:
254
+ out[sub_key] = nested
255
+ return out
256
+
257
+
258
+ def apply_schema_defaults(data: dict[str, Any], schema: dict[str, Any]) -> dict[str, Any]:
259
+ """Inject schema ``default`` values into ``data`` for absent keys, in place.
260
+
261
+ Mirrors the contract in
262
+ ``agents/evidence/analysis/abstraction-reduction-preflight.md``: a field
263
+ omitted on disk reads back as its schema default, so downstream consumers
264
+ that require the field present keep working unchanged after the
265
+ frontmatter-default migration (road-to-abstraction-reduction.md).
266
+
267
+ Behaviour:
268
+ - A scalar property with a ``default`` is injected when absent.
269
+ - An object property whose sub-properties declare defaults is, when absent,
270
+ reconstructed from those sub-defaults; when present (a dict), its absent
271
+ sub-keys are filled. Objects with no sub-defaults (e.g. ``execution``) are
272
+ never fabricated.
273
+ - Present values are never overwritten — injection only fills gaps.
274
+
275
+ Returns the same ``data`` dict for convenience. Non-dict input is returned
276
+ untouched.
277
+ """
278
+ if not isinstance(data, dict):
279
+ return data
280
+ for key, prop in (schema.get("properties") or {}).items():
281
+ if not isinstance(prop, dict):
282
+ continue
283
+ if "default" in prop:
284
+ data.setdefault(key, prop["default"])
285
+ continue
286
+ if prop.get("type") == "object":
287
+ if key in data and isinstance(data[key], dict):
288
+ _fill_object_defaults(data[key], prop)
289
+ elif key not in data:
290
+ reconstructed = _object_defaults(prop)
291
+ if reconstructed:
292
+ data[key] = reconstructed
293
+ return data
294
+
295
+
296
+ def _fill_object_defaults(obj: dict[str, Any], schema: dict[str, Any]) -> None:
297
+ """Fill absent sub-keys of a present object from sub-property defaults."""
298
+ for sub_key, sub_schema in (schema.get("properties") or {}).items():
299
+ if not isinstance(sub_schema, dict):
300
+ continue
301
+ if "default" in sub_schema:
302
+ obj.setdefault(sub_key, sub_schema["default"])
303
+ elif sub_schema.get("type") == "object" and isinstance(obj.get(sub_key), dict):
304
+ _fill_object_defaults(obj[sub_key], sub_schema)
305
+
306
+
237
307
  # --- Validator core (Draft-07 subset) --------------------------------------
238
308
 
239
309
  _JSON_TYPES: dict[str, tuple[type, ...]] = {
@@ -476,6 +546,10 @@ def _main() -> int:
476
546
  # Other tooling flags missing frontmatter; don't double-report.
477
547
  continue
478
548
  schema = load_schema(artefact_type)
549
+ # Inject schema defaults before validation so artefacts that omit a
550
+ # field equal to its default still satisfy `required`
551
+ # (road-to-abstraction-reduction.md Phase 1).
552
+ apply_schema_defaults(data, schema)
479
553
  errors = validate(data, schema)
480
554
  fatal = [e for e in errors if e.severity == "error"]
481
555
  warnings = [e for e in errors if e.severity == "warning"]