@event4u/agent-config 3.3.0 → 4.2.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 (561) hide show
  1. package/.agent-src/README.md +2 -2
  2. package/.agent-src/commands/agent-handoff.md +31 -2
  3. package/.agent-src/commands/agent-status.md +5 -5
  4. package/.agent-src/commands/agents/audit.md +8 -8
  5. package/.agent-src/commands/agents/init.md +25 -1
  6. package/.agent-src/commands/agents/optimize.md +3 -3
  7. package/.agent-src/commands/agents/user.md +1 -1
  8. package/.agent-src/commands/agents.md +1 -1
  9. package/.agent-src/commands/analyze-reference-repo.md +1 -1
  10. package/.agent-src/commands/check-current-md.md +8 -8
  11. package/.agent-src/commands/{compress.md → condense.md} +55 -55
  12. package/.agent-src/commands/context/create.md +7 -4
  13. package/.agent-src/commands/context/refactor.md +3 -1
  14. package/.agent-src/commands/feature/dev.md +1 -1
  15. package/.agent-src/commands/feature/explore.md +1 -1
  16. package/.agent-src/commands/feature/plan.md +10 -8
  17. package/.agent-src/commands/feature/refactor.md +3 -1
  18. package/.agent-src/commands/feature/roadmap.md +7 -4
  19. package/.agent-src/commands/fix/portability.md +3 -3
  20. package/.agent-src/commands/fix/refs.md +4 -4
  21. package/.agent-src/commands/ghostwriter.md +2 -2
  22. package/.agent-src/commands/memory/learn-low-impact.md +3 -3
  23. package/.agent-src/commands/module/explore.md +34 -8
  24. package/.agent-src/commands/optimize/agents-dir.md +9 -7
  25. package/.agent-src/commands/optimize/augmentignore.md +2 -2
  26. package/.agent-src/commands/optimize/skills.md +9 -9
  27. package/.agent-src/commands/post-as.md +1 -1
  28. package/.agent-src/commands/project-analyze.md +2 -2
  29. package/.agent-src/commands/project-health.md +3 -2
  30. package/.agent-src/commands/research/deep.md +1 -1
  31. package/.agent-src/commands/research/report.md +1 -1
  32. package/.agent-src/commands/research.md +1 -1
  33. package/.agent-src/commands/roadmap/ai-council.md +1 -1
  34. package/.agent-src/commands/roadmap/create.md +9 -4
  35. package/.agent-src/commands/rule-compliance-audit.md +1 -1
  36. package/.agent-src/commands/upstream-contribute.md +14 -14
  37. package/.agent-src/commands/video/from-script.md +1 -1
  38. package/.agent-src/commands/video/scene.md +1 -1
  39. package/.agent-src/commands/video/stitch.md +1 -1
  40. package/.agent-src/commands/video/storyboard.md +1 -1
  41. package/.agent-src/commands/video.md +1 -1
  42. package/.agent-src/contexts/augment-infrastructure.md +1 -1
  43. package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
  44. package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
  45. package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
  46. package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
  47. package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
  48. package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
  49. package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
  50. package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
  51. package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
  52. package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
  53. package/.agent-src/contexts/documentation-hierarchy.md +14 -7
  54. package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
  55. package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
  56. package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
  57. package/.agent-src/contexts/override-system.md +5 -5
  58. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  59. package/.agent-src/personas/advisors/first-principles.md +1 -1
  60. package/.agent-src/personas/hollywood-director.md +1 -1
  61. package/.agent-src/rules/architecture.md +5 -1
  62. package/.agent-src/rules/augment-edit-discipline.md +5 -5
  63. package/.agent-src/rules/augment-source-of-truth.md +15 -15
  64. package/.agent-src/rules/commit-conventions.md +1 -1
  65. package/.agent-src/rules/commit-policy.md +10 -0
  66. package/.agent-src/rules/domain-adoption-policy.md +3 -3
  67. package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
  68. package/.agent-src/rules/finance-safety-floor.md +1 -1
  69. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
  70. package/.agent-src/rules/git-history-discipline.md +1 -1
  71. package/.agent-src/rules/improve-before-implement.md +2 -2
  72. package/.agent-src/rules/language-and-tone.md +2 -2
  73. package/.agent-src/rules/media-governance-routing.md +5 -5
  74. package/.agent-src/rules/no-attribution-footers.md +1 -0
  75. package/.agent-src/rules/no-cheap-questions.md +3 -0
  76. package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
  77. package/.agent-src/rules/no-pr-progress-comments.md +118 -0
  78. package/.agent-src/rules/no-roadmap-references.md +3 -3
  79. package/.agent-src/rules/non-destructive-by-default.md +1 -1
  80. package/.agent-src/rules/persona-governance.md +3 -3
  81. package/.agent-src/rules/preservation-guard.md +15 -15
  82. package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
  83. package/.agent-src/rules/rule-type-governance.md +1 -1
  84. package/.agent-src/rules/skill-quality.md +1 -1
  85. package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
  86. package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
  87. package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
  88. package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
  89. package/.agent-src/skills/check-refs/SKILL.md +2 -2
  90. package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
  91. package/.agent-src/skills/command-writing/SKILL.md +19 -19
  92. package/.agent-src/skills/comp-banding/SKILL.md +1 -1
  93. package/.agent-src/skills/condense-memory/SKILL.md +131 -0
  94. package/.agent-src/skills/context-authoring/SKILL.md +2 -2
  95. package/.agent-src/skills/context-document/SKILL.md +5 -3
  96. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
  97. package/.agent-src/skills/description-assist/SKILL.md +2 -2
  98. package/.agent-src/skills/git-workflow/SKILL.md +1 -1
  99. package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
  100. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
  101. package/.agent-src/skills/lint-skills/SKILL.md +3 -3
  102. package/.agent-src/skills/md-language-check/SKILL.md +2 -2
  103. package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
  104. package/.agent-src/skills/module-management/SKILL.md +166 -94
  105. package/.agent-src/skills/override-management/SKILL.md +1 -1
  106. package/.agent-src/skills/persona-writing/SKILL.md +5 -5
  107. package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
  108. package/.agent-src/skills/project-docs/SKILL.md +6 -4
  109. package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
  110. package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
  111. package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
  112. package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
  113. package/.agent-src/skills/rule-writing/SKILL.md +18 -18
  114. package/.agent-src/skills/script-writing/SKILL.md +1 -1
  115. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
  116. package/.agent-src/skills/skill-management/SKILL.md +21 -21
  117. package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
  118. package/.agent-src/skills/skill-writing/SKILL.md +8 -8
  119. package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
  120. package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
  121. package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
  122. package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
  123. package/.agent-src/templates/AGENTS.md +1 -0
  124. package/.agent-src/templates/agent-settings.md +24 -13
  125. package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
  126. package/.agent-src/templates/command.md +5 -5
  127. package/.agent-src/templates/contexts.md +1 -1
  128. package/.agent-src/templates/copilot-instructions.md +8 -8
  129. package/.agent-src/templates/features.md +1 -1
  130. package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
  131. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
  132. package/.agent-src/templates/persona.md +2 -2
  133. package/.agent-src/templates/roadmaps.md +1 -1
  134. package/.agent-src/templates/rule.md +13 -13
  135. package/.agent-src/templates/scripts/memory_lookup.py +1 -1
  136. package/.agent-src/templates/scripts/memory_status.py +2 -2
  137. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
  138. package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
  139. package/.agent-src/templates/skill-archive-note.md +5 -5
  140. package/.agent-src/templates/skill.md +1 -1
  141. package/.claude-plugin/marketplace.json +4 -4
  142. package/AGENTS.md +16 -17
  143. package/CHANGELOG.md +216 -3
  144. package/CONTRIBUTING.md +31 -12
  145. package/README.md +21 -12
  146. package/config/agent-settings.template.yml +22 -2
  147. package/config/discovery/unassigned-artefacts.yml +24 -24
  148. package/config/profiles/full.ini +1 -1
  149. package/dist/cli/agent-config.js +52 -3
  150. package/dist/cli/agent-config.js.map +1 -1
  151. package/dist/cli/commands/uiServe.js +9 -0
  152. package/dist/cli/commands/uiServe.js.map +1 -1
  153. package/dist/cli/registry.js +2 -1
  154. package/dist/cli/registry.js.map +1 -1
  155. package/dist/discovery/deprecation-report.md +1 -1
  156. package/dist/discovery/discovery-manifest.json +649 -606
  157. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  158. package/dist/discovery/discovery-manifest.summary.md +4 -4
  159. package/dist/discovery/orphan-report.md +1 -1
  160. package/dist/discovery/packs.json +439 -437
  161. package/dist/discovery/trust-report.md +5 -5
  162. package/dist/discovery/workspaces.json +450 -448
  163. package/dist/install/atomic.js +92 -0
  164. package/dist/install/atomic.js.map +1 -0
  165. package/dist/install/conflict.js +196 -0
  166. package/dist/install/conflict.js.map +1 -0
  167. package/dist/install/detect.js +218 -0
  168. package/dist/install/detect.js.map +1 -0
  169. package/dist/install/paths.js +82 -0
  170. package/dist/install/paths.js.map +1 -0
  171. package/dist/install/plan.js +157 -0
  172. package/dist/install/plan.js.map +1 -0
  173. package/dist/install/txlog.js +140 -0
  174. package/dist/install/txlog.js.map +1 -0
  175. package/dist/install/types.js +19 -0
  176. package/dist/install/types.js.map +1 -0
  177. package/dist/install/wizard-plan.js +184 -0
  178. package/dist/install/wizard-plan.js.map +1 -0
  179. package/dist/mcp/registry-manifest.json +4 -4
  180. package/dist/router.json +67 -19
  181. package/dist/server/app.js +6 -0
  182. package/dist/server/app.js.map +1 -1
  183. package/dist/server/routes/install.js +358 -0
  184. package/dist/server/routes/install.js.map +1 -0
  185. package/dist/server/routes/wizard.js +468 -32
  186. package/dist/server/routes/wizard.js.map +1 -1
  187. package/dist/server/routes/workspace.js +396 -0
  188. package/dist/server/routes/workspace.js.map +1 -0
  189. package/dist/server/schemas/settings.js +5 -3
  190. package/dist/server/schemas/settings.js.map +1 -1
  191. package/dist/ui/assets/index-BDAhhpDV.js +40 -0
  192. package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
  193. package/dist/ui/assets/index-BXZILUxe.css +1 -0
  194. package/dist/ui/index.html +2 -2
  195. package/docs/MIGRATION.md +1 -1
  196. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  197. package/docs/adrs/router/0001-three-tier-routing.md +4 -4
  198. package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
  199. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
  200. package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
  201. package/docs/adrs/telegraph/README.md +9 -0
  202. package/docs/architecture/augment-projection.md +4 -4
  203. package/docs/architecture/claude-bundle.md +1 -1
  204. package/docs/architecture/current-onboard-baseline.md +3 -3
  205. package/docs/architecture/multi-tool-projection.md +10 -10
  206. package/docs/architecture/source-projection.md +27 -27
  207. package/docs/architecture.md +19 -15
  208. package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
  209. package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
  210. package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
  211. package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
  212. package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
  213. package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
  214. package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
  215. package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
  216. package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
  217. package/docs/benchmark.md +65 -0
  218. package/docs/benchmarks.md +16 -16
  219. package/docs/catalog.md +17 -15
  220. package/docs/contracts/CHANGELOG-conventions.md +1 -1
  221. package/docs/contracts/STABILITY.md +2 -2
  222. package/docs/contracts/adoption-signal-floor.md +110 -0
  223. package/docs/contracts/adr-chat-history-split.md +4 -4
  224. package/docs/contracts/adr-command-suggestion.md +4 -4
  225. package/docs/contracts/adr-gtm-context-spine.md +1 -1
  226. package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
  227. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  228. package/docs/contracts/adr-layout.md +2 -2
  229. package/docs/contracts/adr-product-ui-track.md +10 -10
  230. package/docs/contracts/adr-user-types-axis.md +3 -3
  231. package/docs/contracts/adr-wing4-context-spine.md +1 -1
  232. package/docs/contracts/agent-memory-contract.md +3 -3
  233. package/docs/contracts/agents-md-tech-stack.md +2 -2
  234. package/docs/contracts/ai-council-config.md +2 -2
  235. package/docs/contracts/at-rest-encryption.md +4 -0
  236. package/docs/contracts/audit-log-v1.md +1 -1
  237. package/docs/contracts/benchmark-ab-contract.md +101 -0
  238. package/docs/contracts/benchmark-corpus-spec.md +1 -1
  239. package/docs/contracts/branch-protection-policy.md +98 -0
  240. package/docs/contracts/ci-cost-budget.md +106 -0
  241. package/docs/contracts/ci-green-floor.md +141 -0
  242. package/docs/contracts/command-clusters.md +6 -6
  243. package/docs/contracts/command-surface-tiers.md +2 -2
  244. package/docs/contracts/command-taxonomy.md +2 -2
  245. package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
  246. package/docs/contracts/config-presets.md +1 -1
  247. package/docs/contracts/context-paths.md +3 -3
  248. package/docs/contracts/context-spine.md +1 -1
  249. package/docs/contracts/cost-summary-schema.md +12 -12
  250. package/docs/contracts/cross-wing-handoff.md +4 -4
  251. package/docs/contracts/daily-workspace.md +4 -0
  252. package/docs/contracts/decision-trace-v1.md +2 -2
  253. package/docs/contracts/discovery-manifest.md +4 -4
  254. package/docs/contracts/explain-modes.md +4 -0
  255. package/docs/contracts/file-ownership-matrix.json +3493 -3318
  256. package/docs/contracts/file-ownership-matrix.md +3 -3
  257. package/docs/contracts/frontmatter-contract.md +4 -4
  258. package/docs/contracts/ghostwriter-schema.md +3 -3
  259. package/docs/contracts/gui-wizard.md +110 -97
  260. package/docs/contracts/harness-expectations.md +123 -0
  261. package/docs/contracts/host-agent-protocol.md +4 -0
  262. package/docs/contracts/implement-ticket-flow.md +9 -9
  263. package/docs/contracts/install-scopes.md +77 -0
  264. package/docs/contracts/iron-law-overrides.txt +1 -1
  265. package/docs/contracts/kernel-membership.md +26 -26
  266. package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
  267. package/docs/contracts/linter-structural-model.md +2 -2
  268. package/docs/contracts/load-context-budget-model.md +4 -4
  269. package/docs/contracts/load-context-schema.md +13 -13
  270. package/docs/contracts/local-analytics.md +4 -0
  271. package/docs/contracts/local-knowledge-ingestion.md +1 -1
  272. package/docs/contracts/mcp-cloud-scope.md +2 -2
  273. package/docs/contracts/mcp-phase-1-scope.md +3 -3
  274. package/docs/contracts/measurement-baseline.md +5 -5
  275. package/docs/contracts/mental-models.md +30 -30
  276. package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
  277. package/docs/contracts/namespace.md +4 -4
  278. package/docs/contracts/orchestration-dsl-v1.md +7 -7
  279. package/docs/contracts/package-self-orientation.md +12 -12
  280. package/docs/contracts/persona-schema.md +6 -6
  281. package/docs/contracts/pilot/language-and-tone.md +1 -1
  282. package/docs/contracts/plain-language-surface.md +117 -0
  283. package/docs/contracts/profile-system.md +3 -3
  284. package/docs/contracts/release-pr-gating.md +103 -0
  285. package/docs/contracts/role-experience.md +3 -3
  286. package/docs/contracts/rule-classification.md +13 -13
  287. package/docs/contracts/rule-interactions.md +4 -4
  288. package/docs/contracts/rule-interactions.yml +30 -30
  289. package/docs/contracts/rule-priority-hierarchy.md +13 -13
  290. package/docs/contracts/rule-router.md +2 -2
  291. package/docs/contracts/safety-model.md +1 -1
  292. package/docs/contracts/skill-distribution-channels.md +61 -0
  293. package/docs/contracts/skill-domains.md +2 -2
  294. package/docs/contracts/smoke-contracts.md +5 -5
  295. package/docs/contracts/telegraph-telemetry.md +83 -0
  296. package/docs/contracts/trust-and-safety.md +5 -5
  297. package/docs/contracts/ui-stack-extension.md +7 -7
  298. package/docs/contracts/ui-track-flow.md +9 -9
  299. package/docs/contracts/user-type-schema.md +4 -4
  300. package/docs/contracts/workflow-packs.md +4 -4
  301. package/docs/contracts/workspace-documents.md +4 -0
  302. package/docs/customization.md +28 -8
  303. package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
  304. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
  305. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
  306. package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
  307. package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
  308. package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
  309. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
  310. package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
  311. package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
  312. package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
  313. package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
  314. package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
  315. package/docs/decisions/ADR-021-deployment-shape.md +3 -3
  316. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
  317. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
  318. package/docs/decisions/ADR-028-root-layout.md +7 -7
  319. package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
  320. package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
  321. package/docs/deploy/connector-setup.md +2 -2
  322. package/docs/deploy/policy-cookbook.md +2 -2
  323. package/docs/deploy/team-deployment-posture.md +20 -0
  324. package/docs/development.md +17 -17
  325. package/docs/distribution/registries.md +32 -0
  326. package/docs/distribution/registry-submissions.md +85 -0
  327. package/docs/distribution/telemetry-schema.md +1 -1
  328. package/docs/getting-started-by-role.md +45 -3
  329. package/docs/getting-started.md +2 -2
  330. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  331. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  332. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  333. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  334. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  335. package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
  336. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  337. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  338. package/docs/guidelines/agent-infra/layered-settings.md +56 -2
  339. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  340. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
  341. package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
  342. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  343. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
  344. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  345. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  346. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  347. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
  348. package/docs/guidelines/augment-portability-patterns.md +4 -4
  349. package/docs/guidelines/cross-role-handoff.md +2 -2
  350. package/docs/guidelines/php/php-coding-patterns.md +1 -1
  351. package/docs/guidelines/prompt-templates.md +6 -6
  352. package/docs/maintainers/dev-mode.md +1 -1
  353. package/docs/mcp.md +1 -1
  354. package/docs/parity/bench.json +3 -3
  355. package/docs/parity/ruflo.md +2 -2
  356. package/docs/profiles.md +11 -11
  357. package/docs/quality.md +11 -11
  358. package/docs/safety.md +3 -3
  359. package/docs/setup/mcp-client-config.md +1 -1
  360. package/docs/setup/mcp-r2-bootstrap.md +1 -1
  361. package/docs/setup/mcp-server-docker.md +3 -3
  362. package/docs/setup/per-ide/windsurf.md +1 -1
  363. package/docs/skills-catalog.md +8 -7
  364. package/docs/troubleshooting.md +1 -1
  365. package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
  366. package/llms.txt +7 -6
  367. package/package.json +1 -1
  368. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  369. package/scripts/_archive/README.md +2 -2
  370. package/scripts/_archive/_backfill_skill_domains.py +3 -3
  371. package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
  372. package/scripts/_archive/_p43_bodies.py +10 -10
  373. package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
  374. package/scripts/_archive/_p4_migrate.py +7 -7
  375. package/scripts/_archive/_phase2_shim_helper.py +1 -1
  376. package/scripts/_archive/_pilot_council_question.py +5 -5
  377. package/scripts/_cli/explain_last/inputs.py +1 -1
  378. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  379. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  380. package/scripts/_lib/agent_settings.py +195 -1
  381. package/scripts/_lib/agent_src.py +19 -19
  382. package/scripts/_lib/bench_ab_cache.py +162 -0
  383. package/scripts/_lib/bench_ab_scoring.py +209 -0
  384. package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
  385. package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
  386. package/scripts/_lib/claude_desktop_bundler.py +5 -5
  387. package/scripts/_lib/module_detection.py +223 -0
  388. package/scripts/_lib/scope_guard.sh +162 -0
  389. package/scripts/_phase4_bucket.py +3 -3
  390. package/scripts/_pilot_measure.py +4 -4
  391. package/scripts/_tmp_scan_framework_leakage.py +1 -1
  392. package/scripts/adoption_report.py +195 -0
  393. package/scripts/adoption_snapshot.py +219 -0
  394. package/scripts/adoption_status.py +166 -0
  395. package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
  396. package/scripts/ai_council/advisors.py +5 -5
  397. package/scripts/ai_council/compile_corpus.py +1 -1
  398. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
  399. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
  400. package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
  401. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
  402. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
  403. package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
  404. package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
  405. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
  406. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
  407. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
  408. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
  409. package/scripts/annotate_discovery.py +13 -13
  410. package/scripts/apply_modules_config.py +290 -0
  411. package/scripts/audit_adr_coverage.py +2 -2
  412. package/scripts/audit_auto_rules.py +2 -2
  413. package/scripts/audit_cloud_compatibility.py +3 -3
  414. package/scripts/audit_command_surface.py +9 -9
  415. package/scripts/audit_likelihood.py +2 -2
  416. package/scripts/audit_user_type_axis.py +2 -2
  417. package/scripts/bench_ab_cache_dispatch.py +68 -0
  418. package/scripts/bench_ab_clone.py +170 -0
  419. package/scripts/bench_ab_diff.py +227 -0
  420. package/scripts/bench_ab_integrity.py +143 -0
  421. package/scripts/bench_ab_run.py +235 -0
  422. package/scripts/bench_ab_task_runner.py +369 -0
  423. package/scripts/bench_ab_tracka_run.py +202 -0
  424. package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
  425. package/scripts/bench_run.py +33 -33
  426. package/scripts/bench_runner.py +2 -2
  427. package/scripts/bootstrap.sh +99 -0
  428. package/scripts/build_cloud_bundle.py +6 -6
  429. package/scripts/build_discovery_manifest.py +7 -7
  430. package/scripts/build_linear_digest.py +3 -3
  431. package/scripts/build_rule_trigger_matrix.py +8 -8
  432. package/scripts/chat_history.py +5 -5
  433. package/scripts/check_always_budget.py +11 -5
  434. package/scripts/check_augment_description_cap.py +3 -3
  435. package/scripts/check_cluster_patterns.py +2 -2
  436. package/scripts/check_command_count_messaging.py +3 -3
  437. package/scripts/{check_compression.py → check_condensation.py} +34 -34
  438. package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
  439. package/scripts/check_context_paths.py +7 -7
  440. package/scripts/check_council_layout.py +2 -2
  441. package/scripts/check_council_references.py +9 -9
  442. package/scripts/check_iron_law_prominence.py +2 -2
  443. package/scripts/check_kernel_rule_bundle.py +2 -2
  444. package/scripts/check_module_management_neutral.py +149 -0
  445. package/scripts/check_no_roadmap_refs.py +9 -9
  446. package/scripts/check_portability.py +3 -3
  447. package/scripts/check_public_catalog_links.py +4 -4
  448. package/scripts/check_references.py +7 -6
  449. package/scripts/check_release_pr_shape.py +112 -0
  450. package/scripts/check_reply_consistency.py +3 -3
  451. package/scripts/check_safety_floor_untouched.py +1 -1
  452. package/scripts/check_template_pin_drift.py +5 -5
  453. package/scripts/check_token_optimizer_freshness.py +3 -3
  454. package/scripts/ci_status.py +301 -0
  455. package/scripts/ci_time_ratio.py +1 -1
  456. package/scripts/cleanup_other_scope.sh +146 -0
  457. package/scripts/compile_router.py +10 -10
  458. package/scripts/{compress.py → condense.py} +64 -64
  459. package/scripts/condense.sh +18 -0
  460. package/scripts/{compress_memory.py → condense_memory.py} +33 -33
  461. package/scripts/config/presets.py +2 -2
  462. package/scripts/config/profiles.py +1 -1
  463. package/scripts/cost_by_conversation.py +3 -3
  464. package/scripts/cost_summary.py +7 -7
  465. package/scripts/count_token_optimizer_usage.sh +1 -1
  466. package/scripts/gen_discovery_baseline.py +5 -5
  467. package/scripts/generate_index.py +6 -6
  468. package/scripts/generate_ownership_matrix.py +10 -10
  469. package/scripts/generate_pack_manifests.py +1 -1
  470. package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
  471. package/scripts/install +3 -3
  472. package/scripts/install-hooks.sh +6 -6
  473. package/scripts/install.py +273 -45
  474. package/scripts/install.sh +187 -1
  475. package/scripts/inventory_frontmatter.py +2 -2
  476. package/scripts/iron_law_sha.py +3 -3
  477. package/scripts/lint_agents_layout.py +14 -7
  478. package/scripts/lint_agents_md.py +4 -4
  479. package/scripts/lint_archived_skills.py +3 -3
  480. package/scripts/lint_artefact_frontmatter.py +2 -2
  481. package/scripts/lint_bench_ab.py +172 -0
  482. package/scripts/lint_bench_corpus.py +1 -1
  483. package/scripts/lint_command_tiers.py +5 -5
  484. package/scripts/lint_context_spine_usage.py +1 -1
  485. package/scripts/lint_framework_leakage.py +7 -7
  486. package/scripts/lint_framework_leakage_allowlist.json +152 -84
  487. package/scripts/lint_ghostwriter_source.py +3 -3
  488. package/scripts/lint_handoffs.py +1 -1
  489. package/scripts/lint_load_context.py +11 -11
  490. package/scripts/lint_media_policy_linkage.py +5 -5
  491. package/scripts/lint_namespace.py +1 -1
  492. package/scripts/lint_no_new_atomic_commands.py +2 -2
  493. package/scripts/lint_orchestration_dsl.py +1 -1
  494. package/scripts/lint_pack_boundaries.py +2 -2
  495. package/scripts/lint_persona_governance.py +4 -4
  496. package/scripts/lint_role_experiences.py +237 -0
  497. package/scripts/lint_rule_interactions.py +2 -2
  498. package/scripts/lint_rule_tiers.py +1 -1
  499. package/scripts/lint_trust_coherence.py +2 -2
  500. package/scripts/mcp_registry_submit.sh +187 -0
  501. package/scripts/mcp_server/tools.py +1 -1
  502. package/scripts/measure_frugality_savings.py +10 -10
  503. package/scripts/measure_patterns.py +1 -1
  504. package/scripts/measure_projection_bytes.py +5 -5
  505. package/scripts/measure_rule_budget.py +3 -3
  506. package/scripts/measure_skill_reduction.py +1 -1
  507. package/scripts/memory_lookup.py +1 -1
  508. package/scripts/memory_status.py +2 -2
  509. package/scripts/migrate_command_suggestions.py +3 -3
  510. package/scripts/mine_session.py +1 -1
  511. package/scripts/move_artefact.py +3 -3
  512. package/scripts/new_skill.py +2 -2
  513. package/scripts/pack_mcp_content.py +9 -9
  514. package/scripts/plan_physical_move.py +6 -6
  515. package/scripts/print_required_checks.py +196 -0
  516. package/scripts/probe_skill_registration.py +413 -0
  517. package/scripts/propose_modules_config.py +145 -0
  518. package/scripts/prototype_lint_contradictions.py +1 -1
  519. package/scripts/recruit_preflight.sh +152 -0
  520. package/scripts/refine_ticket_detect.py +3 -3
  521. package/scripts/release.py +20 -0
  522. package/scripts/render_benchmark_md.py +308 -0
  523. package/scripts/roadmap_progress_hook.py +1 -1
  524. package/scripts/run_skill_evals.py +2 -2
  525. package/scripts/runtime_registry.py +4 -4
  526. package/scripts/schemas/command.schema.json +4 -4
  527. package/scripts/schemas/rule.schema.json +5 -5
  528. package/scripts/schemas/skill.schema.json +3 -3
  529. package/scripts/schemas/user-type.schema.json +1 -1
  530. package/scripts/score_skill_selection.py +1 -1
  531. package/scripts/skill_collision_clusters.py +2 -2
  532. package/scripts/skill_linter.py +81 -81
  533. package/scripts/skill_overlap.py +5 -5
  534. package/scripts/skill_tools/audit_persona_coverage.py +2 -2
  535. package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
  536. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  537. package/scripts/skill_tools/score_skill_relevance.py +1 -1
  538. package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
  539. package/scripts/skill_trigger_eval.py +3 -3
  540. package/scripts/smoke/kernel.sh +7 -1
  541. package/scripts/smoke/router.sh +5 -5
  542. package/scripts/smoke/skills.sh +1 -1
  543. package/scripts/smoke_quickstart.py +1 -1
  544. package/scripts/snapshot_agent_outputs.py +3 -3
  545. package/scripts/spotcheck_thin_root.py +1 -1
  546. package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
  547. package/scripts/update_counts.py +1 -1
  548. package/scripts/validate_decision_engine.py +1 -1
  549. package/scripts/validate_frontmatter.py +1 -1
  550. package/scripts/validate_safe_paths.py +3 -3
  551. package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
  552. package/scripts/verify_roadmap_closure.py +6 -6
  553. package/templates/consumer-settings/ONBOARDING.md +41 -0
  554. package/.agent-src/commands/install-via-agent.md +0 -129
  555. package/.agent-src/skills/compress-memory/SKILL.md +0 -131
  556. package/dist/ui/assets/index-D-DY1ywI.js +0 -35
  557. package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
  558. package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
  559. package/docs/adrs/caveman/README.md +0 -9
  560. package/docs/contracts/caveman-telemetry.md +0 -83
  561. package/scripts/compress.sh +0 -18
@@ -37,6 +37,12 @@ DRY_RUN=false
37
37
  VERBOSE=false
38
38
  QUIET=false
39
39
  SKIP_GITIGNORE=false
40
+ # Per the canonical-channel contract (docs/contracts/skill-distribution-channels.md),
41
+ # consumer installs default to the filesystem channel only (e.g. .claude/skills/) and
42
+ # do NOT project the plugin manifest (.claude-plugin/marketplace.json). Set this true
43
+ # via --legacy-both to also copy the plugin manifest for users on older harnesses
44
+ # that require both channels.
45
+ LEGACY_BOTH=false
40
46
  # When true, skip payload sync entirely and only install the project-local
41
47
  # `./agent-config` wrapper (Step 7 Phase 2). The bridge stage (install.py)
42
48
  # handles the .agent-settings.yml stub + nested-install guard.
@@ -87,6 +93,7 @@ parse_args() {
87
93
  --user-type) shift 2 ;;
88
94
  --user-type=*) shift ;;
89
95
  --minimal|--settings-only) MINIMAL=true; shift ;;
96
+ --legacy-both) LEGACY_BOTH=true; shift ;;
90
97
  --help|-h) show_help; exit 0 ;;
91
98
  *) log_error "Unknown argument: $1"; show_help; exit 1 ;;
92
99
  esac
@@ -141,6 +148,10 @@ Options:
141
148
  --verbose Show detailed output
142
149
  --quiet Suppress all output except errors
143
150
  --skip-gitignore Do not touch the target project's .gitignore
151
+ --legacy-both Also project the Claude plugin manifest
152
+ (.claude-plugin/marketplace.json) into the consumer install.
153
+ Default is filesystem-only per the canonical-channel contract
154
+ at docs/contracts/skill-distribution-channels.md.
144
155
  --help, -h Show this help
145
156
 
146
157
  Environment:
@@ -604,6 +615,163 @@ generate_windsurfrules() {
604
615
  }
605
616
 
606
617
 
618
+ # Run scripts/_lib/scope_guard.sh as a pre-flight check. On DRIFT findings
619
+ # the function surfaces a numbered-options prompt and aborts on no-confirm
620
+ # paths. SCOPE_GUARD_BYPASS=1 (set by the orchestrator, CI runs, and
621
+ # --dry-run) skips the prompt entirely. Findings are always logged in
622
+ # verbose mode regardless.
623
+ run_scope_guard() {
624
+ local target="$1"
625
+ local guard="$SOURCE_DIR/scripts/_lib/scope_guard.sh"
626
+
627
+ # Skip when the guard is not present (e.g. trimmed install bundle).
628
+ [[ -f "$guard" ]] || { log_verbose "scope_guard.sh not found — skipping cross-scope drift check"; return 0; }
629
+
630
+ # Bypass paths that cannot or must not be interactive.
631
+ if $DRY_RUN; then
632
+ log_verbose "skip scope_guard (--dry-run)"
633
+ return 0
634
+ fi
635
+ if [[ "${SCOPE_GUARD_BYPASS:-0}" == "1" ]]; then
636
+ log_verbose "skip scope_guard (SCOPE_GUARD_BYPASS=1)"
637
+ return 0
638
+ fi
639
+ if [[ "${CI:-0}" == "true" ]] || [[ "${CI:-0}" == "1" ]]; then
640
+ log_verbose "skip scope_guard (CI=true)"
641
+ return 0
642
+ fi
643
+
644
+ local output verdict
645
+ output="$(bash "$guard" project "$SOURCE_DIR" "$target" 2>/dev/null || true)"
646
+ [[ -n "$output" ]] || return 0
647
+
648
+ local summary
649
+ summary="$(echo "$output" | grep '^SUMMARY' | tail -1)"
650
+ [[ -n "$summary" ]] || return 0
651
+ verdict="$(echo "$summary" | cut -f2)"
652
+
653
+ if [[ "$verdict" == "OK" ]]; then
654
+ log_verbose "scope_guard OK (no cross-scope install)"
655
+ return 0
656
+ fi
657
+
658
+ if [[ "$verdict" == "WARN" ]]; then
659
+ $QUIET || {
660
+ echo ""
661
+ echo " ⚠️ Cross-scope install detected (same version, no drift)."
662
+ echo "$output" | awk -F'\t' '$1=="WARN" { printf " - %s at %s (v%s)\n", $2, $3, $4 }'
663
+ echo ""
664
+ }
665
+ return 0
666
+ fi
667
+
668
+ # DRIFT: surface the gate. Non-interactive shells get the warning and
669
+ # an exit code that the caller can short-circuit with SCOPE_GUARD_BYPASS=1.
670
+ echo ""
671
+ echo " ❌ Cross-scope DRIFT detected — same package installed at user AND project scope at different versions:"
672
+ echo "$output" | awk -F'\t' '$1=="DRIFT" { printf " - %s: other-scope=%s (v%s) vs this-install=v%s\n", $2, $3, $4, $5 }'
673
+ echo ""
674
+ echo " The 2026-05-25 root cause (duplicate skill registration with stale frontmatter)"
675
+ echo " will fire when both registrations load. Choose how to proceed:"
676
+ echo ""
677
+ echo " 1. Abort install — fix drift first (recommended)"
678
+ echo " 2. Upgrade the OTHER scope first (run scripts/install.sh --target=\$HOME or equivalent)"
679
+ echo " 3. Force install at this scope — accept drift (set SCOPE_GUARD_BYPASS=1)"
680
+ echo " 4. Clean the other scope (bash scripts/cleanup_other_scope.sh --confirm)"
681
+ echo ""
682
+ echo " Recommendation: 1"
683
+ echo ""
684
+
685
+ # In interactive mode the caller has stdin; we honour SCOPE_GUARD_BYPASS=1
686
+ # already above. Default: abort.
687
+ if [[ -t 0 ]]; then
688
+ local choice
689
+ read -r -p " Enter 1-4 [default 1]: " choice || choice=1
690
+ case "${choice:-1}" in
691
+ 2) echo " → Re-run scripts/install.sh against the other scope first; aborting this run."; exit 2 ;;
692
+ 3) log_warn "Continuing despite DRIFT (user opted into option 3)" ;;
693
+ 4) echo " → Run: bash scripts/cleanup_other_scope.sh --confirm — then retry."; exit 2 ;;
694
+ *) echo " → Aborting (option 1)."; exit 2 ;;
695
+ esac
696
+ else
697
+ echo " Non-interactive shell — aborting. Set SCOPE_GUARD_BYPASS=1 to override."
698
+ exit 2
699
+ fi
700
+ }
701
+
702
+ # Post-install skill-registration probe (Phase C Step 6). Informational by
703
+ # default; PROBE_STRICT=1 turns drift findings into a non-zero exit so a
704
+ # release install fails loudly. Skipped in dry-run and when python3 or the
705
+ # probe script is missing (older bundles).
706
+ run_post_install_probe() {
707
+ local target="$1"
708
+ local probe="$SOURCE_DIR/scripts/probe_skill_registration.py"
709
+
710
+ [[ -f "$probe" ]] || { log_verbose "skip probe_skill_registration.py (not found)"; return 0; }
711
+ if ! command -v python3 >/dev/null 2>&1; then
712
+ log_verbose "skip skill-registration probe (python3 missing)"
713
+ return 0
714
+ fi
715
+ if $DRY_RUN; then
716
+ log_verbose "skip skill-registration probe (--dry-run)"
717
+ return 0
718
+ fi
719
+ if [[ "${PROBE_BYPASS:-0}" == "1" ]]; then
720
+ log_verbose "skip skill-registration probe (PROBE_BYPASS=1)"
721
+ return 0
722
+ fi
723
+
724
+ local args=( "$probe" "--project" "$target" "--format=text" )
725
+ [[ "${PROBE_STRICT:-0}" == "1" ]] && args+=("--strict")
726
+
727
+ if python3 "${args[@]}" > /tmp/agent-config-probe.$$ 2>&1; then
728
+ # On clean output (no findings) only show a one-liner.
729
+ if grep -qE 'DUPLICATE|DRIFT' /tmp/agent-config-probe.$$; then
730
+ $QUIET || echo ""
731
+ $QUIET || echo " ⚠️ Skill-registration findings:"
732
+ $QUIET || sed -n '/DUPLICATE\|DRIFT/,$p' /tmp/agent-config-probe.$$ | head -40
733
+ $QUIET || echo ""
734
+ $QUIET || echo " Run: python3 scripts/probe_skill_registration.py — for the full report."
735
+ else
736
+ log_info "Skill-registration probe: clean (no duplicates / drift)"
737
+ fi
738
+ rm -f /tmp/agent-config-probe.$$
739
+ return 0
740
+ else
741
+ local code=$?
742
+ echo ""
743
+ echo " ❌ Skill-registration probe surfaced DUPLICATE / DRIFT findings (PROBE_STRICT=1):"
744
+ sed -n '/DUPLICATE\|DRIFT/,$p' /tmp/agent-config-probe.$$ | head -40
745
+ rm -f /tmp/agent-config-probe.$$
746
+ return "$code"
747
+ fi
748
+ }
749
+
750
+ # Project the Claude plugin manifest into the consumer install — gated on
751
+ # --legacy-both. Default install path is filesystem-only per the canonical-
752
+ # channel contract (docs/contracts/skill-distribution-channels.md). Only
753
+ # users on older Claude Code harnesses that need both channels opt in.
754
+ project_legacy_plugin_manifest() {
755
+ local project_root="$1"
756
+ local source_manifest="$SOURCE_DIR/.claude-plugin/marketplace.json"
757
+ local target_manifest="$project_root/.claude-plugin/marketplace.json"
758
+
759
+ if ! $LEGACY_BOTH; then
760
+ log_verbose "skip .claude-plugin/marketplace.json (filesystem is canonical; use --legacy-both to opt in)"
761
+ return 0
762
+ fi
763
+ is_tool_enabled "claude-code" || { log_verbose "skip .claude-plugin/marketplace.json (claude-code not selected)"; return 0; }
764
+ [[ -f "$source_manifest" ]] || { log_verbose "skip .claude-plugin/marketplace.json (source manifest absent)"; return 0; }
765
+
766
+ if $DRY_RUN; then
767
+ log_verbose "copy .claude-plugin/marketplace.json (--legacy-both)"
768
+ return
769
+ fi
770
+ mkdir -p "$(dirname "$target_manifest")"
771
+ cp "$source_manifest" "$target_manifest"
772
+ log_info "Projected .claude-plugin/marketplace.json (--legacy-both opted in)"
773
+ }
774
+
607
775
  # Create GEMINI.md symlink (gemini-cli only).
608
776
  create_gemini_md() {
609
777
  local project_root="$1"
@@ -883,7 +1051,15 @@ main() {
883
1051
  echo ""
884
1052
  fi
885
1053
 
886
- # 0. Migrate legacy infra files (root agents/) before any content sync.
1054
+ # 0a. Cross-scope drift pre-flight (Phase B Step 3). Detect prior installs
1055
+ # of the same package at the OTHER scope (user-global ↔ project-local).
1056
+ # On DRIFT the function surfaces a numbered-options gate per the
1057
+ # non-destructive-by-default contract. SCOPE_GUARD_BYPASS=1 from the
1058
+ # orchestrator or a CI run skips the gate so non-interactive paths do
1059
+ # not hang.
1060
+ run_scope_guard "$TARGET_DIR"
1061
+
1062
+ # 0b. Migrate legacy infra files (root → agents/) before any content sync.
887
1063
  migrate_legacy_root_infra "$TARGET_DIR"
888
1064
  migrate_legacy_low_impact_decisions "$TARGET_DIR"
889
1065
  migrate_legacy_prices_file "$TARGET_DIR"
@@ -920,6 +1096,9 @@ main() {
920
1096
  create_tool_symlinks "$TARGET_DIR"
921
1097
  create_skill_symlinks "$TARGET_DIR"
922
1098
 
1099
+ # 3b. Optionally project the Claude plugin manifest (--legacy-both).
1100
+ project_legacy_plugin_manifest "$TARGET_DIR"
1101
+
923
1102
  # 4. Generate files
924
1103
  generate_windsurfrules "$TARGET_DIR"
925
1104
  create_gemini_md "$TARGET_DIR"
@@ -927,6 +1106,13 @@ main() {
927
1106
  # 5. Install consumer CLI wrapper (gitignored, overwritten on every install)
928
1107
  install_cli_wrapper "$TARGET_DIR"
929
1108
 
1109
+ # 5b. Post-install registration probe (Phase C Step 6). Surfaces any
1110
+ # duplicate / drifting skill registrations the new install would
1111
+ # conflict with. PROBE_STRICT=1 (set by release installs) flips
1112
+ # informational output into a non-zero exit so a release stops on
1113
+ # drift findings.
1114
+ run_post_install_probe "$TARGET_DIR"
1115
+
930
1116
  # 6. Manage .gitignore
931
1117
  ensure_gitignore "$TARGET_DIR"
932
1118
 
@@ -2,7 +2,7 @@
2
2
  """
3
3
  Inventory frontmatter keys across all agent artefacts.
4
4
 
5
- Reads .agent-src.uncompressed/{skills,rules,commands,personas}, parses the
5
+ Reads .agent-src.uncondensed/{skills,rules,commands,personas}, parses the
6
6
  YAML frontmatter of every file, and prints per-type:
7
7
 
8
8
  - total file count
@@ -26,7 +26,7 @@ from collections import Counter, defaultdict
26
26
  from pathlib import Path
27
27
 
28
28
  ROOT = Path(__file__).resolve().parent.parent
29
- SRC = ROOT / ".agent-src.uncompressed"
29
+ SRC = ROOT / ".agent-src.uncondensed"
30
30
 
31
31
  FRONTMATTER_RE = re.compile(r"^---\n(.*?)\n---\n", re.DOTALL)
32
32
 
@@ -13,7 +13,7 @@ line), case-folded, then SHA-256-hashed. Empty fences hash to
13
13
  SHA-256(''), which is `e3b0c442…` (the well-known empty-string hash).
14
14
 
15
15
  Acceptance per `road-to-kernel-and-router.md` P2.2: re-runnable,
16
- deterministic, stdlib-only, no network. Compression of a kernel rule
16
+ deterministic, stdlib-only, no network. Condensation of a kernel rule
17
17
  must preserve this SHA (or surface a deliberate ADR-tracked diff).
18
18
  """
19
19
 
@@ -26,7 +26,7 @@ import sys
26
26
  from pathlib import Path
27
27
 
28
28
  REPO_ROOT = Path(__file__).resolve().parent.parent
29
- RULES_DIR = REPO_ROOT / ".agent-src.uncompressed" / "rules"
29
+ RULES_DIR = REPO_ROOT / ".agent-src.uncondensed" / "rules"
30
30
 
31
31
  # Locked kernel set — kept in sync with measure_rule_budget.KERNEL_RULES.
32
32
  KERNEL_RULES = (
@@ -50,7 +50,7 @@ def iron_law_sha(text: str) -> str:
50
50
 
51
51
  Algorithm matches `scripts/_pilot_measure.py` exactly so the SHAs
52
52
  recorded in `docs/contracts/kernel-membership.md` § 2 stay
53
- reproducible across pre / post compression.
53
+ reproducible across pre / post condensation.
54
54
  """
55
55
  blocks = _FENCE_RE.findall(text)
56
56
  norm = "".join(_WS_RE.sub(" ", b).strip().upper() for b in blocks)
@@ -9,12 +9,12 @@ everything else lives in a typed subdirectory (`runtime/`, `settings/`,
9
9
 
10
10
  Two layout tiers:
11
11
 
12
- MAINTAINER (this source repo, identified by ``.agent-src.uncompressed/``)
12
+ MAINTAINER (this source repo, identified by ``.agent-src.uncondensed/``)
13
13
  Full `agents/` tree allowed — only the flat-file whitelist is
14
14
  enforced. Phase 4 of road-to-global-only-install keeps the
15
15
  maintainer surface unchanged.
16
16
 
17
- CONSUMER (any repo without ``.agent-src.uncompressed/``)
17
+ CONSUMER (any repo without ``.agent-src.uncondensed/``)
18
18
  Global-only target shape: `agents/overrides/` + the bridge
19
19
  marker `agents/.event4u-bridge.yml` are the **only** expected
20
20
  artefacts. Anything else surfaces as a WARNING with a pointer
@@ -55,6 +55,13 @@ ALLOWED_FLAT_FILES: frozenset[str] = frozenset(
55
55
  # Consumer bridge marker (Phase 4 of road-to-global-only-install).
56
56
  # Spec: docs/contracts/consumer-bridge.md (event4u-bridge/v1).
57
57
  ".event4u-bridge.yml",
58
+ # Per-tool projection toggle — which generated trees
59
+ # `task generate-tools` writes (`.claude/`, `.cursor/`,
60
+ # `.clinerules/`, `.windsurfrules`). Lives at agents/ root
61
+ # because both the package and the consumer generators read
62
+ # it before any subdirectory is touched (ADR-028 § Root layout
63
+ # toggle).
64
+ ".agent-tools.yml",
58
65
  }
59
66
  )
60
67
 
@@ -76,21 +83,21 @@ def is_source_repo(project_root: Path) -> bool:
76
83
  """True when running inside the agent-config source repo.
77
84
 
78
85
  The maintainer surface is identified by **any** of:
79
- - ``.agent-src.uncompressed/`` at the workspace root (legacy / single-pack layout),
80
- - ``packages/<pack>/.agent-src.uncompressed/`` (current monorepo layout — see ``AGENTS.md``),
81
- - ``.agent-src/`` at the workspace root (compressed authoring tree).
86
+ - ``.agent-src.uncondensed/`` at the workspace root (legacy / single-pack layout),
87
+ - ``packages/<pack>/.agent-src.uncondensed/`` (current monorepo layout — see ``AGENTS.md``),
88
+ - ``.agent-src/`` at the workspace root (condensed authoring tree).
82
89
 
83
90
  Consumer repos ship none of these — they only carry the deployed
84
91
  `.augment/`, `.claude/`, etc. plus `agents/overrides/`.
85
92
  """
86
- if (project_root / ".agent-src.uncompressed").is_dir():
93
+ if (project_root / ".agent-src.uncondensed").is_dir():
87
94
  return True
88
95
  if (project_root / ".agent-src").is_dir():
89
96
  return True
90
97
  packages = project_root / "packages"
91
98
  if packages.is_dir():
92
99
  for sub in packages.iterdir():
93
- if (sub / ".agent-src.uncompressed").is_dir():
100
+ if (sub / ".agent-src.uncondensed").is_dir():
94
101
  return True
95
102
  return False
96
103
 
@@ -2,7 +2,7 @@
2
2
  """Thin-Root contract linter for AGENTS.md files (Phase 7).
3
3
 
4
4
  Enforces caps + pointer-ratio + pointer-anatomy + emergency-triage
5
- contract from `.agent-src.uncompressed/skills/agents-md-thin-root/SKILL.md`:
5
+ contract from `.agent-src.uncondensed/skills/agents-md-thin-root/SKILL.md`:
6
6
 
7
7
  (a) total char-count under FAIL/WARN budgets per file class
8
8
  (b) substantive-pointer ratio >= 0.40
@@ -65,7 +65,7 @@ class Target:
65
65
  TARGETS = [
66
66
  Target(ROOT / "AGENTS.md", "package-root", 3000, 2800, template=False),
67
67
  Target(
68
- ROOT / "packages" / "core" / ".agent-src.uncompressed" / "templates" / "AGENTS.md",
68
+ ROOT / "packages" / "core" / ".agent-src.uncondensed" / "templates" / "AGENTS.md",
69
69
  "consumer-template", 2500, 2300, template=True,
70
70
  ),
71
71
  ]
@@ -81,10 +81,10 @@ def _resolve(target_str: str, template: bool) -> bool:
81
81
  return True
82
82
  candidates = [ROOT / raw]
83
83
  if template and raw.startswith(".augment/"):
84
- candidates.append(ROOT / raw.replace(".augment/", ".agent-src.uncompressed/", 1))
84
+ candidates.append(ROOT / raw.replace(".augment/", ".agent-src.uncondensed/", 1))
85
85
  candidates.append(ROOT / raw.replace(".augment/", ".agent-src/", 1))
86
86
  if raw.startswith(".agent-src/"):
87
- candidates.append(ROOT / raw.replace(".agent-src/", ".agent-src.uncompressed/", 1))
87
+ candidates.append(ROOT / raw.replace(".agent-src/", ".agent-src.uncondensed/", 1))
88
88
  return any(c.exists() for c in candidates)
89
89
 
90
90
 
@@ -2,13 +2,13 @@
2
2
  """Lint archive notes under agents/evidence/archived-skills/.
3
3
 
4
4
  Enforces the contract from
5
- .agent-src.uncompressed/templates/skill-archive-note.md:
5
+ .agent-src.uncondensed/templates/skill-archive-note.md:
6
6
 
7
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
11
- under .agent-src.uncompressed/skills/.
11
+ under .agent-src.uncondensed/skills/.
12
12
  4. No archived slug still has a live SKILL.md (no zombies).
13
13
  5. No live SKILL.md cites an archived slug as a router target in
14
14
  its frontmatter `replaced_by:` field.
@@ -34,7 +34,7 @@ REPO = Path(__file__).resolve().parents[1]
34
34
  ARCHIVE_DIR = REPO / "agents" / "evidence" / "archived-skills"
35
35
 
36
36
  # Live skill directories live under every artefact root post-monorepo
37
- # Phase 4 (legacy + packages/*/.agent-src.uncompressed/skills/).
37
+ # Phase 4 (legacy + packages/*/.agent-src.uncondensed/skills/).
38
38
  sys.path.insert(0, str(Path(__file__).resolve().parent))
39
39
  from _lib.agent_src import artefact_roots # noqa: E402
40
40
 
@@ -2,7 +2,7 @@
2
2
  """Lint Phase-4 discovery frontmatter on every artefact.
3
3
 
4
4
  Walks the same trees as `scripts/build_discovery_manifest.py` (skills,
5
- rules, commands, templates under `.agent-src.uncompressed/`) and asserts
5
+ rules, commands, templates under `.agent-src.uncondensed/`) and asserts
6
6
  per-file that the five ADR-013 keys (`workspaces`, `packs`, `lifecycle`,
7
7
  `trust`, `install`) are present and well-formed:
8
8
 
@@ -31,7 +31,7 @@ except ImportError: # pragma: no cover
31
31
  sys.exit(2)
32
32
 
33
33
  ROOT = Path(__file__).resolve().parents[1]
34
- SRC = ROOT / ".agent-src.uncompressed"
34
+ SRC = ROOT / ".agent-src.uncondensed"
35
35
  VOCAB_DIR = ROOT / "config" / "discovery"
36
36
 
37
37
  sys.path.insert(0, str(Path(__file__).resolve().parent))
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env python3
2
+ """Validate the A/B bench corpora + `docs/benchmark.md` shape.
3
+
4
+ Phase 5 Step 3 of `agents/roadmaps/road-to-package-impact-benchmark.md`.
5
+
6
+ Checks:
7
+
8
+ - `internal/bench/corpora/ab-tracka.yaml`
9
+ - version: 1
10
+ - corpus_id: ab-tracka
11
+ - prompts: ≥ 30 entries
12
+ - per prompt: id, category ∈ {rule, skill}, expected_target, expected_keywords, prompt
13
+
14
+ - `internal/bench/corpora/ab-trackb.yaml`
15
+ - version: 1
16
+ - corpus_id: ab-trackb
17
+ - tasks: ≥ 10 entries
18
+ - per task: id, category ∈ {bugfix, feature, refactor, uiaudit, testadd},
19
+ prompt, seed_files, success_criteria
20
+
21
+ - `docs/benchmark.md` (if it exists)
22
+ - carries every section in REQUIRED_SECTIONS
23
+
24
+ Exit 0 on success, 1 on the first violation (with file + line where possible).
25
+ """
26
+ from __future__ import annotations
27
+
28
+ import argparse
29
+ import sys
30
+ from pathlib import Path
31
+
32
+ REPO_ROOT = Path(__file__).resolve().parent.parent
33
+ TRACK_A_PATH = REPO_ROOT / "internal" / "bench" / "corpora" / "ab-tracka.yaml"
34
+ TRACK_B_PATH = REPO_ROOT / "internal" / "bench" / "corpora" / "ab-trackb.yaml"
35
+ DOCS_PATH = REPO_ROOT / "docs" / "benchmark.md"
36
+
37
+ REQUIRED_SECTIONS = (
38
+ "## Headline",
39
+ "## Track A",
40
+ "## Track B",
41
+ "## Methodology",
42
+ "## History",
43
+ )
44
+
45
+ TRACK_A_CATEGORIES = {"rule", "skill"}
46
+ TRACK_B_CATEGORIES = {"bugfix", "feature", "refactor", "uiaudit", "testadd"}
47
+
48
+ try:
49
+ import yaml
50
+ except ImportError:
51
+ sys.stderr.write("lint_bench_ab: PyYAML required (pip install pyyaml)\n")
52
+ raise SystemExit(2)
53
+
54
+
55
+ class LintError(Exception):
56
+ pass
57
+
58
+
59
+ def _fail(path: Path, msg: str) -> None:
60
+ sys.stderr.write(f"lint_bench_ab: {path.relative_to(REPO_ROOT)}: {msg}\n")
61
+ raise LintError(msg)
62
+
63
+
64
+ def lint_track_a() -> None:
65
+ if not TRACK_A_PATH.exists():
66
+ _fail(TRACK_A_PATH, "missing corpus file")
67
+ data = yaml.safe_load(TRACK_A_PATH.read_text())
68
+ if data.get("version") != 1:
69
+ _fail(TRACK_A_PATH, f"version must be 1 (got {data.get('version')!r})")
70
+ if data.get("corpus_id") != "ab-tracka":
71
+ _fail(TRACK_A_PATH, f"corpus_id must be 'ab-tracka' (got {data.get('corpus_id')!r})")
72
+ prompts = data.get("prompts") or []
73
+ if not isinstance(prompts, list):
74
+ _fail(TRACK_A_PATH, "prompts must be a list")
75
+ if len(prompts) < 30:
76
+ _fail(TRACK_A_PATH, f"prompts must have ≥ 30 entries (found {len(prompts)})")
77
+ ids = set()
78
+ for i, prompt in enumerate(prompts):
79
+ loc = f"prompts[{i}]"
80
+ if not isinstance(prompt, dict):
81
+ _fail(TRACK_A_PATH, f"{loc} must be a mapping")
82
+ pid = prompt.get("id")
83
+ if not isinstance(pid, str) or not pid:
84
+ _fail(TRACK_A_PATH, f"{loc}.id must be a non-empty string")
85
+ if pid in ids:
86
+ _fail(TRACK_A_PATH, f"{loc}.id duplicates an earlier id ({pid!r})")
87
+ ids.add(pid)
88
+ cat = prompt.get("category")
89
+ if cat not in TRACK_A_CATEGORIES:
90
+ _fail(TRACK_A_PATH, f"{loc}.category must be in {TRACK_A_CATEGORIES} (got {cat!r})")
91
+ target = prompt.get("expected_target")
92
+ if not isinstance(target, str) or not target:
93
+ _fail(TRACK_A_PATH, f"{loc}.expected_target must be a non-empty string")
94
+ keywords = prompt.get("expected_keywords")
95
+ if keywords is not None and not isinstance(keywords, list):
96
+ _fail(TRACK_A_PATH, f"{loc}.expected_keywords must be a list when present")
97
+ if not isinstance(prompt.get("prompt"), str) or not prompt["prompt"]:
98
+ _fail(TRACK_A_PATH, f"{loc}.prompt must be a non-empty string")
99
+
100
+
101
+ def lint_track_b() -> None:
102
+ if not TRACK_B_PATH.exists():
103
+ _fail(TRACK_B_PATH, "missing corpus file")
104
+ data = yaml.safe_load(TRACK_B_PATH.read_text())
105
+ if data.get("version") != 1:
106
+ _fail(TRACK_B_PATH, f"version must be 1 (got {data.get('version')!r})")
107
+ if data.get("corpus_id") != "ab-trackb":
108
+ _fail(TRACK_B_PATH, f"corpus_id must be 'ab-trackb' (got {data.get('corpus_id')!r})")
109
+ tasks = data.get("tasks") or []
110
+ if not isinstance(tasks, list):
111
+ _fail(TRACK_B_PATH, "tasks must be a list")
112
+ if len(tasks) < 10:
113
+ _fail(TRACK_B_PATH, f"tasks must have ≥ 10 entries (found {len(tasks)})")
114
+ ids = set()
115
+ for i, task in enumerate(tasks):
116
+ loc = f"tasks[{i}]"
117
+ if not isinstance(task, dict):
118
+ _fail(TRACK_B_PATH, f"{loc} must be a mapping")
119
+ tid = task.get("id")
120
+ if not isinstance(tid, str) or not tid:
121
+ _fail(TRACK_B_PATH, f"{loc}.id must be a non-empty string")
122
+ if tid in ids:
123
+ _fail(TRACK_B_PATH, f"{loc}.id duplicates an earlier id ({tid!r})")
124
+ ids.add(tid)
125
+ cat = task.get("category")
126
+ if cat not in TRACK_B_CATEGORIES:
127
+ _fail(TRACK_B_PATH, f"{loc}.category must be in {TRACK_B_CATEGORIES} (got {cat!r})")
128
+ if not isinstance(task.get("prompt"), str) or not task["prompt"]:
129
+ _fail(TRACK_B_PATH, f"{loc}.prompt must be a non-empty string")
130
+ seeds = task.get("seed_files")
131
+ if not isinstance(seeds, list):
132
+ _fail(TRACK_B_PATH, f"{loc}.seed_files must be a list")
133
+ crit = task.get("success_criteria")
134
+ if not isinstance(crit, dict) or not crit:
135
+ _fail(TRACK_B_PATH, f"{loc}.success_criteria must be a non-empty mapping")
136
+
137
+
138
+ def lint_doc(quiet: bool) -> None:
139
+ if not DOCS_PATH.exists():
140
+ if not quiet:
141
+ sys.stdout.write(
142
+ f"lint_bench_ab: {DOCS_PATH.relative_to(REPO_ROOT)} not yet rendered "
143
+ "(run task bench:ab:diff) — skipping doc shape check\n"
144
+ )
145
+ return
146
+ body = DOCS_PATH.read_text()
147
+ missing = [section for section in REQUIRED_SECTIONS if section not in body]
148
+ if missing:
149
+ _fail(DOCS_PATH, f"missing required sections: {missing}")
150
+
151
+
152
+ def parse_args(argv: list[str]) -> argparse.Namespace:
153
+ parser = argparse.ArgumentParser(description="Validate A/B bench corpora + docs/benchmark.md.")
154
+ parser.add_argument("--quiet", action="store_true", help="Only emit on error.")
155
+ return parser.parse_args(argv)
156
+
157
+
158
+ def main(argv: list[str] | None = None) -> int:
159
+ args = parse_args(argv if argv is not None else sys.argv[1:])
160
+ try:
161
+ lint_track_a()
162
+ lint_track_b()
163
+ lint_doc(args.quiet)
164
+ except LintError:
165
+ return 1
166
+ if not args.quiet:
167
+ sys.stdout.write("lint_bench_ab: OK\n")
168
+ return 0
169
+
170
+
171
+ if __name__ == "__main__":
172
+ raise SystemExit(main())
@@ -40,7 +40,7 @@ REPO = Path(__file__).resolve().parents[1]
40
40
  CORPUS_DIR = REPO / "tests" / "eval"
41
41
 
42
42
  # Live skill directories live under every artefact root post-monorepo
43
- # Phase 4 (legacy + packages/*/.agent-src.uncompressed/skills/).
43
+ # Phase 4 (legacy + packages/*/.agent-src.uncondensed/skills/).
44
44
  sys.path.insert(0, str(Path(__file__).resolve().parent))
45
45
  from _lib.agent_src import artefact_roots # noqa: E402
46
46
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """Lint slash-command frontmatter for the `tier:` key.
3
3
 
4
- Hard-fails CI if any command under .agent-src.uncompressed/commands/
4
+ Hard-fails CI if any command under .agent-src.uncondensed/commands/
5
5
  lacks a `tier:` declaration or uses an unknown tier value. The valid
6
6
  tier set is locked by docs/contracts/command-surface-tiers.md.
7
7
 
@@ -27,7 +27,7 @@ from _lib.agent_src import artefact_roots # noqa: E402
27
27
  COMMANDS_DIRS = [root / "commands" for root in artefact_roots() if (root / "commands").is_dir()]
28
28
  # Consumer-facing projection — must also carry tier so .augment/commands/
29
29
  # (which symlinks to .agent-src/commands/) renders the tier filter.
30
- COMMANDS_DIR_COMPRESSED = REPO / ".agent-src" / "commands"
30
+ COMMANDS_DIR_CONDENSED = REPO / ".agent-src" / "commands"
31
31
 
32
32
  VALID_TIERS = frozenset({"0", "1", "2"})
33
33
 
@@ -116,11 +116,11 @@ def main() -> int:
116
116
  rc = 0
117
117
  for commands_dir in COMMANDS_DIRS:
118
118
  rc |= lint(commands_dir, quiet=QUIET)
119
- # The compressed projection is the consumer-facing tree (via the
119
+ # The condensed projection is the consumer-facing tree (via the
120
120
  # .augment/commands → .agent-src/commands symlink). It must also
121
121
  # carry tier so the surface stays uniform.
122
- if COMMANDS_DIR_COMPRESSED.is_dir():
123
- rc |= lint(COMMANDS_DIR_COMPRESSED, quiet=QUIET)
122
+ if COMMANDS_DIR_CONDENSED.is_dir():
123
+ rc |= lint(COMMANDS_DIR_CONDENSED, quiet=QUIET)
124
124
  return rc
125
125
 
126
126
 
@@ -28,7 +28,7 @@ QUIET = "--quiet" in sys.argv
28
28
 
29
29
  REPO_ROOT = Path(__file__).resolve().parent.parent
30
30
  SKILL_GLOBS = (
31
- ".agent-src.uncompressed/skills/**/SKILL.md",
31
+ ".agent-src.uncondensed/skills/**/SKILL.md",
32
32
  ".agent-src/skills/**/SKILL.md",
33
33
  )
34
34
  VALID_SLOTS = (