@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
@@ -0,0 +1,241 @@
1
+ work_item_type,from_state,to_state,rule,skipped_states,owner,note
2
+ Product Backlog Item,New,In Planning,allowed,,,
3
+ Product Backlog Item,New,Awaiting Approval,skipped,In Planning,,
4
+ Product Backlog Item,New,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
5
+ Product Backlog Item,New,Spec Validation,skipped,In Planning;Awaiting Approval;Approved,,
6
+ Product Backlog Item,New,In Implementation,skipped,In Planning;Awaiting Approval;Approved;Spec Validation,,
7
+ Product Backlog Item,New,In Testing,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation,,
8
+ Product Backlog Item,New,In Review,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
9
+ Product Backlog Item,New,Updating Docs,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
10
+ Product Backlog Item,New,Done,human-only,,entered only by PR merge automation into integration,
11
+ Product Backlog Item,New,Parked for Removal,allowed,,,
12
+ Product Backlog Item,New,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
13
+ Product Backlog Item,New,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
14
+ Product Backlog Item,In Planning,New,allowed,,,
15
+ Product Backlog Item,In Planning,Awaiting Approval,allowed,,,
16
+ Product Backlog Item,In Planning,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
17
+ Product Backlog Item,In Planning,Spec Validation,skipped,Awaiting Approval;Approved,,
18
+ Product Backlog Item,In Planning,In Implementation,skipped,Awaiting Approval;Approved;Spec Validation,,
19
+ Product Backlog Item,In Planning,In Testing,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation,,
20
+ Product Backlog Item,In Planning,In Review,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
21
+ Product Backlog Item,In Planning,Updating Docs,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
22
+ Product Backlog Item,In Planning,Done,human-only,,entered only by PR merge automation into integration,
23
+ Product Backlog Item,In Planning,Parked for Removal,allowed,,,
24
+ Product Backlog Item,In Planning,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
25
+ Product Backlog Item,In Planning,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
26
+ Product Backlog Item,Awaiting Approval,New,allowed,,,
27
+ Product Backlog Item,Awaiting Approval,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
28
+ Product Backlog Item,Awaiting Approval,Spec Validation,skipped,Approved,,
29
+ Product Backlog Item,Awaiting Approval,In Implementation,skipped,Approved;Spec Validation,,
30
+ Product Backlog Item,Awaiting Approval,In Testing,skipped,Approved;Spec Validation;In Implementation,,
31
+ Product Backlog Item,Awaiting Approval,In Review,skipped,Approved;Spec Validation;In Implementation;In Testing,,
32
+ Product Backlog Item,Awaiting Approval,Updating Docs,skipped,Approved;Spec Validation;In Implementation;In Testing;In Review,,
33
+ Product Backlog Item,Awaiting Approval,Done,human-only,,entered only by PR merge automation into integration,
34
+ Product Backlog Item,Awaiting Approval,Parked for Removal,allowed,,,
35
+ Product Backlog Item,Awaiting Approval,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
36
+ Product Backlog Item,Awaiting Approval,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
37
+ Product Backlog Item,Approved,New,allowed,,,
38
+ Product Backlog Item,Approved,Spec Validation,allowed,,,
39
+ Product Backlog Item,Approved,In Implementation,skipped,Spec Validation,,
40
+ Product Backlog Item,Approved,In Testing,skipped,Spec Validation;In Implementation,,
41
+ Product Backlog Item,Approved,In Review,skipped,Spec Validation;In Implementation;In Testing,,
42
+ Product Backlog Item,Approved,Updating Docs,skipped,Spec Validation;In Implementation;In Testing;In Review,,
43
+ Product Backlog Item,Approved,Done,human-only,,entered only by PR merge automation into integration,
44
+ Product Backlog Item,Approved,Parked for Removal,allowed,,,
45
+ Product Backlog Item,Approved,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
46
+ Product Backlog Item,Approved,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
47
+ Product Backlog Item,Spec Validation,New,allowed,,,
48
+ Product Backlog Item,Spec Validation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
49
+ Product Backlog Item,Spec Validation,In Implementation,allowed,,,
50
+ Product Backlog Item,Spec Validation,In Testing,skipped,In Implementation,,
51
+ Product Backlog Item,Spec Validation,In Review,skipped,In Implementation;In Testing,,
52
+ Product Backlog Item,Spec Validation,Updating Docs,skipped,In Implementation;In Testing;In Review,,
53
+ Product Backlog Item,Spec Validation,Done,human-only,,entered only by PR merge automation into integration,
54
+ Product Backlog Item,Spec Validation,Parked for Removal,allowed,,,
55
+ Product Backlog Item,Spec Validation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
56
+ Product Backlog Item,Spec Validation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
57
+ Product Backlog Item,In Implementation,New,allowed,,,
58
+ Product Backlog Item,In Implementation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
59
+ Product Backlog Item,In Implementation,In Testing,allowed,,,
60
+ Product Backlog Item,In Implementation,In Review,skipped,In Testing,,
61
+ Product Backlog Item,In Implementation,Updating Docs,skipped,In Testing;In Review,,
62
+ Product Backlog Item,In Implementation,Done,human-only,,entered only by PR merge automation into integration,
63
+ Product Backlog Item,In Implementation,Parked for Removal,allowed,,,
64
+ Product Backlog Item,In Implementation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
65
+ Product Backlog Item,In Implementation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
66
+ Product Backlog Item,In Testing,New,allowed,,,
67
+ Product Backlog Item,In Testing,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
68
+ Product Backlog Item,In Testing,In Review,allowed,,,
69
+ Product Backlog Item,In Testing,Updating Docs,skipped,In Review,,
70
+ Product Backlog Item,In Testing,Done,human-only,,entered only by PR merge automation into integration,
71
+ Product Backlog Item,In Testing,Parked for Removal,allowed,,,
72
+ Product Backlog Item,In Testing,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
73
+ Product Backlog Item,In Testing,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
74
+ Product Backlog Item,In Review,New,allowed,,,
75
+ Product Backlog Item,In Review,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
76
+ Product Backlog Item,In Review,In Implementation,allowed,,,
77
+ Product Backlog Item,In Review,Updating Docs,allowed,,,
78
+ Product Backlog Item,In Review,Done,human-only,,entered only by PR merge automation into integration,
79
+ Product Backlog Item,In Review,Parked for Removal,allowed,,,
80
+ Product Backlog Item,In Review,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
81
+ Product Backlog Item,In Review,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
82
+ Product Backlog Item,Updating Docs,New,allowed,,,
83
+ Product Backlog Item,Updating Docs,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
84
+ Product Backlog Item,Updating Docs,Done,human-only,,entered only by PR merge automation into integration,
85
+ Product Backlog Item,Updating Docs,Parked for Removal,allowed,,,
86
+ Product Backlog Item,Updating Docs,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
87
+ Product Backlog Item,Updating Docs,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
88
+ Product Backlog Item,Done,In Planning,allowed,,,
89
+ Product Backlog Item,Done,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
90
+ Product Backlog Item,Done,Parked for Removal,allowed,,,
91
+ Product Backlog Item,Done,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
92
+ Product Backlog Item,Done,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
93
+ Product Backlog Item,Parked for Removal,New,allowed,,,
94
+ Product Backlog Item,Parked for Removal,In Planning,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
95
+ Product Backlog Item,Parked for Removal,Awaiting Approval,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
96
+ Product Backlog Item,Parked for Removal,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
97
+ Product Backlog Item,Parked for Removal,Spec Validation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
98
+ Product Backlog Item,Parked for Removal,In Implementation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
99
+ Product Backlog Item,Parked for Removal,In Testing,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
100
+ Product Backlog Item,Parked for Removal,In Review,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
101
+ Product Backlog Item,Parked for Removal,Updating Docs,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
102
+ Product Backlog Item,Parked for Removal,Done,human-only,,entered only by PR merge automation into integration,
103
+ Product Backlog Item,Parked for Removal,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
104
+ Product Backlog Item,Parked for Removal,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
105
+ Product Backlog Item,Removed,New,allowed,,,
106
+ Product Backlog Item,Removed,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
107
+ Product Backlog Item,Removed,Done,human-only,,entered only by PR merge automation into integration,
108
+ Product Backlog Item,Removed,Parked for Removal,allowed,,,
109
+ Product Backlog Item,Removed,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
110
+ Product Backlog Item,Committed,New,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
111
+ Product Backlog Item,Committed,In Planning,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
112
+ Product Backlog Item,Committed,Awaiting Approval,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
113
+ Product Backlog Item,Committed,Approved,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
114
+ Product Backlog Item,Committed,Spec Validation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
115
+ Product Backlog Item,Committed,In Implementation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
116
+ Product Backlog Item,Committed,In Testing,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
117
+ Product Backlog Item,Committed,In Review,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
118
+ Product Backlog Item,Committed,Updating Docs,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
119
+ Product Backlog Item,Committed,Done,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
120
+ Product Backlog Item,Committed,Parked for Removal,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
121
+ Product Backlog Item,Committed,Removed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
122
+ Bug,New,In Planning,allowed,,,
123
+ Bug,New,Awaiting Approval,skipped,In Planning,,
124
+ Bug,New,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
125
+ Bug,New,Spec Validation,skipped,In Planning;Awaiting Approval;Approved,,
126
+ Bug,New,In Implementation,skipped,In Planning;Awaiting Approval;Approved;Spec Validation,,
127
+ Bug,New,In Testing,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation,,
128
+ Bug,New,In Review,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
129
+ Bug,New,Updating Docs,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
130
+ Bug,New,Done,human-only,,entered only by PR merge automation into integration,
131
+ Bug,New,Parked for Removal,allowed,,,
132
+ Bug,New,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
133
+ Bug,New,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
134
+ Bug,In Planning,New,allowed,,,
135
+ Bug,In Planning,Awaiting Approval,allowed,,,
136
+ Bug,In Planning,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
137
+ Bug,In Planning,Spec Validation,skipped,Awaiting Approval;Approved,,
138
+ Bug,In Planning,In Implementation,skipped,Awaiting Approval;Approved;Spec Validation,,
139
+ Bug,In Planning,In Testing,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation,,
140
+ Bug,In Planning,In Review,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
141
+ Bug,In Planning,Updating Docs,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
142
+ Bug,In Planning,Done,human-only,,entered only by PR merge automation into integration,
143
+ Bug,In Planning,Parked for Removal,allowed,,,
144
+ Bug,In Planning,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
145
+ Bug,In Planning,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
146
+ Bug,Awaiting Approval,New,allowed,,,
147
+ Bug,Awaiting Approval,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
148
+ Bug,Awaiting Approval,Spec Validation,skipped,Approved,,
149
+ Bug,Awaiting Approval,In Implementation,skipped,Approved;Spec Validation,,
150
+ Bug,Awaiting Approval,In Testing,skipped,Approved;Spec Validation;In Implementation,,
151
+ Bug,Awaiting Approval,In Review,skipped,Approved;Spec Validation;In Implementation;In Testing,,
152
+ Bug,Awaiting Approval,Updating Docs,skipped,Approved;Spec Validation;In Implementation;In Testing;In Review,,
153
+ Bug,Awaiting Approval,Done,human-only,,entered only by PR merge automation into integration,
154
+ Bug,Awaiting Approval,Parked for Removal,allowed,,,
155
+ Bug,Awaiting Approval,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
156
+ Bug,Awaiting Approval,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
157
+ Bug,Approved,New,allowed,,,
158
+ Bug,Approved,Spec Validation,allowed,,,
159
+ Bug,Approved,In Implementation,skipped,Spec Validation,,
160
+ Bug,Approved,In Testing,skipped,Spec Validation;In Implementation,,
161
+ Bug,Approved,In Review,skipped,Spec Validation;In Implementation;In Testing,,
162
+ Bug,Approved,Updating Docs,skipped,Spec Validation;In Implementation;In Testing;In Review,,
163
+ Bug,Approved,Done,human-only,,entered only by PR merge automation into integration,
164
+ Bug,Approved,Parked for Removal,allowed,,,
165
+ Bug,Approved,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
166
+ Bug,Approved,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
167
+ Bug,Spec Validation,New,allowed,,,
168
+ Bug,Spec Validation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
169
+ Bug,Spec Validation,In Implementation,allowed,,,
170
+ Bug,Spec Validation,In Testing,skipped,In Implementation,,
171
+ Bug,Spec Validation,In Review,skipped,In Implementation;In Testing,,
172
+ Bug,Spec Validation,Updating Docs,skipped,In Implementation;In Testing;In Review,,
173
+ Bug,Spec Validation,Done,human-only,,entered only by PR merge automation into integration,
174
+ Bug,Spec Validation,Parked for Removal,allowed,,,
175
+ Bug,Spec Validation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
176
+ Bug,Spec Validation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
177
+ Bug,In Implementation,New,allowed,,,
178
+ Bug,In Implementation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
179
+ Bug,In Implementation,In Testing,allowed,,,
180
+ Bug,In Implementation,In Review,skipped,In Testing,,
181
+ Bug,In Implementation,Updating Docs,skipped,In Testing;In Review,,
182
+ Bug,In Implementation,Done,human-only,,entered only by PR merge automation into integration,
183
+ Bug,In Implementation,Parked for Removal,allowed,,,
184
+ Bug,In Implementation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
185
+ Bug,In Implementation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
186
+ Bug,In Testing,New,allowed,,,
187
+ Bug,In Testing,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
188
+ Bug,In Testing,In Review,allowed,,,
189
+ Bug,In Testing,Updating Docs,skipped,In Review,,
190
+ Bug,In Testing,Done,human-only,,entered only by PR merge automation into integration,
191
+ Bug,In Testing,Parked for Removal,allowed,,,
192
+ Bug,In Testing,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
193
+ Bug,In Testing,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
194
+ Bug,In Review,New,allowed,,,
195
+ Bug,In Review,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
196
+ Bug,In Review,In Implementation,allowed,,,
197
+ Bug,In Review,Updating Docs,allowed,,,
198
+ Bug,In Review,Done,human-only,,entered only by PR merge automation into integration,
199
+ Bug,In Review,Parked for Removal,allowed,,,
200
+ Bug,In Review,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
201
+ Bug,In Review,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
202
+ Bug,Updating Docs,New,allowed,,,
203
+ Bug,Updating Docs,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
204
+ Bug,Updating Docs,Done,human-only,,entered only by PR merge automation into integration,
205
+ Bug,Updating Docs,Parked for Removal,allowed,,,
206
+ Bug,Updating Docs,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
207
+ Bug,Updating Docs,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
208
+ Bug,Done,In Planning,allowed,,,
209
+ Bug,Done,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
210
+ Bug,Done,Parked for Removal,allowed,,,
211
+ Bug,Done,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
212
+ Bug,Done,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
213
+ Bug,Parked for Removal,New,allowed,,,
214
+ Bug,Parked for Removal,In Planning,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
215
+ Bug,Parked for Removal,Awaiting Approval,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
216
+ Bug,Parked for Removal,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
217
+ Bug,Parked for Removal,Spec Validation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
218
+ Bug,Parked for Removal,In Implementation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
219
+ Bug,Parked for Removal,In Testing,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
220
+ Bug,Parked for Removal,In Review,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
221
+ Bug,Parked for Removal,Updating Docs,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
222
+ Bug,Parked for Removal,Done,human-only,,entered only by PR merge automation into integration,
223
+ Bug,Parked for Removal,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
224
+ Bug,Parked for Removal,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
225
+ Bug,Removed,New,allowed,,,
226
+ Bug,Removed,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
227
+ Bug,Removed,Done,human-only,,entered only by PR merge automation into integration,
228
+ Bug,Removed,Parked for Removal,allowed,,,
229
+ Bug,Removed,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
230
+ Bug,Committed,New,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
231
+ Bug,Committed,In Planning,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
232
+ Bug,Committed,Awaiting Approval,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
233
+ Bug,Committed,Approved,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
234
+ Bug,Committed,Spec Validation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
235
+ Bug,Committed,In Implementation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
236
+ Bug,Committed,In Testing,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
237
+ Bug,Committed,In Review,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
238
+ Bug,Committed,Updating Docs,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
239
+ Bug,Committed,Done,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
240
+ Bug,Committed,Parked for Removal,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
241
+ Bug,Committed,Removed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
@@ -0,0 +1,85 @@
1
+ work_item_type,state,state_category,flag_ref,flag_label,rule,meaning,failure_reason
2
+ Product Backlog Item,New,Proposed,Custom.Planwritten,Plan written,no,must be false,Plan rejected
3
+ Product Backlog Item,New,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
4
+ Product Backlog Item,New,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
5
+ Product Backlog Item,New,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
6
+ Product Backlog Item,New,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
7
+ Product Backlog Item,New,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
8
+ Product Backlog Item,Approved,Proposed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
9
+ Product Backlog Item,Approved,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
10
+ Product Backlog Item,Approved,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
11
+ Product Backlog Item,Approved,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
12
+ Product Backlog Item,Approved,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
13
+ Product Backlog Item,Approved,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
14
+ Product Backlog Item,Committed,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
15
+ Product Backlog Item,Committed,InProgress,Custom.Implementationcomplete,Implementation complete,no,must be false,
16
+ Product Backlog Item,Committed,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
17
+ Product Backlog Item,Committed,InProgress,Custom.Testspassing,Tests passing,no,must be false,Tests failed
18
+ Product Backlog Item,Committed,InProgress,Custom.Docsupdated,Docs updated,no,must be false,
19
+ Product Backlog Item,Committed,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
20
+ Product Backlog Item,In Progress,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
21
+ Product Backlog Item,In Progress,InProgress,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
22
+ Product Backlog Item,In Progress,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
23
+ Product Backlog Item,In Progress,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
24
+ Product Backlog Item,In Progress,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
25
+ Product Backlog Item,In Progress,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
26
+ Product Backlog Item,In Testing,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
27
+ Product Backlog Item,In Testing,InProgress,Custom.Implementationcomplete,Implementation complete,yes,must be true,
28
+ Product Backlog Item,In Testing,InProgress,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
29
+ Product Backlog Item,In Testing,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
30
+ Product Backlog Item,In Testing,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
31
+ Product Backlog Item,In Testing,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
32
+ Product Backlog Item,Done,Completed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
33
+ Product Backlog Item,Done,Completed,Custom.Implementationcomplete,Implementation complete,yes,must be true,
34
+ Product Backlog Item,Done,Completed,Custom.Reviewpassed,Review passed,yes,must be true,Reviewer rejected
35
+ Product Backlog Item,Done,Completed,Custom.Testspassing,Tests passing,yes,must be true,Tests failed
36
+ Product Backlog Item,Done,Completed,Custom.Docsupdated,Docs updated,yes,must be true,
37
+ Product Backlog Item,Done,Completed,Custom.Mergedtointegration,Merged to integration,yes,must be true,Build failed
38
+ Product Backlog Item,Removed,Removed,Custom.Planwritten,Plan written,free,either — this is where the gate is worked,Plan rejected
39
+ Product Backlog Item,Removed,Removed,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
40
+ Product Backlog Item,Removed,Removed,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
41
+ Product Backlog Item,Removed,Removed,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
42
+ Product Backlog Item,Removed,Removed,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
43
+ Product Backlog Item,Removed,Removed,Custom.Mergedtointegration,Merged to integration,free,either — this is where the gate is worked,Build failed
44
+ Bug,New,Proposed,Custom.Planwritten,Plan written,no,must be false,Plan rejected
45
+ Bug,New,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
46
+ Bug,New,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
47
+ Bug,New,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
48
+ Bug,New,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
49
+ Bug,New,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
50
+ Bug,Approved,Proposed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
51
+ Bug,Approved,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
52
+ Bug,Approved,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
53
+ Bug,Approved,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
54
+ Bug,Approved,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
55
+ Bug,Approved,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
56
+ Bug,Committed,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
57
+ Bug,Committed,InProgress,Custom.Implementationcomplete,Implementation complete,no,must be false,
58
+ Bug,Committed,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
59
+ Bug,Committed,InProgress,Custom.Testspassing,Tests passing,no,must be false,Tests failed
60
+ Bug,Committed,InProgress,Custom.Docsupdated,Docs updated,no,must be false,
61
+ Bug,Committed,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
62
+ Bug,In Progress,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
63
+ Bug,In Progress,InProgress,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
64
+ Bug,In Progress,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
65
+ Bug,In Progress,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
66
+ Bug,In Progress,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
67
+ Bug,In Progress,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
68
+ Bug,In Testing,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
69
+ Bug,In Testing,InProgress,Custom.Implementationcomplete,Implementation complete,yes,must be true,
70
+ Bug,In Testing,InProgress,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
71
+ Bug,In Testing,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
72
+ Bug,In Testing,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
73
+ Bug,In Testing,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
74
+ Bug,Done,Completed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
75
+ Bug,Done,Completed,Custom.Implementationcomplete,Implementation complete,yes,must be true,
76
+ Bug,Done,Completed,Custom.Reviewpassed,Review passed,yes,must be true,Reviewer rejected
77
+ Bug,Done,Completed,Custom.Testspassing,Tests passing,yes,must be true,Tests failed
78
+ Bug,Done,Completed,Custom.Docsupdated,Docs updated,yes,must be true,
79
+ Bug,Done,Completed,Custom.Mergedtointegration,Merged to integration,yes,must be true,Build failed
80
+ Bug,Removed,Removed,Custom.Planwritten,Plan written,free,either — this is where the gate is worked,Plan rejected
81
+ Bug,Removed,Removed,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
82
+ Bug,Removed,Removed,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
83
+ Bug,Removed,Removed,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
84
+ Bug,Removed,Removed,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
85
+ Bug,Removed,Removed,Custom.Mergedtointegration,Merged to integration,free,either — this is where the gate is worked,Build failed
@@ -0,0 +1,194 @@
1
+ // Workflow state ladder for the board's Product Backlog Item/Bug items. The
2
+ // 2026-10-04 ADL-Product process cutover replaced the six boolean Build
3
+ // flags (Custom.Planwritten, Custom.Implementationcomplete,
4
+ // Custom.Reviewpassed, Custom.Testspassing, Custom.Docsupdated,
5
+ // Custom.Mergedtointegration) with ordered item states; the flags were
6
+ // removed from the process at the cutover and nothing here reads or writes
7
+ // them. The routes below implement the owner's final state model (PBI and
8
+ // Bug identical), carried as src/workflow-ladder.csv next to this file; the
9
+ // unit test tests/workflow-rules.test.ts asserts the embedded table agrees
10
+ // with that CSV on every type × from × to triple, so the compiled binary
11
+ // needs no file access at runtime. Features and Epics walk no item ladder
12
+ // and are exempt: evaluateWorkflowTransition returns no violations for
13
+ // them.
14
+
15
+ /**
16
+ * The thirteen recognized states: the twelve active states of the final
17
+ * model, plus Committed — retired (UI-hidden, no route references it) but
18
+ * still recognized so a transition touching it is refused with the retired
19
+ * note instead of passing through silently.
20
+ */
21
+ export const WORKFLOW_STATES = [
22
+ 'New',
23
+ 'In Planning',
24
+ 'Awaiting Approval',
25
+ 'Approved',
26
+ 'Spec Validation',
27
+ 'In Implementation',
28
+ 'In Testing',
29
+ 'In Review',
30
+ 'Updating Docs',
31
+ 'Done',
32
+ 'Parked for Removal',
33
+ 'Removed',
34
+ 'Committed',
35
+ ] as const;
36
+ export type WorkflowState = (typeof WORKFLOW_STATES)[number];
37
+
38
+ const GATED_TYPES = ['Product Backlog Item', 'Bug'] as const;
39
+
40
+ /**
41
+ * The main line, in route order — forward only. PBI and Bug share it (no
42
+ * type deltas in the final model).
43
+ */
44
+ const MAIN_LINE: readonly WorkflowState[] = [
45
+ 'New',
46
+ 'In Planning',
47
+ 'Awaiting Approval',
48
+ 'Approved',
49
+ 'Spec Validation',
50
+ 'In Implementation',
51
+ 'In Testing',
52
+ 'In Review',
53
+ 'Updating Docs',
54
+ ];
55
+ const MAIN_LINE_INDEX = new Map<string, number>(MAIN_LINE.map((state, index) => [state, index]));
56
+
57
+ /** The adjacent forward moves on the main line. */
58
+ const LADDER_EDGES: readonly (readonly [WorkflowState, WorkflowState])[] = MAIN_LINE.slice(1).map(
59
+ (state, index) => [MAIN_LINE[index]!, state] as const,
60
+ );
61
+
62
+ /**
63
+ * The states that may move back to New — any active state (re-plan /
64
+ * unpark), plus Removed (recovery). Done is not active: its one recovery is
65
+ * In Planning (see RECOVERY_EDGES).
66
+ */
67
+ const REPLAN_SOURCES: ReadonlySet<WorkflowState> = new Set([
68
+ 'In Planning',
69
+ 'Awaiting Approval',
70
+ 'Approved',
71
+ 'Spec Validation',
72
+ 'In Implementation',
73
+ 'In Testing',
74
+ 'In Review',
75
+ 'Updating Docs',
76
+ 'Parked for Removal',
77
+ 'Removed',
78
+ ]);
79
+
80
+ /** The ONE sanctioned backward work-edge: review agent rejection. */
81
+ const REJECTION_EDGE: readonly [WorkflowState, WorkflowState] = ['In Review', 'In Implementation'];
82
+ /** The documented recovery out of the completed terminal. */
83
+ const RECOVERY_EDGE: readonly [WorkflowState, WorkflowState] = ['Done', 'In Planning'];
84
+
85
+ /**
86
+ * Targets no agent may set, with the owner named in the refusal: Approved is
87
+ * G1 (human approval, taken from Awaiting Approval), Removed is G3 (human
88
+ * removal, taken from Parked for Removal), Done is entered only by PR merge
89
+ * automation into integration (from Updating Docs).
90
+ */
91
+ export const WORKFLOW_HUMAN_ONLY_TARGETS: Readonly<Record<'Approved' | 'Done' | 'Removed', string>> = {
92
+ Approved: 'G1 — human approval only; agents cannot move items to Approved',
93
+ Done: 'entered only by PR merge automation into integration',
94
+ Removed: 'G3 — human removal only; agents cannot move items to Removed',
95
+ };
96
+
97
+ const RETIRED_COMMITTED_NOTE = 'Committed is a retired state (UI-hidden; no route references it)';
98
+ const PARKED_EXIT_NOTE = 'Parked for Removal exits only to New (re-plan) or Removed (G3 human)';
99
+
100
+ export type WorkflowViolation =
101
+ | { kind: 'skipped-gate'; fromState: WorkflowState; toState: WorkflowState; skippedState: WorkflowState }
102
+ | { kind: 'human-only'; fromState: WorkflowState; toState: WorkflowState; owner: string }
103
+ | { kind: 'no-transition'; fromState: WorkflowState; toState: WorkflowState; note?: string };
104
+
105
+ /**
106
+ * Evaluate a state TRANSITION (from-state → to-state) against the final
107
+ * state model. One violation per refusal class:
108
+ *
109
+ * - `human-only` — the target is owned by G1 approval, PR merge automation
110
+ * or G3 human removal; agents never set it.
111
+ * - `skipped-gate` — a forward jump over main-line states; one violation per
112
+ * skipped state, in route order, so the refusal names every gate
113
+ * bypassed. Approved is annotated "(G1: human approval)".
114
+ * - `no-transition` — anything off the model. Committed is retired: any
115
+ * transition touching it names the retired state. Parked for Removal is
116
+ * enterable from anywhere but exits only to New or Removed. Everything
117
+ * else backward is refused flat — including In Implementation → Spec
118
+ * Validation and In Testing → In Implementation (no special-casing; the
119
+ * owner decision is "no backward rule, enforce forward").
120
+ *
121
+ * Allowed to writers: identity writes (from === to, never gated); the
122
+ * adjacent main-line forward moves; parking to Parked for Removal from any
123
+ * state; re-plan moves to New from any active state plus Removed; the
124
+ * review-rejection edge In Review → In Implementation; and the Done →
125
+ * In Planning recovery. Exits from Done other than In Planning and from
126
+ * Removed other than New/Parked keep the terminal notes ("completed items
127
+ * stay Done; a G2 rejection gets its own linked item" / "Removed is
128
+ * terminal"). A state outside the thirteen recognized states yields none —
129
+ * the ADO process template enforces server-side. Exempt types
130
+ * (Feature/Epic) yield none.
131
+ */
132
+ export function evaluateWorkflowTransition(
133
+ workItemType: string,
134
+ fromState: string,
135
+ toState: string,
136
+ ): WorkflowViolation[] {
137
+ if (!(GATED_TYPES as readonly string[]).includes(workItemType)) return [];
138
+ if (!(WORKFLOW_STATES as readonly string[]).includes(fromState)) return [];
139
+ if (!(WORKFLOW_STATES as readonly string[]).includes(toState)) return [];
140
+ const from = fromState as WorkflowState;
141
+ const to = toState as WorkflowState;
142
+ if (from === to) return [];
143
+ if (from === 'Committed' || to === 'Committed') {
144
+ return [{ kind: 'no-transition', fromState: from, toState: to, note: RETIRED_COMMITTED_NOTE }];
145
+ }
146
+ const owner = (WORKFLOW_HUMAN_ONLY_TARGETS as Partial<Record<WorkflowState, string>>)[to];
147
+ if (owner !== undefined) return [{ kind: 'human-only', fromState: from, toState: to, owner }];
148
+ if (to === 'Parked for Removal') return [];
149
+ if (to === 'New' && REPLAN_SOURCES.has(from)) return [];
150
+ if (from === REJECTION_EDGE[0] && to === REJECTION_EDGE[1]) return [];
151
+ if (from === RECOVERY_EDGE[0] && to === RECOVERY_EDGE[1]) return [];
152
+ if (from === 'Done' || from === 'Removed') {
153
+ return [{ kind: 'no-transition', fromState: from, toState: to, note: terminalSourceNote(from) }];
154
+ }
155
+ if (from === 'Parked for Removal') {
156
+ return [{ kind: 'no-transition', fromState: from, toState: to, note: PARKED_EXIT_NOTE }];
157
+ }
158
+ if (LADDER_EDGES.some(([edgeFrom, edgeTo]) => edgeFrom === from && edgeTo === to)) return [];
159
+ const fromIndex = MAIN_LINE_INDEX.get(from)!;
160
+ const toIndex = MAIN_LINE_INDEX.get(to)!;
161
+ if (toIndex > fromIndex) {
162
+ return MAIN_LINE.slice(fromIndex + 1, toIndex).map((skippedState) => ({
163
+ kind: 'skipped-gate',
164
+ fromState: from,
165
+ toState: to,
166
+ skippedState,
167
+ }));
168
+ }
169
+ return [{ kind: 'no-transition', fromState: from, toState: to }];
170
+ }
171
+
172
+ /** from is Done or Removed here; identity, parking and recoveries were handled by the caller. */
173
+ function terminalSourceNote(from: WorkflowState): string {
174
+ return from === 'Done'
175
+ ? 'completed items stay Done; a G2 rejection gets its own linked item'
176
+ : 'Removed is terminal';
177
+ }
178
+
179
+ export function formatWorkflowViolation(violation: WorkflowViolation): string {
180
+ if (violation.kind === 'skipped-gate') {
181
+ const g1 = violation.skippedState === 'Approved' ? ' (G1: human approval)' : '';
182
+ return `fenced by state ladder: '${violation.fromState}' → '${violation.toState}' skips '${violation.skippedState}'${g1}`;
183
+ }
184
+ if (violation.kind === 'human-only') {
185
+ return `fenced by state ladder: '${violation.fromState}' → '${violation.toState}' is ${violation.owner}`;
186
+ }
187
+ const note = violation.note === undefined ? '' : ` (${violation.note})`;
188
+ return `fenced by state ladder: no ladder transition '${violation.fromState}' → '${violation.toState}'${note}`;
189
+ }
190
+
191
+ /** One refusal line per violation, joined for a loud multi-line error. */
192
+ export function formatWorkflowRefusal(violations: WorkflowViolation[]): string {
193
+ return violations.map(formatWorkflowViolation).join('\n');
194
+ }