@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
@@ -0,0 +1,219 @@
1
+ #!/usr/bin/env python3
2
+ """Pull the four public adoption signals into a single dated JSONL row.
3
+
4
+ Phase D Step 2 of ``road-to-adoption-proof-and-ci-green.md``.
5
+ Signals (per ``docs/contracts/adoption-signal-floor.md``):
6
+
7
+ 1. npm install count — last 7 days, full lifetime.
8
+ 2. npm version distribution — latest published version.
9
+ 3. GitHub stars / forks — current count.
10
+ 4. Topic-search rank — best-rank position for the two
11
+ project-scoped topics (`agent-skills`, `cinematic-ai-video`).
12
+
13
+ Output: one JSONL row appended to
14
+ ``agents/runtime/metrics/adoption-snapshots.jsonl``. Each row carries
15
+ an ISO-8601 ``snapshot_at`` timestamp + the four signal payloads.
16
+
17
+ CLI:
18
+
19
+ scripts/adoption_snapshot.py [--out <path>] [--no-network]
20
+
21
+ --no-network Skip the four HTTP calls; emit a row with
22
+ ``error: "skipped"`` on each signal. Used by
23
+ the pytest path so tests never hit the wire.
24
+ --out Override the output JSONL path (default:
25
+ ``agents/runtime/metrics/adoption-snapshots.jsonl``).
26
+
27
+ Exit codes:
28
+
29
+ 0 — row appended successfully.
30
+ 1 — IO failure writing the JSONL.
31
+ 2 — every signal failed (network outage; the row is appended but
32
+ annotated, so trend reports can spot the outage).
33
+ """
34
+ from __future__ import annotations
35
+
36
+ import argparse
37
+ import datetime as dt
38
+ import json
39
+ import os
40
+ import sys
41
+ from pathlib import Path
42
+ from typing import Any
43
+ from urllib.error import URLError, HTTPError
44
+ from urllib.request import Request, urlopen
45
+
46
+
47
+ REPO_ROOT = Path(__file__).resolve().parent.parent
48
+ DEFAULT_OUT = REPO_ROOT / "agents" / "runtime" / "metrics" / "adoption-snapshots.jsonl"
49
+
50
+ NPM_PACKAGE = "@event4u/agent-config"
51
+ NPM_DOWNLOADS_URL = f"https://api.npmjs.org/downloads/range/last-week/{NPM_PACKAGE}"
52
+ NPM_REGISTRY_URL = f"https://registry.npmjs.org/{NPM_PACKAGE.replace('/', '%2F')}"
53
+ GH_REPO = "event4u-app/agent-config"
54
+ GH_REPO_URL = f"https://api.github.com/repos/{GH_REPO}"
55
+ GH_TOPICS = ("agent-skills", "cinematic-ai-video")
56
+ GH_SEARCH_URL_TEMPLATE = "https://api.github.com/search/repositories?q=topic:{topic}&sort=stars&order=desc&per_page=100"
57
+
58
+ TIMEOUT_S = 10
59
+
60
+
61
+ def _utc_now_iso() -> str:
62
+ return dt.datetime.now(dt.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
63
+
64
+
65
+ def _http_get_json(url: str, headers: dict[str, str] | None = None) -> dict[str, Any]:
66
+ req = Request(url, headers=headers or {})
67
+ with urlopen(req, timeout=TIMEOUT_S) as resp:
68
+ body = resp.read().decode("utf-8")
69
+ return json.loads(body)
70
+
71
+
72
+ def fetch_npm_downloads() -> dict[str, Any]:
73
+ try:
74
+ data = _http_get_json(NPM_DOWNLOADS_URL)
75
+ downloads = data.get("downloads", [])
76
+ total_7d = sum(d.get("downloads", 0) for d in downloads if isinstance(d, dict))
77
+ return {"package": NPM_PACKAGE, "last_7_days": total_7d, "source": "npm"}
78
+ except (URLError, HTTPError, ValueError) as exc:
79
+ return {"package": NPM_PACKAGE, "error": str(exc)[:120], "source": "npm"}
80
+
81
+
82
+ def fetch_npm_version() -> dict[str, Any]:
83
+ try:
84
+ data = _http_get_json(NPM_REGISTRY_URL)
85
+ latest = data.get("dist-tags", {}).get("latest", "")
86
+ versions = list(data.get("versions", {}).keys())
87
+ return {
88
+ "latest": latest,
89
+ "version_count": len(versions),
90
+ "source": "npm-registry",
91
+ }
92
+ except (URLError, HTTPError, ValueError) as exc:
93
+ return {"error": str(exc)[:120], "source": "npm-registry"}
94
+
95
+
96
+ def fetch_github_stars() -> dict[str, Any]:
97
+ try:
98
+ headers = {"Accept": "application/vnd.github+json"}
99
+ token = os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN")
100
+ if token:
101
+ headers["Authorization"] = f"Bearer {token}"
102
+ data = _http_get_json(GH_REPO_URL, headers=headers)
103
+ return {
104
+ "repo": GH_REPO,
105
+ "stars": data.get("stargazers_count", 0),
106
+ "forks": data.get("forks_count", 0),
107
+ "watchers": data.get("watchers_count", 0),
108
+ "source": "github-repo",
109
+ }
110
+ except (URLError, HTTPError, ValueError) as exc:
111
+ return {"repo": GH_REPO, "error": str(exc)[:120], "source": "github-repo"}
112
+
113
+
114
+ def fetch_topic_rank() -> dict[str, Any]:
115
+ out: dict[str, Any] = {"source": "github-search"}
116
+ for topic in GH_TOPICS:
117
+ try:
118
+ headers = {"Accept": "application/vnd.github+json"}
119
+ token = os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN")
120
+ if token:
121
+ headers["Authorization"] = f"Bearer {token}"
122
+ data = _http_get_json(GH_SEARCH_URL_TEMPLATE.format(topic=topic), headers=headers)
123
+ items = data.get("items", [])
124
+ rank = next(
125
+ (i + 1 for i, item in enumerate(items) if item.get("full_name") == GH_REPO),
126
+ None,
127
+ )
128
+ out[topic] = {
129
+ "rank": rank,
130
+ "total_results": data.get("total_count", 0),
131
+ }
132
+ except (URLError, HTTPError, ValueError) as exc:
133
+ out[topic] = {"error": str(exc)[:120]}
134
+ return out
135
+
136
+
137
+ def collect_signals(skip_network: bool) -> dict[str, Any]:
138
+ if skip_network:
139
+ skipped = {"error": "skipped", "source": "skipped"}
140
+ return {
141
+ "npm_downloads": skipped,
142
+ "npm_version": skipped,
143
+ "github_stars": skipped,
144
+ "topic_rank": skipped,
145
+ }
146
+ return {
147
+ "npm_downloads": fetch_npm_downloads(),
148
+ "npm_version": fetch_npm_version(),
149
+ "github_stars": fetch_github_stars(),
150
+ "topic_rank": fetch_topic_rank(),
151
+ }
152
+
153
+
154
+ def build_row(signals: dict[str, Any]) -> dict[str, Any]:
155
+ return {
156
+ "snapshot_at": _utc_now_iso(),
157
+ "schema": "adoption-snapshot/v0",
158
+ "signals": signals,
159
+ }
160
+
161
+
162
+ def append_row(out_path: Path, row: dict[str, Any]) -> None:
163
+ out_path.parent.mkdir(parents=True, exist_ok=True)
164
+ with out_path.open("a", encoding="utf-8") as fh:
165
+ fh.write(json.dumps(row) + "\n")
166
+
167
+
168
+ def all_signals_failed(signals: dict[str, Any]) -> bool:
169
+ """True when every signal (or every topic in topic_rank) errored.
170
+
171
+ A signal block carries `error` when its HTTP call failed. For
172
+ `topic_rank`, the outer dict does NOT carry `error`; instead each
173
+ nested per-topic entry does. The outage predicate counts the
174
+ composite as a failure when every nested topic errored.
175
+ """
176
+ for name, value in signals.items():
177
+ if not isinstance(value, dict):
178
+ return False # Unknown shape — treat as success to be conservative.
179
+ if name == "topic_rank":
180
+ # Outage when every nested topic errored.
181
+ nested = [v for k, v in value.items() if k != "source" and isinstance(v, dict)]
182
+ if not nested:
183
+ return False
184
+ if any("error" not in v for v in nested):
185
+ return False
186
+ else:
187
+ if "error" not in value:
188
+ return False
189
+ return True
190
+
191
+
192
+ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
193
+ p = argparse.ArgumentParser(prog="adoption_snapshot")
194
+ p.add_argument("--out", type=Path, default=DEFAULT_OUT, help="JSONL output path.")
195
+ p.add_argument(
196
+ "--no-network",
197
+ action="store_true",
198
+ help="Skip the four HTTP calls (used by the pytest path).",
199
+ )
200
+ return p.parse_args(argv)
201
+
202
+
203
+ def main(argv: list[str] | None = None) -> int:
204
+ args = parse_args(argv)
205
+ signals = collect_signals(skip_network=args.no_network)
206
+ row = build_row(signals)
207
+ try:
208
+ append_row(args.out, row)
209
+ except OSError as exc:
210
+ print(f"error: failed to append snapshot: {exc}", file=sys.stderr)
211
+ return 1
212
+ print(f"appended snapshot @ {row['snapshot_at']} → {args.out}")
213
+ if not args.no_network and all_signals_failed(signals):
214
+ return 2
215
+ return 0
216
+
217
+
218
+ if __name__ == "__main__":
219
+ sys.exit(main())
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env python3
2
+ """One-screen adoption dashboard for the maintainer's weekly review.
3
+
4
+ Phase C Step 6 of ``road-to-adoption-proof-and-ci-green.md``. Prints
5
+ three things in one short block:
6
+
7
+ 1. Registry-submission status — counts per status from
8
+ ``docs/distribution/registry-submissions.md``.
9
+ 2. Recruit-session report count — files matching
10
+ ``agents/recruit-sessions/[0-9]*.md`` (excludes template / runbook /
11
+ findings).
12
+ 3. Latest required-check colour on ``main`` — shells out to
13
+ ``scripts/ci_status.py`` (zero-cost; per-shape required set).
14
+
15
+ CLI:
16
+
17
+ scripts/adoption_status.py [--json] [--branch main]
18
+
19
+ Exit codes:
20
+
21
+ 0 — printed successfully (status itself does not gate the exit).
22
+ 1 — IO error reading the registry-submissions sheet.
23
+
24
+ Anchored to:
25
+
26
+ - ``docs/distribution/registry-submissions.md`` § Tracking rows.
27
+ - ``agents/recruit-sessions/_runbook.md`` § Post-session.
28
+ - ``docs/contracts/ci-green-floor.md`` § Blocking set.
29
+ """
30
+ from __future__ import annotations
31
+
32
+ import argparse
33
+ import json
34
+ import re
35
+ import shutil
36
+ import subprocess
37
+ import sys
38
+ from pathlib import Path
39
+ from typing import Iterable
40
+
41
+
42
+ REPO_ROOT = Path(__file__).resolve().parent.parent
43
+ REGISTRY_DOC = REPO_ROOT / "docs" / "distribution" / "registry-submissions.md"
44
+ RECRUIT_DIR = REPO_ROOT / "agents" / "recruit-sessions"
45
+
46
+ STATUS_VALUES = ("pending", "submitted", "accepted", "rejected", "stalled")
47
+
48
+
49
+ def parse_registry_statuses(text: str) -> dict[str, int]:
50
+ """Parse the `Tracking rows` table; return counts per status value."""
51
+ counts = {s: 0 for s in STATUS_VALUES}
52
+ in_table = False
53
+ for line in text.splitlines():
54
+ if line.startswith("## Tracking rows"):
55
+ in_table = True
56
+ continue
57
+ if in_table and line.startswith("## "):
58
+ break
59
+ if not in_table:
60
+ continue
61
+ if not line.startswith("|"):
62
+ continue
63
+ cells = [c.strip() for c in line.split("|")[1:-1]]
64
+ if len(cells) < 4:
65
+ continue
66
+ # Header / separator rows have the literal "Registry" or "---" in cell 1.
67
+ if cells[0] in ("#", "---") or cells[1] in ("Registry", "---"):
68
+ continue
69
+ status_cell = cells[3].strip("`")
70
+ if status_cell in counts:
71
+ counts[status_cell] += 1
72
+ return counts
73
+
74
+
75
+ def count_recruit_reports(reports_dir: Path) -> int:
76
+ """Count files matching `<NN>-<role>.md` under recruit-sessions/."""
77
+ if not reports_dir.exists():
78
+ return 0
79
+ pattern = re.compile(r"^\d{2}-[a-z][a-z0-9-]*\.md$")
80
+ return sum(1 for p in reports_dir.iterdir() if p.is_file() and pattern.match(p.name))
81
+
82
+
83
+ def ci_status_color(branch: str) -> tuple[str, str]:
84
+ """Shell out to `scripts/ci_status.py --json` to find the required-set color."""
85
+ script = REPO_ROOT / "scripts" / "ci_status.py"
86
+ if not script.exists():
87
+ return ("unknown", "ci_status.py not present — Phase A Step 6 not landed")
88
+ if shutil.which("gh") is None:
89
+ return ("unknown", "gh CLI not on PATH — cannot probe required-check set")
90
+ try:
91
+ proc = subprocess.run(
92
+ ["python3", str(script), "--branch", branch, "--json", "--no-phantom-resolve"],
93
+ capture_output=True,
94
+ text=True,
95
+ timeout=15,
96
+ )
97
+ except subprocess.TimeoutExpired:
98
+ return ("unknown", f"ci_status.py timed out probing branch {branch}")
99
+ if proc.returncode not in (0, 1):
100
+ return ("unknown", f"ci_status.py exit={proc.returncode}: {proc.stderr.strip()[:80]}")
101
+ try:
102
+ data = json.loads(proc.stdout or "{}")
103
+ except json.JSONDecodeError:
104
+ return ("unknown", "ci_status.py output not parseable as JSON")
105
+ if data.get("red"):
106
+ return ("red", f"{len(data['red'])} required check(s) red")
107
+ if data.get("missing"):
108
+ return ("amber", f"{len(data['missing'])} check(s) missing on {branch}")
109
+ return ("green", f"{len(data.get('green', []))} required check(s) green")
110
+
111
+
112
+ def render_text(registry_counts: dict[str, int], reports: int, ci: tuple[str, str], branch: str) -> str:
113
+ color_emoji = {"green": "🟢", "amber": "🟡", "red": "🔴", "unknown": "⚪"}
114
+ lines = []
115
+ lines.append("Adoption status (one-screen)")
116
+ lines.append("============================")
117
+ lines.append("")
118
+ lines.append("Registry submissions:")
119
+ for status in STATUS_VALUES:
120
+ lines.append(f" {status:10} {registry_counts[status]}")
121
+ lines.append("")
122
+ lines.append(f"Recruit-session reports filed: {reports}")
123
+ lines.append("")
124
+ lines.append(f"Required-check status on {branch}: {color_emoji[ci[0]]} {ci[0]} — {ci[1]}")
125
+ return "\n".join(lines)
126
+
127
+
128
+ def render_json(registry_counts: dict[str, int], reports: int, ci: tuple[str, str], branch: str) -> str:
129
+ return json.dumps(
130
+ {
131
+ "registries": registry_counts,
132
+ "recruit_reports": reports,
133
+ "ci": {"branch": branch, "color": ci[0], "summary": ci[1]},
134
+ },
135
+ indent=2,
136
+ )
137
+
138
+
139
+ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
140
+ p = argparse.ArgumentParser(prog="adoption_status")
141
+ p.add_argument("--json", action="store_true", help="Emit JSON instead of text.")
142
+ p.add_argument("--branch", default="main", help="Branch to probe for CI color (default: main).")
143
+ return p.parse_args(argv)
144
+
145
+
146
+ def main(argv: list[str] | None = None) -> int:
147
+ args = parse_args(argv)
148
+
149
+ try:
150
+ registry_text = REGISTRY_DOC.read_text(encoding="utf-8")
151
+ except OSError as exc:
152
+ print(f"error: failed to read {REGISTRY_DOC}: {exc}", file=sys.stderr)
153
+ return 1
154
+ registry_counts = parse_registry_statuses(registry_text)
155
+ reports = count_recruit_reports(RECRUIT_DIR)
156
+ ci = ci_status_color(args.branch)
157
+
158
+ if args.json:
159
+ print(render_json(registry_counts, reports, ci, args.branch))
160
+ else:
161
+ print(render_text(registry_counts, reports, ci, args.branch))
162
+ return 0
163
+
164
+
165
+ if __name__ == "__main__":
166
+ sys.exit(main())
@@ -4,7 +4,7 @@
4
4
  # stdout. Pure POSIX-compatible bash (no associative arrays, runs
5
5
  # on macOS bash 3.2); jq required for JSON safety.
6
6
  #
7
- # Schema: .agent-src.uncompressed/skills/scene-expander/scene-blueprint.schema.yaml
7
+ # Schema: .agent-src.uncondensed/skills/scene-expander/scene-blueprint.schema.yaml
8
8
  # Contract: scripts/ai-video/lib/adapter-contract.md
9
9
  #
10
10
  # Usage:
@@ -13,7 +13,7 @@ This module owns:
13
13
  - `plan_advisor_swap()` — walks the enabled advisors, reads their
14
14
  persona files, and returns the per-provider plan map consumed by
15
15
  `orchestrator.consult()` / `estimate()` and by the CLI.
16
- - `resolve_persona_text()` — reads a persona file with compressed-tree
16
+ - `resolve_persona_text()` — reads a persona file with condensed-tree
17
17
  preference and frontmatter strip.
18
18
 
19
19
  Cross-validation against the members block already ran at config load
@@ -75,14 +75,14 @@ def resolve_persona_text(
75
75
  ) -> tuple[str, dict]:
76
76
  """Read a persona file, returning ``(body, frontmatter)``.
77
77
 
78
- Compressed tree (``.agent-src/``) wins so production runs match the
79
- same projection the rest of the package consumes. Uncompressed tree
80
- (``.agent-src.uncompressed/``) is the fallback for in-repo
78
+ Condensed tree (``.agent-src/``) wins so production runs match the
79
+ same projection the rest of the package consumes. Uncondensed tree
80
+ (``.agent-src.uncondensed/``) is the fallback for in-repo
81
81
  development before ``task sync`` has projected the file.
82
82
  """
83
83
  candidates = [
84
84
  repo_root / ".agent-src" / persona_path,
85
- repo_root / ".agent-src.uncompressed" / persona_path,
85
+ repo_root / ".agent-src.uncondensed" / persona_path,
86
86
  ]
87
87
  for candidate in candidates:
88
88
  if candidate.exists():
@@ -8,7 +8,7 @@ through the hardened
8
8
  :func:`scripts.ai_council.low_impact_corpus.parse_corpus_strict`
9
9
  parser and writes a YAML lockfile that becomes the **runtime**
10
10
  source-of-truth. The pattern mirrors `.agent-src/` vs
11
- `.agent-src.uncompressed/`: human edits Markdown, `task consistency`
11
+ `.agent-src.uncondensed/`: human edits Markdown, `task consistency`
12
12
  enforces lockfile parity via the same ``git diff --quiet`` gate.
13
13
 
14
14
  YAML schema (`schema_version: 1`)::
@@ -40,8 +40,8 @@ REPO_ROOT = Path(__file__).resolve().parents[4]
40
40
  ARTEFACTS = [
41
41
  REPO_ROOT / "docs/contracts/load-context-budget-model.md",
42
42
  REPO_ROOT / "agents/settings/contexts/budget-v2-matrix.md",
43
- REPO_ROOT / ".agent-src.uncompressed/rules/direct-answers.md",
44
- REPO_ROOT / ".agent-src.uncompressed/rules/no-cheap-questions.md",
43
+ REPO_ROOT / ".agent-src.uncondensed/rules/direct-answers.md",
44
+ REPO_ROOT / ".agent-src.uncondensed/rules/no-cheap-questions.md",
45
45
  ]
46
46
 
47
47
  ORIGINAL_ASK = (
@@ -60,7 +60,7 @@ REVIEW_PROMPT = """\
60
60
  Phase 4 selected two 4d-trim paths from a fixed option set documented
61
61
  in `budget-v2-matrix.md`. The matrix evaluated 4a (demote→auto), 4b
62
62
  (merge), 4c (shared-context, locked at 3a Model (b) literal — no-op),
63
- and 4d (compress prose) for every touchable always-rule. Safety-floor
63
+ and 4d (condense prose) for every touchable always-rule. Safety-floor
64
64
  rules (scope-control, non-destructive-by-default, commit-policy,
65
65
  agent-authority) were untouchable. Outcome-untested rules were
66
66
  restricted to 4d only per the Phase 4.0 inputs gate.
@@ -93,8 +93,8 @@ follow-ups Phase 1+2 closed) produced converging findings.
93
93
  too heavy — auditable but not consumable for normal feature work,
94
94
  needs complexity standard; (3) always-budget headroom 1,552 chars
95
95
  (96.8% utilization) — slimming hebel exhausted, new strategy needed
96
- (demote / merge / hard-compress / shared-context amortization);
97
- (4) slow-rollout protocol compressed under autonomy mandate;
96
+ (demote / merge / hard-condense / shared-context amortization);
97
+ (4) slow-rollout protocol condensed under autonomy mandate;
98
98
  (5) one-off scripts accumulating in scripts/ai_council/.
99
99
  - P0 before merge: PR description rewrite, one-off-script decision,
100
100
  honest budget block, Phase 2A as finding.
@@ -7,7 +7,7 @@ from pathlib import Path
7
7
  # Scripts that accept --quiet (verified: 20 total = 3 pre-existing + 17 patched).
8
8
  QUIET_AWARE = {
9
9
  "check_always_budget", "check_one_off_location", "check_safety_floor_untouched",
10
- "check_augmentignore", "check_command_count_messaging", "check_compressed_paths",
10
+ "check_augmentignore", "check_command_count_messaging", "check_condensed_paths",
11
11
  "check_council_layout", "check_council_references", "check_iron_law_prominence",
12
12
  "check_md_language", "check_memory_proposal", "check_public_catalog_links",
13
13
  "check_reply_consistency", "check_roadmap_trackable",
@@ -2,7 +2,7 @@
2
2
  # Phase 10.7 baseline — runs only verbosity-aware patched-script tasks.
3
3
  # Skips broken-on-dirty-tree tasks (consistency, check-index, validate-schema).
4
4
  # This subset is what actually demonstrates the --quiet effect.
5
- TASKS="check-compressed-paths check-refs check-portability lint-roadmap-complexity check-public-catalog-links check-command-count check-cluster-patterns lint-rule-interactions lint-load-context check-context-paths check-no-roadmap-refs check-council-references lint-one-off-age check-reply-consistency check-iron-law-prominence check-always-budget check-one-off-location lint-rule-budget lint-skills lint-rule-tiers lint-handoffs lint-marketplace lint-examples"
5
+ TASKS="check-condensed-paths check-refs check-portability lint-roadmap-complexity check-public-catalog-links check-command-count check-cluster-patterns lint-rule-interactions lint-load-context check-context-paths check-no-roadmap-refs check-council-references lint-one-off-age check-reply-consistency check-iron-law-prominence check-always-budget check-one-off-location lint-rule-budget lint-skills lint-rule-tiers lint-handoffs lint-marketplace lint-examples"
6
6
 
7
7
  run() {
8
8
  local label=$1
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Phase 10.7 baseline measurement: post-consistency task ci subset.
3
- TASKS="counts-check check-index check-router check-compression check-compressed-paths check-refs check-token-optimizer-freshness check-portability check-examples-shape lint-roadmap-complexity check-public-links check-public-catalog-links check-command-count lint-no-new-atomic-commands check-cluster-patterns lint-rule-interactions lint-load-context check-context-paths check-no-roadmap-refs check-council-references lint-one-off-age check-ownership-matrix check-reply-consistency check-iron-law-prominence check-always-budget check-one-off-location validate-schema lint-rule-budget lint-skills lint-rule-tiers lint-handoffs lint-hook-manifest lint-showcase-sessions lint-marketplace"
3
+ TASKS="counts-check check-index check-router check-condensation check-condensed-paths check-refs check-token-optimizer-freshness check-portability check-examples-shape lint-roadmap-complexity check-public-links check-public-catalog-links check-command-count lint-no-new-atomic-commands check-cluster-patterns lint-rule-interactions lint-load-context check-context-paths check-no-roadmap-refs check-council-references lint-one-off-age check-ownership-matrix check-reply-consistency check-iron-law-prominence check-always-budget check-one-off-location validate-schema lint-rule-budget lint-skills lint-rule-tiers lint-handoffs lint-hook-manifest lint-showcase-sessions lint-marketplace"
4
4
 
5
5
  echo "=== MINIMAL ==="
6
6
  AGENT_SCRIPT_VERBOSITY=minimal task $TASKS 2>&1 > /tmp/ci-min.log
@@ -41,8 +41,8 @@ from scripts.ai_council.session import SessionManifest, save as save_session
41
41
 
42
42
  REPO_ROOT = Path(__file__).resolve().parents[2]
43
43
  ARTEFACTS = [
44
- REPO_ROOT / ".agent-src.uncompressed/rules/non-destructive-by-default.md",
45
- REPO_ROOT / ".agent-src.uncompressed/contexts/authority/destructive-mechanics.md",
44
+ REPO_ROOT / ".agent-src.uncondensed/rules/non-destructive-by-default.md",
45
+ REPO_ROOT / ".agent-src.uncondensed/contexts/authority/destructive-mechanics.md",
46
46
  ]
47
47
 
48
48
  ORIGINAL_ASK = (
@@ -192,7 +192,7 @@ def main() -> int:
192
192
 
193
193
  manifest = SessionManifest(
194
194
  mode="files",
195
- artefact=".agent-src.uncompressed/rules/non-destructive-by-default.md",
195
+ artefact=".agent-src.uncondensed/rules/non-destructive-by-default.md",
196
196
  original_ask=ORIGINAL_ASK,
197
197
  members=[f"{r.provider}/{r.model}" for r in final_round],
198
198
  rounds=len(rounds_collected),
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  TASKS=(
3
- check-compressed-paths
3
+ check-condensed-paths
4
4
  check-refs
5
5
  check-portability
6
6
  lint-roadmap-complexity
@@ -16,7 +16,7 @@ from itertools import combinations
16
16
  from pathlib import Path
17
17
 
18
18
  ROOT = Path(__file__).resolve().parent.parent
19
- RULES_DIR = ROOT / ".agent-src.uncompressed/rules"
19
+ RULES_DIR = ROOT / ".agent-src.uncondensed/rules"
20
20
 
21
21
  RULES = [
22
22
  "chat-history-cadence",
@@ -45,12 +45,12 @@ from scripts.ai_council.session import SessionManifest, save as save_session
45
45
  REPO_ROOT = Path(__file__).resolve().parents[2]
46
46
  ARTEFACTS = [
47
47
  REPO_ROOT / "docs/contracts/load-context-budget-model.md",
48
- REPO_ROOT / ".agent-src.uncompressed/rules/language-and-tone.md",
49
- REPO_ROOT / ".agent-src.uncompressed/rules/ask-when-uncertain.md",
50
- REPO_ROOT / ".agent-src.uncompressed/rules/direct-answers.md",
51
- REPO_ROOT / ".agent-src.uncompressed/contexts/communication/rules-always/language-and-tone-mechanics.md",
52
- REPO_ROOT / ".agent-src.uncompressed/contexts/communication/rules-always/ask-when-uncertain-mechanics.md",
53
- REPO_ROOT / ".agent-src.uncompressed/contexts/communication/rules-always/direct-answers-mechanics.md",
48
+ REPO_ROOT / ".agent-src.uncondensed/rules/language-and-tone.md",
49
+ REPO_ROOT / ".agent-src.uncondensed/rules/ask-when-uncertain.md",
50
+ REPO_ROOT / ".agent-src.uncondensed/rules/direct-answers.md",
51
+ REPO_ROOT / ".agent-src.uncondensed/contexts/communication/rules-always/language-and-tone-mechanics.md",
52
+ REPO_ROOT / ".agent-src.uncondensed/contexts/communication/rules-always/ask-when-uncertain-mechanics.md",
53
+ REPO_ROOT / ".agent-src.uncondensed/contexts/communication/rules-always/direct-answers-mechanics.md",
54
54
  ]
55
55
 
56
56
  ORIGINAL_ASK = (
@@ -37,7 +37,7 @@ Rebalancing means restoring intelligence without re-inflating Always-rules.
37
37
 
38
38
  ## Actual numbers from the PR #34 diff
39
39
 
40
- Scope: git diff origin/main...HEAD, path .agent-src.uncompressed/rules/
40
+ Scope: git diff origin/main...HEAD, path .agent-src.uncondensed/rules/
41
41
 
42
42
  - 35 files changed: 202 insertions, 204 deletions => net -2 lines total.
43
43
  - Largest delta: language-and-tone.md 37 ins / 96 del. The 96 lines were
@@ -3,7 +3,7 @@
3
3
 
4
4
  Parses agents/settings/contexts/rule-trigger-matrix.md, emits tmp/tier-classification.md,
5
5
  and inserts a `tier:` frontmatter key into every rule under
6
- .agent-src.uncompressed/rules/. Idempotent — re-runs are a no-op when a rule
6
+ .agent-src.uncondensed/rules/. Idempotent — re-runs are a no-op when a rule
7
7
  already declares the same tier value.
8
8
 
9
9
  Lifecycle: scripts/_one_off/2026-05/. Purge eligible after 2026-08-04 per
@@ -17,8 +17,8 @@ from pathlib import Path
17
17
 
18
18
  REPO = Path(__file__).resolve().parents[3]
19
19
  MATRIX = REPO / "agents" / "contexts" / "rule-trigger-matrix.md"
20
- RULES_DIR = REPO / ".agent-src.uncompressed" / "rules"
21
- COMPRESSED_RULES_DIR = REPO / ".agent-src" / "rules"
20
+ RULES_DIR = REPO / ".agent-src.uncondensed" / "rules"
21
+ CONDENSED_RULES_DIR = REPO / ".agent-src" / "rules"
22
22
  SPREADSHEET = REPO / "tmp" / "tier-classification.md"
23
23
 
24
24
  VALID_TIERS = {"1", "2a", "2b", "3", "safety-floor", "mechanical-already"}
@@ -161,9 +161,9 @@ def main() -> int:
161
161
  for name, (tier, _) in classifications.items():
162
162
  result = apply_tier(RULES_DIR / name, tier)
163
163
  counts[result] += 1
164
- compressed = COMPRESSED_RULES_DIR / name
165
- if compressed.exists():
166
- mirror_counts[apply_tier(compressed, tier)] += 1
164
+ condensed = CONDENSED_RULES_DIR / name
165
+ if condensed.exists():
166
+ mirror_counts[apply_tier(condensed, tier)] += 1
167
167
  else:
168
168
  mirror_counts["skipped"] += 1
169
169
  print(