@event4u/agent-config 3.3.0 → 4.1.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 (585) 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 +181 -3
  144. package/CONTRIBUTING.md +31 -12
  145. package/README.md +18 -10
  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/apply.js +238 -0
  164. package/dist/install/apply.js.map +1 -0
  165. package/dist/install/atomic.js +92 -0
  166. package/dist/install/atomic.js.map +1 -0
  167. package/dist/install/bridges/augment.js +20 -0
  168. package/dist/install/bridges/augment.js.map +1 -0
  169. package/dist/install/bridges/claude.js +44 -0
  170. package/dist/install/bridges/claude.js.map +1 -0
  171. package/dist/install/bridges/cline.js +69 -0
  172. package/dist/install/bridges/cline.js.map +1 -0
  173. package/dist/install/bridges/copilot.js +28 -0
  174. package/dist/install/bridges/copilot.js.map +1 -0
  175. package/dist/install/bridges/cursor.js +34 -0
  176. package/dist/install/bridges/cursor.js.map +1 -0
  177. package/dist/install/bridges/gemini.js +39 -0
  178. package/dist/install/bridges/gemini.js.map +1 -0
  179. package/dist/install/bridges/index.js +88 -0
  180. package/dist/install/bridges/index.js.map +1 -0
  181. package/dist/install/bridges/marker-content.js +153 -0
  182. package/dist/install/bridges/marker-content.js.map +1 -0
  183. package/dist/install/bridges/markers.js +42 -0
  184. package/dist/install/bridges/markers.js.map +1 -0
  185. package/dist/install/bridges/types.js +31 -0
  186. package/dist/install/bridges/types.js.map +1 -0
  187. package/dist/install/bridges/vscode.js +26 -0
  188. package/dist/install/bridges/vscode.js.map +1 -0
  189. package/dist/install/bridges/windsurf.js +35 -0
  190. package/dist/install/bridges/windsurf.js.map +1 -0
  191. package/dist/install/conflict.js +196 -0
  192. package/dist/install/conflict.js.map +1 -0
  193. package/dist/install/detect.js +218 -0
  194. package/dist/install/detect.js.map +1 -0
  195. package/dist/install/paths.js +82 -0
  196. package/dist/install/paths.js.map +1 -0
  197. package/dist/install/plan.js +157 -0
  198. package/dist/install/plan.js.map +1 -0
  199. package/dist/install/txlog.js +140 -0
  200. package/dist/install/txlog.js.map +1 -0
  201. package/dist/install/types.js +19 -0
  202. package/dist/install/types.js.map +1 -0
  203. package/dist/install/wizard-plan.js +184 -0
  204. package/dist/install/wizard-plan.js.map +1 -0
  205. package/dist/mcp/registry-manifest.json +4 -4
  206. package/dist/router.json +67 -19
  207. package/dist/server/app.js +6 -0
  208. package/dist/server/app.js.map +1 -1
  209. package/dist/server/routes/install.js +547 -0
  210. package/dist/server/routes/install.js.map +1 -0
  211. package/dist/server/routes/wizard.js +301 -6
  212. package/dist/server/routes/wizard.js.map +1 -1
  213. package/dist/server/routes/workspace.js +396 -0
  214. package/dist/server/routes/workspace.js.map +1 -0
  215. package/dist/server/schemas/settings.js +4 -3
  216. package/dist/server/schemas/settings.js.map +1 -1
  217. package/dist/ui/assets/index-BXZILUxe.css +1 -0
  218. package/dist/ui/assets/index-DLEuEW1V.js +35 -0
  219. package/dist/ui/assets/index-DLEuEW1V.js.map +1 -0
  220. package/dist/ui/index.html +2 -2
  221. package/docs/MIGRATION.md +1 -1
  222. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  223. package/docs/adrs/router/0001-three-tier-routing.md +4 -4
  224. package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
  225. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
  226. package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
  227. package/docs/adrs/telegraph/README.md +9 -0
  228. package/docs/architecture/augment-projection.md +4 -4
  229. package/docs/architecture/claude-bundle.md +1 -1
  230. package/docs/architecture/current-onboard-baseline.md +3 -3
  231. package/docs/architecture/multi-tool-projection.md +10 -10
  232. package/docs/architecture/source-projection.md +27 -27
  233. package/docs/architecture.md +19 -15
  234. package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
  235. package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
  236. package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
  237. package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
  238. package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
  239. package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
  240. package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
  241. package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
  242. package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
  243. package/docs/benchmark.md +65 -0
  244. package/docs/benchmarks.md +16 -16
  245. package/docs/catalog.md +17 -15
  246. package/docs/contracts/CHANGELOG-conventions.md +1 -1
  247. package/docs/contracts/STABILITY.md +2 -2
  248. package/docs/contracts/adoption-signal-floor.md +110 -0
  249. package/docs/contracts/adr-chat-history-split.md +4 -4
  250. package/docs/contracts/adr-command-suggestion.md +4 -4
  251. package/docs/contracts/adr-gtm-context-spine.md +1 -1
  252. package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
  253. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  254. package/docs/contracts/adr-layout.md +2 -2
  255. package/docs/contracts/adr-product-ui-track.md +10 -10
  256. package/docs/contracts/adr-user-types-axis.md +3 -3
  257. package/docs/contracts/adr-wing4-context-spine.md +1 -1
  258. package/docs/contracts/agent-memory-contract.md +3 -3
  259. package/docs/contracts/agents-md-tech-stack.md +2 -2
  260. package/docs/contracts/ai-council-config.md +2 -2
  261. package/docs/contracts/at-rest-encryption.md +4 -0
  262. package/docs/contracts/audit-log-v1.md +1 -1
  263. package/docs/contracts/benchmark-ab-contract.md +101 -0
  264. package/docs/contracts/benchmark-corpus-spec.md +1 -1
  265. package/docs/contracts/branch-protection-policy.md +98 -0
  266. package/docs/contracts/ci-cost-budget.md +106 -0
  267. package/docs/contracts/ci-green-floor.md +141 -0
  268. package/docs/contracts/command-clusters.md +6 -6
  269. package/docs/contracts/command-surface-tiers.md +2 -2
  270. package/docs/contracts/command-taxonomy.md +2 -2
  271. package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
  272. package/docs/contracts/config-presets.md +1 -1
  273. package/docs/contracts/context-paths.md +3 -3
  274. package/docs/contracts/context-spine.md +1 -1
  275. package/docs/contracts/cost-summary-schema.md +12 -12
  276. package/docs/contracts/cross-wing-handoff.md +4 -4
  277. package/docs/contracts/daily-workspace.md +4 -0
  278. package/docs/contracts/decision-trace-v1.md +2 -2
  279. package/docs/contracts/discovery-manifest.md +4 -4
  280. package/docs/contracts/explain-modes.md +4 -0
  281. package/docs/contracts/file-ownership-matrix.json +3493 -3318
  282. package/docs/contracts/file-ownership-matrix.md +3 -3
  283. package/docs/contracts/frontmatter-contract.md +4 -4
  284. package/docs/contracts/ghostwriter-schema.md +3 -3
  285. package/docs/contracts/gui-wizard.md +1 -1
  286. package/docs/contracts/harness-expectations.md +123 -0
  287. package/docs/contracts/host-agent-protocol.md +4 -0
  288. package/docs/contracts/implement-ticket-flow.md +9 -9
  289. package/docs/contracts/install-scopes.md +77 -0
  290. package/docs/contracts/iron-law-overrides.txt +1 -1
  291. package/docs/contracts/kernel-membership.md +26 -26
  292. package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
  293. package/docs/contracts/linter-structural-model.md +2 -2
  294. package/docs/contracts/load-context-budget-model.md +4 -4
  295. package/docs/contracts/load-context-schema.md +13 -13
  296. package/docs/contracts/local-analytics.md +4 -0
  297. package/docs/contracts/local-knowledge-ingestion.md +1 -1
  298. package/docs/contracts/mcp-cloud-scope.md +2 -2
  299. package/docs/contracts/mcp-phase-1-scope.md +3 -3
  300. package/docs/contracts/measurement-baseline.md +5 -5
  301. package/docs/contracts/mental-models.md +30 -30
  302. package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
  303. package/docs/contracts/namespace.md +4 -4
  304. package/docs/contracts/orchestration-dsl-v1.md +7 -7
  305. package/docs/contracts/package-self-orientation.md +12 -12
  306. package/docs/contracts/persona-schema.md +6 -6
  307. package/docs/contracts/pilot/language-and-tone.md +1 -1
  308. package/docs/contracts/plain-language-surface.md +117 -0
  309. package/docs/contracts/profile-system.md +3 -3
  310. package/docs/contracts/release-pr-gating.md +103 -0
  311. package/docs/contracts/role-experience.md +3 -3
  312. package/docs/contracts/rule-classification.md +13 -13
  313. package/docs/contracts/rule-interactions.md +4 -4
  314. package/docs/contracts/rule-interactions.yml +30 -30
  315. package/docs/contracts/rule-priority-hierarchy.md +13 -13
  316. package/docs/contracts/rule-router.md +2 -2
  317. package/docs/contracts/safety-model.md +1 -1
  318. package/docs/contracts/skill-distribution-channels.md +61 -0
  319. package/docs/contracts/skill-domains.md +2 -2
  320. package/docs/contracts/smoke-contracts.md +5 -5
  321. package/docs/contracts/telegraph-telemetry.md +83 -0
  322. package/docs/contracts/trust-and-safety.md +5 -5
  323. package/docs/contracts/ui-stack-extension.md +7 -7
  324. package/docs/contracts/ui-track-flow.md +9 -9
  325. package/docs/contracts/user-type-schema.md +4 -4
  326. package/docs/contracts/workflow-packs.md +4 -4
  327. package/docs/contracts/workspace-documents.md +4 -0
  328. package/docs/customization.md +28 -8
  329. package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
  330. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
  331. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
  332. package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
  333. package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
  334. package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
  335. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
  336. package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
  337. package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
  338. package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
  339. package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
  340. package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
  341. package/docs/decisions/ADR-021-deployment-shape.md +1 -1
  342. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
  343. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
  344. package/docs/decisions/ADR-028-root-layout.md +7 -7
  345. package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
  346. package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
  347. package/docs/deploy/team-deployment-posture.md +20 -0
  348. package/docs/development.md +17 -17
  349. package/docs/distribution/registries.md +32 -0
  350. package/docs/distribution/registry-submissions.md +85 -0
  351. package/docs/distribution/telemetry-schema.md +1 -1
  352. package/docs/getting-started-by-role.md +45 -3
  353. package/docs/getting-started.md +2 -2
  354. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  355. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  356. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  357. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  358. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  359. package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
  360. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  361. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  362. package/docs/guidelines/agent-infra/layered-settings.md +56 -2
  363. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  364. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
  365. package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
  366. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  367. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
  368. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  369. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  370. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  371. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
  372. package/docs/guidelines/augment-portability-patterns.md +4 -4
  373. package/docs/guidelines/cross-role-handoff.md +2 -2
  374. package/docs/guidelines/php/php-coding-patterns.md +1 -1
  375. package/docs/guidelines/prompt-templates.md +6 -6
  376. package/docs/maintainers/dev-mode.md +1 -1
  377. package/docs/mcp.md +1 -1
  378. package/docs/parity/bench.json +3 -3
  379. package/docs/parity/ruflo.md +2 -2
  380. package/docs/profiles.md +11 -11
  381. package/docs/quality.md +11 -11
  382. package/docs/safety.md +3 -3
  383. package/docs/setup/mcp-client-config.md +1 -1
  384. package/docs/setup/mcp-r2-bootstrap.md +1 -1
  385. package/docs/setup/mcp-server-docker.md +3 -3
  386. package/docs/setup/per-ide/windsurf.md +1 -1
  387. package/docs/skills-catalog.md +8 -7
  388. package/docs/troubleshooting.md +1 -1
  389. package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
  390. package/llms.txt +7 -6
  391. package/package.json +1 -1
  392. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  393. package/scripts/_archive/README.md +2 -2
  394. package/scripts/_archive/_backfill_skill_domains.py +3 -3
  395. package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
  396. package/scripts/_archive/_p43_bodies.py +10 -10
  397. package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
  398. package/scripts/_archive/_p4_migrate.py +7 -7
  399. package/scripts/_archive/_phase2_shim_helper.py +1 -1
  400. package/scripts/_archive/_pilot_council_question.py +5 -5
  401. package/scripts/_cli/explain_last/inputs.py +1 -1
  402. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  403. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  404. package/scripts/_lib/agent_settings.py +195 -1
  405. package/scripts/_lib/agent_src.py +19 -19
  406. package/scripts/_lib/bench_ab_cache.py +162 -0
  407. package/scripts/_lib/bench_ab_scoring.py +209 -0
  408. package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
  409. package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
  410. package/scripts/_lib/claude_desktop_bundler.py +5 -5
  411. package/scripts/_lib/module_detection.py +223 -0
  412. package/scripts/_lib/scope_guard.sh +162 -0
  413. package/scripts/_phase4_bucket.py +3 -3
  414. package/scripts/_pilot_measure.py +4 -4
  415. package/scripts/_tmp_scan_framework_leakage.py +1 -1
  416. package/scripts/adoption_report.py +195 -0
  417. package/scripts/adoption_snapshot.py +219 -0
  418. package/scripts/adoption_status.py +166 -0
  419. package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
  420. package/scripts/ai_council/advisors.py +5 -5
  421. package/scripts/ai_council/compile_corpus.py +1 -1
  422. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
  423. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
  424. package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
  425. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
  426. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
  427. package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
  428. package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
  429. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
  430. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
  431. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
  432. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
  433. package/scripts/annotate_discovery.py +13 -13
  434. package/scripts/apply_modules_config.py +290 -0
  435. package/scripts/audit_adr_coverage.py +2 -2
  436. package/scripts/audit_auto_rules.py +2 -2
  437. package/scripts/audit_cloud_compatibility.py +3 -3
  438. package/scripts/audit_command_surface.py +9 -9
  439. package/scripts/audit_likelihood.py +2 -2
  440. package/scripts/audit_user_type_axis.py +2 -2
  441. package/scripts/bench_ab_cache_dispatch.py +68 -0
  442. package/scripts/bench_ab_clone.py +170 -0
  443. package/scripts/bench_ab_diff.py +227 -0
  444. package/scripts/bench_ab_integrity.py +143 -0
  445. package/scripts/bench_ab_run.py +235 -0
  446. package/scripts/bench_ab_task_runner.py +369 -0
  447. package/scripts/bench_ab_tracka_run.py +202 -0
  448. package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
  449. package/scripts/bench_run.py +33 -33
  450. package/scripts/bench_runner.py +2 -2
  451. package/scripts/bootstrap.sh +99 -0
  452. package/scripts/build_cloud_bundle.py +6 -6
  453. package/scripts/build_discovery_manifest.py +7 -7
  454. package/scripts/build_linear_digest.py +3 -3
  455. package/scripts/build_rule_trigger_matrix.py +8 -8
  456. package/scripts/chat_history.py +5 -5
  457. package/scripts/check_always_budget.py +11 -5
  458. package/scripts/check_augment_description_cap.py +3 -3
  459. package/scripts/check_cluster_patterns.py +2 -2
  460. package/scripts/check_command_count_messaging.py +3 -3
  461. package/scripts/{check_compression.py → check_condensation.py} +34 -34
  462. package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
  463. package/scripts/check_context_paths.py +7 -7
  464. package/scripts/check_council_layout.py +2 -2
  465. package/scripts/check_council_references.py +9 -9
  466. package/scripts/check_iron_law_prominence.py +2 -2
  467. package/scripts/check_kernel_rule_bundle.py +2 -2
  468. package/scripts/check_module_management_neutral.py +149 -0
  469. package/scripts/check_no_roadmap_refs.py +9 -9
  470. package/scripts/check_portability.py +3 -3
  471. package/scripts/check_public_catalog_links.py +4 -4
  472. package/scripts/check_references.py +7 -6
  473. package/scripts/check_release_pr_shape.py +112 -0
  474. package/scripts/check_reply_consistency.py +3 -3
  475. package/scripts/check_safety_floor_untouched.py +1 -1
  476. package/scripts/check_template_pin_drift.py +5 -5
  477. package/scripts/check_token_optimizer_freshness.py +3 -3
  478. package/scripts/ci_status.py +301 -0
  479. package/scripts/ci_time_ratio.py +1 -1
  480. package/scripts/cleanup_other_scope.sh +146 -0
  481. package/scripts/compile_router.py +10 -10
  482. package/scripts/{compress.py → condense.py} +64 -64
  483. package/scripts/condense.sh +18 -0
  484. package/scripts/{compress_memory.py → condense_memory.py} +33 -33
  485. package/scripts/config/presets.py +2 -2
  486. package/scripts/config/profiles.py +1 -1
  487. package/scripts/cost_by_conversation.py +3 -3
  488. package/scripts/cost_summary.py +7 -7
  489. package/scripts/count_token_optimizer_usage.sh +1 -1
  490. package/scripts/gen_discovery_baseline.py +5 -5
  491. package/scripts/generate_index.py +6 -6
  492. package/scripts/generate_ownership_matrix.py +10 -10
  493. package/scripts/generate_pack_manifests.py +1 -1
  494. package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
  495. package/scripts/install +3 -3
  496. package/scripts/install-hooks.sh +6 -6
  497. package/scripts/install.py +76 -11
  498. package/scripts/install.sh +187 -1
  499. package/scripts/inventory_frontmatter.py +2 -2
  500. package/scripts/iron_law_sha.py +3 -3
  501. package/scripts/lint_agents_layout.py +14 -7
  502. package/scripts/lint_agents_md.py +4 -4
  503. package/scripts/lint_archived_skills.py +3 -3
  504. package/scripts/lint_artefact_frontmatter.py +2 -2
  505. package/scripts/lint_bench_ab.py +172 -0
  506. package/scripts/lint_bench_corpus.py +1 -1
  507. package/scripts/lint_command_tiers.py +5 -5
  508. package/scripts/lint_context_spine_usage.py +1 -1
  509. package/scripts/lint_framework_leakage.py +7 -7
  510. package/scripts/lint_framework_leakage_allowlist.json +144 -84
  511. package/scripts/lint_ghostwriter_source.py +3 -3
  512. package/scripts/lint_handoffs.py +1 -1
  513. package/scripts/lint_load_context.py +11 -11
  514. package/scripts/lint_media_policy_linkage.py +5 -5
  515. package/scripts/lint_namespace.py +1 -1
  516. package/scripts/lint_no_new_atomic_commands.py +2 -2
  517. package/scripts/lint_orchestration_dsl.py +1 -1
  518. package/scripts/lint_pack_boundaries.py +2 -2
  519. package/scripts/lint_persona_governance.py +4 -4
  520. package/scripts/lint_role_experiences.py +237 -0
  521. package/scripts/lint_rule_interactions.py +2 -2
  522. package/scripts/lint_rule_tiers.py +1 -1
  523. package/scripts/lint_trust_coherence.py +2 -2
  524. package/scripts/mcp_registry_submit.sh +187 -0
  525. package/scripts/mcp_server/tools.py +1 -1
  526. package/scripts/measure_frugality_savings.py +10 -10
  527. package/scripts/measure_patterns.py +1 -1
  528. package/scripts/measure_projection_bytes.py +5 -5
  529. package/scripts/measure_rule_budget.py +3 -3
  530. package/scripts/measure_skill_reduction.py +1 -1
  531. package/scripts/memory_lookup.py +1 -1
  532. package/scripts/memory_status.py +2 -2
  533. package/scripts/migrate_command_suggestions.py +3 -3
  534. package/scripts/mine_session.py +1 -1
  535. package/scripts/move_artefact.py +3 -3
  536. package/scripts/new_skill.py +2 -2
  537. package/scripts/pack_mcp_content.py +9 -9
  538. package/scripts/plan_physical_move.py +6 -6
  539. package/scripts/print_required_checks.py +196 -0
  540. package/scripts/probe_skill_registration.py +413 -0
  541. package/scripts/propose_modules_config.py +145 -0
  542. package/scripts/prototype_lint_contradictions.py +1 -1
  543. package/scripts/recruit_preflight.sh +152 -0
  544. package/scripts/refine_ticket_detect.py +3 -3
  545. package/scripts/release.py +20 -0
  546. package/scripts/render_benchmark_md.py +308 -0
  547. package/scripts/roadmap_progress_hook.py +1 -1
  548. package/scripts/run_skill_evals.py +2 -2
  549. package/scripts/runtime_registry.py +4 -4
  550. package/scripts/schemas/command.schema.json +4 -4
  551. package/scripts/schemas/rule.schema.json +5 -5
  552. package/scripts/schemas/skill.schema.json +3 -3
  553. package/scripts/schemas/user-type.schema.json +1 -1
  554. package/scripts/score_skill_selection.py +1 -1
  555. package/scripts/skill_collision_clusters.py +2 -2
  556. package/scripts/skill_linter.py +81 -81
  557. package/scripts/skill_overlap.py +5 -5
  558. package/scripts/skill_tools/audit_persona_coverage.py +2 -2
  559. package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
  560. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  561. package/scripts/skill_tools/score_skill_relevance.py +1 -1
  562. package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
  563. package/scripts/skill_trigger_eval.py +3 -3
  564. package/scripts/smoke/kernel.sh +7 -1
  565. package/scripts/smoke/router.sh +5 -5
  566. package/scripts/smoke/skills.sh +1 -1
  567. package/scripts/smoke_quickstart.py +1 -1
  568. package/scripts/snapshot_agent_outputs.py +3 -3
  569. package/scripts/spotcheck_thin_root.py +1 -1
  570. package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
  571. package/scripts/update_counts.py +1 -1
  572. package/scripts/validate_decision_engine.py +1 -1
  573. package/scripts/validate_frontmatter.py +1 -1
  574. package/scripts/validate_safe_paths.py +3 -3
  575. package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
  576. package/scripts/verify_roadmap_closure.py +6 -6
  577. package/templates/consumer-settings/ONBOARDING.md +41 -0
  578. package/.agent-src/commands/install-via-agent.md +0 -129
  579. package/.agent-src/skills/compress-memory/SKILL.md +0 -131
  580. package/dist/ui/assets/index-D-DY1ywI.js +0 -35
  581. package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
  582. package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
  583. package/docs/adrs/caveman/README.md +0 -9
  584. package/docs/contracts/caveman-telemetry.md +0 -83
  585. package/scripts/compress.sh +0 -18
@@ -5,7 +5,7 @@ stability: stable
5
5
  # ADR — Context-Aware Command Suggestion
6
6
 
7
7
  > **Status:** Decided · Phases 1–7 shipped · 2026-04-30
8
- > **Rule:** [`command-suggestion`](../../.agent-src.uncompressed/rules/command-suggestion-policy.md)
8
+ > **Rule:** [`command-suggestion`](../../.agent-src.uncondensed/rules/command-suggestion-policy.md)
9
9
  > **Eligibility table:** [`command-suggestion-eligibility.md`](command-suggestion-eligibility.md)
10
10
  > **Engine:** `scripts/command_suggester/`
11
11
  > **Orthogonal to:** R1 (`adr-work-engine-rename.md`) — the suggester is a
@@ -89,7 +89,7 @@ suppression when they signal real intent.
89
89
 
90
90
  ## Hardening — what suggestion must never do
91
91
 
92
- The rule (`.agent-src.uncompressed/rules/command-suggestion-policy.md`)
92
+ The rule (`.agent-src.uncondensed/rules/command-suggestion-policy.md`)
93
93
  binds the engine to five non-negotiables, mirrored as goldens:
94
94
 
95
95
  1. **No execution without user pick.** `SUGGEST. NEVER INVOKE.` is the
@@ -138,7 +138,7 @@ retirement candidates without a hard SLA.
138
138
 
139
139
  ## See also
140
140
 
141
- - [`command-suggestion`](../../.agent-src.uncompressed/rules/command-suggestion-policy.md) — runtime rule
141
+ - [`command-suggestion`](../../.agent-src.uncondensed/rules/command-suggestion-policy.md) — runtime rule
142
142
  - [`command-suggestion-eligibility.md`](command-suggestion-eligibility.md) — locked eligibility table
143
143
  - [`adr-prompt-driven-execution.md`](adr-prompt-driven-execution.md) — `/work` entrypoint that explicit slash invocations route to
144
- - [`agent-settings`](../../.agent-src.uncompressed/templates/agent-settings.md) — `commands.suggestion.*` reference
144
+ - [`agent-settings`](../../.agent-src.uncondensed/templates/agent-settings.md) — `commands.suggestion.*` reference
@@ -111,6 +111,6 @@ Three signals that this decision is wrong and the ADR needs revisiting:
111
111
  — `context_spine.items.enum` extended in this ADR.
112
112
  - `agents/roadmaps/` § Block G — the authorising roadmap (archived
113
113
  after merge; this ADR is the durable record).
114
- - [`.agent-src.uncompressed/rules/skill-quality.md`](../../.agent-src.uncompressed/rules/skill-quality.md)
114
+ - [`.agent-src.uncondensed/rules/skill-quality.md`](../../.agent-src.uncondensed/rules/skill-quality.md)
115
115
  § Senior-Tier Required Structure — the four blocks every senior
116
116
  skill ships independently of spine opt-in.
@@ -13,12 +13,12 @@ stability: stable
13
13
  The `/implement-ticket` orchestrator ships on **Python 3.10+** (stdlib + `pyyaml`).
14
14
 
15
15
  Bash is rejected as the runtime. It stays only where it already lives —
16
- the install driver, compression helper, and test runner — not the
16
+ the install driver, condensation helper, and test runner — not the
17
17
  delivery flow.
18
18
 
19
19
  ## Why this was a real question
20
20
 
21
- The repo already ships a Bash install + compression toolchain. A
21
+ The repo already ships a Bash install + condensation toolchain. A
22
22
  shell-native dispatcher would have reused the existing muscle memory and
23
23
  avoided adding Python as a delivery-runtime dependency. The spike
24
24
  existed to verify whether Bash could still carry the 8-step linear flow
@@ -85,7 +85,7 @@ Python is 3 files with shared types.
85
85
  ## Tradeoffs we accept
86
86
 
87
87
  - **New hard dependency on Python 3.10+ and `pyyaml`.** Mitigated: Python 3
88
- is already a build/test dependency of this repo (linters, compression,
88
+ is already a build/test dependency of this repo (linters, condensation,
89
89
  `update_counts.py`). `pyyaml` is already pinned in `pyproject.toml` /
90
90
  `requirements-*.txt`. Zero new install surface for contributors.
91
91
  - **We lose the "just-shell" story.** The install script stays Bash. The
@@ -100,7 +100,7 @@ Python is 3 files with shared types.
100
100
  on its own evidence.
101
101
  - Does not commit to a specific framework (click, typer, bare argparse);
102
102
  that is chosen during Phase 1 and kept minimal.
103
- - Does not move the compression/install scripts off Bash.
103
+ - Does not move the condensation/install scripts off Bash.
104
104
 
105
105
  ## Consequences — unblocks
106
106
 
@@ -14,7 +14,7 @@ keep-beta-until: 2026-08-13
14
14
  ## Decision
15
15
 
16
16
  Install-time skill filtering uses a dedicated axis seeded under
17
- `user-types/` (package root, not `.agent-src.uncompressed/`). The
17
+ `user-types/` (package root, not `.agent-src.uncondensed/`). The
18
18
  selection lands in the consumer's `.agent-settings.yml` under
19
19
  `personal.user_type: <id>` via `agent-config install --user-type=<id>`.
20
20
  Runtime skill discovery intersects each skill's
@@ -38,7 +38,7 @@ Reserved areas (bootstrap pass — step-11 Phase 4 Step 3):
38
38
  | Area | Scope | Owner contract |
39
39
  |---|---|---|
40
40
  | `cost` | Budget ladder, hard-stop hook, cost reporting | [`cost-enforcement.md`](cost-enforcement.md) |
41
- | `caveman` | Caveman-speak compression, decompression, reversibility | [`compression-default-kill-criterion.md`](compression-default-kill-criterion.md) |
41
+ | `telegraph` | Telegraph-speak condensation, decondensation, reversibility | [`condensation-default-kill-criterion.md`](condensation-default-kill-criterion.md) |
42
42
  | `schema` | Frontmatter schemas, v2 rigor, lint behaviour | [`schema-versioning.md`](schema-versioning.md) (when published) |
43
43
  | `router` | `router.json` shape, tier semantics, dispatch precedence | [`rule-router.md`](rule-router.md) |
44
44
  | `smoke` | Per-tier smoke contracts, baseline locks | [`smoke-contracts.md`](smoke-contracts.md) |
@@ -91,7 +91,7 @@ Default mode is **warn** at the consumer surface; **fail** under `task ci`. Rati
91
91
 
92
92
  ## Relationship to `adr-create` skill
93
93
 
94
- [`adr-create`](../../.agent-src.uncompressed/skills/adr-create/SKILL.md) accepts an optional `<area>` argument (added in step-11 Phase 4 Step 4):
94
+ [`adr-create`](../../.agent-src.uncondensed/skills/adr-create/SKILL.md) accepts an optional `<area>` argument (added in step-11 Phase 4 Step 4):
95
95
 
96
96
  - No `<area>` → flat surface, `docs/decisions/`.
97
97
  - `<area>` matches inventory → per-area surface, `docs/adrs/<area>/`.
@@ -16,9 +16,9 @@ stability: stable
16
16
  R3 ships four directive sets — `backend` (R1/R2), **`ui`**, **`ui-trivial`**,
17
17
  and **`mixed`** — dispatched at the engine boundary on
18
18
  `state.directive_set`. The slot wiring is fixed by
19
- [`directives/ui/__init__.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/__init__.py),
20
- [`directives/ui_trivial/__init__.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui_trivial/__init__.py),
21
- and [`directives/mixed/__init__.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/mixed/__init__.py);
19
+ [`directives/ui/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/__init__.py),
20
+ [`directives/ui_trivial/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui_trivial/__init__.py),
21
+ and [`directives/mixed/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/mixed/__init__.py);
22
22
  the contract for each lives in [`ui-track-flow.md`](ui-track-flow.md).
23
23
 
24
24
  The UI set drives `audit → design → apply → review → polish → report`
@@ -26,7 +26,7 @@ with three load-bearing properties:
26
26
 
27
27
  1. **Existing-UI-audit is a hard gate.** No `apply` runs without
28
28
  `state.ui_audit` populated. The gate lives at directive level **and**
29
- at always-on rule level ([`ui-audit-gate`](../../.agent-src.uncompressed/rules/ui-audit-gate.md))
29
+ at always-on rule level ([`ui-audit-gate`](../../.agent-src.uncondensed/rules/ui-audit-gate.md))
30
30
  so an agent acting outside the engine cannot bypass it.
31
31
  2. **Design brief is locked microcopy.** `apply` consumes the brief
32
32
  verbatim — `PLACEHOLDER_PATTERNS` (`<placeholder>`, `lorem`, `todo:`,
@@ -84,10 +84,10 @@ the gate emits `@agent-directive: existing-ui-audit` and refuses to advance.
84
84
  Two enforcement layers, deliberately redundant:
85
85
 
86
86
  - **Dispatcher layer** —
87
- [`directives/ui/audit.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/audit.py)
87
+ [`directives/ui/audit.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/audit.py)
88
88
  refuses to write `outcomes["refine"] = "success"` without a populated
89
89
  audit. Purely structural; no LLM, no heuristic.
90
- - **Agent layer** — [`ui-audit-gate`](../../.agent-src.uncompressed/rules/ui-audit-gate.md)
90
+ - **Agent layer** — [`ui-audit-gate`](../../.agent-src.uncondensed/rules/ui-audit-gate.md)
91
91
  is an always-on rule that fires when the agent is about to write a
92
92
  component file outside the engine (free-form edit, side conversation,
93
93
  cloud surface). The rule encodes the same Iron Law in prose so cloud
@@ -102,7 +102,7 @@ the failure modes are different enough to justify it.
102
102
  ### Confidence-path resolution
103
103
 
104
104
  Audit findings carry a confidence label and per-candidate similarity.
105
- [`directives/ui/audit.py::_decide_path`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/audit.py)
105
+ [`directives/ui/audit.py::_decide_path`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/audit.py)
106
106
  resolves to one of:
107
107
 
108
108
  - `high_confidence` — confidence `high` + ≥1 match with similarity
@@ -176,7 +176,7 @@ adjustment), the Phase-1 intent classifier writes
176
176
  `directive_set = "ui-trivial"`. The slot wiring collapses to
177
177
  `refine → ⊘ → ⊘ → ⊘ → apply → test → ⊘ → report` with
178
178
  `MAX_FILES = 1` and `MAX_LINES_CHANGED = 5` enforced inside
179
- [`directives/ui_trivial/apply.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui_trivial/apply.py).
179
+ [`directives/ui_trivial/apply.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui_trivial/apply.py).
180
180
 
181
181
  **Mandatory reclassification at apply time.** When a trivial edit
182
182
  exceeds the preconditions, apply flips
@@ -193,7 +193,7 @@ preconditions don't hold.
193
193
 
194
194
  ## Stack detection and dispatch
195
195
 
196
- [`scripts/work_engine/stack/detect.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/stack/detect.py)
196
+ [`scripts/work_engine/stack/detect.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/stack/detect.py)
197
197
  reads `composer.json` and `package.json` once, applies a four-rule
198
198
  priority table, and writes `state.stack.frontend`:
199
199
 
@@ -223,7 +223,7 @@ direct executor. R3 splits the responsibilities:
223
223
 
224
224
  - **Reference (kept):** layout patterns, form / table design,
225
225
  responsive strategy, a11y heuristics. Cited by
226
- [`directives/ui/design.py`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/design.py).
226
+ [`directives/ui/design.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/ui/design.py).
227
227
  - **Executor (removed):** code-writing responsibilities migrated to
228
228
  the stack-specific apply / review / polish skills (`flux`,
229
229
  `livewire`, `blade-ui`, `react-shadcn-ui`, `ui-apply-vue`).
@@ -35,10 +35,10 @@ axes, one orthogonal product.
35
35
 
36
36
  ## Decision
37
37
 
38
- Split into a parallel axis. Add `.agent-src.uncompressed/user-types/`
38
+ Split into a parallel axis. Add `.agent-src.uncondensed/user-types/`
39
39
  as a first-class directory mirroring the persona pipeline:
40
40
 
41
- - Source dir: `.agent-src.uncompressed/user-types/`
41
+ - Source dir: `.agent-src.uncondensed/user-types/`
42
42
  - Schema doc: [`user-type-schema`](user-type-schema.md) — 7-section spine, ≤ 120 lines
43
43
  - JSON schema: [`scripts/schemas/user-type.schema.json`](../../scripts/schemas/user-type.schema.json)
44
44
  - Linter: `scripts/skill_linter.py § lint_usertype`
@@ -102,7 +102,7 @@ Markdown prose + frontmatter), completely different consumer
102
102
  (`scripts/install.sh` vs. `refine-ticket`). Co-locating them would
103
103
  force a single `kind:` discriminator on a directory whose two halves
104
104
  do not share a schema. The separation is in different physical paths
105
- (`user-types/` root vs. `.agent-src.uncompressed/user-types/`) and
105
+ (`user-types/` root vs. `.agent-src.uncondensed/user-types/`) and
106
106
  the vocabulary overlap is deliberate per [`adr-install-user-type-axis`](adr-install-user-type-axis.md).
107
107
 
108
108
  **Alt-3 — Defer the axis until end-user lenses prove themselves in
@@ -121,6 +121,6 @@ re-opens the slot-sprawl risk and needs a separate ADR.
121
121
  reference ADR this one composes against.
122
122
  - [`scripts/schemas/skill.schema.json`](../../scripts/schemas/skill.schema.json)
123
123
  — `context_spine.items.enum` extended in this ADR.
124
- - [`.agent-src.uncompressed/rules/skill-quality.md`](../../.agent-src.uncompressed/rules/skill-quality.md)
124
+ - [`.agent-src.uncondensed/rules/skill-quality.md`](../../.agent-src.uncondensed/rules/skill-quality.md)
125
125
  § Senior-Tier Required Structure — the four blocks every senior
126
126
  skill ships independently of spine opt-in.
@@ -136,7 +136,7 @@ call. File-drop is the always-works path.
136
136
  to pick the curated YAML target when a signal carries two tags
137
137
  (e.g. `[gotcha, invariant]` → primary `gotcha` JSONL, promote target
138
138
  resolved by the reviewer at promotion time). See
139
- [`memory-consolidation`](../../.agent-src.uncompressed/skills/memory-consolidation/SKILL.md)
139
+ [`memory-consolidation`](../../.agent-src.uncondensed/skills/memory-consolidation/SKILL.md)
140
140
  § Phase 3 for the schema-routing table.
141
141
  - `confidence: low | medium | high` — producer-supplied estimate; the
142
142
  inline-review hook in `/memory load` ranks the top-3 by this field.
@@ -155,5 +155,5 @@ holds:
155
155
  ## See also
156
156
 
157
157
  - [`memory-access guideline`](../../docs/guidelines/agent-infra/memory-access.md)
158
- - [`scripts/memory_status.py`](../../.agent-src.uncompressed/templates/scripts/memory_status.py)
159
- - [`scripts/memory_lookup.py`](../../.agent-src.uncompressed/templates/scripts/memory_lookup.py)
158
+ - [`scripts/memory_status.py`](../../.agent-src.uncondensed/templates/scripts/memory_status.py)
159
+ - [`scripts/memory_lookup.py`](../../.agent-src.uncondensed/templates/scripts/memory_lookup.py)
@@ -51,7 +51,7 @@ Mechanical enforcement: the structural-malice check in
51
51
  - Shell injection in subprocess calls (string-concat shell commands
52
52
  with user-controlled input).
53
53
 
54
- See `.agent-src.uncompressed/rules/skill-quality.md` § Structural
54
+ See `.agent-src.uncondensed/rules/skill-quality.md` § Structural
55
55
  Malice Floor for the full rule.
56
56
 
57
57
  ## Distribution mechanics
@@ -69,7 +69,7 @@ Malice Floor for the full rule.
69
69
  - [`AGENTS.md`](../../AGENTS.md) — front-door (kernel orientation only)
70
70
  - [`docs/architecture.md`](../../docs/architecture.md) — package
71
71
  architecture and cloud-bundle pipeline
72
- - [`.agent-src.uncompressed/rules/skill-quality.md`](../../.agent-src.uncompressed/rules/skill-quality.md)
72
+ - [`.agent-src.uncondensed/rules/skill-quality.md`](../../.agent-src.uncondensed/rules/skill-quality.md)
73
73
  — Structural Malice Floor
74
74
  - [`.agent-src/skills/markitdown/SKILL.md`](../../.agent-src/skills/markitdown/SKILL.md)
75
75
  — markitdown skill entry point
@@ -166,7 +166,7 @@ Schema v1:
166
166
  ### Advisor block (Phase 6, replace-mode)
167
167
 
168
168
  Five built-in advisor keys ship under
169
- [`.agent-src.uncompressed/personas/advisors/`](../../.agent-src.uncompressed/personas/advisors/):
169
+ [`.agent-src.uncondensed/personas/advisors/`](../../.agent-src.uncondensed/personas/advisors/):
170
170
  `contrarian`, `first-principles`, `expansionist`, `outsider`,
171
171
  `executor`. Each entry binds one advisor to one enabled provider. When
172
172
  `enabled: true`, the orchestrator REPLACES that provider's plain-member
@@ -446,7 +446,7 @@ Transparency markers on every fast-path attempt:
446
446
 
447
447
  The marker is mandatory; the agent never silently substitutes a
448
448
  fast-path verdict for its own answer. See
449
- [`ai-council § Lightweight-QA fast-path`](../../.agent-src.uncompressed/skills/ai-council/SKILL.md#lightweight-qa-fast-path-phase-11)
449
+ [`ai-council § Lightweight-QA fast-path`](../../.agent-src.uncondensed/skills/ai-council/SKILL.md#lightweight-qa-fast-path-phase-11)
450
450
  for the orchestration contract and session-artefact format.
451
451
 
452
452
  ### Solo-member dispatch (step-9 P8/P9 · U1 · U2 · U3)
@@ -1,3 +1,7 @@
1
+ ---
2
+ stability: experimental
3
+ ---
4
+
1
5
  # At-Rest Encryption Contract
2
6
 
3
7
  > **Status** · v0 / design · 2026-05-24. Phase 8 of the
@@ -138,6 +138,6 @@ majors.
138
138
  - Per-phase JSON the producer reads: [`decision-trace-v1.md`](decision-trace-v1.md).
139
139
  - Pattern-extraction consumer: [`extract_audit_patterns.py`](../../scripts/extract_audit_patterns.py).
140
140
  - Skill that consumes promoted patterns:
141
- [`learning-to-rule-or-skill`](../../.agent-src.uncompressed/skills/learning-to-rule-or-skill/SKILL.md).
141
+ [`learning-to-rule-or-skill`](../../.agent-src.uncondensed/skills/learning-to-rule-or-skill/SKILL.md).
142
142
  - Append-only JSONL precedent:
143
143
  [`adr-chat-history-split.md`](adr-chat-history-split.md).
@@ -0,0 +1,101 @@
1
+ # Package-Impact A/B Benchmark — Contract
2
+
3
+ > Lifecycle, cache invalidation, and reader-side semantics for `docs/benchmark.md` and the underlying A/B bench reports. Companion to `docs/contracts/benchmark-report-schema.md` (which owns the per-report JSON shape this contract layers an axis onto).
4
+
5
+ ## Scope
6
+
7
+ This contract covers the **variant axis** (`with` vs. `without` agent-config) that the package-impact A/B bench adds on top of the existing version-over-time bench. It does NOT redefine the underlying report schema — see `benchmark-report-schema.md` for the per-report JSON shape.
8
+
9
+ ## Producer / consumer surface
10
+
11
+ | Concern | Owner |
12
+ |---|---|
13
+ | Materialising the variant clones | `scripts/bench_ab_clone.py` |
14
+ | Verifying the clones differ only at the agent-config surface | `scripts/bench_ab_integrity.py` |
15
+ | Track A (behavioural) runner | `scripts/bench_ab_tracka_run.py` |
16
+ | Track B (task) runner | `scripts/bench_ab_task_runner.py` |
17
+ | Track B scoring | `scripts/_lib/bench_ab_scoring.py` |
18
+ | Cache key + lookup | `scripts/_lib/bench_ab_cache.py` |
19
+ | Variant diff | `scripts/bench_ab_diff.py` |
20
+ | Rendered report | `scripts/render_benchmark_md.py` → `docs/benchmark.md` |
21
+ | Corpus / doc linter | `scripts/lint_bench_ab.py` |
22
+ | Task orchestration | `taskfiles/bench-ab.yml` (`task bench:ab*`) |
23
+
24
+ ## When `docs/benchmark.md` regenerates
25
+
26
+ `docs/benchmark.md` is **derived**. It regenerates from the latest paired reports under `internal/bench/reports/ab/` whenever:
27
+
28
+ 1. `task bench:ab` runs (the full pipeline ends with `bench:ab:diff` which calls the renderer).
29
+ 2. `task bench:ab:diff` runs alone (no fresh bench, just re-render).
30
+ 3. The renderer is invoked directly: `python3 scripts/render_benchmark_md.py`.
31
+
32
+ The renderer is deterministic: same reports → same output. It never runs a bench. If no reports exist, it writes a placeholder document — never errors out.
33
+
34
+ ## Cache key + invalidation
35
+
36
+ The Phase 2 cache exists so a daily `task bench:ab` does not re-run the expensive `without` arm when nothing the model would see has changed. The cache key is a tuple:
37
+
38
+ ```
39
+ (corpus_hash, claude_cli_version, target_shape_hash)
40
+ ```
41
+
42
+ A cached `without` report is **fresh** when its recorded `cache_key` matches the current key for every component. Otherwise it is **stale** and the `--reuse-cache` path either refreshes (default in interactive mode) or reuses with a stale flag (`--non-interactive`).
43
+
44
+ Invalidation triggers:
45
+
46
+ | Trigger | Component that drifts |
47
+ |---|---|
48
+ | Edit `internal/bench/corpora/ab-tracka.yaml` or `ab-trackb.yaml` | `corpus_hash` |
49
+ | Upgrade the local `claude` CLI | `claude_cli_version` |
50
+ | Add / remove a `WITH_SURFACE` in `scripts/bench_ab_clone.py` | `target_shape_hash` |
51
+ | Edit any file under `internal/bench/ab/fixture/` | `target_shape_hash` |
52
+
53
+ ## How a reader interprets the staleness flag
54
+
55
+ `docs/benchmark.md` carries a methodology section naming the cache key for the latest run. A reader who suspects the page is stale should:
56
+
57
+ 1. Check the **Last rendered** timestamp at the bottom of the Methodology section.
58
+ 2. Inspect `internal/bench/reports/ab/` for newer reports than what the doc reflects.
59
+ 3. Re-run `task bench:ab:diff` to re-render from the latest reports (cheap; no bench).
60
+ 4. Re-run `task bench:ab` for a full refresh (re-runs the `with` arm, reuses the `without` baseline if the cache is fresh).
61
+
62
+ ## Modes — what the reader can trust
63
+
64
+ Track B carries an explicit `mode` in every report header:
65
+
66
+ - `dry-run` — no `claude` CLI invocation; transcripts are stubs. Both variants score 0/N by construction. This is the CI-cheap mode; **do NOT cite Track B numbers in a dry-run report as evidence of package impact**.
67
+ - `live` — real `claude --print` invocation per task. The numbers are real; the cost is real. This is the mode that produces evidence.
68
+
69
+ The renderer surfaces `mode` prominently in the Track B section. A `dry-run` Track B block is a plumbing-health check, not a measurement.
70
+
71
+ ## Track A is always cheap, always meaningful
72
+
73
+ Track A measures **surface availability** — does the rule/skill body the prompt would activate exist in the agent's reachable context? This is the precondition for the rule-router to fire. It does not need the `claude` CLI; it is a file-grep over the materialised clone. By construction:
74
+
75
+ - `without` MUST score 0% — no agent-config surface present → no expected_target file exists.
76
+ - `with` should score close to 100% — every expected_target file should exist with the expected_keywords.
77
+
78
+ The integrity check `bench_ab_tracka_run.py::integrity_check` fails the run if `without` ever scores non-zero. That's the safety boundary: if `without` scores anything, the variant axis leaked and the bench is invalid.
79
+
80
+ ## Acceptance criteria for a "real" run
81
+
82
+ A bench run counts as a real measurement (rather than a plumbing health check) when:
83
+
84
+ - `python3 scripts/bench_ab_integrity.py` exits 0 (the variant axis is clean).
85
+ - Track A runs in BOTH variants and produces `integrity_ok: true` (with scoring close to 100%, without scoring 0%).
86
+ - Track B runs in BOTH variants in `--mode live` (not dry-run).
87
+ - `python3 scripts/lint_bench_ab.py` passes.
88
+ - The rendered `docs/benchmark.md` carries the Headline + Track A + Track B + Methodology + History sections.
89
+
90
+ ## Out of scope for this contract
91
+
92
+ - The per-report JSON schema details — see `docs/contracts/benchmark-report-schema.md`.
93
+ - Statistical significance / sample-size policy — `--samples N` is opt-in per run; the bench default is n=1 (daily-quick-read goal, not a research-grade study).
94
+ - LLM-judge scoring — explicitly deferred to a follow-up roadmap.
95
+ - Cross-model comparison — out of scope; the bench measures one model (whatever the local `claude` CLI points to).
96
+
97
+ ## See also
98
+
99
+ - `agents/roadmaps/road-to-package-impact-benchmark.md` — the roadmap that built this surface.
100
+ - `internal/bench/ab/README.md` — the Shape A vs. Shape B decision and the layout.
101
+ - `docs/contracts/benchmark-report-schema.md` — per-report JSON shape (sibling contract).
@@ -93,5 +93,5 @@ without tripping CI.
93
93
  - Runner — [`scripts/bench_runner.py`](../../scripts/bench_runner.py)
94
94
  - Linter — `scripts/lint_bench_corpus.py` (Phase 1 Step 3)
95
95
  - Existing non-dev corpus — [`tests/eval/corpus-non-dev.yaml`](../../tests/eval/corpus-non-dev.yaml)
96
- - Language gate — [`language-and-tone`](../../.agent-src.uncompressed/rules/language-and-tone.md)
96
+ - Language gate — [`language-and-tone`](../../.agent-src.uncondensed/rules/language-and-tone.md)
97
97
  - Report schema — `docs/contracts/benchmark-report-schema.md` (Phase 2 Step 4)
@@ -0,0 +1,98 @@
1
+ # Branch Protection Policy
2
+
3
+ > **Status:** active · **Owner:** maintainer (GitHub UI ruleset) ·
4
+ > **Opened:** 2026-05-26
5
+ >
6
+ > Codifies the per-PR-shape required-status-check floor. Companion to
7
+ > [`release-pr-gating.md`](release-pr-gating.md) (Phase A) and
8
+ > [`ci-cost-budget.md`](ci-cost-budget.md) (Phase C). Branch protection
9
+ > itself is applied by the maintainer in the GitHub Settings → Rules UI;
10
+ > this doc is the source of truth the UI mirrors.
11
+
12
+ ## The floor
13
+
14
+ Every PR proves a floor of CI checks before it can merge. The floor differs
15
+ by **PR shape** — a feature PR proves more (it carries runtime / install
16
+ risk) than a release PR (whose diff is structurally limited to version
17
+ bumps). Shape is detected by the same predicates documented in
18
+ `release-pr-gating.md`; the workflows enforce the cut.
19
+
20
+ The optimisation is **never** subtractive: a PR whose shape can't be proved
21
+ falls back to the full feature-PR floor. The cut is opt-in per push, not
22
+ per branch name.
23
+
24
+ ## Per-PR-shape required-check matrix
25
+
26
+ | Required check | Feature PR | Release PR | Docs-only PR |
27
+ |---|:---:|:---:|:---:|
28
+ | `Consistency` | ✅ | ✅ | ✅ |
29
+ | `Smoke Contracts` (smoke.yml) | ✅ | ✅ | ✅ |
30
+ | `Skill Lint` | ✅ | — | — |
31
+ | `Tests / install-tests (ubuntu)` | ✅ | — | — |
32
+ | `Tests / install-tests (macos)` | ✅ | — | — |
33
+ | `Tests / install-aux-tests (ubuntu)` | ✅ | — | — |
34
+ | `Tests / install-aux-tests (macos)` | ✅ | — | — |
35
+ | `Tests / python-tests (ubuntu × 3.10–3.13)` | ✅ | — | — |
36
+ | `Tests / python-tests (macos × 3.12)` | ✅ | — | — |
37
+ | `Tests / node-tests (ubuntu)` | ✅ | — | — |
38
+ | `Tests / node-tests (macos)` | ✅ | — | — |
39
+ | `Tests / windows-lockfile-export` | path-filter only | — | — |
40
+ | `Public Install Smoke / smoke (matrix)` | ✅ | — | — |
41
+ | `Release Validation / release-shape` | — | ✅ | — |
42
+ | `Release Validation / changelog-entry` | — | ✅ | — |
43
+ | `Release Validation / version-consistency` | — | ✅ | — |
44
+ | `Migration Dry-Run` | path-filter only | path-filter only | — |
45
+ | `Release Guard` (tag-trigger) | — | (post-merge tag) | — |
46
+
47
+ **Definitions:**
48
+
49
+ - **Feature PR** — head branch does not match `release/X.Y.Z` (the default).
50
+ - **Release PR** — head branch matches `^release/\d+\.\d+\.\d+$` AND the
51
+ diff stays within the version-bump allowlist (see `release-pr-gating.md`).
52
+ Either condition failing falls the PR back to feature-PR mode.
53
+ - **Docs-only PR** — diff is entirely inside `docs/**` or matches only
54
+ top-level Markdown (`README.md`, `CHANGELOG.md`, `CONTRIBUTING.md`,
55
+ `AGENTS.md`). No code, tests, workflows, or scripts. This shape is
56
+ detected by an opt-in linter (`task ci:required-checks`); branch
57
+ protection still defaults to the feature-PR floor unless the linter
58
+ asserts the docs-only shape.
59
+
60
+ ## Failure mode — the cut never silently lifts
61
+
62
+ If a release-PR's diff exits the allowlist mid-stream (e.g. a last-minute
63
+ CHANGELOG fixup that also touches `scripts/release.py`):
64
+
65
+ 1. `Release Validation / release-shape` exits non-zero.
66
+ 2. The required-check set for the PR effectively flips back to the
67
+ feature-PR floor because:
68
+ - `tests.yml` / `smoke-public-install.yml` jobs carry
69
+ `if: !startsWith(github.head_ref, 'release/')`, so they still skip on
70
+ the branch name — but
71
+ - the maintainer is expected to either narrow the diff (move the
72
+ out-of-shape edit to a separate PR) or close-and-reopen the release
73
+ PR off a freshly-bumped branch so the heavy matrix runs.
74
+ 3. Branch protection still blocks the merge because `release-shape` is red.
75
+
76
+ The branch name alone never bypasses the heavy matrix — the diff has to
77
+ prove it can't regress runtime / install paths.
78
+
79
+ ## Why path-filter only for some checks
80
+
81
+ `Tests / windows-lockfile-export` and `Migration Dry-Run` are path-filtered
82
+ at the workflow level (not branch-protection level). They run on every PR
83
+ whose diff hits their declared paths and skip on every other PR. Branch
84
+ protection lists them as "must pass if they run" — the GitHub Rules UI
85
+ under "Required status checks" honours this when "Require branches to be
86
+ up to date before merging" is enabled and the check's most recent run
87
+ on the head SHA is green.
88
+
89
+ ## See also
90
+
91
+ - [`release-pr-gating.md`](release-pr-gating.md) — shape predicates, cut
92
+ surface, kept surface, fail-closed contract.
93
+ - [`ci-cost-budget.md`](ci-cost-budget.md) — measured baseline durations
94
+ per job + quarterly review cadence (Phase C).
95
+ - `.github/workflows/release-validation.yml` — the three release-PR jobs.
96
+ - `scripts/check_release_pr_shape.py` — the shape detector.
97
+ - `scripts/release.py` — emits release PRs; release cadence stays driven
98
+ by Conventional Commits, not CI cost.
@@ -0,0 +1,106 @@
1
+ # CI Cost Budget
2
+
3
+ > **Status:** active · **Owner:** maintainer · **Opened:** 2026-05-26 ·
4
+ > **Review cadence:** quarterly (next: 2026-08-26)
5
+ >
6
+ > Measured durations + trigger surfaces for every PR-blocking CI job in
7
+ > `.github/workflows/`. Sets a per-job wall-clock budget (5 min average)
8
+ > beyond which the job either earns its cost in writing or gets a
9
+ > follow-up optimisation step. Companion to
10
+ > [`release-pr-gating.md`](release-pr-gating.md) and
11
+ > [`branch-protection-policy.md`](branch-protection-policy.md).
12
+
13
+ ## Baseline (pre-optimisation, 2026-05-26)
14
+
15
+ Captured via `gh run list --branch main --limit 50 --json
16
+ name,createdAt,updatedAt`. Wall-clock figures are the average of the most
17
+ recent 50 main-branch runs.
18
+
19
+ | Workflow | Job | OS × variant | Avg duration | Trigger surface |
20
+ |---|---|---|--:|---|
21
+ | `tests.yml` | `install-tests` | 4 shards × 2 OS | 218 s | `scripts/**`, `tests/**`, `src/**`, manifest pins |
22
+ | `tests.yml` | `install-aux-tests` | 2 OS | 90 s | same as above |
23
+ | `tests.yml` | `python-tests` | 4 versions × ubuntu + 3.12 × macOS | ~210 s | same as above |
24
+ | `tests.yml` | `node-tests` | 2 OS | 180 s | same as above |
25
+ | `tests.yml` | `windows-lockfile-export` | windows-latest | 60–90 s | same as above (over-broad — see Phase C Step 1) |
26
+ | `smoke-public-install.yml` | `smoke` | 3 OS × 2 Node | 413 s | install paths + setup.sh + templates |
27
+ | `consistency.yml` | (single) | ubuntu | 27 s | always-on (PR / push) |
28
+ | `smoke.yml` | smoke-contracts | ubuntu | 18 s | `scripts/schemas/**` |
29
+ | `migration-dry-run.yml` | (single) | ubuntu | 20 s | migration-touching paths |
30
+ | `skill-lint.yml` | (single) | ubuntu | 64 s | `.agent-src*/**`, schemas |
31
+ | `release-guard.yml` | (single) | ubuntu | < 10 s | tag-trigger only |
32
+
33
+ **Critical path observations:**
34
+
35
+ - `smoke-public-install.yml` and `tests.yml` dominate non-release-PR
36
+ wall-clock. Both trigger on `package.json` — a release PR (which only
37
+ touches `package.json` + CHANGELOG + marketplace + pack manifests)
38
+ pulled the full matrix on every bump pre-Phase A.
39
+ - `tests.yml` `python-tests` ran four Python versions on Linux + 3.12 on
40
+ macOS on every PR touching `scripts/**`. The 3.10 / 3.11 / 3.13 legs
41
+ are extras: they prove the supported range but rarely surface a
42
+ Python-version-only regression. Moved to a path-filtered sibling
43
+ workflow in Phase C Step 2.
44
+ - `tests.yml` `windows-lockfile-export` fired on every PR touching
45
+ `scripts/**` even when the PR never went near `install_global` /
46
+ `cmd_export`. Moved to its own path-filtered workflow in Phase C
47
+ Step 1.
48
+
49
+ ## Expected savings (post-optimisation)
50
+
51
+ The Phase A guards on `tests.yml` + `smoke-public-install.yml` cut
52
+ release-PR critical-path from `218 s + 413 s` (serial worst case ≈ 11
53
+ min) to `~30 s` (`Consistency` + `Smoke Contracts` + new `Release
54
+ Validation`). Phase C cuts feature-PR critical-path by removing the
55
+ Windows leg (60–90 s) and the 3-version Python sweep from PRs that
56
+ don't touch Python paths.
57
+
58
+ | Scenario | Pre | Post | Reduction |
59
+ |---|--:|--:|--:|
60
+ | Release PR (release/X.Y.Z) | ~660 s | ~60 s | –91 % |
61
+ | Feature PR touching scripts/** but no install_global / cmd_export | ~700 s | ~600 s | –14 % |
62
+ | Feature PR touching only docs/** | ~30 s (consistency) | ~30 s | unchanged |
63
+ | Feature PR touching Python paths only on 3.12 | ~700 s | ~700 s | unchanged (baseline still runs) |
64
+
65
+ ## Per-job cost ceiling — 5-min average
66
+
67
+ Any job averaging **> 5 min wall-clock** across the most-recent 50
68
+ main-branch runs requires one of:
69
+
70
+ 1. A documented justification in this file ("This job protects
71
+ property X; shrinking it would mean losing the regression Y").
72
+ 2. A follow-up optimisation step opened in the next quarterly review.
73
+ 3. An ADR superseding the ceiling for this specific job (e.g. integration
74
+ smoke that proves a real consumer-visible promise).
75
+
76
+ Current jobs above the ceiling: `smoke-public-install.yml` (413 s) —
77
+ ceiling violation is acknowledged. The Phase A skip on release PRs
78
+ mitigates it; an ADR will follow if it re-exceeds 5 min on feature PRs
79
+ post-Phase C.
80
+
81
+ ## Quarterly review checklist
82
+
83
+ Run the first Monday of every quarter:
84
+
85
+ 1. Re-capture the baseline table via `gh run list --branch main --limit
86
+ 50 --json name,createdAt,updatedAt` + arithmetic.
87
+ 2. Compare each row against the previous quarter; flag any > 25 %
88
+ regression.
89
+ 3. For every row over the 5-min ceiling, file a follow-up step in the
90
+ open CI-roadmap (or in this file's history if no roadmap is
91
+ currently active).
92
+ 4. Update the "Expected savings" table once optimisations land so the
93
+ delta is provable, not asserted.
94
+ 5. Audit the path-filter surfaces — when a workflow keeps firing on
95
+ PRs that don't touch its real scope, tighten the filter.
96
+
97
+ ## See also
98
+
99
+ - [`release-pr-gating.md`](release-pr-gating.md) — release-PR shape
100
+ predicates, cut surface, kept surface.
101
+ - [`branch-protection-policy.md`](branch-protection-policy.md) — required
102
+ status check floor per PR shape.
103
+ - `.github/workflows/python-version-sweep.yml` — extras Python versions
104
+ (3.10 · 3.11 · 3.13) on Python-path PRs.
105
+ - `.github/workflows/windows-lockfile-export.yml` — Windows leg gated by
106
+ `install_global` / `cmd_export` paths.