@amsterdamdatalabs/adl-agent-control-linux-x64 0.1.12 → 0.1.26

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 (405) hide show
  1. package/bin/adl +2 -2
  2. package/bin/git +16 -17
  3. package/bin/git-ado +25 -24
  4. package/bin/git-defaults +173 -0
  5. package/bin/health-check +8 -1
  6. package/bin/kimi-hooks +1 -1
  7. package/bin/lib/adl-package.sh +257 -0
  8. package/bin/lib/fleet-host.sh +8 -5
  9. package/bin/reconcile +482 -232
  10. package/bin/reconcile-host +30 -20
  11. package/bin/setup +20 -17
  12. package/bin/shell-path-policy +15 -5
  13. package/bin/sync-and-reconcile +62 -64
  14. package/bin/validate-manifest +33 -9
  15. package/package.json +2 -10
  16. package/packages/agent-hooks/README.md +14 -9
  17. package/packages/agent-hooks/assets/hooks.json +0 -20
  18. package/packages/agent-hooks/src/cli/args.ts +1 -1
  19. package/packages/agent-hooks/src/cli/doctor.ts +6 -58
  20. package/packages/agent-hooks/src/deploy/deploy.ts +12 -41
  21. package/packages/agent-hooks/src/deploy/doctor.ts +8 -11
  22. package/packages/agent-hooks/src/deploy/index.ts +14 -14
  23. package/packages/agent-hooks/src/deploy/json-merge.ts +7 -8
  24. package/packages/agent-hooks/src/deploy/legacy-lock.ts +2 -2
  25. package/packages/agent-hooks/src/deploy/list.ts +1 -1
  26. package/packages/agent-hooks/src/deploy/lock.ts +31 -12
  27. package/packages/agent-hooks/src/deploy/profile.ts +3 -4
  28. package/packages/agent-hooks/src/deploy/source.ts +1 -1
  29. package/packages/agent-hooks/src/gating/config.ts +10 -24
  30. package/packages/agent-hooks/src/gating/root.ts +3 -3
  31. package/packages/agent-hooks/src/hooks/briefing/handler.ts +2 -2
  32. package/packages/agent-hooks/src/hooks/briefing/index.ts +27 -287
  33. package/packages/agent-hooks/src/hooks/contract.ts +17 -17
  34. package/packages/agent-hooks/src/hooks/crg/background.ts +27 -0
  35. package/packages/agent-hooks/src/hooks/crg/index.ts +7 -6
  36. package/packages/agent-hooks/src/hooks/log.ts +8 -10
  37. package/packages/agent-hooks/src/hooks/user-prompt-submit/match.ts +1 -1
  38. package/packages/agent-hooks/src/hooks/user-prompt-submit/tokenizer.ts +1 -1
  39. package/packages/agent-hooks/src/hooks/user-prompt-submit/vector.ts +6 -5
  40. package/packages/agent-hooks/src/hosts/registry.ts +1 -1
  41. package/packages/agent-hooks/src/log/adl-dir.ts +44 -0
  42. package/packages/agent-hooks/src/log/writer.ts +16 -2
  43. package/packages/agent-hooks/src/main.ts +7 -41
  44. package/packages/agent-hooks/src/pre-tool-use/handler.ts +71 -82
  45. package/packages/agent-hooks/src/rules/engine.ts +13 -17
  46. package/packages/agent-hooks/src/rules/impl/adl-build-run-denied.ts +3 -3
  47. package/packages/agent-hooks/src/rules/impl/adl-git-credential-bypass.ts +12 -14
  48. package/packages/agent-hooks/src/rules/impl/adl-git-identity.ts +28 -28
  49. package/packages/agent-hooks/src/rules/impl/adl-git-push-policy.ts +8 -9
  50. package/packages/agent-hooks/src/rules/impl/adl-human-azdo-bypass.ts +56 -59
  51. package/packages/agent-hooks/src/rules/impl/adl-identity.ts +16 -23
  52. package/packages/agent-hooks/src/rules/impl/adl-mcp-cli.ts +19 -16
  53. package/packages/agent-hooks/src/rules/impl/adl-pr-complete-pending.ts +2 -2
  54. package/packages/agent-hooks/src/rules/impl/adl-pr-review-role.ts +9 -12
  55. package/packages/agent-hooks/src/rules/impl/adl-pr-role.ts +5 -7
  56. package/packages/agent-hooks/src/rules/impl/adl-run-required.ts +411 -0
  57. package/packages/agent-hooks/src/rules/impl/adl-token-minting-role.ts +4 -5
  58. package/packages/agent-hooks/src/rules/impl/adl-workitem-role.ts +6 -7
  59. package/packages/agent-hooks/src/rules/impl/agent-tamper-protection.ts +77 -70
  60. package/packages/agent-hooks/src/rules/impl/deny-allowlist.ts +159 -0
  61. package/packages/agent-hooks/src/rules/impl/git-helpers.ts +21 -23
  62. package/packages/agent-hooks/src/rules/impl/git-worktree.ts +14 -28
  63. package/packages/agent-hooks/src/rules/impl/mcp-tool.ts +3 -3
  64. package/packages/agent-hooks/src/rules/impl/messages.ts +1 -1
  65. package/packages/agent-hooks/src/rules/impl/pr-completion.ts +1 -1
  66. package/packages/agent-hooks/src/rules/impl/tool-azure-devops.ts +35 -46
  67. package/packages/agent-hooks/src/rules/impl/tool-find.ts +34 -7
  68. package/packages/agent-hooks/src/rules/impl/tool-grep.ts +34 -12
  69. package/packages/agent-hooks/src/rules/impl/tool-native-search.ts +52 -9
  70. package/packages/agent-hooks/src/rules/ports.ts +5 -7
  71. package/packages/agent-hooks/src/rules/registry.ts +4 -6
  72. package/packages/agent-hooks/src/rules/shell/git-identity.ts +86 -101
  73. package/packages/agent-hooks/src/rules/shell/git-internals.ts +1 -1
  74. package/packages/agent-hooks/src/rules/shell/invocation.ts +24 -118
  75. package/packages/agent-hooks/src/rules/shell/piped-script.ts +1 -1
  76. package/packages/agent-hooks/src/rules/shell/prefixes.ts +1 -1
  77. package/packages/agent-hooks/src/rules/shell/protected-carrier-writes.ts +11 -10
  78. package/packages/agent-hooks/src/rules/shell/protected-carriers.ts +26 -26
  79. package/packages/agent-hooks/src/rules/shell/substitution.ts +1 -1
  80. package/packages/agent-hooks/src/rules/shell/xargs.ts +2 -2
  81. package/packages/agent-hooks/src/rules/spec.ts +2 -2
  82. package/packages/agent-settings/README.md +287 -0
  83. package/packages/agent-settings/assets/GLOBAL-AGENTS.md +14 -16
  84. package/packages/agent-settings/assets/agents/architect.toml +2 -0
  85. package/packages/agent-settings/assets/agents/code-reviewer.toml +2 -0
  86. package/packages/agent-settings/assets/agents/executor.toml +2 -0
  87. package/packages/agent-settings/assets/agents/explore.toml +2 -0
  88. package/packages/agent-settings/assets/agents/planner.toml +2 -0
  89. package/packages/agent-settings/assets/mcp.json +0 -4
  90. package/packages/agent-settings/deploy-profile.json +139 -0
  91. package/packages/agent-settings/deploy-profile.schema.json +147 -0
  92. package/packages/agent-settings/managed/README.md +29 -30
  93. package/packages/agent-settings/managed/codex-requirements.toml +9 -9
  94. package/packages/agent-settings/package.json +20 -0
  95. package/packages/agent-settings/src/deploy/agent-render.ts +2 -2
  96. package/packages/agent-settings/src/deploy/agent-toml.ts +1 -1
  97. package/packages/agent-settings/src/deploy/agents-deploy.ts +17 -3
  98. package/packages/agent-settings/src/deploy/doctor.ts +3 -83
  99. package/packages/agent-settings/src/deploy/index.ts +6 -33
  100. package/packages/agent-settings/src/deploy/legacy-lock.ts +6 -6
  101. package/packages/agent-settings/src/deploy/list.ts +5 -19
  102. package/packages/agent-settings/src/deploy/lock.ts +8 -18
  103. package/packages/agent-settings/src/deploy/mcp-deploy.ts +10 -5
  104. package/packages/agent-settings/src/deploy/mcp-merge.ts +22 -3
  105. package/packages/agent-settings/src/deploy/mcp-source.ts +1 -1
  106. package/packages/agent-settings/src/deploy/profile.ts +11 -35
  107. package/packages/agent-settings/src/deploy/retire-lean-ctx.ts +184 -0
  108. package/packages/agent-settings/src/deploy/settings.ts +17 -22
  109. package/packages/agent-settings/src/global-surface-sweep.ts +0 -2
  110. package/packages/agent-settings/src/kimi-hooks.ts +339 -192
  111. package/packages/agent-settings/src/opencode-hooks.ts +1 -1
  112. package/packages/agent-settings/tsconfig.json +23 -0
  113. package/packages/agent-skills/assets/agent-search-tool-audit/SKILL.md +120 -0
  114. package/packages/agent-skills/assets/agent-search-tool-audit/scripts/audit.sh +276 -0
  115. package/packages/agent-skills/assets/debug-issue/SKILL.md +8 -7
  116. package/packages/agent-skills/assets/explore-codebase/SKILL.md +13 -13
  117. package/packages/agent-skills/assets/refactor-safely/SKILL.md +12 -11
  118. package/packages/agent-skills/assets/review-changes/SKILL.md +7 -7
  119. package/packages/agent-skills/assets/testing/references/e2e.md +37 -0
  120. package/packages/agent-skills/assets/testing/references/integration.md +37 -0
  121. package/packages/agent-skills/assets/testing/references/unit.md +32 -0
  122. package/packages/agent-skills/dist/deploy.d.ts +2 -0
  123. package/packages/agent-skills/dist/deploy.d.ts.map +1 -1
  124. package/packages/agent-skills/dist/deploy.js +27 -1
  125. package/packages/agent-skills/dist/deploy.js.map +1 -1
  126. package/packages/agent-skills/dist/doctor.d.ts +0 -2
  127. package/packages/agent-skills/dist/doctor.d.ts.map +1 -1
  128. package/packages/agent-skills/dist/doctor.js +1 -1
  129. package/packages/agent-skills/dist/doctor.js.map +1 -1
  130. package/packages/agent-skills/dist/fs-utils.d.ts +0 -1
  131. package/packages/agent-skills/dist/fs-utils.d.ts.map +1 -1
  132. package/packages/agent-skills/dist/fs-utils.js +1 -1
  133. package/packages/agent-skills/dist/fs-utils.js.map +1 -1
  134. package/packages/agent-skills/src/deploy.ts +29 -1
  135. package/packages/agent-skills/src/doctor.ts +1 -1
  136. package/packages/agent-skills/src/fs-utils.ts +1 -1
  137. package/packages/azdo/README.md +10 -9
  138. package/packages/azdo/package.json +1 -3
  139. package/packages/azdo/src/azdo-pl.ts +2 -54
  140. package/packages/azdo/src/azdo-pr-review.ts +4 -4
  141. package/packages/azdo/src/azdo-repo-doctor.ts +101 -52
  142. package/packages/azdo/src/azdo-wit.ts +41 -2
  143. package/packages/azdo/src/lib/agent-identity.ts +12 -14
  144. package/packages/azdo/src/lib/agent-token.ts +2 -2
  145. package/packages/azdo/src/lib/client.ts +0 -5
  146. package/packages/azdo/src/lib/graph-identity.ts +4 -4
  147. package/packages/azdo/src/workflow-rules-matrix.csv +85 -0
  148. package/packages/azdo/src/workflow-rules.ts +128 -0
  149. package/packages/fleet/manifest.json +35 -11
  150. package/packages/fleet/manifest.schema.json +62 -10
  151. package/packages/fleet/src/default-agent-file.ts +3 -3
  152. package/packages/fleet/src/install-adl-package.ts +73 -15
  153. package/packages/fleet/src/install-embedding-model.ts +13 -13
  154. package/packages/fleet/src/managed-settings.ts +7 -7
  155. package/packages/fleet/src/repo-maintain.ts +91 -55
  156. package/packages/fleet/src/scratch-reap.ts +5 -5
  157. package/packages/fleet/src/vscode-settings.ts +5 -5
  158. package/packages/repo-controls/README.md +141 -43
  159. package/packages/repo-controls/assets/promote.ts +4 -4
  160. package/packages/repo-controls/assets/reconcile-guard.sh +10 -46
  161. package/packages/repo-controls/assets/version-bump.sh +31 -84
  162. package/packages/repo-controls/bunfig.toml +6 -7
  163. package/packages/repo-controls/package/adl-compliance/AGENTS.md +5 -6
  164. package/packages/repo-controls/package/adl-compliance/conftest.py +3 -1
  165. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/__init__.py +4 -16
  166. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/test_check.py +9 -2
  167. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/notes.md +1 -0
  168. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/test_check.py +11 -0
  169. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/__init__.py +7 -0
  170. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/check.py +266 -0
  171. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.drafts/c.md +1 -0
  172. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.drafts/d.md +1 -0
  173. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.hidden.md +1 -0
  174. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/a.md +1 -0
  175. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/b.md +1 -0
  176. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/data.csv +1 -0
  177. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/diagram.png +1 -0
  178. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/mock.png +1 -0
  179. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/sub/nested.md +1 -0
  180. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs.md +1 -0
  181. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/grants.yaml +4 -0
  182. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p1.md +1 -0
  183. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p2.md +1 -0
  184. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p3.md +1 -0
  185. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p4.md +1 -0
  186. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p5.md +1 -0
  187. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/build.md +1 -0
  188. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/overview.md +1 -0
  189. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/install.md +1 -0
  190. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/start.md +1 -0
  191. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/grants.yaml +4 -0
  192. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/adr-001-tenancy.md +1 -0
  193. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/adr-002-carrier.md +1 -0
  194. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/adr-003-cli.md +1 -0
  195. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/archive/adr-000-old.md +1 -0
  196. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/archive/adr-000-older.md +1 -0
  197. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/a.md +1 -0
  198. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/b.md +1 -0
  199. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/c.md +1 -0
  200. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/grants.yaml +4 -0
  201. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-01.md +1 -0
  202. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-02.md +1 -0
  203. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-03.md +1 -0
  204. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-04.md +1 -0
  205. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-05.md +1 -0
  206. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-06.md +1 -0
  207. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-07.md +1 -0
  208. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-08.md +1 -0
  209. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-09.md +1 -0
  210. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-10.md +1 -0
  211. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-11.md +1 -0
  212. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-12.md +1 -0
  213. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-13.md +1 -0
  214. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-14.md +1 -0
  215. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-15.md +1 -0
  216. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-16.md +1 -0
  217. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/grants.yaml +4 -0
  218. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/a.md +1 -0
  219. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/b.md +1 -0
  220. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/c.md +1 -0
  221. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/grants.yaml +4 -0
  222. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/a.md +1 -0
  223. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/b.md +1 -0
  224. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/c.md +1 -0
  225. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/grants.yaml +4 -0
  226. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/a.md +1 -0
  227. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/b.md +1 -0
  228. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/c.md +1 -0
  229. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/d.md +1 -0
  230. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/e.md +1 -0
  231. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/grants.yaml +4 -0
  232. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/guide/a.md +1 -0
  233. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/guide/b.md +1 -0
  234. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/guide/c.md +1 -0
  235. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/short/only.md +1 -0
  236. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/grants.yaml +4 -0
  237. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/a.md +1 -0
  238. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/b.md +1 -0
  239. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/c.md +1 -0
  240. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/d.md +1 -0
  241. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/a.md +1 -0
  242. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/b.md +1 -0
  243. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/grants.yaml +6 -0
  244. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/a.md +1 -0
  245. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/b.md +1 -0
  246. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/c.md +1 -0
  247. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/grants.yaml +3 -0
  248. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/test_check.py +345 -0
  249. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/check.py +18 -5
  250. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/test_check.py +35 -0
  251. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/__init__.py +7 -0
  252. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/check.py +91 -0
  253. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/AGENTS.md +3 -0
  254. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/CLAUDE.md +3 -0
  255. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/-leading-hyphen.md +3 -0
  256. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/AGENTS.md +3 -0
  257. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/double--hyphen.md +3 -0
  258. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/getting started.md +3 -0
  259. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/nested/page-here.md +3 -0
  260. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/trailing-hyphen-.md +3 -0
  261. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/ui-contract.md +4 -0
  262. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/user_profile.md +3 -0
  263. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/UI-CONTRACT.png +2 -0
  264. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/diagram.png +1 -0
  265. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/index.md +4 -0
  266. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/notes.md +3 -0
  267. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/reference.html +1 -0
  268. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/2026-10-experiment.md +3 -0
  269. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/UI-CONTRACT.md +6 -0
  270. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs.md +5 -0
  271. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/test_check.py +194 -0
  272. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/check.py +14 -2
  273. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/docs-knowledge-indexes.yaml +5 -5
  274. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-shipped-register-legacy/docs/compliance/index.md +10 -0
  275. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-shipped-register-type/docs/compliance/index.md +10 -0
  276. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/test_check.py +58 -6
  277. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/test_check.py +0 -1
  278. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/check.py +64 -17
  279. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/docs-okf-profiles.yaml +60 -9
  280. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-clean/docs/notes.md +17 -0
  281. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-no-lines/docs/notes.md +13 -0
  282. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs/architecture/demo.md +0 -1
  283. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs-okf-profiles.yaml +0 -1
  284. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs/research/no-type.md +9 -0
  285. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs/research/typed-experiment.md +10 -0
  286. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs/research/typed-research.md +10 -0
  287. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs-okf-profiles.yaml +5 -0
  288. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs/architecture/bad-status.md +0 -1
  289. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs-okf-profiles.yaml +0 -1
  290. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/experiment-ok.md +15 -0
  291. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-key.md +15 -0
  292. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-keys.md +16 -0
  293. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-created.md +11 -0
  294. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-description.md +11 -0
  295. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-last-update.md +11 -0
  296. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-sources.md +10 -0
  297. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-status.md +11 -0
  298. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-title.md +11 -0
  299. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/optional-keys.md +16 -0
  300. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/research-ok.md +14 -0
  301. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/architecture/created-date.md +21 -0
  302. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/architecture/research-shaped.md +19 -0
  303. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/operations/runbook.md +26 -0
  304. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/test_check.py +228 -2
  305. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/register.py +5 -0
  306. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/test_check.py +11 -2
  307. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/__init__.py +5 -3
  308. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/check.py +160 -44
  309. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-clean/grants.yaml +0 -2
  310. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/frontend/packages/desktop/src/a.ts +1 -0
  311. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/frontend/packages/desktop/src/b.ts +1 -0
  312. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/grants.yaml +3 -0
  313. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/grants.yaml +0 -2
  314. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-missing-tree/frontend/packages/desktop/src/renderer/solo/item.ts +1 -0
  315. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-missing-tree/grants.yaml +5 -0
  316. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/frontend/packages/desktop/src/a.ts +1 -0
  317. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/frontend/packages/desktop/src/b.ts +1 -0
  318. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/frontend/packages/desktop/src/c.ts +1 -0
  319. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/grants.yaml +4 -0
  320. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-stale-entry/frontend/packages/desktop/src/renderer/solo/item.ts +1 -0
  321. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-stale-entry/grants.yaml +5 -0
  322. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/grants.yaml +0 -2
  323. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unusable-register/frontend/packages/desktop/src/renderer/solo/item.ts +1 -0
  324. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unusable-register/grants.yaml +3 -0
  325. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/register.py +127 -0
  326. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/test_check.py +265 -29
  327. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/check.py +75 -2
  328. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/test_check.py +194 -0
  329. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/check.py +56 -10
  330. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/test_check.py +256 -0
  331. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/check.py +40 -12
  332. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/test_check.py +108 -0
  333. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/test_check.py +1 -1
  334. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/check.py +2 -3
  335. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/check.py +23 -6
  336. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/test_check.py +76 -0
  337. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/check.py +58 -17
  338. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/test_check.py +161 -0
  339. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/check.py +35 -3
  340. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/test_check.py +108 -1
  341. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/check.py +281 -61
  342. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/absolute-path.yaml +3 -0
  343. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/backslash-path.yaml +3 -0
  344. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/baseline-is-a-list.yaml +2 -0
  345. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/boolean-size.yaml +3 -0
  346. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/dot-segment.yaml +3 -0
  347. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/duplicate-path.yaml +4 -0
  348. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-file.yaml +0 -0
  349. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-segment.yaml +3 -0
  350. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/float-size.yaml +3 -0
  351. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/negative-size.yaml +3 -0
  352. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-over-limit-baseline.yaml +1 -0
  353. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-schema-version.yaml +1 -0
  354. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/non-string-path.yaml +3 -0
  355. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/not-yaml.yaml +2 -0
  356. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/null-size.yaml +3 -0
  357. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/parent-segment.yaml +3 -0
  358. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/string-size.yaml +3 -0
  359. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/top-level-is-a-list.yaml +2 -0
  360. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/trailing-slash.yaml +3 -0
  361. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/unknown-key.yaml +3 -0
  362. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/wrong-schema-version.yaml +2 -0
  363. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/zero-size.yaml +3 -0
  364. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/valid.yaml +4 -0
  365. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/test_check.py +758 -45
  366. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/check.py +4 -3
  367. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/test_check.py +2 -2
  368. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/cargo_lock.py +490 -0
  369. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/check.py +368 -55
  370. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_check.py +4 -2
  371. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_declared_paths.py +523 -0
  372. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_stale_lock.py +1179 -0
  373. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/cli.py +122 -3
  374. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/check.py +33 -1
  375. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/constants.py +0 -11
  376. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/context.py +16 -1
  377. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/config.py +1 -2
  378. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/docs_shape.py +12 -1
  379. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.alt.yaml +133 -147
  380. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.yaml +133 -147
  381. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/registry.py +1 -1
  382. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/root_shape.py +52 -10
  383. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/runner.py +23 -4
  384. package/packages/repo-controls/package.json +2 -9
  385. package/packages/repo-controls/scripts/hooks/post-merge +13 -0
  386. package/packages/repo-controls/scripts/hooks/pre-push +3 -3
  387. package/packages/repo-controls/src/azdo-push.ts +64 -36
  388. package/packages/repo-controls/src/azure-devops-governance.ts +7 -9
  389. package/packages/repo-controls/src/azure-devops-remote.ts +1 -1
  390. package/packages/repo-controls/src/cli.ts +29 -8
  391. package/packages/repo-controls/src/compliance-config.ts +410 -2
  392. package/packages/repo-controls/src/config.ts +133 -60
  393. package/packages/repo-controls/src/constants.ts +13 -27
  394. package/packages/repo-controls/src/coverage-ratchet.ts +4 -4
  395. package/packages/repo-controls/src/doctor.ts +46 -19
  396. package/packages/repo-controls/src/gitignore-block.ts +5 -29
  397. package/packages/repo-controls/src/hook-log.ts +1 -2
  398. package/packages/repo-controls/src/hook.ts +201 -45
  399. package/packages/repo-controls/src/install.ts +14 -8
  400. package/packages/repo-controls/src/integrity.ts +3 -3
  401. package/packages/repo-controls/src/lfs.ts +111 -0
  402. package/packages/repo-controls/src/promote.ts +8 -8
  403. package/packages/repo-controls/src/runtime.ts +9 -1
  404. package/packages/repo-controls/src/workflows-drift.ts +4 -5
  405. package/packages/repo-controls/src/worktree-guard.ts +3 -3
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Global installer for the `adl-embedding` static (Model2Vec) embedding
2
+ * Global installer for the `enact-embedding` static (Model2Vec) embedding
3
3
  * artifact that `adl hook`'s skill-match hook loads from
4
- * `${XDG_CACHE_HOME:-$HOME/.cache}/adl-embedding/model/` (falling back to
4
+ * `${XDG_CACHE_HOME:-$HOME/.cache}/enact-embedding/model/` (falling back to
5
5
  * BM25 when absent) — see enact-repo-controls-m5's
6
6
  * `src/hooks/user-prompt-submit/vector.ts`, which this script's output must
7
7
  * satisfy exactly: `model.bin`, `tokenizer.json`, `tokenizer_config.json`,
@@ -76,7 +76,7 @@ const UPSTREAM_FILE_NAMES = ['model.safetensors', 'tokenizer.json', 'tokenizer_c
76
76
  export function resolveArtifactDir(env: Readonly<Record<string, string | undefined>>): string {
77
77
  const xdgCacheHome = env.XDG_CACHE_HOME
78
78
  const base = xdgCacheHome && xdgCacheHome.trim() !== '' ? xdgCacheHome : join(requireHome(env), '.cache')
79
- return join(base, 'adl-embedding', 'model')
79
+ return join(base, 'enact-embedding', 'model')
80
80
  }
81
81
 
82
82
  function requireHome(env: Readonly<Record<string, string | undefined>>): string {
@@ -255,7 +255,7 @@ export interface EmbeddingModelDeps {
255
255
  readonly downloadFile: (url: string, dest: string) => void
256
256
  }
257
257
 
258
- export const defaultDeps: EmbeddingModelDeps = {
258
+ const defaultDeps: EmbeddingModelDeps = {
259
259
  resolveLatestRevision: defaultResolveLatestRevision,
260
260
  fetchPathsInfo: defaultFetchPathsInfo,
261
261
  downloadFile: defaultDownloadFile,
@@ -279,13 +279,13 @@ export async function install(spec: EmbeddingModelSpec, artifactDir: string, dep
279
279
  const revision = await deps.resolveLatestRevision(spec.source)
280
280
 
281
281
  if (isInstalledAtRevision(artifactDir, revision)) {
282
- console.log(`adl-embedding: already installed and verified at ${artifactDir} (${spec.source}@${revision})`)
282
+ console.log(`enact-embedding: already installed and verified at ${artifactDir} (${spec.source}@${revision})`)
283
283
  return
284
284
  }
285
285
 
286
- const work = mkdtempSync(join(tmpdir(), 'adl-embedding-install-'))
286
+ const work = mkdtempSync(join(tmpdir(), 'enact-embedding-install-'))
287
287
  try {
288
- console.log(`adl-embedding: installing ${spec.package} ${spec.version} (${spec.source}@${revision})`)
288
+ console.log(`enact-embedding: installing ${spec.package} ${spec.version} (${spec.source}@${revision})`)
289
289
 
290
290
  const pathsInfo = await deps.fetchPathsInfo(spec.source, revision, UPSTREAM_FILE_NAMES)
291
291
  const downloadedPaths: Record<string, string> = {}
@@ -345,7 +345,7 @@ export async function install(spec: EmbeddingModelSpec, artifactDir: string, dep
345
345
  writeFileSync(staged, readFileSync(join(outDir, name)))
346
346
  renameSync(staged, join(artifactDir, name))
347
347
  }
348
- console.log(`adl-embedding: installed and verified at ${artifactDir} (${spec.source}@${revision})`)
348
+ console.log(`enact-embedding: installed and verified at ${artifactDir} (${spec.source}@${revision})`)
349
349
  } finally {
350
350
  rmSync(work, { recursive: true, force: true })
351
351
  }
@@ -353,18 +353,18 @@ export async function install(spec: EmbeddingModelSpec, artifactDir: string, dep
353
353
 
354
354
  export function uninstall(artifactDir: string): void {
355
355
  if (!existsSync(artifactDir)) {
356
- console.log(`adl-embedding: nothing to remove at ${artifactDir}`)
356
+ console.log(`enact-embedding: nothing to remove at ${artifactDir}`)
357
357
  return
358
358
  }
359
359
  rmSync(artifactDir, { recursive: true, force: true })
360
- console.log(`adl-embedding: removed ${artifactDir}`)
360
+ console.log(`enact-embedding: removed ${artifactDir}`)
361
361
  }
362
362
 
363
363
  function usage(): never {
364
364
  throw new Error('usage: install-embedding-model <install|check|uninstall> --spec JSON [--home ABSOLUTE_PATH]')
365
365
  }
366
366
 
367
- export async function main(argv: readonly string[]): Promise<void> {
367
+ async function main(argv: readonly string[]): Promise<void> {
368
368
  const mode = argv[0]
369
369
  if (mode !== 'install' && mode !== 'check' && mode !== 'uninstall') usage()
370
370
 
@@ -394,8 +394,8 @@ export async function main(argv: readonly string[]): Promise<void> {
394
394
  const ok = isInstalledAtRevision(artifactDir, revision)
395
395
  console.log(
396
396
  ok
397
- ? `adl-embedding: installed and verified at ${artifactDir} (${spec.source}@${revision})`
398
- : `adl-embedding: NOT installed at latest revision ${revision} at ${artifactDir}`,
397
+ ? `enact-embedding: installed and verified at ${artifactDir} (${spec.source}@${revision})`
398
+ : `enact-embedding: NOT installed at latest revision ${revision} at ${artifactDir}`,
399
399
  )
400
400
  process.exitCode = ok ? 0 : 1
401
401
  return
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Render and install the managed baseline hook artifacts (adl items 10/17,
3
- * `docs/architecture/cli-design.md` §2/§3) from the committed templates in
2
+ * Render and install the managed baseline hook artifacts
3
+ * (`docs/architecture/cli-design.md` §2/§3) from the committed templates in
4
4
  * `packages/agent-settings/managed/` onto the real, per-platform system
5
5
  * paths -- the "fleet installation" that directory's own README used to say
6
6
  * was a separate, later item. It is this reconcile pass.
@@ -70,7 +70,7 @@
70
70
  * best-effort, never depended on) -- the actual, CONFIRMED
71
71
  * enforcement is `allow_managed_hooks_only` above plus the
72
72
  * fail-closed managed baseline hook
73
- * (`adl.session-required-for-writes`): a missing or overridden
73
+ * (`adl.run-required-for-writes`): a missing or overridden
74
74
  * `ADL_AGENT_ID_AGENT` denies Azure DevOps writes for that session,
75
75
  * exactly like a plain `codex` with no `adl run` today -- it never
76
76
  * grants anything by being absent. Installed at
@@ -92,8 +92,8 @@ import { DEFAULT_AGENT_PATTERN } from './default-agent-file.ts'
92
92
  export type FleetPlatform = 'mac' | 'linux'
93
93
 
94
94
  const MANAGED_DIR = fileURLToPath(new URL('../../agent-settings/managed', import.meta.url))
95
- export const CLAUDE_TEMPLATE_PATH = join(MANAGED_DIR, 'claude-managed-settings.json')
96
- export const CODEX_REQUIREMENTS_TEMPLATE_PATH = join(MANAGED_DIR, 'codex-requirements.toml')
95
+ const CLAUDE_TEMPLATE_PATH = join(MANAGED_DIR, 'claude-managed-settings.json')
96
+ const CODEX_REQUIREMENTS_TEMPLATE_PATH = join(MANAGED_DIR, 'codex-requirements.toml')
97
97
 
98
98
  export function claudeManagedSettingsPath(platform: FleetPlatform, root = ''): string {
99
99
  switch (platform) {
@@ -153,7 +153,7 @@ export function renderCodexManagedConfig(agent: string): string {
153
153
  # https://developers.openai.com/codex/config-reference. Deployed anyway
154
154
  # because it is harmless if ignored or overridden: unsetting
155
155
  # ADL_AGENT_ID_AGENT here grants nothing -- the managed baseline hook
156
- # (adl.session-required-for-writes, CONFIRMED enforced from
156
+ # (adl.run-required-for-writes, CONFIRMED enforced from
157
157
  # allow_managed_hooks_only in requirements.toml in this same directory) then
158
158
  # denies Azure DevOps writes for that session, fail-closed, exactly like a
159
159
  # plain \`codex\` with no \`adl run\` today. That hook is the real backstop,
@@ -168,7 +168,7 @@ set = { ADL_AGENT_ID_AGENT = "${agent}" }
168
168
  `
169
169
  }
170
170
 
171
- export interface FileWriteResult {
171
+ interface FileWriteResult {
172
172
  readonly path: string
173
173
  readonly changed: boolean
174
174
  }
@@ -22,12 +22,20 @@
22
22
  * integration/main/master/develop and HEAD are never deleted, the KEEP
23
23
  * most recent branches are kept, and only "[gone]" upstreams (-D) or
24
24
  * branches merged into the baseline (-d) are deleted;
25
- * 4. `adl install --repo <repo>` -- the existing per-repo enrolment.
25
+ * 4. the stale-branch prune (only when `branchMaxAgeDays` is configured, from
26
+ * the manifest's `config.repo_maintain.branch_max_age_days`): every local
27
+ * branch whose TIP commit is older than that many days is deleted with
28
+ * `git branch -D` -- never integration/main/master/develop, the checked-out
29
+ * HEAD, or a branch checked out in any worktree. Each deletion is a
30
+ * `WARN repo-maintain: <repo>: deleted stale branch <name> at <sha> (last
31
+ * commit <date>)` line, which is how a deleted branch is recovered from the
32
+ * log (`git branch <name> <sha>`); a dry run lists them without deleting;
33
+ * 5. `adl install --repo <repo>` -- the existing per-repo enrolment.
26
34
  *
27
35
  * This runs as the device administrator, never root (the caller,
28
36
  * bin/reconcile-host, drops privileges and `adl maintain --expect-user`
29
- * refuses otherwise). It never migrates enact-config.toml: a repo that has
30
- * both markers is a named failure.
37
+ * refuses otherwise). It never reads, migrates or modifies enact-config.toml:
38
+ * a repo may carry both markers, and adl-config.toml alone decides scope.
31
39
  *
32
40
  * Reporting: plain progress lines go to `out`; every warning and failure goes
33
41
  * to `err` as `WARN repo-maintain: ...` / `ERROR repo-maintain: ...` (the
@@ -42,9 +50,7 @@ import { NO_AGENT_IDENTITY_MESSAGE, resolveAgentIdentity } from '../../azdo/src/
42
50
  export const TCC_DENIED_MARKER = 'TCC denied'
43
51
 
44
52
  /** The file whose presence puts a repository in this step's scope. */
45
- export const MARKER = 'adl-config.toml'
46
- /** The retired marker; a repo with both is ambiguous and fails loud. */
47
- const LEGACY_MARKER = 'enact-config.toml'
53
+ const MARKER = 'adl-config.toml'
48
54
 
49
55
  /** Branches fast-forwarded, in this order. */
50
56
  const SYNCED_BRANCHES = ['integration', 'main'] as const
@@ -65,6 +71,14 @@ export interface MaintainOptions {
65
71
  readonly keep?: number
66
72
  /** Report only: fetches, but never moves a ref, deletes a branch or runs install. */
67
73
  readonly dryRun?: boolean
74
+ /**
75
+ * Delete local branches whose tip commit is older than this many days (a
76
+ * positive whole number). Unset: no age-based deletion. The manifest's
77
+ * `config.repo_maintain.branch_max_age_days`, never an environment variable.
78
+ */
79
+ readonly branchMaxAgeDays?: number
80
+ /** The clock, injectable for tests. Default: the current time. */
81
+ readonly now?: () => Date
68
82
  /** Environment for identity resolution and every child. Default process.env. */
69
83
  readonly env?: NodeJS.ProcessEnv
70
84
  readonly out?: (line: string) => void
@@ -87,15 +101,18 @@ export function listFailureLines(root: string, error: unknown, executable: strin
87
101
  const code = (error as { code?: unknown } | null)?.code
88
102
  if (code === 'ENOTDIR') return [`${root}: ${message}`]
89
103
  const lines = [`${root}: cannot list: ${message}`]
90
- if (code === 'EPERM') {
91
- lines.push(
92
- `${root}: ${TCC_DENIED_MARKER}: macOS privacy protection blocked ${executable}; ` +
93
- `one-time fix: System Settings › Privacy & Security › Full Disk Access › + › add ${executable}`,
94
- )
95
- }
104
+ if (code === 'EPERM') lines.push(tccDeniedLine(root, executable))
96
105
  return lines
97
106
  }
98
107
 
108
+ /** The one Full Disk Access hint, for a refused readdir and for a git child refused the same way. */
109
+ function tccDeniedLine(path: string, executable: string): string {
110
+ return (
111
+ `${path}: ${TCC_DENIED_MARKER}: macOS privacy protection blocked ${executable}; ` +
112
+ `one-time fix: System Settings › Privacy & Security › Full Disk Access › + › add ${executable}`
113
+ )
114
+ }
115
+
99
116
  interface GitResult {
100
117
  readonly ok: boolean
101
118
  readonly stdout: string
@@ -120,29 +137,6 @@ function isForbiddenAzurePipelinesPath(path: string): boolean {
120
137
  }
121
138
  }
122
139
 
123
- /** `packages/<name>/enact-config.toml` -- the per-package copies of the retired marker. */
124
- function legacyMarkers(repo: string): string[] {
125
- const found: string[] = []
126
- const tryStat = (relative: string): void => {
127
- try {
128
- if (statSync(join(repo, relative)).isFile()) found.push(relative)
129
- } catch (error) {
130
- if (errorCode(error) !== 'ENOENT' && errorCode(error) !== 'ENOTDIR') throw error
131
- }
132
- }
133
- tryStat(LEGACY_MARKER)
134
- let packages: Dirent[] = []
135
- try {
136
- packages = readdirSync(join(repo, 'packages'), { withFileTypes: true })
137
- } catch (error) {
138
- if (errorCode(error) !== 'ENOENT' && errorCode(error) !== 'ENOTDIR') throw error
139
- }
140
- for (const entry of packages.sort((a, b) => a.name.localeCompare(b.name))) {
141
- if (entry.isDirectory()) tryStat(join('packages', entry.name, LEGACY_MARKER))
142
- }
143
- return found
144
- }
145
-
146
140
  export function maintainRepositories(options: MaintainOptions): MaintainResult {
147
141
  const env = options.env ?? process.env
148
142
  const keep = options.keep ?? DEFAULT_KEEP
@@ -165,6 +159,13 @@ export function maintainRepositories(options: MaintainOptions): MaintainResult {
165
159
  return { ok: result.status === 0, stdout: result.stdout, stderr: result.stderr ?? '' }
166
160
  }
167
161
 
162
+ const maxAgeDays = options.branchMaxAgeDays
163
+ if (maxAgeDays !== undefined && (!Number.isInteger(maxAgeDays) || maxAgeDays < 1)) {
164
+ fail(`branch max age must be a positive whole number of days: ${maxAgeDays}`, 'branch-max-age-days')
165
+ return { ok: false, repositories: 0, failures }
166
+ }
167
+ const now = options.now ?? ((): Date => new Date())
168
+
168
169
  const { location } = options
169
170
  if (!isAbsolute(location)) {
170
171
  fail(`location must be an absolute path: ${location}`, location)
@@ -196,7 +197,7 @@ export function maintainRepositories(options: MaintainOptions): MaintainResult {
196
197
  }
197
198
  if (agent !== undefined) identityEnv = { ADL_AGENT_ID_AGENT: agent }
198
199
 
199
- info(`start location=${location} keep=${keep} dry=${dry ? 1 : 0}`)
200
+ info(`start location=${location} keep=${keep} dry=${dry ? 1 : 0}${maxAgeDays === undefined ? '' : ` branch_max_age_days=${maxAgeDays}`}`)
200
201
 
201
202
  let entries: Dirent[]
202
203
  let locationReal: string
@@ -242,19 +243,10 @@ export function maintainRepositories(options: MaintainOptions): MaintainResult {
242
243
  }
243
244
  seen.add(real)
244
245
 
245
- // 3. In scope from here on.
246
- let legacy: string[]
247
- try {
248
- legacy = legacyMarkers(real)
249
- } catch (error) {
250
- fail(`${real}: cannot read: ${error instanceof Error ? error.message : String(error)}`, real)
251
- continue
252
- }
253
- if (legacy.length > 0) {
254
- fail(`${real}: duplicate markers: ${MARKER} and ${LEGACY_MARKER} (${legacy.join(', ')}); migrate or remove one`, real)
255
- continue
256
- }
257
- if (!isGitToplevel(real)) {
246
+ // 3. In scope from here on. enact-config.toml may sit beside the marker; it is never read.
247
+ const toplevel = gitToplevelState(real)
248
+ if (toplevel === 'failed') continue
249
+ if (toplevel === 'not-toplevel') {
258
250
  warn(`${real}: ${MARKER} but not a git top-level; skipped`)
259
251
  continue
260
252
  }
@@ -265,13 +257,33 @@ export function maintainRepositories(options: MaintainOptions): MaintainResult {
265
257
  info(`done (${repositories} repositories, ${failures.length} failed)`)
266
258
  return { ok: failures.length === 0, repositories, failures }
267
259
 
268
- function isGitToplevel(directory: string): boolean {
260
+ /**
261
+ * 'not-toplevel' only on git's own "not a git repository" answer (exit 128) or
262
+ * a toplevel that is a different directory. Anything else (spawn error, other
263
+ * exit status, unresolvable toplevel) is reported here as a failure naming the
264
+ * directory, and the repo is not maintained: it may hide an in-scope repository.
265
+ */
266
+ function gitToplevelState(directory: string): 'toplevel' | 'not-toplevel' | 'failed' {
267
+ const command = 'git rev-parse --show-toplevel'
269
268
  const top = spawnSync('git', ['-C', directory, 'rev-parse', '--show-toplevel'], { encoding: 'utf8', env: childEnv() })
270
- if (top.error !== undefined || top.status !== 0) return false
269
+ if (top.error !== undefined) {
270
+ fail(`${directory}: cannot run ${command}: ${top.error.message}`, directory)
271
+ return 'failed'
272
+ }
273
+ const stderr = (top.stderr ?? '').trim()
274
+ if (top.status === 128 && stderr.includes('not a git repository')) return 'not-toplevel'
275
+ if (top.status !== 0) {
276
+ const shown = stderr.split('\n').slice(0, 3).join(' | ')
277
+ fail(`${directory}: ${command} exited ${top.status ?? `by signal ${top.signal}`}: ${shown}`, directory)
278
+ // git's "Operation not permitted" is TCC refusing the files to this job's responsible process (adl).
279
+ if (stderr.includes('Operation not permitted')) errOut(`ERROR repo-maintain: ${tccDeniedLine(directory, options.executable)}`)
280
+ return 'failed'
281
+ }
271
282
  try {
272
- return realpathSync(top.stdout.trim()) === directory
273
- } catch {
274
- return false
283
+ return realpathSync(top.stdout.trim()) === directory ? 'toplevel' : 'not-toplevel'
284
+ } catch (error) {
285
+ fail(`${directory}: cannot resolve git toplevel ${top.stdout.trim()}: ${error instanceof Error ? error.message : String(error)}`, directory)
286
+ return 'failed'
275
287
  }
276
288
  }
277
289
 
@@ -312,7 +324,10 @@ export function maintainRepositories(options: MaintainOptions): MaintainResult {
312
324
  // 3. guarded prune.
313
325
  prune(repo, name, current)
314
326
 
315
- // 4. the per-repo enrolment.
327
+ // 4. stale-branch prune: by the tip commit's age.
328
+ if (maxAgeDays !== undefined) pruneStale(repo, name, current, maxAgeDays)
329
+
330
+ // 5. the per-repo enrolment.
316
331
  const argv = [...options.install.leadingArgs, 'install', '--repo', repo]
317
332
  const shown = `adl install --repo ${repo}`
318
333
  if (dry) {
@@ -368,6 +383,27 @@ export function maintainRepositories(options: MaintainOptions): MaintainResult {
368
383
  }
369
384
  }
370
385
 
386
+ function pruneStale(repo: string, name: string, current: string, days: number): void {
387
+ const cutoff = now().getTime() / 1000 - days * 86_400
388
+ // %1f (unit separator) cannot appear in a ref name, unlike `|`.
389
+ const format = '%(refname:short)%1f%(objectname)%1f%(committerdate:unix)%1f%(worktreepath)'
390
+ for (const line of lines(git(repo, 'for-each-ref', 'refs/heads/', `--format=${format}`).stdout)) {
391
+ const [branch = '', sha = '', committed = '', worktree = ''] = line.split('\x1f')
392
+ if (branch === '' || PROTECTED.has(branch) || branch === current) continue
393
+ const tip = Number(committed)
394
+ if (!Number.isFinite(tip) || tip >= cutoff) continue
395
+ // A branch checked out in any worktree (the main one included) is in use.
396
+ if (worktree !== '') {
397
+ info(`${name}: kept stale branch ${branch} (checked out in ${worktree})`)
398
+ continue
399
+ }
400
+ const described = `stale branch ${branch} at ${sha} (last commit ${new Date(tip * 1000).toISOString().slice(0, 10)})`
401
+ if (dry) info(`${name}: [dry] would delete ${described}`)
402
+ else if (git(repo, 'branch', '-D', branch).ok) warn(`${name}: deleted ${described}`)
403
+ else warn(`${name}: could not delete ${described}`)
404
+ }
405
+ }
406
+
371
407
  function prune(repo: string, name: string, current: string): void {
372
408
  const base = baselineFor(repo)
373
409
  const keptRecent = new Set(
@@ -34,12 +34,12 @@ import { defaultAgentFilePath, type FleetPlatform } from './default-agent-file.t
34
34
  // apps/cli/src/commands/mcp.ts's own cross-package import of packages/azdo:
35
35
  // this workspace has no node_modules/@adl/* symlinks without `bun install`.
36
36
  // packages/azdo/src/lib/agent-identity.ts is now THE one place the
37
- // default-agent file is READ from (STATUS.md 12p,
38
- // W1); this package's own default-agent-file.ts keeps only the WRITE side
39
- // (`reconcileDefaultAgentFile`) plus the path computation both sides need.
37
+ // default-agent file is READ from; this package's own default-agent-file.ts
38
+ // keeps only the WRITE side (`reconcileDefaultAgentFile`) plus the path
39
+ // computation both sides need.
40
40
  import { NO_AGENT_IDENTITY_MESSAGE, resolveAgentIdentity } from '../../azdo/src/lib/agent-identity.ts'
41
41
 
42
- export type Mode = 'plan' | 'apply'
42
+ type Mode = 'plan' | 'apply'
43
43
 
44
44
  export type GitResult = { ok: boolean; stdout: string; stderr: string }
45
45
  export type Git = (args: string[], cwd: string) => GitResult
@@ -530,7 +530,7 @@ function usage(): never {
530
530
  process.exit(2)
531
531
  }
532
532
 
533
- export function main(argv: string[]): number {
533
+ function main(argv: string[]): number {
534
534
  const repos: string[] = []
535
535
  let mode: Mode = 'plan'
536
536
  let idleDays = 1
@@ -21,7 +21,7 @@
21
21
  * format and default/named-profile directory shape, under its own
22
22
  * `Application Support`/`.config` folder name (`Cursor` instead of `Code`) —
23
23
  * this is the standard, well-known Cursor Application Support location
24
- * (docs/operations/research-2026-09-27-worktree-controls-per-surface.md confirms
24
+ * (docs/research/research-2026-09-27-worktree-controls-per-surface.md confirms
25
25
  * `~/.cursor/worktrees/<repo>/` for worktree storage and that
26
26
  * `cursor.worktreeMaxCount` lives in "the regular Cursor settings.json (user
27
27
  * or workspace scope, VS Code-style)", but does not separately spell out the
@@ -51,14 +51,14 @@ import { basename, dirname, isAbsolute, join } from 'node:path'
51
51
  export type VscodePlatform = 'mac' | 'linux'
52
52
 
53
53
  /** A managed setting's value: VS Code's two owned keys are boolean; Cursor's `worktreeMaxCount` is numeric. */
54
- export type SettingValue = boolean | number
54
+ type SettingValue = boolean | number
55
55
 
56
56
  export const REQUIRED_VSCODE_SETTINGS = {
57
57
  'git.detectWorktrees': true,
58
58
  'scm.alwaysShowRepositories': true,
59
59
  } as const
60
60
 
61
- export const APPLY_TO_ALL_PROFILES_SETTING = 'workbench.settings.applyToAllProfiles'
61
+ const APPLY_TO_ALL_PROFILES_SETTING = 'workbench.settings.applyToAllProfiles'
62
62
 
63
63
  /**
64
64
  * `cursor.worktreeMaxCount` — docs/operations/worktree-guard.md L0. Deployed as a
@@ -75,7 +75,7 @@ export const REQUIRED_CURSOR_SETTINGS = {
75
75
  'cursor.worktreeMaxCount': 3,
76
76
  } as const
77
77
 
78
- export interface EditorSettingsSpec {
78
+ interface EditorSettingsSpec {
79
79
  readonly requiredSettings: Readonly<Record<string, SettingValue>>
80
80
  /** VS Code only: the setting id that collects a profile-wide apply-to-all list. Omit for editors with no confirmed equivalent (Cursor). */
81
81
  readonly applyToAllProfilesSetting?: string
@@ -90,7 +90,7 @@ const CURSOR_SPEC: EditorSettingsSpec = {
90
90
  requiredSettings: REQUIRED_CURSOR_SETTINGS,
91
91
  }
92
92
 
93
- export interface VscodeSettingsFileResult {
93
+ interface VscodeSettingsFileResult {
94
94
  readonly path: string
95
95
  readonly changed: boolean
96
96
  readonly missing: boolean