@event4u/agent-config 2.25.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (804) hide show
  1. package/.agent-src/commands/agent-handoff.md +15 -3
  2. package/.agent-src/commands/agent-status.md +12 -0
  3. package/.agent-src/commands/agents/audit.md +12 -0
  4. package/.agent-src/commands/agents/init.md +12 -0
  5. package/.agent-src/commands/agents/optimize.md +12 -0
  6. package/.agent-src/commands/agents/user/accept.md +12 -0
  7. package/.agent-src/commands/agents/user/init.md +12 -0
  8. package/.agent-src/commands/agents/user/review.md +12 -0
  9. package/.agent-src/commands/agents/user/show.md +12 -0
  10. package/.agent-src/commands/agents/user/update.md +12 -0
  11. package/.agent-src/commands/agents/user.md +12 -0
  12. package/.agent-src/commands/agents.md +12 -0
  13. package/.agent-src/commands/analyze-reference-repo.md +15 -3
  14. package/.agent-src/commands/bug-fix.md +13 -0
  15. package/.agent-src/commands/bug-investigate.md +13 -1
  16. package/.agent-src/commands/challenge-me/vision.md +12 -0
  17. package/.agent-src/commands/challenge-me/with-docs.md +12 -0
  18. package/.agent-src/commands/challenge-me.md +12 -0
  19. package/.agent-src/commands/chat-history/import.md +16 -4
  20. package/.agent-src/commands/chat-history/learn.md +15 -3
  21. package/.agent-src/commands/chat-history/show.md +17 -5
  22. package/.agent-src/commands/chat-history.md +14 -2
  23. package/.agent-src/commands/check-current-md.md +12 -0
  24. package/.agent-src/commands/commit/in-chunks.md +12 -0
  25. package/.agent-src/commands/commit.md +12 -0
  26. package/.agent-src/commands/compress.md +12 -0
  27. package/.agent-src/commands/context/create.md +17 -5
  28. package/.agent-src/commands/context/refactor.md +15 -3
  29. package/.agent-src/commands/context.md +12 -0
  30. package/.agent-src/commands/cost-report.md +12 -0
  31. package/.agent-src/commands/council/analysis.md +15 -3
  32. package/.agent-src/commands/council/debate.md +17 -5
  33. package/.agent-src/commands/council/default.md +17 -5
  34. package/.agent-src/commands/council/design.md +12 -0
  35. package/.agent-src/commands/council/optimize.md +12 -0
  36. package/.agent-src/commands/council/pr.md +12 -0
  37. package/.agent-src/commands/council.md +13 -1
  38. package/.agent-src/commands/create-pr/description-only.md +12 -0
  39. package/.agent-src/commands/create-pr.md +39 -0
  40. package/.agent-src/commands/e2e-heal.md +12 -0
  41. package/.agent-src/commands/e2e-plan.md +12 -0
  42. package/.agent-src/commands/estimate-ticket.md +12 -0
  43. package/.agent-src/commands/feature/dev.md +13 -1
  44. package/.agent-src/commands/feature/explore.md +12 -0
  45. package/.agent-src/commands/feature/plan.md +14 -2
  46. package/.agent-src/commands/feature/refactor.md +12 -0
  47. package/.agent-src/commands/feature/roadmap.md +14 -2
  48. package/.agent-src/commands/feature.md +12 -0
  49. package/.agent-src/commands/fix/ci.md +12 -0
  50. package/.agent-src/commands/fix/portability.md +12 -0
  51. package/.agent-src/commands/fix/pr-bot-comments.md +12 -0
  52. package/.agent-src/commands/fix/pr-comments.md +12 -0
  53. package/.agent-src/commands/fix/pr-developer-comments.md +12 -0
  54. package/.agent-src/commands/fix/refs.md +12 -0
  55. package/.agent-src/commands/fix/seeder.md +15 -2
  56. package/.agent-src/commands/fix.md +12 -0
  57. package/.agent-src/commands/ghostwriter/delete.md +20 -8
  58. package/.agent-src/commands/ghostwriter/fetch.md +19 -7
  59. package/.agent-src/commands/ghostwriter/list.md +19 -7
  60. package/.agent-src/commands/ghostwriter/show.md +14 -2
  61. package/.agent-src/commands/ghostwriter/write.md +15 -3
  62. package/.agent-src/commands/ghostwriter.md +14 -2
  63. package/.agent-src/commands/grill-me.md +12 -0
  64. package/.agent-src/commands/implement-ticket.md +12 -0
  65. package/.agent-src/commands/jira-ticket.md +12 -0
  66. package/.agent-src/commands/judge/on-diff.md +12 -0
  67. package/.agent-src/commands/judge/solo.md +12 -0
  68. package/.agent-src/commands/judge/steps.md +12 -0
  69. package/.agent-src/commands/judge.md +12 -0
  70. package/.agent-src/commands/memory/add.md +15 -3
  71. package/.agent-src/commands/memory/learn-low-impact.md +18 -6
  72. package/.agent-src/commands/memory/load.md +12 -0
  73. package/.agent-src/commands/memory/mine-session.md +12 -0
  74. package/.agent-src/commands/memory/promote.md +12 -0
  75. package/.agent-src/commands/memory/propose.md +12 -0
  76. package/.agent-src/commands/memory.md +12 -0
  77. package/.agent-src/commands/mode.md +12 -0
  78. package/.agent-src/commands/module/create.md +13 -0
  79. package/.agent-src/commands/module/explore.md +23 -7
  80. package/.agent-src/commands/module.md +12 -0
  81. package/.agent-src/commands/optimize/agents-dir.md +14 -2
  82. package/.agent-src/commands/optimize/augmentignore.md +64 -20
  83. package/.agent-src/commands/optimize/rtk.md +68 -30
  84. package/.agent-src/commands/optimize/skills.md +12 -0
  85. package/.agent-src/commands/optimize-prompt.md +12 -0
  86. package/.agent-src/commands/optimize.md +12 -0
  87. package/.agent-src/commands/orchestrate.md +13 -1
  88. package/.agent-src/commands/override/create.md +12 -0
  89. package/.agent-src/commands/override/manage.md +12 -0
  90. package/.agent-src/commands/override.md +12 -0
  91. package/.agent-src/commands/package-reset.md +12 -0
  92. package/.agent-src/commands/package-test.md +98 -10
  93. package/.agent-src/commands/post-as/ghostwriter.md +12 -0
  94. package/.agent-src/commands/post-as/me.md +13 -1
  95. package/.agent-src/commands/post-as.md +12 -0
  96. package/.agent-src/commands/prepare-for-review.md +12 -0
  97. package/.agent-src/commands/project-analyze.md +27 -15
  98. package/.agent-src/commands/project-health.md +13 -1
  99. package/.agent-src/commands/quality-fix.md +61 -27
  100. package/.agent-src/commands/refine-ticket.md +12 -0
  101. package/.agent-src/commands/research/deep.md +12 -0
  102. package/.agent-src/commands/research/report.md +12 -0
  103. package/.agent-src/commands/research.md +12 -0
  104. package/.agent-src/commands/review-changes.md +12 -0
  105. package/.agent-src/commands/review-routing.md +12 -0
  106. package/.agent-src/commands/roadmap/ai-council.md +15 -3
  107. package/.agent-src/commands/roadmap/create.md +13 -1
  108. package/.agent-src/commands/roadmap/process-full.md +12 -0
  109. package/.agent-src/commands/roadmap/process-phase.md +12 -0
  110. package/.agent-src/commands/roadmap/process-step.md +12 -0
  111. package/.agent-src/commands/roadmap.md +12 -0
  112. package/.agent-src/commands/rule-compliance-audit.md +12 -0
  113. package/.agent-src/commands/set-cost-profile.md +12 -0
  114. package/.agent-src/commands/sync-agent-settings.md +12 -0
  115. package/.agent-src/commands/sync-gitignore/fix.md +32 -13
  116. package/.agent-src/commands/sync-gitignore.md +13 -1
  117. package/.agent-src/commands/tests/create.md +12 -0
  118. package/.agent-src/commands/tests/execute.md +12 -0
  119. package/.agent-src/commands/tests.md +12 -0
  120. package/.agent-src/commands/threat-model.md +12 -0
  121. package/.agent-src/commands/update-form-request-messages.md +14 -1
  122. package/.agent-src/commands/upstream-contribute.md +12 -0
  123. package/.agent-src/commands/video/from-script.md +12 -0
  124. package/.agent-src/commands/video/scene.md +12 -0
  125. package/.agent-src/commands/video/stitch.md +13 -1
  126. package/.agent-src/commands/video/storyboard.md +12 -0
  127. package/.agent-src/commands/video.md +12 -0
  128. package/.agent-src/commands/work.md +12 -0
  129. package/.agent-src/contexts/augment-infrastructure.md +6 -9
  130. package/.agent-src/contexts/authority/scope-mechanics.md +11 -0
  131. package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -1
  132. package/.agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  133. package/.agent-src/contexts/contracts/research-schema.md +1 -1
  134. package/.agent-src/contexts/documentation-hierarchy.md +2 -2
  135. package/.agent-src/contexts/execution/interrupt-examples.md +34 -0
  136. package/.agent-src/contexts/execution/roadmap-process-loop.md +19 -0
  137. package/.agent-src/contexts/skills-and-commands.md +2 -2
  138. package/.agent-src/ghostwriter/README.md +2 -2
  139. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  140. package/.agent-src/personas/README.md +1 -1
  141. package/.agent-src/personas/advisors/contrarian.md +1 -1
  142. package/.agent-src/personas/advisors/executor.md +1 -1
  143. package/.agent-src/personas/advisors/expansionist.md +1 -1
  144. package/.agent-src/personas/advisors/first-principles.md +1 -1
  145. package/.agent-src/personas/advisors/outsider.md +1 -1
  146. package/.agent-src/rules/agent-authority.md +12 -0
  147. package/.agent-src/rules/analysis-skill-routing.md +12 -0
  148. package/.agent-src/rules/architecture.md +37 -11
  149. package/.agent-src/rules/artifact-drafting-protocol.md +19 -1
  150. package/.agent-src/rules/artifact-engagement-recording.md +13 -1
  151. package/.agent-src/rules/ask-when-uncertain.md +12 -0
  152. package/.agent-src/rules/augment-edit-discipline.md +40 -0
  153. package/.agent-src/rules/augment-source-of-truth.md +15 -3
  154. package/.agent-src/rules/autonomous-execution.md +44 -1
  155. package/.agent-src/rules/caveman-speak.md +13 -1
  156. package/.agent-src/rules/cli-output-handling.md +13 -1
  157. package/.agent-src/rules/command-suggestion-policy.md +13 -1
  158. package/.agent-src/rules/commit-conventions.md +13 -1
  159. package/.agent-src/rules/commit-policy.md +12 -0
  160. package/.agent-src/rules/context-hygiene.md +16 -4
  161. package/.agent-src/rules/copilot-routing.md +13 -1
  162. package/.agent-src/rules/devcontainer-routing.md +13 -1
  163. package/.agent-src/rules/direct-answers.md +12 -0
  164. package/.agent-src/rules/docker-commands.md +13 -1
  165. package/.agent-src/rules/domain-adoption-policy.md +21 -10
  166. package/.agent-src/rules/domain-safety-disclaimer.md +126 -0
  167. package/.agent-src/rules/domain-safety-pii.md +154 -0
  168. package/.agent-src/rules/domain-safety-retention.md +98 -0
  169. package/.agent-src/rules/downstream-changes.md +17 -5
  170. package/.agent-src/rules/external-reference-deep-dive.md +13 -1
  171. package/.agent-src/rules/fast-path-marker-visibility.md +21 -1
  172. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +142 -0
  173. package/.agent-src/rules/git-history-discipline.md +111 -0
  174. package/.agent-src/rules/guidelines.md +12 -0
  175. package/.agent-src/rules/improve-before-implement.md +13 -1
  176. package/.agent-src/rules/invite-challenge.md +13 -1
  177. package/.agent-src/rules/language-and-tone.md +12 -0
  178. package/.agent-src/rules/laravel-routing.md +13 -1
  179. package/.agent-src/rules/laravel-translations.md +13 -1
  180. package/.agent-src/rules/low-impact-corpus-privacy-floor.md +17 -5
  181. package/.agent-src/rules/markdown-safe-codeblocks.md +13 -1
  182. package/.agent-src/rules/media-governance-routing.md +27 -15
  183. package/.agent-src/rules/minimal-safe-diff.md +19 -1
  184. package/.agent-src/rules/missing-tool-handling.md +13 -1
  185. package/.agent-src/rules/model-recommendation.md +13 -1
  186. package/.agent-src/rules/no-attribution-footers.md +13 -1
  187. package/.agent-src/rules/no-cheap-questions.md +12 -0
  188. package/.agent-src/rules/no-roadmap-references.md +32 -18
  189. package/.agent-src/rules/non-destructive-by-default.md +12 -0
  190. package/.agent-src/rules/onboarding-gate.md +19 -6
  191. package/.agent-src/rules/package-ci-checks.md +12 -0
  192. package/.agent-src/rules/persona-governance.md +13 -1
  193. package/.agent-src/rules/php-coding.md +13 -1
  194. package/.agent-src/rules/preservation-guard.md +13 -1
  195. package/.agent-src/rules/provider-lifecycle-discipline.md +14 -2
  196. package/.agent-src/rules/reviewer-awareness.md +13 -1
  197. package/.agent-src/rules/roadmap-ci-steps-policy.md +13 -1
  198. package/.agent-src/rules/roadmap-progress-sync.md +18 -1
  199. package/.agent-src/rules/role-mode-adherence.md +13 -1
  200. package/.agent-src/rules/rule-type-governance.md +13 -1
  201. package/.agent-src/rules/runtime-safety.md +13 -1
  202. package/.agent-src/rules/scope-control.md +12 -0
  203. package/.agent-src/rules/security-sensitive-stop.md +13 -1
  204. package/.agent-src/rules/size-enforcement.md +12 -0
  205. package/.agent-src/rules/skill-improvement-trigger.md +13 -1
  206. package/.agent-src/rules/skill-quality.md +13 -1
  207. package/.agent-src/rules/slash-command-routing-policy.md +13 -1
  208. package/.agent-src/rules/symfony-routing.md +13 -1
  209. package/.agent-src/rules/think-before-action.md +13 -1
  210. package/.agent-src/rules/token-efficiency.md +13 -1
  211. package/.agent-src/rules/token-optimizer-maintenance.md +12 -0
  212. package/.agent-src/rules/tool-safety.md +13 -1
  213. package/.agent-src/rules/ui-audit-gate.md +13 -1
  214. package/.agent-src/rules/upstream-proposal.md +13 -1
  215. package/.agent-src/rules/user-interaction.md +13 -1
  216. package/.agent-src/rules/user-interrupt-priority.md +58 -0
  217. package/.agent-src/rules/verify-before-complete.md +23 -2
  218. package/.agent-src/skills/accessibility-auditor/SKILL.md +12 -0
  219. package/.agent-src/skills/activation-design/SKILL.md +12 -0
  220. package/.agent-src/skills/adr-create/SKILL.md +12 -0
  221. package/.agent-src/skills/adversarial-review/SKILL.md +13 -1
  222. package/.agent-src/skills/agent-docs-writing/SKILL.md +16 -4
  223. package/.agent-src/skills/agents-md-thin-root/SKILL.md +14 -2
  224. package/.agent-src/skills/ai-council/SKILL.md +29 -15
  225. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +12 -0
  226. package/.agent-src/skills/analysis-skill-router/SKILL.md +12 -0
  227. package/.agent-src/skills/api-design/SKILL.md +13 -3
  228. package/.agent-src/skills/api-endpoint/SKILL.md +70 -154
  229. package/.agent-src/skills/api-testing/SKILL.md +23 -0
  230. package/.agent-src/skills/architecture-review-lens/SKILL.md +12 -0
  231. package/.agent-src/skills/artisan-commands/SKILL.md +12 -0
  232. package/.agent-src/skills/async-python-patterns/SKILL.md +13 -1
  233. package/.agent-src/skills/authz-review/SKILL.md +12 -2
  234. package/.agent-src/skills/aws-infrastructure/SKILL.md +12 -0
  235. package/.agent-src/skills/blade-ui/SKILL.md +12 -0
  236. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +12 -0
  237. package/.agent-src/skills/bug-analyzer/SKILL.md +14 -2
  238. package/.agent-src/skills/build-buy-partner/SKILL.md +12 -0
  239. package/.agent-src/skills/canvas-design/SKILL.md +12 -0
  240. package/.agent-src/skills/character-consistency/SKILL.md +23 -11
  241. package/.agent-src/skills/check-refs/SKILL.md +12 -0
  242. package/.agent-src/skills/churn-prevention/SKILL.md +12 -0
  243. package/.agent-src/skills/code-refactoring/SKILL.md +52 -34
  244. package/.agent-src/skills/code-review/SKILL.md +53 -36
  245. package/.agent-src/skills/command-routing/SKILL.md +12 -0
  246. package/.agent-src/skills/command-writing/SKILL.md +14 -2
  247. package/.agent-src/skills/comp-banding/SKILL.md +12 -0
  248. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +12 -2
  249. package/.agent-src/skills/competitive-positioning/SKILL.md +12 -2
  250. package/.agent-src/skills/composer-packages/SKILL.md +12 -0
  251. package/.agent-src/skills/compress-memory/SKILL.md +12 -0
  252. package/.agent-src/skills/content-funnel-design/SKILL.md +12 -2
  253. package/.agent-src/skills/context-authoring/SKILL.md +19 -7
  254. package/.agent-src/skills/context-document/SKILL.md +17 -5
  255. package/.agent-src/skills/contracts-cognition/SKILL.md +12 -2
  256. package/.agent-src/skills/conventional-commits-writing/SKILL.md +12 -0
  257. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +13 -1
  258. package/.agent-src/skills/copilot-config/SKILL.md +12 -0
  259. package/.agent-src/skills/customer-research/SKILL.md +12 -0
  260. package/.agent-src/skills/dashboard-design/SKILL.md +13 -2
  261. package/.agent-src/skills/data-flow-mapper/SKILL.md +12 -0
  262. package/.agent-src/skills/data-handling-judgment/SKILL.md +12 -2
  263. package/.agent-src/skills/database/SKILL.md +22 -5
  264. package/.agent-src/skills/dcf-modeling/SKILL.md +12 -2
  265. package/.agent-src/skills/deal-qualification-meddic/SKILL.md +12 -2
  266. package/.agent-src/skills/decision-record/SKILL.md +12 -0
  267. package/.agent-src/skills/deep-reading-analyst/SKILL.md +12 -0
  268. package/.agent-src/skills/defense-in-depth/SKILL.md +13 -1
  269. package/.agent-src/skills/dependency-upgrade/SKILL.md +77 -19
  270. package/.agent-src/skills/description-assist/SKILL.md +12 -0
  271. package/.agent-src/skills/design-review/SKILL.md +12 -0
  272. package/.agent-src/skills/devcontainer/SKILL.md +12 -0
  273. package/.agent-src/skills/developer-like-execution/SKILL.md +37 -14
  274. package/.agent-src/skills/discovery-interview/SKILL.md +12 -2
  275. package/.agent-src/skills/doc-coauthoring/SKILL.md +12 -0
  276. package/.agent-src/skills/docker/SKILL.md +12 -0
  277. package/.agent-src/skills/editorial-calendar/SKILL.md +12 -2
  278. package/.agent-src/skills/eloquent/SKILL.md +13 -1
  279. package/.agent-src/skills/eloquent/evals/triggers.json +1 -1
  280. package/.agent-src/skills/error-handling-patterns/SKILL.md +13 -1
  281. package/.agent-src/skills/estimate-ticket/SKILL.md +12 -0
  282. package/.agent-src/skills/existing-ui-audit/SKILL.md +12 -0
  283. package/.agent-src/skills/expansion-playbook/SKILL.md +12 -0
  284. package/.agent-src/skills/fe-design/SKILL.md +12 -0
  285. package/.agent-src/skills/feature-planning/SKILL.md +13 -1
  286. package/.agent-src/skills/file-editor/SKILL.md +57 -19
  287. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +14 -2
  288. package/.agent-src/skills/flux/SKILL.md +12 -0
  289. package/.agent-src/skills/forecast-accuracy/SKILL.md +12 -2
  290. package/.agent-src/skills/forecasting/SKILL.md +12 -2
  291. package/.agent-src/skills/form-handler/SKILL.md +12 -0
  292. package/.agent-src/skills/fundraising-narrative/SKILL.md +12 -2
  293. package/.agent-src/skills/funnel-analysis/SKILL.md +12 -0
  294. package/.agent-src/skills/git-workflow/SKILL.md +16 -4
  295. package/.agent-src/skills/github-ci/SKILL.md +12 -0
  296. package/.agent-src/skills/grafana/SKILL.md +12 -0
  297. package/.agent-src/skills/gtm-launch/SKILL.md +12 -2
  298. package/.agent-src/skills/guideline-writing/SKILL.md +12 -0
  299. package/.agent-src/skills/hiring-loop-design/SKILL.md +12 -0
  300. package/.agent-src/skills/incident-commander/SKILL.md +12 -2
  301. package/.agent-src/skills/jira-integration/SKILL.md +12 -0
  302. package/.agent-src/skills/jobs-events/SKILL.md +12 -0
  303. package/.agent-src/skills/judge-bug-hunter/SKILL.md +12 -0
  304. package/.agent-src/skills/judge-code-quality/SKILL.md +12 -0
  305. package/.agent-src/skills/judge-security-auditor/SKILL.md +12 -0
  306. package/.agent-src/skills/judge-test-coverage/SKILL.md +12 -0
  307. package/.agent-src/skills/laravel/SKILL.md +12 -0
  308. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +199 -0
  309. package/.agent-src/skills/{dto-creator → laravel-dto}/SKILL.md +19 -6
  310. package/.agent-src/skills/laravel-horizon/SKILL.md +12 -0
  311. package/.agent-src/skills/laravel-mail/SKILL.md +12 -0
  312. package/.agent-src/skills/laravel-middleware/SKILL.md +12 -0
  313. package/.agent-src/skills/{migration-creator → laravel-migration}/SKILL.md +23 -10
  314. package/.agent-src/skills/laravel-notifications/SKILL.md +12 -0
  315. package/.agent-src/skills/laravel-pennant/SKILL.md +12 -0
  316. package/.agent-src/skills/laravel-pulse/SKILL.md +12 -0
  317. package/.agent-src/skills/laravel-reverb/SKILL.md +15 -3
  318. package/.agent-src/skills/laravel-scheduling/SKILL.md +12 -0
  319. package/.agent-src/skills/laravel-validation/SKILL.md +12 -0
  320. package/.agent-src/skills/{websocket → laravel-websocket}/SKILL.md +16 -3
  321. package/.agent-src/skills/launch-readiness/SKILL.md +12 -2
  322. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +16 -4
  323. package/.agent-src/skills/lint-skills/SKILL.md +12 -0
  324. package/.agent-src/skills/livewire/SKILL.md +12 -0
  325. package/.agent-src/skills/livewire-architect/SKILL.md +12 -0
  326. package/.agent-src/skills/logging-monitoring/SKILL.md +12 -0
  327. package/.agent-src/skills/market-entry-analysis/SKILL.md +12 -0
  328. package/.agent-src/skills/markitdown/SKILL.md +14 -2
  329. package/.agent-src/skills/mcp/SKILL.md +12 -0
  330. package/.agent-src/skills/mcp-builder/SKILL.md +14 -2
  331. package/.agent-src/skills/md-language-check/SKILL.md +13 -1
  332. package/.agent-src/skills/memory-consolidation/SKILL.md +12 -0
  333. package/.agent-src/skills/merge-conflicts/SKILL.md +61 -17
  334. package/.agent-src/skills/messaging-architecture/SKILL.md +12 -2
  335. package/.agent-src/skills/migration-architect/SKILL.md +18 -6
  336. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +12 -0
  337. package/.agent-src/skills/module-management/SKILL.md +13 -0
  338. package/.agent-src/skills/motion-choreographer/SKILL.md +16 -4
  339. package/.agent-src/skills/multi-tenancy/SKILL.md +29 -10
  340. package/.agent-src/skills/nextjs-patterns/SKILL.md +12 -0
  341. package/.agent-src/skills/okr-tree-modeling/SKILL.md +12 -2
  342. package/.agent-src/skills/onboarding-design/SKILL.md +12 -0
  343. package/.agent-src/skills/onboarding-program/SKILL.md +12 -0
  344. package/.agent-src/skills/one-on-one-cadence/SKILL.md +12 -0
  345. package/.agent-src/skills/openapi/SKILL.md +13 -1
  346. package/.agent-src/skills/org-design/SKILL.md +12 -0
  347. package/.agent-src/skills/override-management/SKILL.md +12 -0
  348. package/.agent-src/skills/perf-feedback-craft/SKILL.md +12 -0
  349. package/.agent-src/skills/performance/SKILL.md +12 -0
  350. package/.agent-src/skills/performance-analysis/SKILL.md +12 -0
  351. package/.agent-src/skills/persona-writing/SKILL.md +12 -0
  352. package/.agent-src/skills/pest-testing/SKILL.md +30 -0
  353. package/.agent-src/skills/php-coder/SKILL.md +12 -0
  354. package/.agent-src/skills/php-debugging/SKILL.md +40 -0
  355. package/.agent-src/skills/php-service/SKILL.md +15 -3
  356. package/.agent-src/skills/pipeline-strategy/SKILL.md +12 -2
  357. package/.agent-src/skills/pixar-storyteller/SKILL.md +17 -5
  358. package/.agent-src/skills/playwright-architect/SKILL.md +12 -2
  359. package/.agent-src/skills/playwright-testing/SKILL.md +28 -1
  360. package/.agent-src/skills/po-discovery/SKILL.md +12 -0
  361. package/.agent-src/skills/positioning-strategy/SKILL.md +12 -0
  362. package/.agent-src/skills/privacy-review/SKILL.md +12 -2
  363. package/.agent-src/skills/project-analysis-core/SKILL.md +12 -0
  364. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +12 -0
  365. package/.agent-src/skills/project-analysis-laravel/SKILL.md +12 -0
  366. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +12 -0
  367. package/.agent-src/skills/project-analysis-node-express/SKILL.md +12 -0
  368. package/.agent-src/skills/project-analysis-react/SKILL.md +12 -0
  369. package/.agent-src/skills/project-analysis-symfony/SKILL.md +12 -0
  370. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +12 -0
  371. package/.agent-src/skills/project-analyzer/SKILL.md +98 -60
  372. package/.agent-src/skills/project-docs/SKILL.md +25 -13
  373. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +13 -1
  374. package/.agent-src/skills/prompt-optimizer/SKILL.md +13 -1
  375. package/.agent-src/skills/quality-tools/SKILL.md +12 -2
  376. package/.agent-src/skills/react-native-setup/SKILL.md +12 -0
  377. package/.agent-src/skills/react-shadcn-ui/SKILL.md +12 -0
  378. package/.agent-src/skills/readme-reviewer/SKILL.md +12 -0
  379. package/.agent-src/skills/readme-writing/SKILL.md +12 -0
  380. package/.agent-src/skills/readme-writing-package/SKILL.md +106 -23
  381. package/.agent-src/skills/receiving-code-review/SKILL.md +12 -0
  382. package/.agent-src/skills/refine-prompt/SKILL.md +13 -1
  383. package/.agent-src/skills/refine-ticket/SKILL.md +14 -2
  384. package/.agent-src/skills/refine-ticket/detection-map.yml +2 -2
  385. package/.agent-src/skills/release-comms/SKILL.md +12 -2
  386. package/.agent-src/skills/repomix-packer/SKILL.md +13 -1
  387. package/.agent-src/skills/requesting-code-review/SKILL.md +12 -0
  388. package/.agent-src/skills/retention-loops/SKILL.md +12 -0
  389. package/.agent-src/skills/review-routing/SKILL.md +12 -0
  390. package/.agent-src/skills/rice-prioritization/SKILL.md +12 -0
  391. package/.agent-src/skills/risk-officer/SKILL.md +12 -0
  392. package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
  393. package/.agent-src/skills/roadmap-writing/SKILL.md +12 -0
  394. package/.agent-src/skills/rtk-output-filtering/SKILL.md +35 -8
  395. package/.agent-src/skills/rule-refactor/SKILL.md +157 -0
  396. package/.agent-src/skills/rule-writing/SKILL.md +46 -8
  397. package/.agent-src/skills/runway-cognition/SKILL.md +12 -2
  398. package/.agent-src/skills/scenario-modeling/SKILL.md +12 -2
  399. package/.agent-src/skills/scene-expander/SKILL.md +18 -6
  400. package/.agent-src/skills/script-writing/SKILL.md +13 -1
  401. package/.agent-src/skills/secrets-management/SKILL.md +13 -3
  402. package/.agent-src/skills/security/SKILL.md +50 -29
  403. package/.agent-src/skills/security-audit/SKILL.md +12 -0
  404. package/.agent-src/skills/sentry-integration/SKILL.md +12 -0
  405. package/.agent-src/skills/sequential-thinking/SKILL.md +12 -0
  406. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +12 -0
  407. package/.agent-src/skills/skill-management/SKILL.md +12 -0
  408. package/.agent-src/skills/skill-reviewer/SKILL.md +13 -1
  409. package/.agent-src/skills/skill-writing/SKILL.md +12 -0
  410. package/.agent-src/skills/sql-writing/SKILL.md +12 -0
  411. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +12 -0
  412. package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -1
  413. package/.agent-src/skills/symfony-workflow/SKILL.md +12 -0
  414. package/.agent-src/skills/systematic-debugging/SKILL.md +12 -0
  415. package/.agent-src/skills/tailwind-engineer/SKILL.md +12 -0
  416. package/.agent-src/skills/tech-debt-tracker/SKILL.md +12 -2
  417. package/.agent-src/skills/technical-specification/SKILL.md +12 -0
  418. package/.agent-src/skills/terraform/SKILL.md +12 -0
  419. package/.agent-src/skills/terragrunt/SKILL.md +12 -0
  420. package/.agent-src/skills/test-driven-development/SKILL.md +16 -4
  421. package/.agent-src/skills/test-performance/SKILL.md +19 -6
  422. package/.agent-src/skills/testing-anti-patterns/SKILL.md +13 -1
  423. package/.agent-src/skills/threat-modeling/SKILL.md +12 -0
  424. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +12 -0
  425. package/.agent-src/skills/token-optimizer/SKILL.md +12 -0
  426. package/.agent-src/skills/traefik/SKILL.md +12 -0
  427. package/.agent-src/skills/ui-component-architect/SKILL.md +12 -0
  428. package/.agent-src/skills/unit-economics-modeling/SKILL.md +12 -2
  429. package/.agent-src/skills/universal-project-analysis/SKILL.md +12 -0
  430. package/.agent-src/skills/upstream-contribute/SKILL.md +12 -0
  431. package/.agent-src/skills/using-git-worktrees/SKILL.md +12 -0
  432. package/.agent-src/skills/validate-feature-fit/SKILL.md +12 -0
  433. package/.agent-src/skills/verify-completion-evidence/SKILL.md +36 -27
  434. package/.agent-src/skills/video-director/SKILL.md +18 -6
  435. package/.agent-src/skills/vision-articulation/SKILL.md +12 -0
  436. package/.agent-src/skills/voc-extract/SKILL.md +12 -2
  437. package/.agent-src/skills/voice-and-tone-design/SKILL.md +12 -2
  438. package/.agent-src/templates/agent-settings.md +5 -5
  439. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  440. package/.agent-src/templates/agents/memory/ownership.example.yml +1 -1
  441. package/.agent-src/templates/agents/proposal.example.md +12 -0
  442. package/.agent-src/templates/command.md +1 -1
  443. package/.agent-src/templates/contexts/auth-model.md +2 -2
  444. package/.agent-src/templates/contexts/data-sensitivity.md +3 -3
  445. package/.agent-src/templates/contexts/deployment-order.md +2 -2
  446. package/.agent-src/templates/contexts/observability.md +3 -3
  447. package/.agent-src/templates/contexts/tenant-boundaries.md +3 -3
  448. package/.agent-src/templates/contexts.md +1 -1
  449. package/.agent-src/templates/copilot-instructions.md +2 -2
  450. package/.agent-src/templates/rule.md +3 -3
  451. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +3 -3
  452. package/.agent-src/templates/scripts/work_engine/cli.py +6 -6
  453. package/.agent-src/templates/scripts/work_engine/emitters.py +29 -4
  454. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +3 -3
  455. package/.agent-src/templates/scripts/work_engine/state.py +53 -0
  456. package/.agent-src/templates/skill-archive-note.md +4 -4
  457. package/.claude-plugin/marketplace.json +6 -5
  458. package/AGENTS.md +5 -4
  459. package/CHANGELOG.md +178 -194
  460. package/CONTRIBUTING.md +61 -0
  461. package/README.md +23 -20
  462. package/config/agent-settings.template.yml +11 -1
  463. package/config/discovery/packs.yml +142 -0
  464. package/config/discovery/unassigned-artefacts.yml +66 -0
  465. package/config/discovery/workspaces.yml +59 -0
  466. package/config/gitignore-block.txt +17 -20
  467. package/dist/cli/agent-config.js +199 -0
  468. package/dist/cli/agent-config.js.map +1 -0
  469. package/dist/cli/bash/runBash.js +40 -0
  470. package/dist/cli/bash/runBash.js.map +1 -0
  471. package/dist/cli/commands/doctorShell.js +91 -0
  472. package/dist/cli/commands/doctorShell.js.map +1 -0
  473. package/dist/cli/commands/packs.js +59 -0
  474. package/dist/cli/commands/packs.js.map +1 -0
  475. package/dist/cli/commands/settings.js +35 -0
  476. package/dist/cli/commands/settings.js.map +1 -0
  477. package/dist/cli/commands/uiServe.js +110 -0
  478. package/dist/cli/commands/uiServe.js.map +1 -0
  479. package/dist/cli/commands/versions.js +64 -0
  480. package/dist/cli/commands/versions.js.map +1 -0
  481. package/dist/cli/commands/workspaces.js +58 -0
  482. package/dist/cli/commands/workspaces.js.map +1 -0
  483. package/dist/cli/discovery/loadManifest.js +62 -0
  484. package/dist/cli/discovery/loadManifest.js.map +1 -0
  485. package/dist/cli/log/logger.js +41 -0
  486. package/dist/cli/log/logger.js.map +1 -0
  487. package/dist/cli/paths.js +60 -0
  488. package/dist/cli/paths.js.map +1 -0
  489. package/dist/cli/python/resolvePython.js +38 -0
  490. package/dist/cli/python/resolvePython.js.map +1 -0
  491. package/dist/cli/registry.js +75 -0
  492. package/dist/cli/registry.js.map +1 -0
  493. package/dist/discovery/discovery-manifest.json +9195 -0
  494. package/dist/discovery/discovery-manifest.json.sha256 +1 -0
  495. package/dist/discovery/discovery-manifest.summary.md +93 -0
  496. package/dist/mcp/awesome-mcp-servers.row.md +1 -0
  497. package/dist/mcp/mcp-cloudflare-catalogue.json +27 -0
  498. package/dist/mcp/registry-manifest.json +63 -0
  499. package/dist/server/app.js +117 -0
  500. package/dist/server/app.js.map +1 -0
  501. package/dist/server/io/atomicMultiWrite.js +202 -0
  502. package/dist/server/io/atomicMultiWrite.js.map +1 -0
  503. package/dist/server/io/atomicWrite.js +79 -0
  504. package/dist/server/io/atomicWrite.js.map +1 -0
  505. package/dist/server/io/substituteTemplate.js +87 -0
  506. package/dist/server/io/substituteTemplate.js.map +1 -0
  507. package/dist/server/io/yamlIO.js +140 -0
  508. package/dist/server/io/yamlIO.js.map +1 -0
  509. package/dist/server/port.js +97 -0
  510. package/dist/server/port.js.map +1 -0
  511. package/dist/server/routes/discovery.js +72 -0
  512. package/dist/server/routes/discovery.js.map +1 -0
  513. package/dist/server/routes/ping.js +49 -0
  514. package/dist/server/routes/ping.js.map +1 -0
  515. package/dist/server/routes/schema.js +41 -0
  516. package/dist/server/routes/schema.js.map +1 -0
  517. package/dist/server/routes/settings.js +155 -0
  518. package/dist/server/routes/settings.js.map +1 -0
  519. package/dist/server/routes/userMd.js +117 -0
  520. package/dist/server/routes/userMd.js.map +1 -0
  521. package/dist/server/routes/wizard.js +138 -0
  522. package/dist/server/routes/wizard.js.map +1 -0
  523. package/dist/server/schemas/settings.js +138 -0
  524. package/dist/server/schemas/settings.js.map +1 -0
  525. package/dist/server/token.js +68 -0
  526. package/dist/server/token.js.map +1 -0
  527. package/dist/server/writeRoot.js +67 -0
  528. package/dist/server/writeRoot.js.map +1 -0
  529. package/dist/server/writeRoot.test.js +73 -0
  530. package/dist/server/writeRoot.test.js.map +1 -0
  531. package/dist/shared/userMd/formAdapter.js +105 -0
  532. package/dist/shared/userMd/formAdapter.js.map +1 -0
  533. package/dist/shared/userMd/schema.js +118 -0
  534. package/dist/shared/userMd/schema.js.map +1 -0
  535. package/dist/shared/userMd/utils.js +74 -0
  536. package/dist/shared/userMd/utils.js.map +1 -0
  537. package/dist/ui/assets/index-BTRcKDlB.js +39 -0
  538. package/dist/ui/assets/index-BTRcKDlB.js.map +1 -0
  539. package/dist/ui/assets/index-Dqfhmg-d.css +1 -0
  540. package/dist/ui/index.html +14 -0
  541. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  542. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  543. package/docs/adrs/schema/0001-json-schema-frontmatter.md +4 -4
  544. package/docs/adrs/schema/README.md +1 -1
  545. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
  546. package/docs/architecture/setup-vs-settings-shared-surface.md +114 -0
  547. package/docs/architecture.md +4 -3
  548. package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
  549. package/docs/archive/CHANGELOG-pre-2.25.0.md +191 -0
  550. package/docs/archive/CHANGELOG-pre-3.0.0.md +130 -0
  551. package/docs/catalog.md +77 -84
  552. package/docs/contracts/STABILITY.md +1 -1
  553. package/docs/contracts/adr-architectural-consensus-mechanism.md +5 -5
  554. package/docs/contracts/adr-chat-history-split.md +1 -1
  555. package/docs/contracts/adr-implement-ticket-runtime.md +1 -1
  556. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  557. package/docs/contracts/adr-mcp-runtime.md +2 -2
  558. package/docs/contracts/agent-user-schema.md +11 -2
  559. package/docs/contracts/ai-council-config.md +13 -13
  560. package/docs/contracts/audit-log-v1.md +2 -2
  561. package/docs/contracts/command-clusters.md +2 -2
  562. package/docs/contracts/compression-default-kill-criterion.md +3 -3
  563. package/docs/contracts/decision-trace-v1.md +5 -5
  564. package/docs/contracts/discovery-manifest.schema.json +146 -0
  565. package/docs/contracts/explain-trace.schema.json +144 -0
  566. package/docs/contracts/file-ownership-matrix.json +515 -309
  567. package/docs/contracts/file-ownership-matrix.md +1 -1
  568. package/docs/contracts/ghostwriter-schema.md +3 -3
  569. package/docs/contracts/hook-architecture-v1.md +10 -10
  570. package/docs/contracts/kernel-membership.md +21 -4
  571. package/docs/contracts/linter-structural-model.md +3 -3
  572. package/docs/contracts/load-context-schema.md +5 -5
  573. package/docs/contracts/local-server-api.md +134 -0
  574. package/docs/contracts/low-impact-corpus-format.md +1 -1
  575. package/docs/contracts/mcp-cloud-scope.md +2 -2
  576. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  577. package/docs/contracts/mcp-phase-1-scope.md +5 -4
  578. package/docs/contracts/mcp-registry-manifest.schema.json +129 -0
  579. package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
  580. package/docs/contracts/memory-visibility-v1.md +2 -2
  581. package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
  582. package/docs/contracts/namespace.md +1 -1
  583. package/docs/contracts/one-off-script-lifecycle.md +1 -1
  584. package/docs/contracts/package-self-orientation.md +1 -1
  585. package/docs/contracts/provider-lifecycle.md +2 -2
  586. package/docs/contracts/router-blending.md +1 -1
  587. package/docs/contracts/rule-classification.md +2 -2
  588. package/docs/contracts/settings-api.md +160 -0
  589. package/docs/contracts/settings-gui-agent-mode.schema.json +128 -0
  590. package/docs/contracts/smoke-contracts.md +8 -8
  591. package/docs/contracts/tier-3-contrib-plugin.md +1 -1
  592. package/docs/contracts/universal-skills.md +1 -1
  593. package/docs/contracts/write-engine.md +1 -1
  594. package/docs/customization.md +137 -11
  595. package/docs/decisions/ADR-001-kernel-swap-deferred.md +1 -1
  596. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +1 -1
  597. package/docs/decisions/ADR-004-rule-governance-pruning.md +8 -8
  598. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +5 -5
  599. package/docs/decisions/ADR-007-agent-discovery-scopes.md +4 -4
  600. package/docs/decisions/ADR-008-installed-tools-manifest.md +2 -2
  601. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +2 -2
  602. package/docs/decisions/ADR-011-domain-pack-readiness.md +4 -4
  603. package/docs/decisions/ADR-012-typescript-cli-shell.md +162 -0
  604. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +210 -0
  605. package/docs/decisions/ADR-014-gui-framework-choice.md +136 -0
  606. package/docs/decisions/ADR-rule-kernel-and-router.md +2 -2
  607. package/docs/decisions/INDEX.md +3 -0
  608. package/docs/distribution/mcp-submission-checklist.md +95 -0
  609. package/docs/distribution/topics-equivalents-decay-policy.md +51 -0
  610. package/docs/examples/agent-user.example.md +3 -1
  611. package/docs/getting-started.md +6 -5
  612. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  613. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +10 -1
  614. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  615. package/docs/guidelines/agent-infra/tool-integration.md +1 -1
  616. package/docs/guidelines/php/api-design.md +2 -2
  617. package/docs/guidelines/php/controllers.md +1 -1
  618. package/docs/guidelines/php/resources.md +1 -1
  619. package/docs/guidelines/php/validations.md +1 -1
  620. package/docs/guidelines/prompt-templates.md +2 -2
  621. package/docs/hook-payload-capture.md +3 -3
  622. package/docs/installation.md +12 -4
  623. package/docs/migrations/commands-1.15.0.md +3 -3
  624. package/docs/parity/bench-ruflo.json +1 -1
  625. package/docs/parity/ruflo.md +3 -3
  626. package/docs/profiles.md +1 -1
  627. package/docs/quality.md +2 -2
  628. package/docs/recruits/_template.md +3 -3
  629. package/docs/setup/enterprise-and-offline.md +3 -3
  630. package/docs/setup/mcp-server-docker.md +5 -3
  631. package/docs/skills-catalog.md +62 -18
  632. package/docs/wizard.md +121 -0
  633. package/llms.txt +61 -17
  634. package/package.json +46 -3
  635. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  636. package/scripts/_archive/README.md +2 -2
  637. package/scripts/_archive/_p4_migrate.py +1 -1
  638. package/scripts/_cli/cmd_doctor.py +5 -5
  639. package/scripts/_cli/cmd_explain.py +106 -2
  640. package/scripts/_cli/cmd_migrate.py +2 -2
  641. package/scripts/_cli/explain_last/__init__.py +122 -0
  642. package/scripts/_cli/explain_last/assumptions.py +59 -0
  643. package/scripts/_cli/explain_last/council.py +105 -0
  644. package/scripts/_cli/explain_last/halt.py +44 -0
  645. package/scripts/_cli/explain_last/inputs.py +125 -0
  646. package/scripts/_cli/explain_last/memory.py +94 -0
  647. package/scripts/_cli/explain_last/provider.py +52 -0
  648. package/scripts/_cli/explain_last/render.py +52 -0
  649. package/scripts/_cli/explain_last/route.py +58 -0
  650. package/scripts/_cli/explain_last/scrubber.py +105 -0
  651. package/scripts/_cli/explain_last/sections/__init__.py +35 -0
  652. package/scripts/_cli/explain_last/sections/assumptions.py +21 -0
  653. package/scripts/_cli/explain_last/sections/council.py +27 -0
  654. package/scripts/_cli/explain_last/sections/halt.py +31 -0
  655. package/scripts/_cli/explain_last/sections/header.py +24 -0
  656. package/scripts/_cli/explain_last/sections/inputs.py +27 -0
  657. package/scripts/_cli/explain_last/sections/memory.py +21 -0
  658. package/scripts/_cli/explain_last/sections/pack.py +16 -0
  659. package/scripts/_cli/explain_last/sections/provider.py +26 -0
  660. package/scripts/_cli/explain_last/sections/route.py +22 -0
  661. package/scripts/_cli/explain_last/state_loader.py +76 -0
  662. package/scripts/_dispatch.bash +954 -0
  663. package/scripts/_lib/agent_settings.py +3 -3
  664. package/scripts/_lib/agents_overlay.py +3 -3
  665. package/scripts/_phase4_bucket.py +210 -0
  666. package/scripts/agent-config +35 -943
  667. package/scripts/ai-video/adapters/higgsfield.sh +1 -1
  668. package/scripts/ai-video/adapters/sora.sh +1 -1
  669. package/scripts/ai-video/test-pipeline.sh +2 -2
  670. package/scripts/ai_council/_default_prices.py +5 -5
  671. package/scripts/ai_council/advisors.py +1 -1
  672. package/scripts/ai_council/clients.py +2 -2
  673. package/scripts/ai_council/compile_corpus.py +9 -8
  674. package/scripts/ai_council/config.py +3 -3
  675. package/scripts/ai_council/events_log.py +8 -4
  676. package/scripts/ai_council/low_impact_corpus.py +1 -1
  677. package/scripts/ai_council/low_impact_intake.py +1 -1
  678. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +2 -2
  679. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +1 -1
  680. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +3 -3
  681. package/scripts/ai_council/pricing.py +8 -7
  682. package/scripts/ai_council/probation_gate.py +1 -1
  683. package/scripts/ai_council/redact_low_impact_entry.py +1 -1
  684. package/scripts/ai_council/session.py +13 -13
  685. package/scripts/ai_council/shadow_dispatch.py +2 -2
  686. package/scripts/annotate_discovery.py +149 -0
  687. package/scripts/audit_adr_coverage.py +1 -1
  688. package/scripts/audit_auto_rules.py +2 -2
  689. package/scripts/audit_cloud_compatibility.py +1 -1
  690. package/scripts/audit_command_surface.py +2 -2
  691. package/scripts/audit_likelihood.py +4 -4
  692. package/scripts/audit_overlap.py +3 -3
  693. package/scripts/audit_user_type_axis.py +1 -1
  694. package/scripts/build_discovery_manifest.py +302 -0
  695. package/scripts/build_linear_digest.py +0 -1
  696. package/scripts/build_mcp_registry_manifest.py +181 -0
  697. package/scripts/build_rule_trigger_matrix.py +2 -2
  698. package/scripts/capture_showcase_session.py +1 -1
  699. package/scripts/chat_history.py +5 -5
  700. package/scripts/check_always_budget.py +7 -2
  701. package/scripts/check_council_layout.py +26 -20
  702. package/scripts/check_council_references.py +10 -10
  703. package/scripts/check_discovery_determinism.py +70 -0
  704. package/scripts/check_kernel_rule_bundle.py +2 -2
  705. package/scripts/check_no_roadmap_refs.py +2 -2
  706. package/scripts/check_one_off_location.py +1 -1
  707. package/scripts/check_public_links.py +2 -2
  708. package/scripts/check_references.py +14 -21
  709. package/scripts/check_release_includes_discovery.py +61 -0
  710. package/scripts/ci_summary.py +2 -2
  711. package/scripts/ci_time_ratio.py +1 -1
  712. package/scripts/command_suggester/__init__.py +1 -1
  713. package/scripts/context_hygiene_hook.py +2 -2
  714. package/scripts/council_cli.py +22 -22
  715. package/scripts/council_prune.py +3 -3
  716. package/scripts/extract_audit_patterns.py +2 -2
  717. package/scripts/gen_discovery_baseline.py +127 -0
  718. package/scripts/generate_ownership_matrix.py +1 -1
  719. package/scripts/hook_manifest.yaml +5 -5
  720. package/scripts/hooks/cline-dispatcher.sh +1 -1
  721. package/scripts/hooks/cowork-dispatcher.sh +1 -1
  722. package/scripts/hooks/dispatch_hook.py +3 -3
  723. package/scripts/hooks/gemini-dispatcher.sh +1 -1
  724. package/scripts/hooks/replay_hook.py +1 -1
  725. package/scripts/hooks/state_io.py +5 -5
  726. package/scripts/hooks_doctor.py +4 -4
  727. package/scripts/install-hooks.sh +2 -2
  728. package/scripts/install.py +3 -3
  729. package/scripts/install.sh +120 -18
  730. package/scripts/inventory_frontmatter.py +1 -1
  731. package/scripts/lint_agents_layout.py +103 -0
  732. package/scripts/lint_archived_skills.py +3 -3
  733. package/scripts/lint_artefact_frontmatter.py +180 -0
  734. package/scripts/lint_discovery_manifest.py +136 -0
  735. package/scripts/lint_discovery_vocabulary.py +148 -0
  736. package/scripts/lint_explain_trace.py +80 -0
  737. package/scripts/lint_framework_leakage.py +348 -0
  738. package/scripts/lint_framework_leakage_allowlist.json +477 -0
  739. package/scripts/lint_ghostwriter_source.py +1 -1
  740. package/scripts/lint_load_context.py +3 -3
  741. package/scripts/lint_mcp_registry_manifest.py +69 -0
  742. package/scripts/lint_media_policy_linkage.py +6 -6
  743. package/scripts/lint_positioning.py +143 -0
  744. package/scripts/lint_rule_tiers.py +2 -2
  745. package/scripts/lint_skill_tools.py +1 -1
  746. package/scripts/lint_topics_yaml.py +89 -0
  747. package/scripts/mcp_server/consumer_tool_catalog.json +3 -3
  748. package/scripts/mcp_server/telemetry.py +2 -2
  749. package/scripts/mcp_server/tools.py +27 -11
  750. package/scripts/mcp_telemetry_health.py +2 -2
  751. package/scripts/mcp_telemetry_store.py +1 -1
  752. package/scripts/measure_augment_budget.py +9 -3
  753. package/scripts/measure_density.py +2 -2
  754. package/scripts/measure_frugality_savings.py +3 -3
  755. package/scripts/measure_roadmap_trajectory.py +1 -1
  756. package/scripts/measure_rule_budget.py +3 -3
  757. package/scripts/memory_report.py +1 -1
  758. package/scripts/migrate_command_suggestions.py +3 -3
  759. package/scripts/minimal_safe_diff_hook.py +1 -1
  760. package/scripts/onboarding_gate_hook.py +4 -4
  761. package/scripts/prepack-check.mjs +62 -0
  762. package/scripts/probe_projection_fidelity.py +2 -2
  763. package/scripts/refine_ticket_detect.py +1 -1
  764. package/scripts/schemas/command.schema.json +46 -1
  765. package/scripts/schemas/persona.schema.json +1 -1
  766. package/scripts/schemas/rule.schema.json +44 -4
  767. package/scripts/schemas/skill.schema.json +46 -1
  768. package/scripts/score_skill_selection.py +1 -1
  769. package/scripts/skill_collision_clusters.py +1 -1
  770. package/scripts/skill_linter.py +62 -9
  771. package/scripts/skill_overlap.py +1 -1
  772. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  773. package/scripts/skill_usage_collect.py +3 -3
  774. package/scripts/skill_usage_report.py +3 -3
  775. package/scripts/smoke/kernel.sh +4 -4
  776. package/scripts/smoke/router.sh +2 -2
  777. package/scripts/smoke_quickstart.py +1 -1
  778. package/scripts/spotcheck_thin_root.py +1 -1
  779. package/scripts/sync_github_metadata.py +147 -0
  780. package/scripts/sync_gitignore.py +15 -5
  781. package/scripts/update_prices.py +4 -3
  782. package/scripts/verify_before_complete_hook.py +1 -1
  783. package/scripts/verify_roadmap_closure.py +1 -1
  784. package/templates/agent-user.md +35 -0
  785. package/.agent-src/commands/onboard.md +0 -459
  786. package/.agent-src/rules/agent-docs.md +0 -20
  787. package/.agent-src/rules/augment-portability.md +0 -23
  788. package/.agent-src/rules/capture-learnings.md +0 -19
  789. package/.agent-src/rules/docs-sync.md +0 -20
  790. package/.agent-src/rules/domain-safety-disclaimer-consulting.md +0 -52
  791. package/.agent-src/rules/domain-safety-disclaimer-financial.md +0 -54
  792. package/.agent-src/rules/domain-safety-disclaimer-legal.md +0 -49
  793. package/.agent-src/rules/domain-safety-disclaimer-medical.md +0 -56
  794. package/.agent-src/rules/domain-safety-export-redact.md +0 -65
  795. package/.agent-src/rules/domain-safety-logging-pii-floor.md +0 -55
  796. package/.agent-src/rules/domain-safety-pii-finance.md +0 -57
  797. package/.agent-src/rules/domain-safety-pii-marketing.md +0 -60
  798. package/.agent-src/rules/domain-safety-pii-recruiting.md +0 -56
  799. package/.agent-src/rules/domain-safety-pii-support.md +0 -57
  800. package/.agent-src/rules/domain-safety-retention-finance.md +0 -48
  801. package/.agent-src/rules/domain-safety-retention-support.md +0 -55
  802. package/.agent-src/rules/e2e-testing.md +0 -19
  803. package/.agent-src/rules/no-unsolicited-rebase.md +0 -107
  804. package/.agent-src/rules/post-push-rewrite-discipline.md +0 -70
@@ -641,40 +641,139 @@ copy_if_missing() {
641
641
  cp "$source" "$target"
642
642
  }
643
643
 
644
- # Migrate legacy infra files from project root to agents/.
645
- # Pre-2.x layout: .agent-chat-history (+ .bak), .agent-prices.md lived at
646
- # the project root. They now live under agents/. Move them in place before
647
- # any other content sync so the updated gitignore block (which lists
648
- # /agents/.agent-chat-history*) and the chat-history hooks operate on the
649
- # already-migrated layout. Idempotent: skips silently if the target already
650
- # exists; never overwrites.
644
+ # Migrate legacy infra files to their current home under agents/runtime/.
645
+ # Three source layouts are handled per file:
646
+ # - pre-2.x: <name> at project root
647
+ # - 2.x intermediate: agents/<name>
648
+ # - current: agents/runtime/<name>
649
+ # Covered files: .agent-chat-history (+ .bak) and the append-only budget
650
+ # history JSONLs. Idempotent: skips silently if the target already exists;
651
+ # never overwrites.
652
+ #
653
+ # .agent-prices.md is handled separately by migrate_legacy_prices_file.
651
654
  migrate_legacy_root_infra() {
652
655
  local project_root="$1"
653
- local agents_dir="$project_root/agents"
654
- local items=(".agent-chat-history" ".agent-chat-history.bak" ".agent-prices.md")
656
+ local runtime_dir="$project_root/agents/runtime"
657
+ local items=(
658
+ ".agent-chat-history"
659
+ ".agent-chat-history.bak"
660
+ ".augment-budget-history.jsonl"
661
+ ".rule-budget-history.jsonl"
662
+ )
655
663
 
656
664
  for name in "${items[@]}"; do
657
- local old="$project_root/$name"
658
- local new="$agents_dir/$name"
665
+ local target="$runtime_dir/$name"
666
+ local sources=("$project_root/$name" "$project_root/agents/$name")
667
+
668
+ for old in "${sources[@]}"; do
669
+ [[ -e "$old" ]] || continue
670
+
671
+ if [[ -e "$target" ]]; then
672
+ log_warn "Legacy ${old#"$project_root/"} found, but agents/runtime/$name already exists — leaving source in place"
673
+ continue
674
+ fi
675
+
676
+ if $DRY_RUN; then
677
+ log_verbose "would migrate ${old#"$project_root/"} → agents/runtime/$name"
678
+ continue
679
+ fi
680
+
681
+ mkdir -p "$runtime_dir"
682
+ mv "$old" "$target"
683
+ log_info "Migrated ${old#"$project_root/"} → agents/runtime/$name"
684
+ done
685
+ done
686
+ }
687
+
688
+ # Migrate the low-impact decision corpus from agents/ to agents/decisions/.
689
+ # Pre-refactor: the .md and its .lock.yaml lived at agents/ root. They
690
+ # now live under agents/decisions/ to separate tracked decisions from
691
+ # volatile runtime data. Idempotent: skips silently if the target
692
+ # already exists; never overwrites.
693
+ migrate_legacy_low_impact_decisions() {
694
+ local project_root="$1"
695
+ local decisions_dir="$project_root/agents/decisions"
696
+ local items=("low-impact-decisions.md" "low-impact-decisions.lock.yaml")
697
+
698
+ for name in "${items[@]}"; do
699
+ local old="$project_root/agents/$name"
700
+ local target="$decisions_dir/$name"
659
701
 
660
702
  [[ -e "$old" ]] || continue
661
703
 
662
- if [[ -e "$new" ]]; then
663
- log_warn "Legacy $name found at project root, but agents/$name already exists — leaving root copy in place"
704
+ if [[ -e "$target" ]]; then
705
+ log_warn "Legacy agents/$name found, but agents/decisions/$name already exists — leaving source in place"
664
706
  continue
665
707
  fi
666
708
 
667
709
  if $DRY_RUN; then
668
- log_verbose "would migrate $name → agents/$name"
710
+ log_verbose "would migrate agents/$name → agents/decisions/$name"
669
711
  continue
670
712
  fi
671
713
 
672
- mkdir -p "$agents_dir"
673
- mv "$old" "$new"
674
- log_info "Migrated $name → agents/$name"
714
+ mkdir -p "$decisions_dir"
715
+ mv "$old" "$target"
716
+ log_info "Migrated agents/$name → agents/decisions/$name"
675
717
  done
676
718
  }
677
719
 
720
+ # Migrate the AI Council price cache to its current home under agents/runtime/.
721
+ # Two source locations are handled:
722
+ # - pre-2.x: .agent-prices.md at project root
723
+ # - 2.x intermediate: agents/.agent-prices.md
724
+ # Both move to agents/runtime/.agent-prices.md. Idempotent: skips silently
725
+ # if the target already exists; never overwrites.
726
+ migrate_legacy_prices_file() {
727
+ local project_root="$1"
728
+ local runtime_dir="$project_root/agents/runtime"
729
+ local target="$runtime_dir/.agent-prices.md"
730
+ local sources=("$project_root/.agent-prices.md" "$project_root/agents/.agent-prices.md")
731
+
732
+ for old in "${sources[@]}"; do
733
+ [[ -e "$old" ]] || continue
734
+
735
+ if [[ -e "$target" ]]; then
736
+ log_warn "Legacy ${old#"$project_root/"} found, but agents/runtime/.agent-prices.md already exists — leaving source in place"
737
+ continue
738
+ fi
739
+
740
+ if $DRY_RUN; then
741
+ log_verbose "would migrate ${old#"$project_root/"} → agents/runtime/.agent-prices.md"
742
+ continue
743
+ fi
744
+
745
+ mkdir -p "$runtime_dir"
746
+ mv "$old" "$target"
747
+ log_info "Migrated ${old#"$project_root/"} → agents/runtime/.agent-prices.md"
748
+ done
749
+ }
750
+
751
+ # Migrate the AI Council config from agents/.ai-council.yml to
752
+ # agents/settings/.ai-council.yml. Idempotent: skips silently if the
753
+ # target already exists; never overwrites.
754
+ migrate_legacy_council_yml() {
755
+ local project_root="$1"
756
+ local settings_dir="$project_root/agents/settings"
757
+ local target="$settings_dir/.ai-council.yml"
758
+ local source="$project_root/agents/.ai-council.yml"
759
+
760
+ [[ -e "$source" ]] || return 0
761
+
762
+ if [[ -e "$target" ]]; then
763
+ log_warn "Legacy agents/.ai-council.yml found, but agents/settings/.ai-council.yml already exists — leaving source in place"
764
+ return 0
765
+ fi
766
+
767
+ if $DRY_RUN; then
768
+ log_verbose "would migrate agents/.ai-council.yml → agents/settings/.ai-council.yml"
769
+ return 0
770
+ fi
771
+
772
+ mkdir -p "$settings_dir"
773
+ mv "$source" "$target"
774
+ log_info "Migrated agents/.ai-council.yml → agents/settings/.ai-council.yml"
775
+ }
776
+
678
777
  # Ensure .gitignore contains the managed agent-config block.
679
778
  # Delegates to scripts/sync_gitignore.py so the installer and the
680
779
  # standalone /sync-gitignore command share one source of truth
@@ -768,6 +867,9 @@ main() {
768
867
 
769
868
  # 0. Migrate legacy infra files (root → agents/) before any content sync.
770
869
  migrate_legacy_root_infra "$TARGET_DIR"
870
+ migrate_legacy_low_impact_decisions "$TARGET_DIR"
871
+ migrate_legacy_prices_file "$TARGET_DIR"
872
+ migrate_legacy_council_yml "$TARGET_DIR"
771
873
 
772
874
  # 0b. Resolve settings (e.g. augment.rules_use_symlinks). On first
773
875
  # install the file does not exist yet → defaults preserved.
@@ -823,7 +925,7 @@ main() {
823
925
  if [[ "$airgap_mode" == "api" ]]; then
824
926
  echo ""
825
927
  echo "⚠️ airgapped environment detected — defaulting to mode: api"
826
- echo " Set defaults.member_mode: api in agents/.ai-council.yml when configuring the council."
928
+ echo " Set defaults.member_mode: api in agents/settings/.ai-council.yml when configuring the council."
827
929
  fi
828
930
  fi
829
931
  elif ! $QUIET; then
@@ -10,7 +10,7 @@ YAML frontmatter of every file, and prints per-type:
10
10
  - sample values (up to 3) per key
11
11
 
12
12
  Output is Markdown on stdout, intended to be captured into
13
- `agents/docs/frontmatter-contract.md` as raw material for Phase 1 of the
13
+ `agents/reference/docs/frontmatter-contract.md` as raw material for Phase 1 of the
14
14
  frontmatter-schema roadmap.
15
15
 
16
16
  Stdlib-only. No PyYAML — we do a simple line-based parse sufficient for
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ """CI guard for the `agents/` top-level layout.
3
+
4
+ The `agents/` tree is the project boundary for memory, roadmaps,
5
+ runtime artefacts, settings, audits, and policies. Flat files at the
6
+ `agents/` root are restricted to a small, intentional whitelist —
7
+ everything else lives in a typed subdirectory (`runtime/`, `settings/`,
8
+ `audits/`, `roadmaps/`, `policies/`, `contexts/`, etc.).
9
+
10
+ Categories:
11
+
12
+ ALLOWED — Whitelisted flat files. Linter is silent.
13
+ UNKNOWN — Anything else. Linter fails.
14
+
15
+ Exit codes:
16
+ 0 — layout is clean.
17
+ 1 — at least one UNKNOWN file.
18
+
19
+ Invocation (from project root):
20
+ python3 scripts/lint_agents_layout.py
21
+ python3 scripts/lint_agents_layout.py --strict
22
+ python3 scripts/lint_agents_layout.py --quiet
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import sys
28
+ from pathlib import Path
29
+
30
+ AGENTS_ROOT = Path("agents")
31
+
32
+ # Intentional flat files at agents/ root. Anything not in this set is
33
+ # UNKNOWN (linter failure). Durable records live under typed subdirs:
34
+ # decisions/ (low-impact corpus, ADR-style records), evidence/ (durable
35
+ # reports / metrics / council artefacts), runtime/ (volatile, gitignored).
36
+ ALLOWED_FLAT_FILES: frozenset[str] = frozenset(
37
+ {
38
+ # Entry document — narrative pointer to the agents/ tree.
39
+ "index.md",
40
+ # D1 anchor / progress dashboard — kept at root by the
41
+ # roadmap-progress-sync rule so consumers see it first.
42
+ "roadmaps-progress.md",
43
+ # Worked example for the ai-video pipeline. Stays adjacent to
44
+ # the agents/reference/ai-video/ dir as a reference template.
45
+ ".ai-video.xml.example",
46
+ # Empty-tree sentinel so agents/ survives a fresh checkout
47
+ # before any runtime artefact lands.
48
+ ".gitkeep",
49
+ }
50
+ )
51
+
52
+
53
+ def find_violations(root: Path) -> list[str]:
54
+ """Return UNKNOWN flat-file violations at the agents/ root."""
55
+ unknown: list[str] = []
56
+ if not root.is_dir():
57
+ return unknown
58
+
59
+ for path in sorted(root.iterdir()):
60
+ if not path.is_file():
61
+ continue
62
+ name = path.name
63
+ if name in ALLOWED_FLAT_FILES:
64
+ continue
65
+ unknown.append(
66
+ f"{path}: flat file not in agents/ whitelist — move to a typed "
67
+ f"subdirectory (runtime/, evidence/, decisions/, settings/, "
68
+ f"audits/, roadmaps/, policies/, contexts/, …) or add to "
69
+ f"ALLOWED_FLAT_FILES in scripts/lint_agents_layout.py with "
70
+ f"rationale."
71
+ )
72
+
73
+ return unknown
74
+
75
+
76
+ def main() -> int:
77
+ args = sys.argv[1:]
78
+ # --strict kept for backward-compat; no longer affects exit code now
79
+ # that the LEGACY tier is gone.
80
+ _ = "--strict" in args
81
+ quiet = "--quiet" in args
82
+
83
+ unknown = find_violations(AGENTS_ROOT)
84
+
85
+ if unknown:
86
+ print("❌ agents/ layout violations (unknown flat files):\n")
87
+ for f in unknown:
88
+ print(f" - {f}")
89
+ print(
90
+ "\nRule: scripts/lint_agents_layout.py — flat files at agents/ "
91
+ "root must be whitelisted. Typed subdirectories: runtime/, "
92
+ "evidence/, decisions/, settings/, audits/, roadmaps/, "
93
+ "policies/, contexts/, … ."
94
+ )
95
+ return 1
96
+
97
+ if not quiet:
98
+ print("✅ agents/ layout clean.")
99
+ return 0
100
+
101
+
102
+ if __name__ == "__main__":
103
+ sys.exit(main())
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env python3
2
- """Lint archive notes under agents/archived-skills/.
2
+ """Lint archive notes under agents/evidence/archived-skills/.
3
3
 
4
4
  Enforces the contract from
5
5
  .agent-src.uncompressed/templates/skill-archive-note.md:
6
6
 
7
- 1. Every <slug>.md under agents/archived-skills/ has the six required
7
+ 1. Every <slug>.md under agents/evidence/archived-skills/ has the six required
8
8
  frontmatter fields with valid values.
9
9
  2. `reason` is one of {unused, merged, superseded, deprecated}.
10
10
  3. When `reason ∈ {merged, superseded}` the `replacement` slug exists
@@ -14,7 +14,7 @@ Enforces the contract from
14
14
  its frontmatter `replaced_by:` field.
15
15
 
16
16
  Hooked into `task ci` via `task lint-archived-skills`. Passes cleanly
17
- against an empty agents/archived-skills/ (only README.md present).
17
+ against an empty agents/evidence/archived-skills/ (only README.md present).
18
18
 
19
19
  Exit codes:
20
20
  0 contract holds
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env python3
2
+ """Lint Phase-4 discovery frontmatter on every artefact.
3
+
4
+ Walks the same trees as `scripts/build_discovery_manifest.py` (skills,
5
+ rules, commands, templates under `.agent-src.uncompressed/`) and asserts
6
+ per-file that the five ADR-013 keys (`workspaces`, `packs`, `lifecycle`,
7
+ `trust`, `install`) are present and well-formed:
8
+
9
+ - `workspaces:` exists, is a non-empty list, every value in `workspaces.yml`
10
+ - `packs:` exists, is a non-empty list, every value in `packs.yml`
11
+ - `lifecycle:` is one of {active, deprecated, experimental, archived}
12
+ - `trust.level` is one of {core, professional, experimental, advisory, restricted}
13
+ - `trust.confidence` is one of {high, medium, low}
14
+ - `trust.human_review_required` is a bool
15
+ - `install.default` and `install.removable` are bools
16
+ - artefact path is not also listed in `unassigned-artefacts.yml`
17
+
18
+ Exits 0 clean, 1 on any violation. Stdlib + pyyaml. Cap: ≤ 200 LOC.
19
+ """
20
+ from __future__ import annotations
21
+
22
+ import argparse
23
+ import sys
24
+ from pathlib import Path
25
+ from typing import Any
26
+
27
+ try:
28
+ import yaml
29
+ except ImportError: # pragma: no cover
30
+ print("ERROR: PyYAML required (pip install pyyaml)", file=sys.stderr)
31
+ sys.exit(2)
32
+
33
+ ROOT = Path(__file__).resolve().parents[1]
34
+ SRC = ROOT / ".agent-src.uncompressed"
35
+ VOCAB_DIR = ROOT / "config" / "discovery"
36
+
37
+ sys.path.insert(0, str(Path(__file__).resolve().parent))
38
+ from validate_frontmatter import parse_frontmatter # noqa: E402
39
+
40
+ LIFECYCLES = frozenset({"active", "deprecated", "experimental", "archived"})
41
+ TRUST_LEVELS = frozenset(
42
+ {"core", "professional", "experimental", "advisory", "restricted"}
43
+ )
44
+ TRUST_CONFIDENCE = frozenset({"high", "medium", "low"})
45
+
46
+
47
+ def _load_vocab() -> tuple[set[str], set[str], set[str]]:
48
+ ws = yaml.safe_load((VOCAB_DIR / "workspaces.yml").read_text("utf-8")) or []
49
+ packs = yaml.safe_load((VOCAB_DIR / "packs.yml").read_text("utf-8")) or []
50
+ raw_un = yaml.safe_load((VOCAB_DIR / "unassigned-artefacts.yml").read_text("utf-8")) or []
51
+ ws_ids = {e["id"] for e in ws}
52
+ pack_ids = {e["id"] for e in packs}
53
+ quarantine = {e["path"] for e in raw_un}
54
+ return ws_ids, pack_ids, quarantine
55
+
56
+
57
+ def _iter_artefacts() -> list[Path]:
58
+ out: list[Path] = []
59
+ for p in sorted((SRC / "skills").rglob("SKILL.md")):
60
+ out.append(p)
61
+ for p in sorted((SRC / "rules").rglob("*.md")):
62
+ out.append(p)
63
+ for p in sorted((SRC / "commands").rglob("*.md")):
64
+ out.append(p)
65
+ if (SRC / "templates").exists():
66
+ for p in sorted((SRC / "templates").rglob("*.md")):
67
+ out.append(p)
68
+ return out
69
+
70
+
71
+ def _check_one(
72
+ path: Path,
73
+ ws_ids: set[str],
74
+ pack_ids: set[str],
75
+ quarantine: set[str],
76
+ ) -> list[str]:
77
+ rel = path.relative_to(ROOT).as_posix()
78
+ errs: list[str] = []
79
+ if rel in quarantine:
80
+ # Quarantined scaffolds are not required to carry frontmatter and
81
+ # must NOT also try to (would shadow the materialisation contract).
82
+ text = path.read_text("utf-8", errors="replace")
83
+ fm, _ = parse_frontmatter(text)
84
+ if isinstance(fm, dict) and any(
85
+ k in fm for k in ("workspaces", "packs", "lifecycle", "trust", "install")
86
+ ):
87
+ errs.append(
88
+ f"{rel}: quarantined in unassigned-artefacts.yml but carries"
89
+ " discovery frontmatter — remove one or the other."
90
+ )
91
+ return errs
92
+
93
+ text = path.read_text("utf-8", errors="replace")
94
+ fm, _ = parse_frontmatter(text)
95
+ if not isinstance(fm, dict):
96
+ errs.append(f"{rel}: missing or unparseable frontmatter")
97
+ return errs
98
+
99
+ for key in ("workspaces", "packs", "lifecycle", "trust", "install"):
100
+ if key not in fm:
101
+ errs.append(f"{rel}: missing required key `{key}`")
102
+ if errs:
103
+ return errs
104
+
105
+ ws = fm["workspaces"]
106
+ if not isinstance(ws, list) or not ws:
107
+ errs.append(f"{rel}: workspaces must be a non-empty list")
108
+ else:
109
+ bad = [w for w in ws if w not in ws_ids]
110
+ if bad:
111
+ errs.append(f"{rel}: workspaces not in workspaces.yml: {bad}")
112
+
113
+ packs = fm["packs"]
114
+ if not isinstance(packs, list) or not packs:
115
+ errs.append(f"{rel}: packs must be a non-empty list")
116
+ else:
117
+ bad = [p for p in packs if p not in pack_ids]
118
+ if bad:
119
+ errs.append(f"{rel}: packs not in packs.yml: {bad}")
120
+
121
+ lc = fm["lifecycle"]
122
+ if lc not in LIFECYCLES:
123
+ errs.append(f"{rel}: lifecycle `{lc}` not in {sorted(LIFECYCLES)}")
124
+
125
+ trust = fm["trust"]
126
+ if not isinstance(trust, dict):
127
+ errs.append(f"{rel}: trust must be a mapping")
128
+ else:
129
+ if trust.get("level") not in TRUST_LEVELS:
130
+ errs.append(
131
+ f"{rel}: trust.level `{trust.get('level')}` not in {sorted(TRUST_LEVELS)}"
132
+ )
133
+ if trust.get("confidence") not in TRUST_CONFIDENCE:
134
+ errs.append(
135
+ f"{rel}: trust.confidence `{trust.get('confidence')}` not in"
136
+ f" {sorted(TRUST_CONFIDENCE)}"
137
+ )
138
+ if not isinstance(trust.get("human_review_required"), bool):
139
+ errs.append(f"{rel}: trust.human_review_required must be bool")
140
+
141
+ install = fm["install"]
142
+ if not isinstance(install, dict):
143
+ errs.append(f"{rel}: install must be a mapping")
144
+ else:
145
+ if not isinstance(install.get("default"), bool):
146
+ errs.append(f"{rel}: install.default must be bool")
147
+ if not isinstance(install.get("removable"), bool):
148
+ errs.append(f"{rel}: install.removable must be bool")
149
+ return errs
150
+
151
+
152
+ def main(argv: list[str] | None = None) -> int:
153
+ parser = argparse.ArgumentParser(description=__doc__.splitlines()[0])
154
+ parser.add_argument("--quiet", action="store_true")
155
+ args = parser.parse_args(argv)
156
+
157
+ ws_ids, pack_ids, quarantine = _load_vocab()
158
+ artefacts = _iter_artefacts()
159
+ all_errs: list[str] = []
160
+ for p in artefacts:
161
+ all_errs.extend(_check_one(p, ws_ids, pack_ids, quarantine))
162
+
163
+ if all_errs:
164
+ for e in all_errs:
165
+ print(f"ERROR: {e}", file=sys.stderr)
166
+ print(
167
+ f"\n{len(all_errs)} violation(s) across {len(artefacts)} artefact(s).",
168
+ file=sys.stderr,
169
+ )
170
+ return 1
171
+ if not args.quiet:
172
+ print(
173
+ f"✅ lint-artefact-frontmatter: {len(artefacts)} artefact(s) clean"
174
+ f" (quarantine: {len(quarantine)})."
175
+ )
176
+ return 0
177
+
178
+
179
+ if __name__ == "__main__":
180
+ raise SystemExit(main())
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env python3
2
+ """Lint a generated discovery-manifest.json against schema + checksum.
3
+
4
+ Checks:
5
+ 1. File parses as JSON.
6
+ 2. Validates against `docs/contracts/discovery-manifest.schema.json`.
7
+ 3. Recomputes sha256 with the `checksum` field zeroed and compares.
8
+ 4. Cross-references workspace / pack IDs against `config/discovery/*.yml`.
9
+
10
+ CLI:
11
+ python scripts/lint_discovery_manifest.py [--manifest PATH]
12
+
13
+ Exit codes:
14
+ 0 clean
15
+ 1 schema or integrity failure
16
+ """
17
+ from __future__ import annotations
18
+
19
+ import argparse
20
+ import hashlib
21
+ import json
22
+ import sys
23
+ from pathlib import Path
24
+ from typing import Any
25
+
26
+ import yaml
27
+
28
+ try:
29
+ import jsonschema
30
+ except ImportError:
31
+ print("error: jsonschema not installed (pip install jsonschema)", file=sys.stderr)
32
+ sys.exit(1)
33
+
34
+ ROOT = Path(__file__).resolve().parents[1]
35
+ SCHEMA_PATH = ROOT / "docs" / "contracts" / "discovery-manifest.schema.json"
36
+ VOCAB_DIR = ROOT / "config" / "discovery"
37
+ DEFAULT_MANIFEST = ROOT / "dist" / "discovery" / "discovery-manifest.json"
38
+
39
+
40
+ def _serialize(manifest: dict[str, Any]) -> str:
41
+ return json.dumps(manifest, indent=2, sort_keys=True, ensure_ascii=False) + "\n"
42
+
43
+
44
+ def _check_checksum(manifest: dict[str, Any]) -> str | None:
45
+ actual = manifest.get("checksum", "")
46
+ if not isinstance(actual, str) or not actual.startswith("sha256:"):
47
+ return f"checksum: malformed value {actual!r}"
48
+ # Mirror scripts/build_discovery_manifest.py::_finalise_checksum —
49
+ # `generated_at` is wall-clock and excluded from the digest input so
50
+ # the hash stays byte-stable across runs.
51
+ snapshot = dict(manifest)
52
+ snapshot["checksum"] = "sha256:" + "0" * 64
53
+ snapshot["generated_at"] = "<normalised>"
54
+ raw = _serialize(snapshot).encode("utf-8")
55
+ expected = "sha256:" + hashlib.sha256(raw).hexdigest()
56
+ if expected != actual:
57
+ return f"checksum mismatch: expected {expected}, got {actual}"
58
+ return None
59
+
60
+
61
+ def _check_vocab(manifest: dict[str, Any]) -> list[str]:
62
+ errs: list[str] = []
63
+ workspaces = yaml.safe_load((VOCAB_DIR / "workspaces.yml").read_text(encoding="utf-8")) or []
64
+ packs = yaml.safe_load((VOCAB_DIR / "packs.yml").read_text(encoding="utf-8")) or []
65
+ ws_ids = {w["id"] for w in workspaces}
66
+ pack_ids = {p["id"] for p in packs}
67
+
68
+ m_ws_ids = {w["id"] for w in manifest.get("workspaces", [])}
69
+ m_pk_ids = {p["id"] for p in manifest.get("packs", [])}
70
+ if m_ws_ids != ws_ids:
71
+ diff = ws_ids ^ m_ws_ids
72
+ errs.append(f"workspaces: vocabulary/manifest mismatch on {sorted(diff)}")
73
+ if m_pk_ids != pack_ids:
74
+ diff = pack_ids ^ m_pk_ids
75
+ errs.append(f"packs: vocabulary/manifest mismatch on {sorted(diff)}")
76
+
77
+ for a in manifest.get("artefacts", []):
78
+ for w in a.get("workspaces", []):
79
+ if w not in ws_ids:
80
+ errs.append(f"{a['path']}: unknown workspace '{w}'")
81
+ for p in a.get("packs", []):
82
+ if p not in pack_ids:
83
+ errs.append(f"{a['path']}: unknown pack '{p}'")
84
+ return errs
85
+
86
+
87
+ def main(argv: list[str] | None = None) -> int:
88
+ parser = argparse.ArgumentParser(description=__doc__.splitlines()[0])
89
+ parser.add_argument("--manifest", type=Path, default=DEFAULT_MANIFEST)
90
+ parser.add_argument("--quiet", action="store_true")
91
+ args = parser.parse_args(argv)
92
+
93
+ if not args.manifest.exists():
94
+ print(f"error: manifest not found at {args.manifest}", file=sys.stderr)
95
+ return 1
96
+
97
+ try:
98
+ manifest = json.loads(args.manifest.read_text(encoding="utf-8"))
99
+ except json.JSONDecodeError as exc:
100
+ print(f"error: invalid JSON: {exc}", file=sys.stderr)
101
+ return 1
102
+
103
+ schema = json.loads(SCHEMA_PATH.read_text(encoding="utf-8"))
104
+ try:
105
+ jsonschema.validate(manifest, schema)
106
+ except jsonschema.ValidationError as exc:
107
+ print(f"schema error: {exc.message}", file=sys.stderr)
108
+ path = "/".join(str(p) for p in exc.absolute_path)
109
+ if path:
110
+ print(f" at: {path}", file=sys.stderr)
111
+ return 1
112
+
113
+ if (err := _check_checksum(manifest)):
114
+ print(f"error: {err}", file=sys.stderr)
115
+ return 1
116
+
117
+ vocab_errs = _check_vocab(manifest)
118
+ if vocab_errs:
119
+ for e in vocab_errs[:20]:
120
+ print(f"error: {e}", file=sys.stderr)
121
+ if len(vocab_errs) > 20:
122
+ print(f" ... and {len(vocab_errs) - 20} more", file=sys.stderr)
123
+ return 1
124
+
125
+ if not args.quiet:
126
+ print(
127
+ f"OK {args.manifest.relative_to(ROOT)}: "
128
+ f"{len(manifest['artefacts'])} artefacts, "
129
+ f"{len(manifest['unassigned'])} unassigned, "
130
+ f"checksum verified"
131
+ )
132
+ return 0
133
+
134
+
135
+ if __name__ == "__main__":
136
+ sys.exit(main())