@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
@@ -11,7 +11,7 @@ writes JSON files in `runs/`.
11
11
 
12
12
  Layout per skill:
13
13
 
14
- .agent-src.uncompressed/skills/{name}/evals/
14
+ .agent-src.uncondensed/skills/{name}/evals/
15
15
  evals.json
16
16
  runs/ # gitignored
17
17
  {timestamp}-baseline/{scenario_id}/output.txt
@@ -31,7 +31,7 @@ from pathlib import Path
31
31
  from typing import Any
32
32
 
33
33
  REPO_ROOT = Path(__file__).resolve().parent.parent
34
- SKILLS_ROOT = REPO_ROOT / ".agent-src.uncompressed" / "skills"
34
+ SKILLS_ROOT = REPO_ROOT / ".agent-src.uncondensed" / "skills"
35
35
 
36
36
 
37
37
  def _skill_dir(skill: str) -> Path:
@@ -63,10 +63,10 @@ class SkillRuntime:
63
63
 
64
64
 
65
65
  def discover_skills(root: Path) -> List[Path]:
66
- """Find all SKILL.md files, preferring .agent-src.uncompressed/."""
67
- uncompressed = root / ".agent-src.uncompressed" / "skills"
68
- compressed = root / ".agent-src" / "skills"
69
- base = uncompressed if uncompressed.exists() else compressed
66
+ """Find all SKILL.md files, preferring .agent-src.uncondensed/."""
67
+ uncondensed = root / ".agent-src.uncondensed" / "skills"
68
+ condensed = root / ".agent-src" / "skills"
69
+ base = uncondensed if uncondensed.exists() else condensed
70
70
  if not base.exists():
71
71
  return []
72
72
  return sorted(f for f in base.rglob("SKILL.md") if not f.is_symlink())
@@ -10,7 +10,7 @@
10
10
  "name": {
11
11
  "type": "string",
12
12
  "pattern": "^[a-z][a-z0-9-]*(:[a-z][a-z0-9-]*)?$",
13
- "$comment": "Top-level commands use the bare slug (`commit`). Nested cluster commands under `commands/<cluster>/<sub>.md` use the colon form (`council:default`) to mirror Claude Code's `/cluster:sub` rendering. Directory slug for `.claude/skills/` is the hyphenated form (`council-default`), generated by compress.py."
13
+ "$comment": "Top-level commands use the bare slug (`commit`). Nested cluster commands under `commands/<cluster>/<sub>.md` use the colon form (`council:default`) to mirror Claude Code's `/cluster:sub` rendering. Directory slug for `.claude/skills/` is the hyphenated form (`council-default`), generated by condense.py."
14
14
  },
15
15
  "tier": {
16
16
  "type": "integer",
@@ -40,7 +40,7 @@
40
40
  "type": "string",
41
41
  "pattern": "^[a-z][a-z0-9-]*$"
42
42
  },
43
- "description": "Personas this command invokes (see .agent-src.uncompressed/personas/). Mirrors `skills:`; each entry must match a persona slug."
43
+ "description": "Personas this command invokes (see .agent-src.uncondensed/personas/). Mirrors `skills:`; each entry must match a persona slug."
44
44
  },
45
45
  "cluster": {
46
46
  "type": "string",
@@ -70,12 +70,12 @@
70
70
  "framework": {
71
71
  "type": "string",
72
72
  "pattern": "^[a-z][a-z0-9-]*$",
73
- "description": "Framework carve-out marker. Set on commands that are 100% coupled to one stack (e.g. `framework: laravel` on update-form-request-messages). Generic, multi-stack commands MUST omit this key. Routed by .agent-src.uncompressed/rules/framework-neutrality-in-generic-skills.md (Tier 2)."
73
+ "description": "Framework carve-out marker. Set on commands that are 100% coupled to one stack (e.g. `framework: laravel` on update-form-request-messages). Generic, multi-stack commands MUST omit this key. Routed by .agent-src.uncondensed/rules/framework-neutrality-in-generic-skills.md (Tier 2)."
74
74
  },
75
75
  "council_depth": {
76
76
  "type": "string",
77
77
  "enum": ["deep"],
78
- "description": "Optional reasoning-depth marker for AI Council invocations triggered by this command. The only accepted value is 'deep'; omit the key for default depth (setting 'standard' is rejected — every frontmatter byte counts against the context window, and 'standard' is the implicit default). 'deep' instructs the host agent to pass --depth deep to council_cli, which floors rounds at max(ai_council.deep_min_rounds, ai_council.min_rounds). Use for architecture, refactoring, or bug-diagnosis commands. See .agent-src.uncompressed/skills/ai-council/SKILL.md."
78
+ "description": "Optional reasoning-depth marker for AI Council invocations triggered by this command. The only accepted value is 'deep'; omit the key for default depth (setting 'standard' is rejected — every frontmatter byte counts against the context window, and 'standard' is the implicit default). 'deep' instructs the host agent to pass --depth deep to council_cli, which floors rounds at max(ai_council.deep_min_rounds, ai_council.min_rounds). Use for architecture, refactoring, or bug-diagnosis commands. See .agent-src.uncondensed/skills/ai-council/SKILL.md."
79
79
  },
80
80
  "suggestion": {
81
81
  "type": "object",
@@ -30,9 +30,9 @@
30
30
  "items": {
31
31
  "type": "string",
32
32
  "pattern": "^((\\.\\./)*contexts/|agents/settings/contexts/|\\.agent-src/contexts/)[^\\s]+\\.md$",
33
- "description": "Logical name (preferred — `contexts/<area>/<file>.md`) or project-local (`agents/settings/contexts/<file>.md`). The `.agent-src.uncompressed/` prefix is rejected by the regex; the rewriter (`scripts/compress.py::_rewrite_paths`) resolves logical names at compress time. Rewritten relative forms (`../contexts/...`, `../../contexts/...`) are accepted so the linter passes on the compressed mirror in CI."
33
+ "description": "Logical name (preferred — `contexts/<area>/<file>.md`) or project-local (`agents/settings/contexts/<file>.md`). The `.agent-src.uncondensed/` prefix is rejected by the regex; the rewriter (`scripts/condense.py::_rewrite_paths`) resolves logical names at condense time. Rewritten relative forms (`../contexts/...`, `../../contexts/...`) are accepted so the linter passes on the condensed mirror in CI."
34
34
  },
35
- "description": "Lazy on-demand context references. Use logical names rooted at the source (e.g. `contexts/execution/foo.md`); the `.agent-src.uncompressed/` prefix is forbidden by the regex (road-to-path-fixes.md P5.3). Path rules and budget caps enforced by scripts/lint_load_context.py. Contract: docs/contracts/load-context-schema.md."
35
+ "description": "Lazy on-demand context references. Use logical names rooted at the source (e.g. `contexts/execution/foo.md`); the `.agent-src.uncondensed/` prefix is forbidden by the regex (road-to-path-fixes.md P5.3). Path rules and budget caps enforced by scripts/lint_load_context.py. Contract: docs/contracts/load-context-schema.md."
36
36
  },
37
37
  "load_context_eager": {
38
38
  "type": "array",
@@ -51,7 +51,7 @@
51
51
  "council_depth": {
52
52
  "type": "string",
53
53
  "enum": ["deep"],
54
- "description": "Optional reasoning-depth marker for AI Council invocations triggered while this rule is active. The only accepted value is 'deep'; omit the key for default depth (setting 'standard' is rejected — every frontmatter byte counts against the context window, and 'standard' is the implicit default). 'deep' instructs the host agent to pass --depth deep to council_cli, which floors rounds at max(ai_council.deep_min_rounds, ai_council.min_rounds). Use for rules that gate architecture, refactoring, or bug-diagnosis flows. See .agent-src.uncompressed/skills/ai-council/SKILL.md."
54
+ "description": "Optional reasoning-depth marker for AI Council invocations triggered while this rule is active. The only accepted value is 'deep'; omit the key for default depth (setting 'standard' is rejected — every frontmatter byte counts against the context window, and 'standard' is the implicit default). 'deep' instructs the host agent to pass --depth deep to council_cli, which floors rounds at max(ai_council.deep_min_rounds, ai_council.min_rounds). Use for rules that gate architecture, refactoring, or bug-diagnosis flows. See .agent-src.uncondensed/skills/ai-council/SKILL.md."
55
55
  },
56
56
  "triggers": {
57
57
  "type": "array",
@@ -63,7 +63,7 @@
63
63
  "phrase": {"type": "string"},
64
64
  "intent": {"type": "string"},
65
65
  "file_pattern": {"type": "string"},
66
- "path_prefix": {"type": "string", "description": "Literal path-prefix match pattern the host evaluates against the file the agent is editing — NOT a file reference. The rewriter leaves it verbatim. Source-of-truth rules that must fire on edits under `.agent-src.uncompressed/` keep that prefix here (the prefix ban applies only to `load_context:` and body links — see road-to-path-fixes.md P2.2 / AI-Council 2026-05-06)."},
66
+ "path_prefix": {"type": "string", "description": "Literal path-prefix match pattern the host evaluates against the file the agent is editing — NOT a file reference. The rewriter leaves it verbatim. Source-of-truth rules that must fire on edits under `.agent-src.uncondensed/` keep that prefix here (the prefix ban applies only to `load_context:` and body links — see road-to-path-fixes.md P2.2 / AI-Council 2026-05-06)."},
67
67
  "command": {"type": "string"},
68
68
  "reason": {"type": "string"}
69
69
  }
@@ -97,7 +97,7 @@
97
97
  "reason": {"type": "string", "description": "Human-readable rationale for the suppression — surfaced in audit logs."}
98
98
  }
99
99
  },
100
- "description": "Per-rule allowlist consumed by the post-compression validator (scripts/check_compressed_paths.py). Rules that document forbidden path substrings as their subject matter (e.g. augment-portability, no-roadmap-references) declare the literal strings here so the gate does not flag itself. road-to-path-fixes.md P5.1."
100
+ "description": "Per-rule allowlist consumed by the post-condensation validator (scripts/check_condensed_paths.py). Rules that document forbidden path substrings as their subject matter (e.g. augment-portability, no-roadmap-references) declare the literal strings here so the gate does not flag itself. road-to-path-fixes.md P5.1."
101
101
  },
102
102
  "workspaces": {
103
103
  "type": "array",
@@ -38,7 +38,7 @@
38
38
  "framework": {
39
39
  "type": "string",
40
40
  "pattern": "^[a-z][a-z0-9-]*$",
41
- "description": "Framework carve-out marker. Set on skills that are 100% coupled to one stack (e.g. `framework: laravel` on laravel-* skills). Generic, multi-stack skills MUST omit this key. Routed by .agent-src.uncompressed/rules/framework-neutrality-in-generic-skills.md (Tier 2)."
41
+ "description": "Framework carve-out marker. Set on skills that are 100% coupled to one stack (e.g. `framework: laravel` on laravel-* skills). Generic, multi-stack skills MUST omit this key. Routed by .agent-src.uncondensed/rules/framework-neutrality-in-generic-skills.md (Tier 2)."
42
42
  },
43
43
  "personas": {
44
44
  "type": "array",
@@ -50,7 +50,7 @@
50
50
  "tier": {
51
51
  "type": "string",
52
52
  "enum": ["senior"],
53
- "description": "Optional tier marker. `senior` opts the skill into the Senior-Tier Required Structure check (Context-First lead, Related Skills, Proactive Triggers, Output Artifacts) per .agent-src.uncompressed/rules/skill-quality.md."
53
+ "description": "Optional tier marker. `senior` opts the skill into the Senior-Tier Required Structure check (Context-First lead, Related Skills, Proactive Triggers, Output Artifacts) per .agent-src.uncondensed/rules/skill-quality.md."
54
54
  },
55
55
  "meta_skill": {
56
56
  "type": "boolean",
@@ -74,7 +74,7 @@
74
74
  "council_depth": {
75
75
  "type": "string",
76
76
  "enum": ["deep"],
77
- "description": "Optional reasoning-depth marker for AI Council invocations triggered by this skill. The only accepted value is 'deep'; omit the key for default depth (setting 'standard' is rejected — every frontmatter byte counts against the context window, and 'standard' is the implicit default). 'deep' instructs the host agent to pass --depth deep to council_cli, which floors rounds at max(ai_council.deep_min_rounds, ai_council.min_rounds). Use for architecture, refactoring, or bug-diagnosis skills. See .agent-src.uncompressed/skills/ai-council/SKILL.md."
77
+ "description": "Optional reasoning-depth marker for AI Council invocations triggered by this skill. The only accepted value is 'deep'; omit the key for default depth (setting 'standard' is rejected — every frontmatter byte counts against the context window, and 'standard' is the implicit default). 'deep' instructs the host agent to pass --depth deep to council_cli, which floors rounds at max(ai_council.deep_min_rounds, ai_council.min_rounds). Use for architecture, refactoring, or bug-diagnosis skills. See .agent-src.uncondensed/skills/ai-council/SKILL.md."
78
78
  },
79
79
  "context_spine": {
80
80
  "type": "array",
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://github.com/event4u-app/agent-config/scripts/schemas/user-type.schema.json",
4
4
  "title": "User-type frontmatter",
5
- "$comment": "Source: docs/contracts/user-type-schema.md. The runtime review-lens axis seeded under .agent-src.uncompressed/user-types/. Distinct from the install-time user-type-axis YAMLs in user-types/ (root) which carry their own user-type-axis.schema.json.",
5
+ "$comment": "Source: docs/contracts/user-type-schema.md. The runtime review-lens axis seeded under .agent-src.uncondensed/user-types/. Distinct from the install-time user-type-axis YAMLs in user-types/ (root) which carry their own user-type-axis.schema.json.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["id", "kind", "description", "version", "source"],
@@ -36,7 +36,7 @@ import yaml
36
36
  REPO_ROOT = Path(__file__).resolve().parent.parent
37
37
  FIXTURES = REPO_ROOT / "tests" / "fixtures" / "skill_selection" / "fixtures.yml"
38
38
  CLUSTERS = REPO_ROOT / "agents" / "reports" / "skill-collision-clusters.json"
39
- SKILLS_DIR = REPO_ROOT / ".agent-src.uncompressed" / "skills"
39
+ SKILLS_DIR = REPO_ROOT / ".agent-src.uncondensed" / "skills"
40
40
  DEFAULT_OUT = REPO_ROOT / "agents" / "reports" / "skill-selection-accuracy.json"
41
41
 
42
42
  PASS_A = 0.90
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """Skill-collision cluster analysis (Phase 2.2 of step-1-v2-feedback-followup).
3
3
 
4
- Walks `.agent-src.uncompressed/skills/<id>/SKILL.md`, extracts the
4
+ Walks `.agent-src.uncondensed/skills/<id>/SKILL.md`, extracts the
5
5
  `description` frontmatter, computes pairwise keyword overlap, and groups
6
6
  high-overlap skill pairs into clusters. The output drives the
7
7
  selection-accuracy fixture set defined by council file 05 (Round-3
@@ -37,7 +37,7 @@ from pathlib import Path
37
37
  import yaml
38
38
 
39
39
  REPO_ROOT = Path(__file__).resolve().parent.parent
40
- SKILLS_DIR = REPO_ROOT / ".agent-src.uncompressed" / "skills"
40
+ SKILLS_DIR = REPO_ROOT / ".agent-src.uncondensed" / "skills"
41
41
  OUT_JSON = REPO_ROOT / "agents" / "reports" / "skill-collision-clusters.json"
42
42
 
43
43
  KEYWORD_OVERLAP_THRESHOLD = 0.40
@@ -1214,7 +1214,7 @@ def parse_execution_block(frontmatter: str) -> Optional[dict]:
1214
1214
  def lint_senior_tier_blocks(text: str) -> List[Issue]:
1215
1215
  """Validate the four required blocks for `tier: senior` skills.
1216
1216
 
1217
- Per .agent-src.uncompressed/rules/skill-quality.md § Senior-Tier
1217
+ Per .agent-src.uncondensed/rules/skill-quality.md § Senior-Tier
1218
1218
  Required Structure: Context-First lead (description), Related Skills
1219
1219
  (with WHEN / WHEN NOT lists), Proactive Triggers, Output Artifacts.
1220
1220
 
@@ -1830,7 +1830,7 @@ def lint_persona(path: Path, text: str) -> LintResult:
1830
1830
  artifact_type="persona",
1831
1831
  status="fail",
1832
1832
  issues=issues,
1833
- suggestions=["See .agent-src.uncompressed/templates/persona.md for the schema"],
1833
+ suggestions=["See .agent-src.uncondensed/templates/persona.md for the schema"],
1834
1834
  )
1835
1835
 
1836
1836
  # Required frontmatter fields
@@ -1975,7 +1975,7 @@ def lint_usertype(path: Path, text: str) -> LintResult:
1975
1975
  artifact_type="user-type",
1976
1976
  status="fail",
1977
1977
  issues=issues,
1978
- suggestions=[".agent-src.uncompressed/user-types/_template/user-type.md"],
1978
+ suggestions=[".agent-src.uncondensed/user-types/_template/user-type.md"],
1979
1979
  )
1980
1980
 
1981
1981
  # Required keys per docs/contracts/user-type-schema.md § 1.
@@ -2061,8 +2061,8 @@ def lint_usertype(path: Path, text: str) -> LintResult:
2061
2061
  def gather_all_candidate_files(root: Path) -> list[Path]:
2062
2062
  """Gather all lintable files across every source root (ADR-017 multi-root).
2063
2063
 
2064
- Walks ``artefact_roots()`` (legacy ``.agent-src.uncompressed/`` plus every
2065
- ``packages/*/.agent-src.uncompressed/``). Falls back to ``.agent-src/``
2064
+ Walks ``artefact_roots()`` (legacy ``.agent-src.uncondensed/`` plus every
2065
+ ``packages/*/.agent-src.uncondensed/``). Falls back to ``.agent-src/``
2066
2066
  only when no source root exists. Skips symlinks to avoid double-counting.
2067
2067
  Deduplicates on logical relpath \u2014 first root wins per the agent_src
2068
2068
  contract.
@@ -2106,8 +2106,8 @@ def gather_all_candidate_files(root: Path) -> list[Path]:
2106
2106
  if charter.exists() and not charter.is_symlink():
2107
2107
  _add(charter, src_root)
2108
2108
  else:
2109
- # Pure-compressed fallback (.agent-src/ only). Used by consumer
2110
- # projects that vendor the compressed tree without sources.
2109
+ # Pure-condensed fallback (.agent-src/ only). Used by consumer
2110
+ # projects that vendor the condensed tree without sources.
2111
2111
  augment_root = root / ".agent-src"
2112
2112
  if augment_root.exists():
2113
2113
  for sub_pattern in (
@@ -2138,7 +2138,7 @@ def gather_candidate_files_under(src_root: Path) -> list[Path]:
2138
2138
  """Gather lintable files under an arbitrary source root.
2139
2139
 
2140
2140
  Mirrors the per-root walk used by ``gather_all_candidate_files`` but
2141
- scoped to a single directory \u2014 e.g. ``packages/pack-laravel/.agent-src.uncompressed/``
2141
+ scoped to a single directory \u2014 e.g. ``packages/pack-laravel/.agent-src.uncondensed/``
2142
2142
  so CI can lint a single pack in parallel (ADR-017 Phase 4.4).
2143
2143
  Skips symlinks and ``README.md`` siblings under ``personas/`` /
2144
2144
  ``user-types/``.
@@ -2219,11 +2219,11 @@ def gather_changed_candidate_files(root: Path) -> list[Path]:
2219
2219
  # tool-native frontmatter (e.g. Windsurf's trigger/globs) that
2220
2220
  # the linter does not validate — they regenerate from source.
2221
2221
  # ADR-017: accept legacy flat layout AND
2222
- # packages/*/.agent-src.uncompressed/ paths.
2222
+ # packages/*/.agent-src.uncondensed/ paths.
2223
2223
  in_source = (
2224
- norm.startswith(".agent-src.uncompressed/")
2224
+ norm.startswith(".agent-src.uncondensed/")
2225
2225
  or norm.startswith(".agent-src/")
2226
- or "/.agent-src.uncompressed/" in norm
2226
+ or "/.agent-src.uncondensed/" in norm
2227
2227
  or "/.agent-src/" in norm
2228
2228
  )
2229
2229
  if not in_source:
@@ -2716,7 +2716,7 @@ def _skill_id_from_path(path: Path) -> Optional[str]:
2716
2716
 
2717
2717
  def _is_frugality_charter(path: Path) -> bool:
2718
2718
  """True iff the path ends in the canonical charter relpath, regardless
2719
- of whether it lives under .agent-src/ or .agent-src.uncompressed/."""
2719
+ of whether it lives under .agent-src/ or .agent-src.uncondensed/."""
2720
2720
  norm = str(path).replace("\\", "/")
2721
2721
  return norm.endswith("/" + FRUGALITY_CHARTER_RELPATH)
2722
2722
 
@@ -2836,7 +2836,7 @@ def lint_frugality_charter_index(path: Path, text: str) -> List[Issue]:
2836
2836
  def lint_governance(path: Path, text: str, artifact_type: str, repo_root: Path | None = None) -> List[Issue]:
2837
2837
  """Check governance and packaging consistency.
2838
2838
 
2839
- - Compressed/uncompressed pairs must exist
2839
+ - Condensed/uncondensed pairs must exist
2840
2840
  - No duplicate skill names
2841
2841
  - Files must be in correct location for their type
2842
2842
  """
@@ -2847,44 +2847,44 @@ def lint_governance(path: Path, text: str, artifact_type: str, repo_root: Path |
2847
2847
  path_str = str(path)
2848
2848
  path_relative = path_str
2849
2849
 
2850
- # Determine if this is a compressed or uncompressed artifact
2851
- is_compressed = "/.agent-src/" in path_str and "/.agent-src.uncompressed/" not in path_str
2852
- is_uncompressed = "/.agent-src.uncompressed/" in path_str
2850
+ # Determine if this is a condensed or uncondensed artifact
2851
+ is_condensed = "/.agent-src/" in path_str and "/.agent-src.uncondensed/" not in path_str
2852
+ is_uncondensed = "/.agent-src.uncondensed/" in path_str
2853
2853
 
2854
- if not is_compressed and not is_uncompressed:
2854
+ if not is_condensed and not is_uncondensed:
2855
2855
  return issues
2856
2856
 
2857
- # --- Check: compressed/uncompressed pair exists ---
2858
- # ADR-017: sources live under packages/*/.agent-src.uncompressed/ but
2857
+ # --- Check: condensed/uncondensed pair exists ---
2858
+ # ADR-017: sources live under packages/*/.agent-src.uncondensed/ but
2859
2859
  # all packs project into the single repo-root .agent-src/ tree. The
2860
2860
  # pair-check now resolves via logical relpath, not a path-swap.
2861
2861
  from _lib.agent_src import strip_source_prefix as _strip
2862
2862
  norm = path_str.replace("\\", "/")
2863
- if is_uncompressed:
2863
+ if is_uncondensed:
2864
2864
  # Compute logical path then map to .agent-src/ at repo root.
2865
2865
  # Try direct strip first; fall back to substring split for absolute paths.
2866
2866
  logical = _strip(norm)
2867
2867
  if logical is None:
2868
- marker = "/.agent-src.uncompressed/"
2868
+ marker = "/.agent-src.uncondensed/"
2869
2869
  idx = norm.rfind(marker)
2870
2870
  logical = norm[idx + len(marker):] if idx != -1 else None
2871
2871
  if logical:
2872
- compressed_path = repo_root / ".agent-src" / logical
2873
- if not compressed_path.exists():
2874
- issues.append(Issue("warning", "compressed_variant_missing",
2875
- f"Uncompressed file exists but compressed variant missing: "
2876
- f"{compressed_path.name}"))
2877
- elif is_compressed:
2878
- # Compressed lives at repo-root .agent-src/<logical>. Source could
2872
+ condensed_path = repo_root / ".agent-src" / logical
2873
+ if not condensed_path.exists():
2874
+ issues.append(Issue("warning", "condensed_variant_missing",
2875
+ f"Uncondensed file exists but condensed variant missing: "
2876
+ f"{condensed_path.name}"))
2877
+ elif is_condensed:
2878
+ # Condensed lives at repo-root .agent-src/<logical>. Source could
2879
2879
  # be at any source root \u2014 resolve via artefact_roots.
2880
2880
  marker = "/.agent-src/"
2881
2881
  idx = norm.rfind(marker)
2882
2882
  logical = norm[idx + len(marker):] if idx != -1 else None
2883
2883
  if logical:
2884
- uncompressed_path = resolve_logical(logical)
2885
- if uncompressed_path is None or not uncompressed_path.exists():
2886
- issues.append(Issue("warning", "uncompressed_variant_missing",
2887
- f"Compressed file exists but uncompressed source missing: "
2884
+ uncondensed_path = resolve_logical(logical)
2885
+ if uncondensed_path is None or not uncondensed_path.exists():
2886
+ issues.append(Issue("warning", "uncondensed_variant_missing",
2887
+ f"Condensed file exists but uncondensed source missing: "
2888
2888
  f"{Path(logical).name}"))
2889
2889
 
2890
2890
  # --- Check: file in correct location for type ---
@@ -3277,8 +3277,8 @@ def format_json(results: list[LintResult]) -> str:
3277
3277
  return json.dumps(payload, indent=2, ensure_ascii=False)
3278
3278
 
3279
3279
 
3280
- def check_compression_pairs(root: Path) -> list[LintResult]:
3281
- """Check that every uncompressed skill/rule/command has a compressed counterpart and vice versa."""
3280
+ def check_condensation_pairs(root: Path) -> list[LintResult]:
3281
+ """Check that every uncondensed skill/rule/command has a condensed counterpart and vice versa."""
3282
3282
  results: list[LintResult] = []
3283
3283
 
3284
3284
  pairs = [
@@ -3289,78 +3289,78 @@ def check_compression_pairs(root: Path) -> list[LintResult]:
3289
3289
 
3290
3290
  for subdir, pattern, is_nested in pairs:
3291
3291
  # ADR-017: union across every source root.
3292
- compressed_dir = root / ".agent-src" / subdir
3293
- uncompressed_names: set[str] = set()
3292
+ condensed_dir = root / ".agent-src" / subdir
3293
+ uncondensed_names: set[str] = set()
3294
3294
  any_source = False
3295
3295
  for src_root in artefact_roots():
3296
- uncompressed_dir = src_root / subdir
3297
- if not uncompressed_dir.exists():
3296
+ uncondensed_dir = src_root / subdir
3297
+ if not uncondensed_dir.exists():
3298
3298
  continue
3299
3299
  any_source = True
3300
3300
  if is_nested:
3301
- uncompressed_names |= {d.name for d in uncompressed_dir.iterdir() if d.is_dir() and (d / pattern).exists()}
3301
+ uncondensed_names |= {d.name for d in uncondensed_dir.iterdir() if d.is_dir() and (d / pattern).exists()}
3302
3302
  else:
3303
- uncompressed_names |= {f.name for f in uncompressed_dir.glob(pattern) if f.is_file()}
3303
+ uncondensed_names |= {f.name for f in uncondensed_dir.glob(pattern) if f.is_file()}
3304
3304
 
3305
3305
  if not any_source:
3306
3306
  continue
3307
3307
 
3308
- # Collect names from compressed
3309
- if compressed_dir.exists():
3308
+ # Collect names from condensed
3309
+ if condensed_dir.exists():
3310
3310
  if is_nested:
3311
- compressed_names = {d.name for d in compressed_dir.iterdir() if d.is_dir() and (d / pattern).exists()}
3311
+ condensed_names = {d.name for d in condensed_dir.iterdir() if d.is_dir() and (d / pattern).exists()}
3312
3312
  else:
3313
- compressed_names = {f.name for f in compressed_dir.glob(pattern) if f.is_file()}
3313
+ condensed_names = {f.name for f in condensed_dir.glob(pattern) if f.is_file()}
3314
3314
  else:
3315
- compressed_names = set()
3315
+ condensed_names = set()
3316
3316
 
3317
- # Missing compressed
3318
- for name in sorted(uncompressed_names - compressed_names):
3317
+ # Missing condensed
3318
+ for name in sorted(uncondensed_names - condensed_names):
3319
3319
  path_str = f".agent-src/{subdir}/{name}/{pattern}" if is_nested else f".agent-src/{subdir}/{name}"
3320
3320
  results.append(LintResult(
3321
3321
  file=path_str,
3322
3322
  artifact_type=subdir.rstrip("s"),
3323
3323
  status="fail",
3324
- issues=[Issue("error", "missing_compressed", f"Uncompressed exists but compressed version is missing")],
3325
- suggestions=[f"Run /compress to generate .agent-src/{subdir}/{name}"],
3324
+ issues=[Issue("error", "missing_condensed", f"Uncondensed exists but condensed version is missing")],
3325
+ suggestions=[f"Run /condense to generate .agent-src/{subdir}/{name}"],
3326
3326
  ))
3327
3327
 
3328
- # Orphaned compressed (no source)
3329
- for name in sorted(compressed_names - uncompressed_names):
3328
+ # Orphaned condensed (no source)
3329
+ for name in sorted(condensed_names - uncondensed_names):
3330
3330
  path_str = f".agent-src/{subdir}/{name}/{pattern}" if is_nested else f".agent-src/{subdir}/{name}"
3331
3331
  results.append(LintResult(
3332
3332
  file=path_str,
3333
3333
  artifact_type=subdir.rstrip("s"),
3334
3334
  status="fail",
3335
- issues=[Issue("error", "orphaned_compressed", f"Compressed exists but uncompressed source is missing")],
3336
- suggestions=[f"Delete orphaned file or restore uncompressed source"],
3335
+ issues=[Issue("error", "orphaned_condensed", f"Condensed exists but uncondensed source is missing")],
3336
+ suggestions=[f"Delete orphaned file or restore uncondensed source"],
3337
3337
  ))
3338
3338
 
3339
3339
  return results
3340
3340
 
3341
3341
 
3342
- def check_compression_quality(root: Path) -> list[LintResult]:
3343
- """Check that compressed skills preserve key content from their uncompressed source."""
3342
+ def check_condensation_quality(root: Path) -> list[LintResult]:
3343
+ """Check that condensed skills preserve key content from their uncondensed source."""
3344
3344
  results: list[LintResult] = []
3345
- compressed_dir = root / ".agent-src" / "skills"
3346
- if not compressed_dir.exists():
3345
+ condensed_dir = root / ".agent-src" / "skills"
3346
+ if not condensed_dir.exists():
3347
3347
  return results
3348
3348
 
3349
3349
  # ADR-017: collect skill dirs from every source root.
3350
3350
  skill_sources: list[Path] = []
3351
3351
  for src_root in artefact_roots():
3352
- uncompressed_dir = src_root / "skills"
3353
- if uncompressed_dir.exists():
3354
- skill_sources.extend(sorted(uncompressed_dir.iterdir()))
3352
+ uncondensed_dir = src_root / "skills"
3353
+ if uncondensed_dir.exists():
3354
+ skill_sources.extend(sorted(uncondensed_dir.iterdir()))
3355
3355
  if not skill_sources:
3356
3356
  return results
3357
3357
 
3358
- # Sections that MUST exist in compressed if they exist in uncompressed
3358
+ # Sections that MUST exist in condensed if they exist in uncondensed
3359
3359
  preserved_sections = ["When to use", "Procedure", "Gotcha", "Gotchas", "Do NOT", "Output format", "Output"]
3360
3360
 
3361
3361
  for skill_dir in skill_sources:
3362
3362
  src = skill_dir / "SKILL.md"
3363
- dst = compressed_dir / skill_dir.name / "SKILL.md"
3363
+ dst = condensed_dir / skill_dir.name / "SKILL.md"
3364
3364
  if not src.exists() or not dst.exists():
3365
3365
  continue
3366
3366
 
@@ -3372,11 +3372,11 @@ def check_compression_quality(root: Path) -> list[LintResult]:
3372
3372
  issues: list[Issue] = []
3373
3373
  suggestions: list[str] = []
3374
3374
 
3375
- # Check required sections survived compression
3375
+ # Check required sections survived condensation
3376
3376
  for section in preserved_sections:
3377
3377
  if section_matches(section, src_sections) and not section_matches(section, dst_sections):
3378
- issues.append(Issue("warning", "compression_lost_section",
3379
- f"Compressed version lost '{section}' section"))
3378
+ issues.append(Issue("warning", "condensation_lost_section",
3379
+ f"Condensed version lost '{section}' section"))
3380
3380
 
3381
3381
  # Check validation keywords survived
3382
3382
  src_proc = find_procedure_block(src_text) or ""
@@ -3385,23 +3385,23 @@ def check_compression_quality(root: Path) -> list[LintResult]:
3385
3385
  src_has_validation = any(re.search(p, src_proc, re.IGNORECASE) for p in validation_patterns)
3386
3386
  dst_has_validation = any(re.search(p, dst_proc, re.IGNORECASE) for p in validation_patterns)
3387
3387
  if src_has_validation and not dst_has_validation:
3388
- issues.append(Issue("warning", "compression_lost_validation",
3389
- "Compressed procedure lost validation keywords present in uncompressed"))
3388
+ issues.append(Issue("warning", "condensation_lost_validation",
3389
+ "Condensed procedure lost validation keywords present in uncondensed"))
3390
3390
 
3391
3391
  # Check code blocks / examples survived
3392
3392
  src_code_blocks = len(re.findall(r"```", src_text)) # pairs of ``` = blocks
3393
3393
  dst_code_blocks = len(re.findall(r"```", dst_text))
3394
3394
  if src_code_blocks > 0 and dst_code_blocks < src_code_blocks // 2:
3395
- issues.append(Issue("warning", "compression_lost_example",
3396
- f"Compressed version has fewer code blocks "
3395
+ issues.append(Issue("warning", "condensation_lost_example",
3396
+ f"Condensed version has fewer code blocks "
3397
3397
  f"({dst_code_blocks // 2} vs {src_code_blocks // 2} in source)"))
3398
3398
 
3399
3399
  # Check anti-pattern / "Do NOT" bullets survived
3400
3400
  src_donot = len(re.findall(r"(?:Do NOT|NEVER|MUST NOT)\b", src_text))
3401
3401
  dst_donot = len(re.findall(r"(?:Do NOT|NEVER|MUST NOT)\b", dst_text))
3402
3402
  if src_donot > 0 and dst_donot < src_donot // 2:
3403
- issues.append(Issue("warning", "compression_lost_antipattern",
3404
- f"Compressed version lost anti-pattern constraints "
3403
+ issues.append(Issue("warning", "condensation_lost_antipattern",
3404
+ f"Condensed version lost anti-pattern constraints "
3405
3405
  f"({dst_donot} vs {src_donot} in source)"))
3406
3406
 
3407
3407
  if issues:
@@ -3411,7 +3411,7 @@ def check_compression_quality(root: Path) -> list[LintResult]:
3411
3411
  artifact_type="skill",
3412
3412
  status="pass_with_warnings",
3413
3413
  issues=issues,
3414
- suggestions=suggestions or ["Re-compress to preserve lost content"],
3414
+ suggestions=suggestions or ["Re-condense to preserve lost content"],
3415
3415
  ))
3416
3416
 
3417
3417
  return results
@@ -3458,7 +3458,7 @@ def check_duplication(root: Path) -> list[LintResult]:
3458
3458
  if len(words_a) > 3 and len(words_b) > 3:
3459
3459
  overlap = len(words_a & words_b) / min(len(words_a), len(words_b))
3460
3460
  if overlap > 0.7:
3461
- rel_a = f".agent-src.uncompressed/skills/{name_a}/SKILL.md"
3461
+ rel_a = f".agent-src.uncondensed/skills/{name_a}/SKILL.md"
3462
3462
  results.append(LintResult(
3463
3463
  file=rel_a,
3464
3464
  artifact_type="skill",
@@ -3490,9 +3490,9 @@ def parse_args() -> argparse.Namespace:
3490
3490
  parser.add_argument("--all", action="store_true", help="Lint all skills/rules in the repo")
3491
3491
  parser.add_argument("--changed", action="store_true", help="Lint changed skills/rules")
3492
3492
  parser.add_argument("--format", choices=["text", "json"], default="text", help="Output format")
3493
- parser.add_argument("--pairs", action="store_true", help="Check compression pairs (uncompressed vs compressed)")
3493
+ parser.add_argument("--pairs", action="store_true", help="Check condensation pairs (uncondensed vs condensed)")
3494
3494
  parser.add_argument("--duplicates", action="store_true", help="Detect skills with similar descriptions")
3495
- parser.add_argument("--compression-quality", action="store_true", help="Check compressed skills preserve key content")
3495
+ parser.add_argument("--condensation-quality", action="store_true", help="Check condensed skills preserve key content")
3496
3496
  parser.add_argument("--strict-warnings", action="store_true", help="Return non-zero on warnings")
3497
3497
  parser.add_argument("--report", action="store_true", help="Output quality score report")
3498
3498
  parser.add_argument("--repo-root", default=".", help="Repository root")
@@ -3562,7 +3562,7 @@ def format_report(results: list[LintResult]) -> str:
3562
3562
  lines.append("| File | Issues | Status |")
3563
3563
  lines.append("|---|---|---|")
3564
3564
  for fpath, count, status in files_with_issues[:10]:
3565
- short = fpath.replace(".agent-src.uncompressed/", "")
3565
+ short = fpath.replace(".agent-src.uncondensed/", "")
3566
3566
  lines.append(f"| `{short}` | {count} | {status} |")
3567
3567
 
3568
3568
  # Per-file quality breakdown (skills only)
@@ -3572,7 +3572,7 @@ def format_report(results: list[LintResult]) -> str:
3572
3572
  lines.append("| Skill | Structure | Validation | Scope | Dependency | Lines |")
3573
3573
  lines.append("|---|---|---|---|---|---|")
3574
3574
  for r in sorted(skill_results, key=lambda x: x.file):
3575
- short = r.file.replace(".agent-src.uncompressed/skills/", "").replace(".agent-src/skills/", "").replace("/SKILL.md", "")
3575
+ short = r.file.replace(".agent-src.uncondensed/skills/", "").replace(".agent-src/skills/", "").replace("/SKILL.md", "")
3576
3576
  codes = {i.code for i in r.issues}
3577
3577
 
3578
3578
  # Structure: fail if missing required sections
@@ -3625,7 +3625,7 @@ def main() -> int:
3625
3625
  continue
3626
3626
  if path.is_dir():
3627
3627
  # Walk the directory like a source root so callers can pass
3628
- # `packages/pack-laravel/.agent-src.uncompressed/` (ADR-017 Phase 4.4).
3628
+ # `packages/pack-laravel/.agent-src.uncondensed/` (ADR-017 Phase 4.4).
3629
3629
  paths.extend(gather_candidate_files_under(path))
3630
3630
  else:
3631
3631
  paths.append(path)
@@ -3646,11 +3646,11 @@ def main() -> int:
3646
3646
 
3647
3647
  # Additional checks
3648
3648
  if args.pairs or args.report:
3649
- results.extend(check_compression_pairs(root))
3649
+ results.extend(check_condensation_pairs(root))
3650
3650
  if args.duplicates:
3651
3651
  results.extend(check_duplication(root))
3652
- if args.compression_quality or args.report:
3653
- results.extend(check_compression_quality(root))
3652
+ if args.condensation_quality or args.report:
3653
+ results.extend(check_condensation_quality(root))
3654
3654
 
3655
3655
  if args.report:
3656
3656
  print(format_report(results))
@@ -3,14 +3,14 @@
3
3
 
4
4
  Implements step-2-skill-inventory-rationalization.md Phase 2 Step 2.
5
5
  Mirrors `scripts/audit_overlap.py` (the rule-side analog) but reads
6
- `.agent-src.uncompressed/skills/<slug>/SKILL.md` frontmatter directly
6
+ `.agent-src.uncondensed/skills/<slug>/SKILL.md` frontmatter directly
7
7
  and emits `agents/runtime/metrics/skill-overlap.md` listing pairs scoring
8
8
  ≥ 0.6 on either:
9
9
 
10
10
  - description-trigger Jaccard (tokenized union of `description` +
11
11
  any `triggers:` / `keywords:` / `intents:` frontmatter values);
12
12
  - symbol-set overlap (paths cited inside the SKILL.md body —
13
- `.agent-src.uncompressed/...`, `agents/...`, `scripts/...`).
13
+ `.agent-src.uncondensed/...`, `agents/...`, `scripts/...`).
14
14
 
15
15
  The 0.6 threshold matches the roadmap; the rule-side script uses
16
16
  lower thresholds because rules have richer trigger metadata. Skills
@@ -28,7 +28,7 @@ from itertools import combinations
28
28
  from pathlib import Path
29
29
 
30
30
  REPO = Path(__file__).resolve().parent.parent
31
- SKILLS = REPO / ".agent-src.uncompressed" / "skills"
31
+ SKILLS = REPO / ".agent-src.uncondensed" / "skills"
32
32
  OUT = REPO / "agents" / "metrics" / "skill-overlap.md"
33
33
 
34
34
  # Roadmap target. Empirical calibration (210 skills, 2026-05-16) shows
@@ -56,7 +56,7 @@ STOPWORDS = {
56
56
  "command", "commands", "guideline", "guidelines",
57
57
  }
58
58
 
59
- PATH_RE = re.compile(r"`?(?:\.agent-src(?:\.uncompressed)?|agents|scripts|docs|tests|\.augment|\.claude)/[A-Za-z0-9_./-]+`?")
59
+ PATH_RE = re.compile(r"`?(?:\.agent-src(?:\.uncondensed)?|agents|scripts|docs|tests|\.augment|\.claude)/[A-Za-z0-9_./-]+`?")
60
60
  TOKEN_RE = re.compile(r"[A-Za-z][A-Za-z0-9_-]{2,}")
61
61
 
62
62
 
@@ -155,7 +155,7 @@ def render(pairs: list[dict], total: int) -> str:
155
155
  "# Skill Structural Overlap (baseline)",
156
156
  "",
157
157
  "> Generated by `scripts/skill_overlap.py`. Scans",
158
- "> `.agent-src.uncompressed/skills/*/SKILL.md` frontmatter (description +",
158
+ "> `.agent-src.uncondensed/skills/*/SKILL.md` frontmatter (description +",
159
159
  "> trigger metadata) and body symbol references. Reports pairs in two",
160
160
  f"> tiers: **strong** ≥ {STRONG_TOKEN} description-token Jaccard or ≥ {STRONG_SYMBOL}",
161
161
  f"> symbol-set Jaccard (roadmap floor); **candidate** ≥ {CANDIDATE_TOKEN} / ≥ {CANDIDATE_SYMBOL}",
@@ -28,8 +28,8 @@ from pathlib import Path
28
28
  from typing import Dict, List
29
29
 
30
30
  ROOT = Path(__file__).resolve().parents[2]
31
- DEFAULT_SKILLS = ROOT / ".agent-src.uncompressed" / "skills"
32
- DEFAULT_PERSONAS = ROOT / ".agent-src.uncompressed" / "personas"
31
+ DEFAULT_SKILLS = ROOT / ".agent-src.uncondensed" / "skills"
32
+ DEFAULT_PERSONAS = ROOT / ".agent-src.uncondensed" / "personas"
33
33
  THRESHOLDS = {"core": 5, "specialist": 3}
34
34
 
35
35