@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
@@ -3,7 +3,7 @@
3
3
 
4
4
  Two storage tiers exist (see docs/contracts/ghostwriter-schema.md):
5
5
 
6
- * .agent-src.uncompressed/ghostwriter/ — package source. Ships
6
+ * .agent-src.uncondensed/ghostwriter/ — package source. Ships
7
7
  fictional fixtures ONLY (`fictional: true`). Every file stem must
8
8
  be on scripts/ghostwriter_fixture_allowlist.txt. `aliases:` is
9
9
  forbidden here (consumer-only feature).
@@ -28,7 +28,7 @@ import yaml
28
28
  QUIET = "--quiet" in sys.argv
29
29
 
30
30
  REPO = Path(__file__).resolve().parents[1]
31
- PACKAGE_DIR = REPO / ".agent-src.uncompressed" / "ghostwriter"
31
+ PACKAGE_DIR = REPO / ".agent-src.uncondensed" / "ghostwriter"
32
32
  CONSUMER_DIR = REPO / "agents" / "ghostwriter"
33
33
  ALLOWLIST = REPO / "scripts" / "ghostwriter_fixture_allowlist.txt"
34
34
  EXEMPT_STEMS = frozenset({"README"})
@@ -159,7 +159,7 @@ def lint_consumer_side() -> list[str]:
159
159
  if data.get("fictional") is True:
160
160
  errors.append(
161
161
  f" 'fictional: true' in consumer tree: {path.relative_to(REPO)} "
162
- f"— fictional fixtures belong in .agent-src.uncompressed/ghostwriter/"
162
+ f"— fictional fixtures belong in .agent-src.uncondensed/ghostwriter/"
163
163
  )
164
164
 
165
165
  aliases = data.get("aliases")
@@ -27,7 +27,7 @@ from typing import Iterable
27
27
  QUIET = "--quiet" in sys.argv
28
28
 
29
29
  REPO = Path(__file__).resolve().parents[1]
30
- SKILLS_DIR = REPO / ".agent-src.uncompressed" / "skills"
30
+ SKILLS_DIR = REPO / ".agent-src.uncondensed" / "skills"
31
31
 
32
32
  LINK_RE = re.compile(r"\[`?([a-z0-9][a-z0-9-]*)`?\]\(([^)]+SKILL\.md)\)")
33
33
  RELATED_HEADING_RE = re.compile(r"^##\s+Related\s+Skills\s*$", re.IGNORECASE)
@@ -24,37 +24,37 @@ QUIET = "--quiet" in sys.argv
24
24
  ROOT = Path(__file__).resolve().parent.parent
25
25
 
26
26
  SCAN_DIRS = [
27
- ROOT / ".agent-src.uncompressed" / "rules",
28
- ROOT / ".agent-src.uncompressed" / "contexts",
27
+ ROOT / ".agent-src.uncondensed" / "rules",
28
+ ROOT / ".agent-src.uncondensed" / "contexts",
29
29
  ROOT / "agents" / "contexts",
30
30
  ]
31
31
 
32
32
  ALLOWED_PREFIXES = (
33
33
  "contexts/", # logical name (canonical — P1.1 / P5.3)
34
- ".agent-src/contexts/", # projected (defensive — only seen in compressed inputs)
34
+ ".agent-src/contexts/", # projected (defensive — only seen in condensed inputs)
35
35
  "agents/settings/contexts/", # project-local
36
36
  )
37
37
 
38
- # `.agent-src.uncompressed/contexts/` was the legacy fully-qualified form
38
+ # `.agent-src.uncondensed/contexts/` was the legacy fully-qualified form
39
39
  # (pre road-to-path-fixes.md P5.3). It is now a hard error: P2.1 migrated
40
40
  # all in-tree rules to logical names, the rewriter resolves them at
41
- # compress time, and the schema regex in `scripts/schemas/rule.schema.json`
41
+ # condense time, and the schema regex in `scripts/schemas/rule.schema.json`
42
42
  # rejects the prefix at validate-schema time. Keeping a separate runtime
43
43
  # diagnostic so the failure points authors at the canonical
44
44
  # `contexts/<area>/<file>.md` form rather than a generic schema mismatch.
45
- LEGACY_PREFIX = ".agent-src.uncompressed/contexts/"
45
+ LEGACY_PREFIX = ".agent-src.uncondensed/contexts/"
46
46
 
47
47
  # Logical names resolve against the source root.
48
- SOURCE_ROOT = ROOT / ".agent-src.uncompressed"
48
+ SOURCE_ROOT = ROOT / ".agent-src.uncondensed"
49
49
 
50
- PUBLIC_RULE_PREFIX = ".agent-src.uncompressed/rules/"
50
+ PUBLIC_RULE_PREFIX = ".agent-src.uncondensed/rules/"
51
51
  PROJECT_LOCAL_PREFIX = "agents/settings/contexts/"
52
52
 
53
53
 
54
54
  def resolve_entry(entry: str) -> Path:
55
55
  """Resolve a `load_context:` entry to an absolute path on disk.
56
56
 
57
- Logical names (`contexts/...`) live under `.agent-src.uncompressed/`;
57
+ Logical names (`contexts/...`) live under `.agent-src.uncondensed/`;
58
58
  fully-qualified entries are repo-root-relative.
59
59
  """
60
60
  if entry.startswith("contexts/"):
@@ -152,9 +152,9 @@ def main() -> int:
152
152
  errors.append(f"{rel(f)}: entry not str ending in .md → {entry!r}")
153
153
  continue
154
154
  if entry.startswith(LEGACY_PREFIX):
155
- logical = entry[len(".agent-src.uncompressed/"):]
155
+ logical = entry[len(".agent-src.uncondensed/"):]
156
156
  errors.append(
157
- f"{rel(f)}: legacy `.agent-src.uncompressed/` prefix in load_context → {entry} "
157
+ f"{rel(f)}: legacy `.agent-src.uncondensed/` prefix in load_context → {entry} "
158
158
  f"— use logical name `{logical}` instead (road-to-path-fixes.md P5.3)"
159
159
  )
160
160
  continue
@@ -4,9 +4,9 @@
4
4
  Every policy file under `agents/settings/policies/media/` (except README) must
5
5
  be linked from at least one of:
6
6
 
7
- * a skill SKILL.md (any .agent-src.uncompressed/skills/*/SKILL.md
7
+ * a skill SKILL.md (any .agent-src.uncondensed/skills/*/SKILL.md
8
8
  or .claude/skills/*/SKILL.md),
9
- * a routing rule under .agent-src.uncompressed/rules/, or
9
+ * a routing rule under .agent-src.uncondensed/rules/, or
10
10
  * a sibling policy file under agents/settings/policies/media/.
11
11
 
12
12
  A policy that no surface references is a silent policy and a silent
@@ -31,9 +31,9 @@ EXEMPT_STEMS = frozenset({"README"})
31
31
 
32
32
  # Surfaces scanned for inbound references to policy files.
33
33
  SCAN_ROOTS: tuple[Path, ...] = (
34
- REPO / ".agent-src.uncompressed" / "skills",
35
- REPO / ".agent-src.uncompressed" / "rules",
36
- REPO / ".agent-src.uncompressed" / "commands",
34
+ REPO / ".agent-src.uncondensed" / "skills",
35
+ REPO / ".agent-src.uncondensed" / "rules",
36
+ REPO / ".agent-src.uncondensed" / "commands",
37
37
  REPO / ".claude" / "skills",
38
38
  REPO / "agents" / "policies" / "media",
39
39
  )
@@ -10,7 +10,7 @@ import argparse, re, sys
10
10
  from pathlib import Path
11
11
 
12
12
  ROOT = Path(__file__).resolve().parent.parent
13
- SRC = ROOT / ".agent-src.uncompressed"
13
+ SRC = ROOT / ".agent-src.uncondensed"
14
14
 
15
15
  # Source-of-truth regex; mirrored in docs/contracts/namespace.md § 1.
16
16
  NAME_RE = re.compile(r"^[a-z][a-z0-9]*(-[a-z0-9]+)*$")
@@ -3,7 +3,7 @@
3
3
  Atomic-command linter for the command-collapse policy.
4
4
 
5
5
  Reads the locked verb clusters from `docs/contracts/command-clusters.md`,
6
- finds every command file under `.agent-src.uncompressed/commands/` that
6
+ finds every command file under `.agent-src.uncondensed/commands/` that
7
7
  was **added** since `--baseline` (default: `main`), and requires each
8
8
  new file to declare either:
9
9
 
@@ -32,7 +32,7 @@ from dataclasses import dataclass
32
32
  from pathlib import Path
33
33
 
34
34
  ROOT = Path(__file__).resolve().parent.parent
35
- COMMANDS_DIR = Path(".agent-src.uncompressed/commands")
35
+ COMMANDS_DIR = Path(".agent-src.uncondensed/commands")
36
36
  CLUSTER_CONTRACT = Path("docs/contracts/command-clusters.md")
37
37
 
38
38
 
@@ -47,7 +47,7 @@ MAX_STEPS = 32
47
47
  MIN_STEPS = 1
48
48
 
49
49
  # Subagent-orchestration modes — kept in lock-step with
50
- # .agent-src.uncompressed/skills/subagent-orchestration/SKILL.md.
50
+ # .agent-src.uncondensed/skills/subagent-orchestration/SKILL.md.
51
51
  SUBAGENT_MODES = {
52
52
  "do-and-judge", "do-and-judge-two-stage",
53
53
  "do-in-steps", "do-in-parallel", "do-in-worktrees",
@@ -2,7 +2,7 @@
2
2
  """Enforce cross-pack reference boundaries.
3
3
 
4
4
  Phase 4.4 of the monorepo migration (ADR-017). Walks every markdown
5
- link in every artefact under ``packages/*/.agent-src.uncompressed/``
5
+ link in every artefact under ``packages/*/.agent-src.uncondensed/``
6
6
  and verifies the link target's pack is either the same pack, ``core``
7
7
  (always allowed), or listed in the source pack's ``requires``.
8
8
 
@@ -46,7 +46,7 @@ def _build_artefact_index() -> dict[str, str]:
46
46
  for pkg in sorted(PACKAGES.iterdir()):
47
47
  if not pkg.is_dir():
48
48
  continue
49
- src_root = pkg / ".agent-src.uncompressed"
49
+ src_root = pkg / ".agent-src.uncondensed"
50
50
  if not src_root.is_dir():
51
51
  continue
52
52
  pid = _load_pack_meta(pkg).get("id") or pkg.name.removeprefix("pack-")
@@ -2,7 +2,7 @@
2
2
  """Lint persona governance — per-domain cap (hard) + citation floor (warn).
3
3
 
4
4
  Enforces the mechanical checks in
5
- `.agent-src.uncompressed/rules/persona-governance.md`:
5
+ `.agent-src.uncondensed/rules/persona-governance.md`:
6
6
 
7
7
  1. **Per-domain cap (HARD)** — ≤ 2 active specialist personas per
8
8
  content domain. Core-tier personas are exempt. `status:
@@ -11,7 +11,7 @@ Enforces the mechanical checks in
11
11
  deletion, no soak window.
12
12
  2. **Skill citation floor (WARN)** — every active specialist
13
13
  persona SHOULD be cited by `personas: [<id>]` in at least one
14
- skill SKILL.md under `.agent-src.uncompressed/skills/` or
14
+ skill SKILL.md under `.agent-src.uncondensed/skills/` or
15
15
  `.claude/skills/`. Surfaced as a warning, never blocks CI:
16
16
  the citation floor is enforced at PR time per the rule (a new
17
17
  specialist MUST land with a cite); pre-existing wiring debt is
@@ -39,9 +39,9 @@ from pathlib import Path
39
39
  QUIET = "--quiet" in sys.argv
40
40
 
41
41
  REPO = Path(__file__).resolve().parents[1]
42
- PERSONA_DIR = REPO / ".agent-src.uncompressed" / "personas"
42
+ PERSONA_DIR = REPO / ".agent-src.uncondensed" / "personas"
43
43
  SKILL_ROOTS: tuple[Path, ...] = (
44
- REPO / ".agent-src.uncompressed" / "skills",
44
+ REPO / ".agent-src.uncondensed" / "skills",
45
45
  REPO / ".claude" / "skills",
46
46
  )
47
47
 
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env python3
2
+ """Linter for ``agents/roles/<slug>/`` role experiences.
3
+
4
+ Asserts the structural floor pinned in
5
+ ``docs/contracts/role-experience.md``:
6
+
7
+ 1. Every role directory has ``index.md`` + ``skills.yml``.
8
+ 2. ``index.md`` carries all required frontmatter keys (``role``,
9
+ ``display_name``, ``tagline``, ``recommended_packs``,
10
+ ``install_path_hint``, ``recruit_session_ref``, ``status``).
11
+ 3. ``index.md`` body declares at least three first tasks (per
12
+ ``## Three first tasks`` heading + numbered list).
13
+ 4. ``prompts/`` contains at least five prompts (per the roadmap's
14
+ Phase B Step 6 acceptance — ``≥ 5 prompts per role``).
15
+ 5. Every prompt under ``prompts/<name>.md`` carries the four
16
+ required frontmatter keys (``name``, ``intent``, ``inputs``,
17
+ ``output_shape``) plus ``skill_hint``.
18
+ 6. Every ``skills.yml`` skill ``id`` resolves to an existing skill
19
+ under ``.agent-src.uncondensed/skills/<id>/`` or
20
+ ``.agent-src/skills/<id>/`` (condensed projection counts).
21
+
22
+ The roadmap step is intentionally opt-in for CI — the existing
23
+ ``task ci`` wiring is the caller's concern; this script is the
24
+ mechanical floor it can wrap.
25
+
26
+ Phase B Step 6 of ``road-to-frictionless-employee-workspace.md``.
27
+ Adds a ``--plain-language`` mode for Phase C Step 5 that scans the
28
+ role indices for jargon listed in
29
+ ``docs/contracts/plain-language-surface.md`` and flags any hit.
30
+ """
31
+ from __future__ import annotations
32
+
33
+ import argparse
34
+ import re
35
+ import sys
36
+ from pathlib import Path
37
+
38
+ import yaml
39
+
40
+ ROOT = Path(__file__).resolve().parents[1]
41
+ ROLES_DIR = ROOT / "agents" / "roles"
42
+ SKILL_SOURCES = [
43
+ ROOT / ".agent-src.uncondensed" / "skills",
44
+ ROOT / ".agent-src" / "skills",
45
+ ]
46
+
47
+ REQUIRED_INDEX_KEYS = {
48
+ "role",
49
+ "display_name",
50
+ "tagline",
51
+ "recommended_packs",
52
+ "install_path_hint",
53
+ "recruit_session_ref",
54
+ "status",
55
+ }
56
+
57
+ REQUIRED_PROMPT_KEYS = {"name", "intent", "inputs", "output_shape", "skill_hint"}
58
+
59
+ MIN_FIRST_TASKS = 3
60
+ MIN_PROMPTS_PER_ROLE = 5
61
+
62
+ FRONTMATTER_RE = re.compile(r"^---\r?\n(.*?)\r?\n---\r?\n", re.DOTALL)
63
+ TASK_HEADING_RE = re.compile(r"^## Three first tasks\s*$", re.MULTILINE)
64
+ TASK_ITEM_RE = re.compile(r"^\s*\d+\.\s+\*\*[^*]+\*\*", re.MULTILINE)
65
+
66
+ # Jargon list mirrors docs/contracts/plain-language-surface.md.
67
+ PLAIN_LANGUAGE_JARGON = [
68
+ "council",
69
+ "trust level",
70
+ "pack",
71
+ "orchestration",
72
+ "contract",
73
+ "advisory",
74
+ ]
75
+
76
+
77
+ def parse_frontmatter(text: str) -> tuple[dict, str]:
78
+ m = FRONTMATTER_RE.match(text)
79
+ if m is None:
80
+ return {}, text
81
+ try:
82
+ loaded = yaml.safe_load(m.group(1)) or {}
83
+ except yaml.YAMLError:
84
+ return {}, text[m.end():]
85
+ if not isinstance(loaded, dict):
86
+ return {}, text[m.end():]
87
+ return loaded, text[m.end():]
88
+
89
+
90
+ def count_first_tasks(body: str) -> int:
91
+ heading_match = TASK_HEADING_RE.search(body)
92
+ if heading_match is None:
93
+ return 0
94
+ # Slice from heading to the next "## " heading (or end of file).
95
+ after = body[heading_match.end():]
96
+ next_section = re.search(r"^## ", after, re.MULTILINE)
97
+ section = after[: next_section.start()] if next_section else after
98
+ return len(TASK_ITEM_RE.findall(section))
99
+
100
+
101
+ def all_skills() -> set[str]:
102
+ found: set[str] = set()
103
+ for src in SKILL_SOURCES:
104
+ if not src.exists():
105
+ continue
106
+ for child in src.iterdir():
107
+ if child.is_dir():
108
+ found.add(child.name)
109
+ return found
110
+
111
+
112
+ def lint_role(role_dir: Path, known_skills: set[str], failures: list[str]) -> None:
113
+ slug = role_dir.name
114
+ if slug.startswith(("_", ".")):
115
+ return
116
+
117
+ index_path = role_dir / "index.md"
118
+ skills_path = role_dir / "skills.yml"
119
+
120
+ if not index_path.exists():
121
+ failures.append(f"{role_dir}: missing index.md")
122
+ return
123
+ if not skills_path.exists():
124
+ failures.append(f"{role_dir}: missing skills.yml")
125
+ return
126
+
127
+ fm, body = parse_frontmatter(index_path.read_text(encoding="utf-8"))
128
+ missing_keys = REQUIRED_INDEX_KEYS - set(fm)
129
+ if missing_keys:
130
+ failures.append(
131
+ f"{index_path}: missing frontmatter keys: {sorted(missing_keys)}"
132
+ )
133
+
134
+ first_tasks = count_first_tasks(body)
135
+ if first_tasks < MIN_FIRST_TASKS:
136
+ failures.append(
137
+ f"{index_path}: requires ≥ {MIN_FIRST_TASKS} first tasks, found {first_tasks}"
138
+ )
139
+
140
+ prompts_dir = role_dir / "prompts"
141
+ prompts = sorted(prompts_dir.glob("*.md")) if prompts_dir.exists() else []
142
+ if len(prompts) < MIN_PROMPTS_PER_ROLE:
143
+ failures.append(
144
+ f"{role_dir}: requires ≥ {MIN_PROMPTS_PER_ROLE} prompts in prompts/, "
145
+ f"found {len(prompts)}"
146
+ )
147
+
148
+ for prompt_path in prompts:
149
+ prompt_fm, _ = parse_frontmatter(prompt_path.read_text(encoding="utf-8"))
150
+ missing = REQUIRED_PROMPT_KEYS - set(prompt_fm)
151
+ if missing:
152
+ failures.append(
153
+ f"{prompt_path}: missing frontmatter keys: {sorted(missing)}"
154
+ )
155
+
156
+ try:
157
+ skills_doc = yaml.safe_load(skills_path.read_text(encoding="utf-8")) or {}
158
+ except yaml.YAMLError as exc:
159
+ failures.append(f"{skills_path}: malformed YAML ({exc})")
160
+ return
161
+ skill_entries = skills_doc.get("skills", [])
162
+ if not isinstance(skill_entries, list):
163
+ failures.append(f"{skills_path}: `skills:` must be a list")
164
+ return
165
+ for entry in skill_entries:
166
+ if not isinstance(entry, dict):
167
+ failures.append(f"{skills_path}: skill entry is not a mapping: {entry!r}")
168
+ continue
169
+ skill_id = entry.get("id")
170
+ if not isinstance(skill_id, str):
171
+ failures.append(f"{skills_path}: skill entry missing `id`: {entry!r}")
172
+ continue
173
+ if known_skills and skill_id not in known_skills:
174
+ failures.append(
175
+ f"{skills_path}: skill `{skill_id}` does not resolve to an existing skill"
176
+ )
177
+
178
+
179
+ def lint_plain_language(failures: list[str]) -> None:
180
+ """Scan each role's index.md for the six jargon terms; flag hits.
181
+
182
+ Skipped sections: frontmatter, fenced code blocks. Role-experience
183
+ index files are the non-developer surface and must not leak the
184
+ package's internal vocabulary.
185
+ """
186
+ for role_dir in sorted(ROLES_DIR.iterdir()):
187
+ if not role_dir.is_dir() or role_dir.name.startswith(("_", ".")):
188
+ continue
189
+ index_path = role_dir / "index.md"
190
+ if not index_path.exists():
191
+ continue
192
+ _, body = parse_frontmatter(index_path.read_text(encoding="utf-8"))
193
+ # Strip fenced code blocks.
194
+ body_stripped = re.sub(r"```[\s\S]*?```", "", body)
195
+ for term in PLAIN_LANGUAGE_JARGON:
196
+ pattern = re.compile(rf"\b{re.escape(term)}\b", re.IGNORECASE)
197
+ if pattern.search(body_stripped):
198
+ failures.append(
199
+ f"{index_path}: contains the jargon term `{term}` "
200
+ f"(see docs/contracts/plain-language-surface.md)"
201
+ )
202
+
203
+
204
+ def main(argv: list[str] | None = None) -> int:
205
+ parser = argparse.ArgumentParser(prog="lint_role_experiences")
206
+ parser.add_argument(
207
+ "--plain-language",
208
+ action="store_true",
209
+ help="Additionally scan role indices for jargon listed in "
210
+ "docs/contracts/plain-language-surface.md.",
211
+ )
212
+ args = parser.parse_args(argv)
213
+
214
+ if not ROLES_DIR.exists():
215
+ print(f"lint_role_experiences: roles dir not found at {ROLES_DIR}")
216
+ return 0
217
+
218
+ known_skills = all_skills()
219
+ failures: list[str] = []
220
+ for role_dir in sorted(ROLES_DIR.iterdir()):
221
+ if role_dir.is_dir():
222
+ lint_role(role_dir, known_skills, failures)
223
+
224
+ if args.plain_language:
225
+ lint_plain_language(failures)
226
+
227
+ if failures:
228
+ for f in failures:
229
+ print(f"❌ {f}")
230
+ print(f"\nlint_role_experiences: {len(failures)} failure(s)")
231
+ return 1
232
+ print("✅ lint_role_experiences: all role experiences pass")
233
+ return 0
234
+
235
+
236
+ if __name__ == "__main__":
237
+ sys.exit(main())
@@ -3,7 +3,7 @@
3
3
 
4
4
  Validates:
5
5
  - Schema (required fields per pair)
6
- - All rule slugs in `rules:` exist as `.agent-src.uncompressed/rules/<slug>.md`
6
+ - All rule slugs in `rules:` exist as `.agent-src.uncondensed/rules/<slug>.md`
7
7
  - Every pair references rules listed in the top-level `rules:` block
8
8
  - `relation` is one of the allowed values
9
9
  - All `evidence:` entries point at real files (anchors are advisory, not checked)
@@ -38,7 +38,7 @@ def _rule_exists(slug: str) -> bool:
38
38
  def _evidence_exists(file_part: str) -> bool:
39
39
  """Return True if the evidence path resolves under any source root.
40
40
 
41
- Accepts legacy ``.agent-src.uncompressed/...`` citations and resolves
41
+ Accepts legacy ``.agent-src.uncondensed/...`` citations and resolves
42
42
  them through the multi-root layout; falls back to a literal repo
43
43
  path check for non-source citations (docs/, agents/, ...).
44
44
  """
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """Lint rule frontmatter for the `tier:` key.
3
3
 
4
- Hard-fails CI if any rule under .agent-src.uncompressed/rules/ lacks a
4
+ Hard-fails CI if any rule under .agent-src.uncondensed/rules/ lacks a
5
5
  `tier:` declaration or uses an unknown tier value. The valid tier set is
6
6
  locked by agents/settings/contexts/hardening-pattern.md and the matrix in
7
7
  agents/settings/contexts/rule-trigger-matrix.md.
@@ -33,7 +33,7 @@ COMPILED_SRC = ROOT / ".agent-src"
33
33
  sys.path.insert(0, str(Path(__file__).resolve().parent))
34
34
  from _lib.agent_src import strip_source_prefix # noqa: E402
35
35
 
36
- # Imported lazily inside _banner_marker() to keep the cap loose if compress.py
36
+ # Imported lazily inside _banner_marker() to keep the cap loose if condense.py
37
37
  # grows additional top-level side effects.
38
38
  _BANNER_MARKER = "<!-- agent-config:human-review-banner -->"
39
39
 
@@ -118,7 +118,7 @@ def _check_human_review_banners(
118
118
  errs.append(
119
119
  f"{rel}: human_review_required=true but compiled output"
120
120
  f" `{compiled.relative_to(ROOT)}` is missing the HRR banner"
121
- f" (`{_BANNER_MARKER}`) — re-run `task compress`."
121
+ f" (`{_BANNER_MARKER}`) — re-run `task condense`."
122
122
  )
123
123
  return errs
124
124