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

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 (410) 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 +12 -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 +131 -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 +33 -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/scripts/probe-ado-rules.ts +311 -0
  140. package/packages/azdo/src/azdo-pl.ts +2 -54
  141. package/packages/azdo/src/azdo-pr-review.ts +4 -4
  142. package/packages/azdo/src/azdo-repo-doctor.ts +101 -52
  143. package/packages/azdo/src/azdo-wit.ts +44 -2
  144. package/packages/azdo/src/lib/agent-identity.ts +12 -14
  145. package/packages/azdo/src/lib/agent-token.ts +2 -2
  146. package/packages/azdo/src/lib/client.ts +0 -5
  147. package/packages/azdo/src/lib/graph-identity.ts +4 -4
  148. package/packages/azdo/src/workflow-ladder.csv +241 -0
  149. package/packages/azdo/src/workflow-rules-matrix.csv +85 -0
  150. package/packages/azdo/src/workflow-rules.ts +194 -0
  151. package/packages/fleet/manifest.json +35 -11
  152. package/packages/fleet/manifest.schema.json +62 -10
  153. package/packages/fleet/src/default-agent-file.ts +3 -3
  154. package/packages/fleet/src/install-adl-package.ts +73 -15
  155. package/packages/fleet/src/install-embedding-model.ts +13 -13
  156. package/packages/fleet/src/managed-settings.ts +7 -7
  157. package/packages/fleet/src/repo-maintain.ts +91 -55
  158. package/packages/fleet/src/scratch-reap.ts +5 -5
  159. package/packages/fleet/src/vscode-settings.ts +5 -5
  160. package/packages/repo-controls/README.md +141 -43
  161. package/packages/repo-controls/assets/promote.ts +4 -4
  162. package/packages/repo-controls/assets/reconcile-guard.sh +10 -46
  163. package/packages/repo-controls/assets/version-bump.sh +31 -84
  164. package/packages/repo-controls/bunfig.toml +6 -7
  165. package/packages/repo-controls/package/adl-compliance/AGENTS.md +5 -6
  166. package/packages/repo-controls/package/adl-compliance/conftest.py +3 -1
  167. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/__init__.py +4 -16
  168. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/test_check.py +9 -2
  169. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/notes.md +1 -0
  170. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/test_check.py +11 -0
  171. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/__init__.py +7 -0
  172. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/check.py +266 -0
  173. 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
  174. 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
  175. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.hidden.md +1 -0
  176. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/a.md +1 -0
  177. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/b.md +1 -0
  178. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/data.csv +1 -0
  179. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/diagram.png +1 -0
  180. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/mock.png +1 -0
  181. 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
  182. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs.md +1 -0
  183. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/grants.yaml +4 -0
  184. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p1.md +1 -0
  185. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p2.md +1 -0
  186. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p3.md +1 -0
  187. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p4.md +1 -0
  188. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p5.md +1 -0
  189. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/build.md +1 -0
  190. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/overview.md +1 -0
  191. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/install.md +1 -0
  192. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/start.md +1 -0
  193. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/grants.yaml +4 -0
  194. 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
  195. 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
  196. 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
  197. 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
  198. 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
  199. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/a.md +1 -0
  200. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/b.md +1 -0
  201. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/c.md +1 -0
  202. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/grants.yaml +4 -0
  203. 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
  204. 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
  205. 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
  206. 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
  207. 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
  208. 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
  209. 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
  210. 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
  211. 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
  212. 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
  213. 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
  214. 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
  215. 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
  216. 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
  217. 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
  218. 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
  219. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/grants.yaml +4 -0
  220. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/a.md +1 -0
  221. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/b.md +1 -0
  222. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/c.md +1 -0
  223. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/grants.yaml +4 -0
  224. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/a.md +1 -0
  225. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/b.md +1 -0
  226. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/c.md +1 -0
  227. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/grants.yaml +4 -0
  228. 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
  229. 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
  230. 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
  231. 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
  232. 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
  233. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/grants.yaml +4 -0
  234. 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
  235. 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
  236. 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
  237. 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
  238. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/grants.yaml +4 -0
  239. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/a.md +1 -0
  240. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/b.md +1 -0
  241. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/c.md +1 -0
  242. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/d.md +1 -0
  243. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/a.md +1 -0
  244. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/b.md +1 -0
  245. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/grants.yaml +6 -0
  246. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/a.md +1 -0
  247. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/b.md +1 -0
  248. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/c.md +1 -0
  249. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/grants.yaml +3 -0
  250. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/test_check.py +345 -0
  251. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/check.py +18 -5
  252. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/test_check.py +35 -0
  253. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/__init__.py +7 -0
  254. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/check.py +91 -0
  255. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/AGENTS.md +3 -0
  256. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/CLAUDE.md +3 -0
  257. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/-leading-hyphen.md +3 -0
  258. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/AGENTS.md +3 -0
  259. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/double--hyphen.md +3 -0
  260. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/getting started.md +3 -0
  261. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/nested/page-here.md +3 -0
  262. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/trailing-hyphen-.md +3 -0
  263. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/ui-contract.md +4 -0
  264. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/user_profile.md +3 -0
  265. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/UI-CONTRACT.png +2 -0
  266. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/diagram.png +1 -0
  267. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/index.md +4 -0
  268. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/notes.md +3 -0
  269. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/reference.html +1 -0
  270. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/2026-10-experiment.md +3 -0
  271. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/UI-CONTRACT.md +6 -0
  272. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs.md +5 -0
  273. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/test_check.py +194 -0
  274. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/check.py +14 -2
  275. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/docs-knowledge-indexes.yaml +5 -5
  276. 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
  277. 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
  278. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/test_check.py +58 -6
  279. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/test_check.py +0 -1
  280. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/check.py +64 -17
  281. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/docs-okf-profiles.yaml +60 -9
  282. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-clean/docs/notes.md +17 -0
  283. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-no-lines/docs/notes.md +13 -0
  284. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs/architecture/demo.md +0 -1
  285. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs-okf-profiles.yaml +0 -1
  286. 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
  287. 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
  288. 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
  289. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs-okf-profiles.yaml +5 -0
  290. 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
  291. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs-okf-profiles.yaml +0 -1
  292. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/experiment-ok.md +15 -0
  293. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-key.md +15 -0
  294. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-keys.md +16 -0
  295. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-created.md +11 -0
  296. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-description.md +11 -0
  297. 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
  298. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-sources.md +10 -0
  299. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-status.md +11 -0
  300. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-title.md +11 -0
  301. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/optional-keys.md +16 -0
  302. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/research-ok.md +14 -0
  303. 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
  304. 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
  305. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/operations/runbook.md +26 -0
  306. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/test_check.py +228 -2
  307. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/register.py +5 -0
  308. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/test_check.py +11 -2
  309. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/__init__.py +5 -3
  310. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/check.py +160 -44
  311. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-clean/grants.yaml +0 -2
  312. 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
  313. 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
  314. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/grants.yaml +3 -0
  315. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/grants.yaml +0 -2
  316. 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
  317. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-missing-tree/grants.yaml +5 -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/a.ts +1 -0
  319. 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
  320. 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
  321. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/grants.yaml +4 -0
  322. 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
  323. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-stale-entry/grants.yaml +5 -0
  324. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/grants.yaml +0 -2
  325. 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
  326. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unusable-register/grants.yaml +3 -0
  327. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/register.py +127 -0
  328. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/test_check.py +265 -29
  329. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/check.py +75 -2
  330. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/test_check.py +194 -0
  331. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/check.py +56 -10
  332. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/test_check.py +258 -2
  333. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/check.py +40 -12
  334. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/test_check.py +108 -0
  335. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plan_metadata.py +9 -4
  336. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/check.py +1 -1
  337. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-clean/plans/features/az347-test-coverage/items/az351-restore-entrypoint.md +1 -1
  338. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/test_check.py +3 -3
  339. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/check.py +2 -3
  340. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/check.py +23 -6
  341. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/test_check.py +76 -0
  342. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/check.py +58 -17
  343. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/test_check.py +161 -0
  344. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/check.py +35 -3
  345. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/test_check.py +108 -1
  346. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/check.py +281 -61
  347. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/absolute-path.yaml +3 -0
  348. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/backslash-path.yaml +3 -0
  349. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/baseline-is-a-list.yaml +2 -0
  350. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/boolean-size.yaml +3 -0
  351. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/dot-segment.yaml +3 -0
  352. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/duplicate-path.yaml +4 -0
  353. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-file.yaml +0 -0
  354. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-segment.yaml +3 -0
  355. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/float-size.yaml +3 -0
  356. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/negative-size.yaml +3 -0
  357. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-over-limit-baseline.yaml +1 -0
  358. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-schema-version.yaml +1 -0
  359. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/non-string-path.yaml +3 -0
  360. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/not-yaml.yaml +2 -0
  361. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/null-size.yaml +3 -0
  362. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/parent-segment.yaml +3 -0
  363. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/string-size.yaml +3 -0
  364. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/top-level-is-a-list.yaml +2 -0
  365. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/trailing-slash.yaml +3 -0
  366. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/unknown-key.yaml +3 -0
  367. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/wrong-schema-version.yaml +2 -0
  368. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/zero-size.yaml +3 -0
  369. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/valid.yaml +4 -0
  370. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/test_check.py +758 -45
  371. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/check.py +4 -3
  372. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/test_check.py +2 -2
  373. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/cargo_lock.py +490 -0
  374. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/check.py +368 -55
  375. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_check.py +4 -2
  376. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_declared_paths.py +523 -0
  377. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_stale_lock.py +1179 -0
  378. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/cli.py +122 -3
  379. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/check.py +33 -1
  380. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/constants.py +0 -11
  381. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/context.py +16 -1
  382. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/config.py +1 -2
  383. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/docs_shape.py +12 -1
  384. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.alt.yaml +133 -147
  385. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.yaml +133 -147
  386. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/registry.py +1 -1
  387. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/root_shape.py +52 -10
  388. package/packages/repo-controls/package/adl-compliance/src/adl_compliance/runner.py +23 -4
  389. package/packages/repo-controls/package.json +2 -9
  390. package/packages/repo-controls/scripts/hooks/post-merge +13 -0
  391. package/packages/repo-controls/scripts/hooks/pre-push +3 -3
  392. package/packages/repo-controls/src/azdo-push.ts +64 -36
  393. package/packages/repo-controls/src/azure-devops-governance.ts +7 -9
  394. package/packages/repo-controls/src/azure-devops-remote.ts +1 -1
  395. package/packages/repo-controls/src/cli.ts +29 -8
  396. package/packages/repo-controls/src/compliance-config.ts +410 -2
  397. package/packages/repo-controls/src/config.ts +133 -60
  398. package/packages/repo-controls/src/constants.ts +13 -27
  399. package/packages/repo-controls/src/coverage-ratchet.ts +4 -4
  400. package/packages/repo-controls/src/doctor.ts +46 -19
  401. package/packages/repo-controls/src/gitignore-block.ts +5 -29
  402. package/packages/repo-controls/src/hook-log.ts +1 -2
  403. package/packages/repo-controls/src/hook.ts +201 -45
  404. package/packages/repo-controls/src/install.ts +14 -8
  405. package/packages/repo-controls/src/integrity.ts +3 -3
  406. package/packages/repo-controls/src/lfs.ts +111 -0
  407. package/packages/repo-controls/src/promote.ts +8 -8
  408. package/packages/repo-controls/src/runtime.ts +9 -1
  409. package/packages/repo-controls/src/workflows-drift.ts +4 -5
  410. package/packages/repo-controls/src/worktree-guard.ts +3 -3
@@ -51,7 +51,7 @@ function parseArgs(args: readonly string[]): { home: string; mode: "plan" | "rem
51
51
  return { home, mode };
52
52
  }
53
53
 
54
- export function main(args: readonly string[]): number {
54
+ function main(args: readonly string[]): number {
55
55
  const { home, mode } = parseArgs(args);
56
56
  const path = pluginPath(home);
57
57
  const state = classifyRetiredCarrier(home);
@@ -0,0 +1,23 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "lib": ["ESNext"],
5
+ "target": "ESNext",
6
+ "module": "Preserve",
7
+ "moduleResolution": "bundler",
8
+ "moduleDetection": "force",
9
+ "types": ["bun"],
10
+ "allowImportingTsExtensions": true,
11
+ "verbatimModuleSyntax": true,
12
+ "noEmit": true,
13
+ "noUncheckedIndexedAccess": true,
14
+ "exactOptionalPropertyTypes": true,
15
+ "noImplicitOverride": true,
16
+ "noImplicitReturns": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": true,
20
+ "useUnknownInCatchVariables": true
21
+ },
22
+ "include": ["src/**/*.ts", "tests/**/*.ts"]
23
+ }
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: agent-search-tool-audit
3
+ description: Measure how often each agent host (Claude Code, Codex, Kimi, OpenCode) reaches for `ast-grep` and `search query "<text>"` versus how often agent-hooks denies them for `grep`, `find`, or the host's native `Grep` / `Glob` / `Search` tool. Produces a dated research page under `docs/research/` with frontmatter and updates `docs/research/index.md`. Use when the user wants to audit search-tool behaviour across surfaces, when investigating why the deny messages aren't redirecting the model, or as a scheduled weekly check.
4
+ disable-model-invocation: false
5
+ ---
6
+
7
+ # Agent Search-Tool Audit
8
+
9
+ Per-host, per-day tally of agent-hooks decisions in `.adl/logs/`,
10
+ grouped by surface (claude / codex / kimi / opencode). The same
11
+ audit that produced `docs/research/research-2026-10-02-search-tool-usage-across-surfaces.md`
12
+ and its evidence siblings.
13
+
14
+ ## Use When
15
+
16
+ - The user wants to measure how often each agent host reaches for
17
+ `ast-grep` / `search query` vs how often they reach for `grep` /
18
+ `find` / native `Grep`.
19
+ - The user is investigating why the deny messages aren't
20
+ redirecting the model to the recommended tools.
21
+ - A weekly check is needed (the script runs in <30 s and writes a
22
+ dated `docs/research/research-YYYY-MM-DD-search-tool-usage-across-surfaces.md`).
23
+
24
+ ## Do Not Use When
25
+
26
+ - The repo has no `.adl/logs/` (no agent-hooks hooks installed).
27
+ - The question is about a non-search tool (use a different audit
28
+ script).
29
+ - The repo is not a git repo and the script's `git rev-parse
30
+ --show-toplevel` fallback cannot find the project root — pass
31
+ `--out <absolute-dir>` to write the report elsewhere.
32
+
33
+ ## Process
34
+
35
+ ### 1. Locate the script
36
+
37
+ After deploy, the script lives at:
38
+
39
+ ```
40
+ .agents/skills/agent-search-tool-audit/scripts/audit.sh
41
+ ```
42
+
43
+ In dev (this repo's `packages/agent-skills/`), the equivalent path is
44
+ `packages/agent-skills/assets/agent-search-tool-audit/scripts/audit.sh`.
45
+ The script finds the project root via `git rev-parse --show-toplevel`,
46
+ so it works in both layouts.
47
+
48
+ ### 2. Run with the desired window
49
+
50
+ ```sh
51
+ .agents/skills/agent-search-tool-audit/scripts/audit.sh --days 7
52
+ ```
53
+
54
+ Flags:
55
+ - `--days N` — trailing window in UTC days (default 7)
56
+ - `--out DIR` — output directory (default `docs/research`)
57
+
58
+ The script writes one markdown file per run:
59
+
60
+ ```
61
+ docs/research/research-YYYY-MM-DD-search-tool-usage-across-surfaces.md
62
+ ```
63
+
64
+ If a file with that name already exists, the script leaves it
65
+ untouched (it might be a hand-curated analysis from earlier in the
66
+ day) and only updates `docs/research/index.md`. Delete the existing
67
+ file to force regeneration.
68
+
69
+ ### 3. Verify the page has frontmatter and is in the catalog
70
+
71
+ The script emits a valid research page (frontmatter included) and
72
+ appends one row to `docs/research/index.md`. Confirm both with:
73
+
74
+ ```sh
75
+ head -10 docs/research/research-$(date -u +%Y-%m-%d)-search-tool-usage-across-surfaces.md
76
+ rg "$(date -u +%Y-%m-%d)-search-tool-usage" docs/research/index.md
77
+ ```
78
+
79
+ ### 4. (Optional) Schedule it
80
+
81
+ The cheapest repeatable cadence is `crontab` on the workstation:
82
+
83
+ ```
84
+ 0 9 * * 1 cd <repo-root> && .agents/skills/agent-search-tool-audit/scripts/audit.sh
85
+ ```
86
+
87
+ Weekly Monday 09:00 local. The output lands in `docs/research/`,
88
+ ready for the next research-page review.
89
+
90
+ ## What the script measures
91
+
92
+ | Metric | Source | Use |
93
+ | --- | --- | --- |
94
+ | Total decisions per host | `hooks.log` / `hooks.log.1` / `hooks-deny.log`, deduped by `(ts, command, rule)` | Volume baseline |
95
+ | Denials per host, broken down by `rule` field | same | Where the hook fires |
96
+ | Search-tool denials (`tool.grep` / `tool.native-search` / `tool.find`) | same | The hook category this skill cares about |
97
+ | `ast-grep` invocations (Bash command starting with `ast-grep`) | same | Whether the recommended tool is being used |
98
+ | `search query` invocations (Bash command starting with `search `) | same | Same |
99
+ | Session count per host/day | same | Volume sanity check |
100
+
101
+ The script does NOT compute the per-denial retry/pivot analysis
102
+ that's in the hand-curated research page. That step needs the model
103
+ itself (it requires reading the actual `command` strings and
104
+ classifying them by tool). For the retry analysis, follow the
105
+ "Process" steps in `docs/research/research-2026-10-02-search-tool-usage-across-surfaces.md`.
106
+
107
+ ## Cost
108
+
109
+ - <30 s on a typical 2-3 MB log set
110
+ - No network, no new tools beyond `jq` + `python3` + the shell
111
+ - Read-only on `.adl/logs/`; writes one markdown file and one row
112
+ to `docs/research/index.md`
113
+
114
+ ## Related
115
+
116
+ - `docs/research/research-2026-10-02-search-tool-usage-across-surfaces.md`
117
+ — the hand-curated analysis this script would generate for today
118
+ - `packages/agent-hooks/src/rules/impl/tool-grep.ts`,
119
+ `tool-find.ts`, `tool-native-search.ts` — the deny messages the
120
+ audit is measuring
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env bash
2
+ # scripts/audit.sh — part of the agent-search-tool-audit skill
3
+ # (packages/agent-skills/assets/agent-search-tool-audit/).
4
+ #
5
+ # Per-host, per-day tally of agent-hooks decisions in `.adl/logs/`,
6
+ # grouped by surface (claude / codex / kimi / opencode). Writes one
7
+ # dated markdown under `docs/research/` so the next weekly research
8
+ # page in the "agent search-tool behaviour" series can compare against
9
+ # the previous one. Reads only — never modifies the repo.
10
+ #
11
+ # Usage:
12
+ # scripts/audit.sh [--days N] [--out DIR]
13
+ #
14
+ # Defaults: --days 7, --out docs/research
15
+ #
16
+ # Output:
17
+ # <out>/research-YYYY-MM-DD-search-tool-usage-across-surfaces.md
18
+ # <out>/index.md (one new row appended for the new page)
19
+ #
20
+ # Source data:
21
+ # .adl/logs/hooks.log (current decision log)
22
+ # .adl/logs/hooks.log.1 (rotated decision log)
23
+ # .adl/logs/hooks-deny.log (dedicated deny stream)
24
+ # .adl/logs/agents/tool-calls.log (adl run lifecycle)
25
+ #
26
+ # Path discovery: this script lives in the agent-skills asset tree
27
+ # (5 levels deep in dev, 4 levels deep once deployed to
28
+ # `.agents/skills/`). Use `git rev-parse --show-toplevel` so it
29
+ # works in both layouts.
30
+ #
31
+ # Cost: <30 s on a typical 2-3 MB log set; no network, no new tools
32
+ # beyond jq + python3 + the shell.
33
+
34
+ set -euo pipefail
35
+
36
+ DAYS=7
37
+ OUT=docs/research
38
+ while [[ $# -gt 0 ]]; do
39
+ case "$1" in
40
+ --days) DAYS="$2"; shift 2;;
41
+ --out) OUT="$2"; shift 2;;
42
+ -h|--help)
43
+ sed -n '2,30p' "$0"
44
+ exit 0
45
+ ;;
46
+ *)
47
+ echo "unknown arg: $1" >&2
48
+ exit 2
49
+ ;;
50
+ esac
51
+ done
52
+
53
+ cd "$(dirname "$0")/../.."
54
+
55
+ # `git rev-parse --show-toplevel` works in both dev (5 levels deep
56
+ # under packages/agent-skills/assets/agent-search-tool-audit/scripts)
57
+ # and deployed (4 levels deep under .agents/skills/). Fall back to
58
+ # the dev layout if git is missing.
59
+ if command -v git >/dev/null 2>&1; then
60
+ if toplevel=$(git rev-parse --show-toplevel 2>/dev/null) && [[ -n "$toplevel" ]]; then
61
+ cd "$toplevel"
62
+ fi
63
+ fi
64
+
65
+ command -v jq >/dev/null 2>&1 || { echo "jq is required and is not on PATH" >&2; exit 1; }
66
+ command -v python3 >/dev/null 2>&1 || { echo "python3 is required and is not on PATH" >&2; exit 1; }
67
+
68
+ LOG_FILES=(
69
+ .adl/logs/hooks.log
70
+ .adl/logs/hooks.log.1
71
+ .adl/logs/hooks-deny.log
72
+ )
73
+ LOGS_PRESENT=()
74
+ for f in "${LOG_FILES[@]}"; do
75
+ [[ -f "$f" ]] && LOGS_PRESENT+=("$f")
76
+ done
77
+ [[ ${#LOGS_PRESENT[@]} -gt 0 ]] || { echo "no hook log files present under .adl/logs/" >&2; exit 1; }
78
+
79
+ TODAY="$(date -u +%Y-%m-%d)"
80
+ RUN_TS="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
81
+ OUT_FILE="${OUT}/research-${TODAY}-search-tool-usage-across-surfaces.md"
82
+
83
+ # If today's page already exists, leave it alone — it might be a hand-curated
84
+ # analysis from earlier in the day. Append / update `index.md` either way so
85
+ # the catalog stays current.
86
+ if [[ -f "$OUT_FILE" ]]; then
87
+ echo "${OUT_FILE} already exists; leaving it untouched. Re-run after deleting it (or pass --out to a different dir)."
88
+ # Still touch index.md so the catalog row stays current (idempotent).
89
+ INDEX="${OUT}/index.md"
90
+ ROW="| [Search-tool usage across surfaces — ${TODAY}](research-${TODAY}-search-tool-usage-across-surfaces.md) | Auto-generated weekly audit of per-host search-tool denials and recommended-tool invocations |"
91
+ if [[ -f "$INDEX" ]] && ! grep -q "research-${TODAY}-search-tool-usage-across-surfaces.md" "$INDEX"; then
92
+ python3 - "$INDEX" "$ROW" <<'PYEOF' >/dev/null
93
+ import sys
94
+ path, row = sys.argv[1], sys.argv[2]
95
+ with open(path) as f:
96
+ body = f.read()
97
+ if body.endswith("\n\n"):
98
+ body = body.rstrip() + "\n" + row + "\n"
99
+ elif body.endswith("\n"):
100
+ body = body + row + "\n"
101
+ else:
102
+ body = body + "\n" + row + "\n"
103
+ with open(path, "w") as f:
104
+ f.write(body)
105
+ PYEOF
106
+ echo "appended row to ${INDEX}"
107
+ fi
108
+ exit 0
109
+ fi
110
+
111
+ python3 - "${DAYS}" "${RUN_TS}" "${TODAY}" "${LOGS_PRESENT[@]}" >"${OUT_FILE}" <<'PYEOF'
112
+ import json, sys, datetime, collections
113
+
114
+ days = int(sys.argv[1])
115
+ run_ts = sys.argv[2]
116
+ today = sys.argv[3]
117
+ log_files = sys.argv[4:]
118
+
119
+ cutoff = datetime.datetime.fromisoformat(today + "T00:00:00Z") - datetime.timedelta(days=days-1)
120
+
121
+ # Per (host, day), tally. Dedupe by (ts, command, rule) within each log.
122
+ per_host_day = collections.defaultdict(lambda: collections.Counter())
123
+ per_host_day_deny_rule = collections.defaultdict(lambda: collections.Counter())
124
+ per_host_day_ast_grep = collections.defaultdict(int)
125
+ per_host_day_search_query = collections.defaultdict(int)
126
+ per_host_day_session_ids = collections.defaultdict(set)
127
+
128
+ seen = set()
129
+ for path in log_files:
130
+ with open(path) as f:
131
+ for line in f:
132
+ try:
133
+ d = json.loads(line)
134
+ except json.JSONDecodeError:
135
+ continue
136
+ host = d.get("host")
137
+ ts = d.get("ts")
138
+ if host is None or ts is None:
139
+ continue
140
+ day = ts[:10]
141
+ try:
142
+ t = datetime.datetime.fromisoformat(ts.replace("Z", "+00:00"))
143
+ except ValueError:
144
+ continue
145
+ if t < cutoff:
146
+ continue
147
+ key = (ts, d.get("command"), d.get("rule"))
148
+ if key in seen:
149
+ continue
150
+ seen.add(key)
151
+
152
+ sess = d.get("session_id")
153
+ if sess:
154
+ per_host_day_session_ids[(host, day)].add(sess)
155
+
156
+ per_host_day[(host, day)][d.get("decision", "?")] += 1
157
+
158
+ if d.get("decision", "").startswith("DENY"):
159
+ per_host_day_deny_rule[(host, day)][d.get("rule", "?")] += 1
160
+
161
+ cmd = (d.get("command") or "").lower()
162
+ if "ast-grep" in cmd and cmd.lstrip().startswith("ast-grep"):
163
+ per_host_day_ast_grep[(host, day)] += 1
164
+ if cmd.lstrip().startswith("search "):
165
+ per_host_day_search_query[(host, day)] += 1
166
+
167
+ hosts = sorted({h for (h, _) in per_host_day})
168
+ days_sorted = sorted({d for (_, d) in per_host_day})
169
+
170
+ search_tool_rules = ("tool.grep", "tool.native-search", "tool.find")
171
+
172
+ lines = []
173
+ lines.append("---")
174
+ lines.append("title: Agent interface search-tool usage across surfaces ({0})".format(today))
175
+ lines.append("description: Auto-generated per-host, per-day tally of search-tool denials and recommended-tool invocations. Produced by `scripts/research/weekly-search-tool-audit.sh --days {n}` at {run_ts}.".format(today, n=days, run_ts=run_ts))
176
+ lines.append("type: Research")
177
+ lines.append("created: {0}".format(today))
178
+ lines.append("status: stable")
179
+ lines.append("last_update: {0}".format(run_ts))
180
+ lines.append("sources: .adl/logs/hooks.log, .adl/logs/hooks.log.1, .adl/logs/hooks-deny.log")
181
+ lines.append("related: ./index.md, ./research-2026-10-02-search-tool-usage-across-surfaces.md")
182
+ lines.append("---")
183
+ lines.append("")
184
+ lines.append("# Agent interface search-tool usage across surfaces ({0})".format(today))
185
+ lines.append("")
186
+ lines.append("Auto-generated weekly audit. Window: trailing {0} UTC days ending {1}. Source: `.adl/logs/hooks*.log` and `.adl/logs/hooks-deny.log`. Re-run with `just research/weekly-search-audit`.".format(days, today))
187
+ lines.append("")
188
+ lines.append("## Headline per host")
189
+ lines.append("")
190
+ lines.append("| Host | Decisions | Denials | Search-tool denials | ast-grep invocations | search query invocations |")
191
+ lines.append("| --- | --- | --- | --- | --- | --- |")
192
+ totals = collections.Counter()
193
+ for host in hosts:
194
+ d_total = sum(per_host_day[(host, d)]["PASS"] + per_host_day[(host, d)].get("DENY", 0) + per_host_day[(host, d)].get("ERROR", 0) + per_host_day[(host, d)].get("SKIP", 0) for d in days_sorted)
195
+ d_denials = sum(per_host_day_deny_rule[(host, d)][r] for d in days_sorted for r in per_host_day_deny_rule[(host, d)])
196
+ d_search = sum(per_host_day_deny_rule[(host, d)][r] for d in days_sorted for r in search_tool_rules)
197
+ d_ag = sum(per_host_day_ast_grep[(host, d)] for d in days_sorted)
198
+ d_sq = sum(per_host_day_search_query[(host, d)] for d in days_sorted)
199
+ totals["decisions"] += d_total
200
+ totals["denials"] += d_denials
201
+ totals["search_tool_denials"] += d_search
202
+ totals["ast_grep"] += d_ag
203
+ totals["search_query"] += d_sq
204
+ lines.append("| {0} | {1} | {2} | {3} | {4} | {5} |".format(host, d_total, d_denials, d_search, d_ag, d_sq))
205
+
206
+ if not hosts:
207
+ lines.append("| — | 0 | 0 | 0 | 0 | 0 | (no decisions in the window) |")
208
+
209
+ lines.append("")
210
+ lines.append("## Per-day, per-host breakdown")
211
+ lines.append("")
212
+ for host in hosts:
213
+ lines.append("### {0}".format(host))
214
+ lines.append("")
215
+ lines.append("| Date | Decisions | Denials | DENY tool.grep | DENY tool.native-search | DENY tool.find | ast-grep | search query | Sessions |")
216
+ lines.append("| --- | --- | --- | --- | --- | --- | --- | --- | --- |")
217
+ for d in days_sorted:
218
+ c = per_host_day[(host, d)]
219
+ r = per_host_day_deny_rule[(host, d)]
220
+ total = c["PASS"] + c.get("DENY", 0) + c.get("ERROR", 0) + c.get("SKIP", 0)
221
+ lines.append("| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8} |".format(
222
+ d, total, sum(r.values()), r.get("tool.grep", 0), r.get("tool.native-search", 0), r.get("tool.find", 0),
223
+ per_host_day_ast_grep[(host, d)], per_host_day_search_query[(host, d)], len(per_host_day_session_ids[(host, d)])
224
+ ))
225
+ lines.append("")
226
+
227
+ lines.append("## Window totals")
228
+ lines.append("")
229
+ lines.append("- Decisions: {0}".format(totals["decisions"]))
230
+ lines.append("- Denials: {0}".format(totals["denials"]))
231
+ lines.append("- Search-tool denials (tool.grep + tool.native-search + tool.find): {0}".format(totals["search_tool_denials"]))
232
+ lines.append("- ast-grep invocations: {0}".format(totals["ast_grep"]))
233
+ lines.append("- search query invocations: {0}".format(totals["search_query"]))
234
+ lines.append("")
235
+ lines.append("If search-tool denials are non-zero AND ast-grep / search-query invocations are zero, the deny text in `packages/agent-hooks/src/rules/impl/` is not redirecting the agent. See `research-2026-10-02-search-tool-usage-across-surfaces.md` top-5 for the concrete edits.")
236
+ lines.append("")
237
+
238
+ sys.stdout.write("\n".join(lines))
239
+ PYEOF
240
+
241
+ # Append / update index.md with the new page row. We don't disturb
242
+ # other rows; we add one to the end of the table.
243
+ INDEX="${OUT}/index.md"
244
+ ROW="| [Search-tool usage across surfaces — ${TODAY}](research-${TODAY}-search-tool-usage-across-surfaces.md) | Auto-generated weekly audit of per-host search-tool denials and recommended-tool invocations |"
245
+
246
+ if [[ ! -f "$INDEX" ]]; then
247
+ echo "index.md not present at ${INDEX}; not updating" >&2
248
+ exit 0
249
+ fi
250
+ if grep -q "research-${TODAY}-search-tool-usage-across-surfaces.md" "$INDEX"; then
251
+ echo "index.md already has today's page; not appending"
252
+ else
253
+ # Insert before the closing fence (if any) or just append before EOF.
254
+ python3 - "$INDEX" "$ROW" <<'PYEOF'
255
+ import sys
256
+ path, row = sys.argv[1], sys.argv[2]
257
+ with open(path) as f:
258
+ body = f.read()
259
+ # Idempotent append: ensure exactly one matching row.
260
+ needle = row.split("|")[1].strip()
261
+ if needle in body:
262
+ sys.exit(0)
263
+ # Insert before final blank line(s).
264
+ if body.endswith("\n\n"):
265
+ body = body.rstrip() + "\n" + row + "\n"
266
+ elif body.endswith("\n"):
267
+ body = body + row + "\n"
268
+ else:
269
+ body = body + "\n" + row + "\n"
270
+ with open(path, "w") as f:
271
+ f.write(body)
272
+ PYEOF
273
+ echo "appended row to ${INDEX}"
274
+ fi
275
+
276
+ echo "wrote ${OUT_FILE}"
@@ -21,11 +21,11 @@ You already know the cause and are planning the fix — use `refactor-safely`.
21
21
 
22
22
  ## Steps
23
23
 
24
- 1. Use `semantic_search_nodes_tool` to find code related to the issue.
25
- 2. Use `query_graph_tool` with `callers_of` and `callees_of` to trace call chains.
26
- 3. Use `get_flow_tool` to see full execution paths through suspected areas.
27
- 4. Run `detect_changes_tool` to check if recent changes caused the issue.
28
- 5. Use `get_impact_radius_tool` on suspected files to see what else is affected.
24
+ 1. Run `crg search "<query>"` to find code related to the issue.
25
+ 2. Run `crg query callers_of <target>` and `crg query callees_of <target>` to trace call chains.
26
+ 3. Run `crg flow --name <n>` to see full execution paths through suspected areas.
27
+ 4. Run `crg detect-changes --base <ref>` to check if recent changes caused the issue.
28
+ 5. Run `crg impact --files <f…>` on suspected files to see what else is affected.
29
29
 
30
30
  ## Tips
31
31
 
@@ -36,5 +36,6 @@ You already know the cause and are planning the fix — use `refactor-safely`.
36
36
  ## Token Efficiency
37
37
 
38
38
  Trace efficiently using `explore-codebase`'s **Token Efficiency Rules** —
39
- start minimal, cap calls at 5 and output around 800 tokens, then verify the
40
- suspected cause against real source before proposing a fix.
39
+ start with capped output (`--limit`, `--brief`), keep commands around 5 and
40
+ output around 800 tokens, then verify the suspected cause against real source
41
+ before proposing a fix.
@@ -6,7 +6,7 @@ disable-model-invocation: false
6
6
 
7
7
  # Explore Codebase
8
8
 
9
- Use the code-review-graph MCP tools to explore and understand the codebase.
9
+ Use the `crg` CLI (code-review-graph) to explore and understand the codebase.
10
10
 
11
11
  ## Use When
12
12
 
@@ -21,21 +21,21 @@ You already know where the problem is and need to trace a bug — use
21
21
 
22
22
  ## Steps
23
23
 
24
- 1. Run `list_graph_stats_tool` to see overall codebase metrics.
25
- 2. Run `get_architecture_overview_tool` for high-level community structure.
26
- 3. Use `list_communities_tool` to find major modules, then `get_community_tool` for details.
27
- 4. Use `semantic_search_nodes_tool` to find specific functions or classes.
28
- 5. Use `query_graph_tool` with patterns like `callers_of`, `callees_of`, `imports_of` to trace relationships.
29
- 6. Use `list_flows_tool` and `get_flow_tool` to understand execution paths.
24
+ 1. Run `crg status` to see overall codebase metrics.
25
+ 2. Run `crg architecture` for high-level community structure.
26
+ 3. Run `crg communities` to find major modules, then `crg community --name <n> --members` for details.
27
+ 4. Run `crg search "<query>"` to find specific functions or classes (semantic only after a one-time `crg embed`; otherwise keyword fallback).
28
+ 5. Run `crg query callers_of|callees_of|imports_of|importers_of <target>` to trace relationships.
29
+ 6. Run `crg flows` and `crg flow --name <n>` to understand execution paths.
30
30
 
31
31
  ## Tips
32
32
 
33
- - Start broad (stats, architecture) then narrow down to specific areas.
34
- - Use `children_of` on a file to see all its functions and classes.
35
- - Use `find_large_functions_tool` to identify complex code.
33
+ - Start broad (status, architecture) then narrow down to specific areas.
34
+ - Use `crg query children_of <file>` to see all its functions and classes.
35
+ - Use `crg large-functions` to identify complex code.
36
36
 
37
37
  ## Token Efficiency Rules
38
- - Start with `get_minimal_context_tool(task="<your task>")` before other graph tools.
39
- - Use `detail_level="minimal"` on all calls. Only escalate to "standard" when minimal is insufficient.
40
- - Target: complete any review/debug/refactor task in ≤5 tool calls and ≤800 total output tokens.
38
+ - Start with `crg status` + `crg architecture --detail-level minimal` before other graph commands.
39
+ - Use `--limit N` on `crg search`/`crg flows`/`crg large-functions` and `--brief` on `crg detect-changes` to cap output. Only escalate to full output when the capped view is insufficient.
40
+ - Target: complete any review/debug/refactor task in ≤5 commands and ≤800 total output tokens.
41
41
  - Read the implementation and its tests before changing code. The graph narrows scope; it does not replace the source.
@@ -24,21 +24,22 @@ use `explore-codebase`. You are chasing the cause of a live bug — use
24
24
 
25
25
  ## Steps
26
26
 
27
- 1. Use `refactor_tool` with mode="suggest" for community-driven refactoring suggestions.
28
- 2. Use `refactor_tool` with mode="dead_code" to find unreferenced code.
29
- 3. For renames, use `refactor_tool` with mode="rename" to preview all affected locations.
30
- 4. Use `apply_refactor_tool` with the refactor_id to apply renames.
31
- 5. After changes, run `detect_changes_tool` to verify the refactoring impact.
27
+ 1. Run `crg refactor suggest` for community-driven refactoring suggestions.
28
+ 2. Run `crg refactor dead_code` (or `crg dead-code`) to find unreferenced code.
29
+ 3. For renames, run `crg refactor rename --old-name X --new-name Y` to preview the full edit list.
30
+ 4. Apply the rename with your own edit tools — the CLI previews the edit list but does not apply it.
31
+ 5. After changes, run `crg detect-changes` to verify the refactoring impact.
32
32
 
33
33
  ## Safety Checks
34
34
 
35
35
  - Always preview before applying (rename mode gives you an edit list).
36
- - Check `get_impact_radius_tool` before major refactors.
37
- - Use `get_affected_flows_tool` to ensure no critical paths are broken.
38
- - Run `find_large_functions_tool` to identify decomposition targets.
36
+ - Run `crg impact` before major refactors.
37
+ - Run `crg detect-changes` and read the full JSON's affected flows to ensure no critical paths are broken.
38
+ - Run `crg large-functions` to identify decomposition targets.
39
39
 
40
40
  ## Token Efficiency
41
41
 
42
- Follow `explore-codebase`'s **Token Efficiency Rules** — minimal-context
43
- first, `detail_level="minimal"`, a ≤5-call/≤800-token target, and read the
44
- real source before editing.
42
+ Follow `explore-codebase`'s **Token Efficiency Rules** — `crg status` and
43
+ `crg architecture --detail-level minimal` first, `--limit`/`--brief` to cap
44
+ output, a ≤5-command/≤800-token target, and read the real source before
45
+ editing.
@@ -23,10 +23,10 @@ You are planning your own refactor rather than reviewing one — use
23
23
 
24
24
  ## Steps
25
25
 
26
- 1. Run `detect_changes_tool` to get risk-scored change analysis.
27
- 2. Run `get_affected_flows_tool` to find impacted execution paths.
28
- 3. For each high-risk function, run `query_graph_tool` with pattern="tests_for" to check test coverage.
29
- 4. Run `get_impact_radius_tool` to understand the blast radius.
26
+ 1. Run `crg detect-changes` (`--base <ref>` to pick the diff base) for risk-scored change analysis — the full JSON embeds affected flows; add `--brief` for a summary.
27
+ 2. Run `crg flow --name <n>` on each affected flow to see the impacted execution paths.
28
+ 3. For each high-risk function, run `crg query tests_for <fn>` to check test coverage.
29
+ 4. Run `crg impact` to understand the blast radius.
30
30
  5. For any untested changes, suggest specific test cases.
31
31
 
32
32
  ## Output Format
@@ -40,6 +40,6 @@ Provide findings grouped by risk level (high/medium/low) with:
40
40
  ## Token Efficiency
41
41
 
42
42
  Keep this review token-light per `explore-codebase`'s **Token Efficiency
43
- Rules**: `get_minimal_context_tool` first, `detail_level="minimal"` on every
44
- call, ≤5 calls and ≤800 tokens, and confirm findings against the actual source
45
- and tests.
43
+ Rules**: `crg status` + `crg architecture --detail-level minimal` first,
44
+ `--brief`/`--limit` on every command, ≤5 commands and ≤800 tokens, and
45
+ confirm findings against the actual source and tests.
@@ -0,0 +1,37 @@
1
+ # End-to-end testing
2
+
3
+ ## Purpose
4
+
5
+ End-to-end tests prove a complete business outcome from initiation to an
6
+ observable completion across the integrated system. They validate outcomes and
7
+ orchestration: UI state, sequencing, multi-system coordination, and the user
8
+ journey. They do not provide exhaustive contract or error-path coverage for
9
+ each boundary.
10
+
11
+ ## Use it for
12
+
13
+ - Critical user journeys such as onboarding, checkout, order-to-cash, or
14
+ recovery flows.
15
+ - Business workflows that span app UI, backend services, persistence, and
16
+ permitted external integrations.
17
+ - Production-like load or timing scenarios where the complete workflow is the
18
+ thing being evaluated.
19
+
20
+ Keep E2E scenarios few and outcome-oriented. Put contract variants, malformed
21
+ data, retries, and service-boundary failures in integration tests unless the
22
+ workflow itself changes their user-visible outcome.
23
+
24
+ ## Canonical location
25
+
26
+ This repository has one cross-workspace E2E location: `tests/e2e/`.
27
+ App workflows and package-contributed behaviour meet there; do not create
28
+ `apps/<app>/tests/e2e/` or `packages/<package>/tests/e2e/`. App and package
29
+ fixtures remain with their owning test trees unless they are shared fixtures
30
+ owned by the E2E workspace.
31
+
32
+ ## Evidence
33
+
34
+ Run the whole journey through its real runtime in the CI-parity environment,
35
+ using production-like data and isolated dependencies. Assert the user-visible
36
+ completion and the durable business result. External live or billable calls
37
+ need explicit opt-in; without it, do not silently substitute a fake path.
@@ -0,0 +1,37 @@
1
+ # Integration testing
2
+
3
+ ## Purpose
4
+
5
+ Integration tests prove that two or more components communicate correctly at a
6
+ real boundary. They validate connections: contracts, transformations,
7
+ authentication, persistence, messages, retries, timeouts, and error handling.
8
+ They do not replace a complete user or business workflow test.
9
+
10
+ ## Use it for
11
+
12
+ - Service-to-service APIs, database adapters, queues, files, and external
13
+ provider boundaries.
14
+ - Contract fields, response and error shapes, and data transformation edge
15
+ cases.
16
+ - Failure modes that happy-path journeys rarely exercise: expired credentials,
17
+ timeouts, retries, duplicate delivery, and transaction coordination.
18
+
19
+ Keep unrelated dependencies out of the scenario. A browser-driven checkout is
20
+ not an integration test merely because it crosses an API; test the specific
21
+ checkout-to-payment boundary directly when that contract is the subject.
22
+
23
+ ## Canonical location
24
+
25
+ Place app-owned integration tests in `apps/<app>/tests/integration/` and
26
+ package-owned integration tests in `packages/<package>/tests/integration/`.
27
+ Use containerized or otherwise isolated real dependencies whenever the scenario
28
+ crosses a service, database, broker, streaming, or provider boundary. Do not
29
+ put integration scenarios in `tests/e2e/`; that workspace is reserved for
30
+ complete workflows.
31
+
32
+ ## Evidence
33
+
34
+ Exercise the real interface with controlled data and assert both the boundary
35
+ response and the observable transformed result. Run through the repository's
36
+ CI-parity entrypoint; live or billable services require an explicit opt-in and
37
+ must fail loudly or skip cleanly when credentials are absent.