@amsterdamdatalabs/adl-agent-control-linux-x64 0.1.10 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adl +2 -2
- package/bin/git +17 -18
- package/bin/git-ado +27 -26
- package/bin/git-defaults +173 -0
- package/bin/health-check +8 -1
- package/bin/kimi-hooks +1 -1
- package/bin/lib/adl-package.sh +257 -0
- package/bin/lib/bun-compile-build.sh +1 -1
- package/bin/lib/fleet-host.sh +62 -0
- package/bin/lib/lean-ctx-observe-hooks.sh +9 -9
- package/bin/reconcile +693 -470
- package/bin/reconcile-host +121 -0
- package/bin/setup +219 -0
- package/bin/shell-path-policy +15 -5
- package/bin/sync-and-reconcile +79 -68
- package/bin/validate-manifest +46 -51
- package/package.json +2 -12
- package/packages/agent-hooks/README.md +14 -9
- package/packages/agent-hooks/assets/hooks.json +0 -20
- package/packages/agent-hooks/package.json +1 -2
- package/packages/agent-hooks/src/cli/args.ts +1 -1
- package/packages/agent-hooks/src/cli/doctor.ts +6 -58
- package/packages/agent-hooks/src/deploy/deploy.ts +12 -41
- package/packages/agent-hooks/src/deploy/doctor.ts +8 -11
- package/packages/agent-hooks/src/deploy/index.ts +14 -14
- package/packages/agent-hooks/src/deploy/json-merge.ts +7 -8
- package/packages/agent-hooks/src/deploy/legacy-lock.ts +2 -2
- package/packages/agent-hooks/src/deploy/list.ts +1 -1
- package/packages/agent-hooks/src/deploy/lock.ts +31 -12
- package/packages/agent-hooks/src/deploy/profile.ts +3 -4
- package/packages/agent-hooks/src/deploy/source.ts +1 -1
- package/packages/agent-hooks/src/gating/config.ts +10 -24
- package/packages/agent-hooks/src/gating/root.ts +3 -3
- package/packages/agent-hooks/src/hooks/briefing/handler.ts +2 -2
- package/packages/agent-hooks/src/hooks/briefing/index.ts +27 -287
- package/packages/agent-hooks/src/hooks/contract.ts +17 -17
- package/packages/agent-hooks/src/hooks/crg/background.ts +27 -0
- package/packages/agent-hooks/src/hooks/crg/index.ts +7 -6
- package/packages/agent-hooks/src/hooks/log.ts +8 -10
- package/packages/agent-hooks/src/hooks/user-prompt-submit/match.ts +1 -1
- package/packages/agent-hooks/src/hooks/user-prompt-submit/tokenizer.ts +1 -1
- package/packages/agent-hooks/src/hooks/user-prompt-submit/vector.ts +6 -5
- package/packages/agent-hooks/src/hosts/registry.ts +1 -1
- package/packages/agent-hooks/src/log/adl-dir.ts +44 -0
- package/packages/agent-hooks/src/log/writer.ts +16 -2
- package/packages/agent-hooks/src/main.ts +7 -41
- package/packages/agent-hooks/src/pre-tool-use/handler.ts +71 -82
- package/packages/agent-hooks/src/rules/engine.ts +13 -17
- package/packages/agent-hooks/src/rules/impl/adl-build-run-denied.ts +3 -3
- package/packages/agent-hooks/src/rules/impl/adl-git-credential-bypass.ts +12 -14
- package/packages/agent-hooks/src/rules/impl/adl-git-identity.ts +28 -28
- package/packages/agent-hooks/src/rules/impl/adl-git-push-policy.ts +8 -9
- package/packages/agent-hooks/src/rules/impl/adl-human-azdo-bypass.ts +56 -59
- package/packages/agent-hooks/src/rules/impl/adl-identity.ts +16 -23
- package/packages/agent-hooks/src/rules/impl/adl-mcp-cli.ts +19 -16
- package/packages/agent-hooks/src/rules/impl/adl-pr-complete-pending.ts +2 -2
- package/packages/agent-hooks/src/rules/impl/adl-pr-review-role.ts +9 -12
- package/packages/agent-hooks/src/rules/impl/adl-pr-role.ts +5 -7
- package/packages/agent-hooks/src/rules/impl/adl-run-required.ts +411 -0
- package/packages/agent-hooks/src/rules/impl/adl-token-minting-role.ts +4 -5
- package/packages/agent-hooks/src/rules/impl/adl-workitem-role.ts +6 -7
- package/packages/agent-hooks/src/rules/impl/agent-tamper-protection.ts +77 -70
- package/packages/agent-hooks/src/rules/impl/deny-allowlist.ts +159 -0
- package/packages/agent-hooks/src/rules/impl/fs-trash.ts +2 -2
- package/packages/agent-hooks/src/rules/impl/git-helpers.ts +21 -23
- package/packages/agent-hooks/src/rules/impl/git-worktree.ts +14 -28
- package/packages/agent-hooks/src/rules/impl/mcp-tool.ts +3 -3
- package/packages/agent-hooks/src/rules/impl/messages.ts +1 -1
- package/packages/agent-hooks/src/rules/impl/pr-completion.ts +1 -1
- package/packages/agent-hooks/src/rules/impl/tool-azure-devops.ts +35 -46
- package/packages/agent-hooks/src/rules/impl/tool-find.ts +34 -7
- package/packages/agent-hooks/src/rules/impl/tool-grep.ts +34 -12
- package/packages/agent-hooks/src/rules/impl/tool-native-search.ts +52 -9
- package/packages/agent-hooks/src/rules/ports.ts +5 -7
- package/packages/agent-hooks/src/rules/registry.ts +4 -6
- package/packages/agent-hooks/src/rules/shell/git-identity.ts +86 -101
- package/packages/agent-hooks/src/rules/shell/git-internals.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/invocation.ts +24 -118
- package/packages/agent-hooks/src/rules/shell/piped-script.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/prefixes.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/protected-carrier-writes.ts +11 -10
- package/packages/agent-hooks/src/rules/shell/protected-carriers.ts +26 -26
- package/packages/agent-hooks/src/rules/shell/substitution.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/xargs.ts +2 -2
- package/packages/agent-hooks/src/rules/spec.ts +2 -2
- package/packages/agent-settings/README.md +287 -0
- package/packages/agent-settings/assets/GLOBAL-AGENTS.md +18 -18
- package/packages/agent-settings/assets/agents/architect.toml +2 -0
- package/packages/agent-settings/assets/agents/code-reviewer.toml +2 -0
- package/packages/agent-settings/assets/agents/executor.toml +2 -0
- package/packages/agent-settings/assets/agents/explore.toml +2 -0
- package/packages/agent-settings/assets/agents/planner.toml +2 -0
- package/packages/agent-settings/assets/mcp.json +0 -4
- package/packages/agent-settings/deploy-profile.json +139 -0
- package/packages/agent-settings/deploy-profile.schema.json +147 -0
- package/packages/agent-settings/managed/README.md +29 -30
- package/packages/agent-settings/managed/codex-requirements.toml +9 -9
- package/packages/agent-settings/package.json +20 -0
- package/packages/agent-settings/src/deploy/agent-render.ts +2 -2
- package/packages/agent-settings/src/deploy/agent-toml.ts +1 -1
- package/packages/agent-settings/src/deploy/agents-deploy.ts +17 -3
- package/packages/agent-settings/src/deploy/doctor.ts +3 -83
- package/packages/agent-settings/src/deploy/index.ts +6 -33
- package/packages/agent-settings/src/deploy/legacy-lock.ts +6 -6
- package/packages/agent-settings/src/deploy/list.ts +5 -19
- package/packages/agent-settings/src/deploy/lock.ts +8 -18
- package/packages/agent-settings/src/deploy/mcp-deploy.ts +10 -5
- package/packages/agent-settings/src/deploy/mcp-merge.ts +22 -3
- package/packages/agent-settings/src/deploy/mcp-source.ts +1 -1
- package/packages/agent-settings/src/deploy/profile.ts +11 -35
- package/packages/agent-settings/src/deploy/retire-lean-ctx.ts +184 -0
- package/packages/agent-settings/src/deploy/settings.ts +17 -22
- package/packages/agent-settings/src/global-surface-sweep.ts +5 -17
- package/packages/agent-settings/src/kimi-hooks.ts +339 -192
- package/packages/agent-settings/src/opencode-hooks.ts +1 -1
- package/packages/agent-settings/tsconfig.json +23 -0
- package/packages/agent-skills/assets/agent-search-tool-audit/SKILL.md +120 -0
- package/packages/agent-skills/assets/agent-search-tool-audit/scripts/audit.sh +276 -0
- package/packages/agent-skills/assets/debug-issue/SKILL.md +8 -7
- package/packages/agent-skills/assets/explore-codebase/SKILL.md +13 -13
- package/packages/agent-skills/assets/refactor-safely/SKILL.md +12 -11
- package/packages/agent-skills/assets/review-changes/SKILL.md +7 -7
- package/packages/agent-skills/assets/testing/references/e2e.md +37 -0
- package/packages/agent-skills/assets/testing/references/integration.md +37 -0
- package/packages/agent-skills/assets/testing/references/unit.md +32 -0
- package/packages/agent-skills/dist/deploy.d.ts +2 -0
- package/packages/agent-skills/dist/deploy.d.ts.map +1 -1
- package/packages/agent-skills/dist/deploy.js +27 -1
- package/packages/agent-skills/dist/deploy.js.map +1 -1
- package/packages/agent-skills/dist/doctor.d.ts +0 -2
- package/packages/agent-skills/dist/doctor.d.ts.map +1 -1
- package/packages/agent-skills/dist/doctor.js +1 -1
- package/packages/agent-skills/dist/doctor.js.map +1 -1
- package/packages/agent-skills/dist/fs-utils.d.ts +0 -1
- package/packages/agent-skills/dist/fs-utils.d.ts.map +1 -1
- package/packages/agent-skills/dist/fs-utils.js +1 -1
- package/packages/agent-skills/dist/fs-utils.js.map +1 -1
- package/packages/agent-skills/package.json +1 -1
- package/packages/agent-skills/src/deploy.ts +29 -1
- package/packages/agent-skills/src/doctor.ts +1 -1
- package/packages/agent-skills/src/fs-utils.ts +1 -1
- package/packages/azdo/README.md +10 -9
- package/packages/azdo/package.json +2 -5
- package/packages/azdo/src/azdo-pl.ts +2 -54
- package/packages/azdo/src/azdo-pr-review.ts +4 -4
- package/packages/azdo/src/azdo-repo-doctor.ts +101 -52
- package/packages/azdo/src/azdo-wit.ts +41 -2
- package/packages/azdo/src/lib/agent-identity.ts +12 -14
- package/packages/azdo/src/lib/agent-token.ts +2 -2
- package/packages/azdo/src/lib/client.ts +0 -5
- package/packages/azdo/src/lib/graph-identity.ts +4 -4
- package/packages/azdo/src/workflow-rules-matrix.csv +85 -0
- package/packages/azdo/src/workflow-rules.ts +128 -0
- package/packages/fleet/manifest.json +38 -33
- package/packages/fleet/manifest.schema.json +67 -65
- package/packages/fleet/src/default-agent-file.ts +3 -3
- package/packages/fleet/src/install-adl-package.ts +73 -15
- package/packages/fleet/src/install-embedding-model.ts +14 -14
- package/packages/fleet/src/managed-settings.ts +7 -7
- package/packages/fleet/src/repo-maintain.ts +439 -0
- package/packages/fleet/src/scratch-reap.ts +6 -6
- package/packages/fleet/src/vscode-settings.ts +5 -5
- package/packages/repo-controls/README.md +141 -43
- package/packages/repo-controls/assets/promote.ts +4 -4
- package/packages/repo-controls/assets/reconcile-guard.sh +10 -46
- package/packages/repo-controls/assets/version-bump.sh +31 -84
- package/packages/repo-controls/bunfig.toml +6 -7
- package/packages/repo-controls/package/adl-compliance/AGENTS.md +5 -6
- package/packages/repo-controls/package/adl-compliance/conftest.py +3 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/__init__.py +4 -16
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/test_check.py +9 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/notes.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/test_check.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/check.py +266 -0
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.hidden.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/data.csv +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/diagram.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/mock.png +1 -0
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p1.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p2.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p3.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p4.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p5.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/build.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/overview.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/install.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/start.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/grants.yaml +4 -0
- 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
- 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
- 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
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/grants.yaml +4 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/grants.yaml +4 -0
- 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
- 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
- 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
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/grants.yaml +4 -0
- 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
- 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
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/d.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/grants.yaml +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/grants.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/test_check.py +345 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/check.py +18 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/test_check.py +35 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/check.py +91 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/CLAUDE.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/-leading-hyphen.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/double--hyphen.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/getting started.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/nested/page-here.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/trailing-hyphen-.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/ui-contract.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/user_profile.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/UI-CONTRACT.png +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/diagram.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/index.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/notes.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/reference.html +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/2026-10-experiment.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/UI-CONTRACT.md +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/test_check.py +194 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/check.py +14 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/docs-knowledge-indexes.yaml +5 -5
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/test_check.py +58 -6
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/test_check.py +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/check.py +64 -17
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/docs-okf-profiles.yaml +60 -9
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-clean/docs/notes.md +17 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-no-lines/docs/notes.md +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs/architecture/demo.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs-okf-profiles.yaml +0 -1
- 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
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs-okf-profiles.yaml +5 -0
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs-okf-profiles.yaml +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/experiment-ok.md +15 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-key.md +15 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-keys.md +16 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-created.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-description.md +11 -0
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-sources.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-status.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-title.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/optional-keys.md +16 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/research-ok.md +14 -0
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/operations/runbook.md +26 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/test_check.py +228 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/register.py +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/test_check.py +11 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/__init__.py +5 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/check.py +160 -44
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-clean/grants.yaml +0 -2
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/grants.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/grants.yaml +0 -2
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-missing-tree/grants.yaml +5 -0
- 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
- 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
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/grants.yaml +4 -0
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-stale-entry/grants.yaml +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/grants.yaml +0 -2
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unusable-register/grants.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/register.py +127 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/test_check.py +265 -29
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/check.py +75 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/test_check.py +194 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/check.py +56 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/test_check.py +256 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/check.py +40 -12
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/test_check.py +108 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/test_check.py +1 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/check.py +2 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/check.py +23 -6
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/test_check.py +76 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/check.py +58 -17
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/test_check.py +161 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/check.py +35 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/test_check.py +108 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/check.py +281 -61
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/absolute-path.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/backslash-path.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/baseline-is-a-list.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/boolean-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/dot-segment.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/duplicate-path.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-file.yaml +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-segment.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/float-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/negative-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-over-limit-baseline.yaml +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-schema-version.yaml +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/non-string-path.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/not-yaml.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/null-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/parent-segment.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/string-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/top-level-is-a-list.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/trailing-slash.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/unknown-key.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/wrong-schema-version.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/zero-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/valid.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/test_check.py +758 -45
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/check.py +4 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/test_check.py +2 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/cargo_lock.py +490 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/check.py +368 -55
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_check.py +4 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_declared_paths.py +523 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_stale_lock.py +1179 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/cli.py +122 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/check.py +33 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/constants.py +0 -11
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/context.py +16 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/config.py +1 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/docs_shape.py +12 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.alt.yaml +133 -147
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.yaml +133 -147
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/registry.py +1 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/root_shape.py +52 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/runner.py +23 -4
- package/packages/repo-controls/package.json +2 -10
- package/packages/repo-controls/scripts/hooks/post-merge +13 -0
- package/packages/repo-controls/scripts/hooks/pre-push +3 -3
- package/packages/repo-controls/src/azdo-push.ts +64 -36
- package/packages/repo-controls/src/azure-devops-governance.ts +7 -9
- package/packages/repo-controls/src/azure-devops-remote.ts +1 -1
- package/packages/repo-controls/src/cli.ts +29 -8
- package/packages/repo-controls/src/compliance-config.ts +410 -2
- package/packages/repo-controls/src/config.ts +133 -60
- package/packages/repo-controls/src/constants.ts +13 -27
- package/packages/repo-controls/src/coverage-ratchet.ts +4 -4
- package/packages/repo-controls/src/doctor.ts +46 -19
- package/packages/repo-controls/src/gitignore-block.ts +5 -29
- package/packages/repo-controls/src/hook-log.ts +1 -2
- package/packages/repo-controls/src/hook.ts +201 -45
- package/packages/repo-controls/src/install.ts +14 -8
- package/packages/repo-controls/src/integrity.ts +3 -3
- package/packages/repo-controls/src/lfs.ts +111 -0
- package/packages/repo-controls/src/promote.ts +8 -8
- package/packages/repo-controls/src/runtime.ts +9 -1
- package/packages/repo-controls/src/workflows-drift.ts +4 -5
- package/packages/repo-controls/src/worktree-guard.ts +3 -3
- package/packages/fleet/jobs/git-maintain/src/main.ts +0 -848
- package/packages/fleet/systemd/adl-azure-agent-update.service +0 -13
- package/packages/fleet/systemd/adl-azure-agent-update.timer +0 -10
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Workflow gate matrix for the board's six Build flags (Custom.Planwritten,
|
|
2
|
+
// Custom.Implementationcomplete, Custom.Reviewpassed, Custom.Testspassing,
|
|
3
|
+
// Custom.Docsupdated, Custom.Mergedtointegration) against the seven
|
|
4
|
+
// Product Backlog Item/Bug states. Rebuild (2026-10-02) of the gate lost in
|
|
5
|
+
// the P4 port — the authoritative definition is
|
|
6
|
+
// docs/operations/workflow-matrix.csv in the enact-combined repo, copied
|
|
7
|
+
// verbatim to src/workflow-rules-matrix.csv next to this file. The unit test
|
|
8
|
+
// tests/workflow-rules.test.ts asserts this embedded table agrees with that
|
|
9
|
+
// CSV on all 84 rows, so the compiled binary needs no file access at runtime.
|
|
10
|
+
// Features and Epics carry no flags ("A Feature carries neither") and are
|
|
11
|
+
// exempt: evaluateWorkflowState returns no violations for them.
|
|
12
|
+
|
|
13
|
+
/** The six Build flags, in CSV column order. */
|
|
14
|
+
export const WORKFLOW_FLAG_REFS = [
|
|
15
|
+
'Custom.Planwritten',
|
|
16
|
+
'Custom.Implementationcomplete',
|
|
17
|
+
'Custom.Reviewpassed',
|
|
18
|
+
'Custom.Testspassing',
|
|
19
|
+
'Custom.Docsupdated',
|
|
20
|
+
'Custom.Mergedtointegration',
|
|
21
|
+
] as const;
|
|
22
|
+
export type WorkflowFlagRef = (typeof WORKFLOW_FLAG_REFS)[number];
|
|
23
|
+
|
|
24
|
+
export const WORKFLOW_FLAG_LABELS: Record<WorkflowFlagRef, string> = {
|
|
25
|
+
'Custom.Planwritten': 'Plan written',
|
|
26
|
+
'Custom.Implementationcomplete': 'Implementation complete',
|
|
27
|
+
'Custom.Reviewpassed': 'Review passed',
|
|
28
|
+
'Custom.Testspassing': 'Tests passing',
|
|
29
|
+
'Custom.Docsupdated': 'Docs updated',
|
|
30
|
+
'Custom.Mergedtointegration': 'Merged to integration',
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Only four flags carry a failure reason in the CSV; Implementation complete
|
|
35
|
+
* and Docs updated have none.
|
|
36
|
+
*/
|
|
37
|
+
export const WORKFLOW_FAILURE_REASONS: Partial<Record<WorkflowFlagRef, string>> = {
|
|
38
|
+
'Custom.Planwritten': 'Plan rejected',
|
|
39
|
+
'Custom.Reviewpassed': 'Reviewer rejected',
|
|
40
|
+
'Custom.Testspassing': 'Tests failed',
|
|
41
|
+
'Custom.Mergedtointegration': 'Build failed',
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/** The seven board states; the matrix has one rule vector per state. */
|
|
45
|
+
const WORKFLOW_STATES = ['New', 'Approved', 'Committed', 'In Progress', 'In Testing', 'Done', 'Removed'] as const;
|
|
46
|
+
export type WorkflowState = (typeof WORKFLOW_STATES)[number];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* `yes` = flag must be true, `no` = flag must be false, `free` = either.
|
|
50
|
+
* The Product Backlog Item and Bug rows are identical in the CSV, so one
|
|
51
|
+
* table serves both types; per state the entries follow WORKFLOW_FLAG_REFS
|
|
52
|
+
* order.
|
|
53
|
+
*/
|
|
54
|
+
export const WORKFLOW_STATE_RULES: Record<WorkflowState, Record<WorkflowFlagRef, WorkflowRule>> = {
|
|
55
|
+
New: { 'Custom.Planwritten': 'no', 'Custom.Implementationcomplete': 'no', 'Custom.Reviewpassed': 'no', 'Custom.Testspassing': 'no', 'Custom.Docsupdated': 'no', 'Custom.Mergedtointegration': 'no' },
|
|
56
|
+
Approved: { 'Custom.Planwritten': 'yes', 'Custom.Implementationcomplete': 'no', 'Custom.Reviewpassed': 'no', 'Custom.Testspassing': 'no', 'Custom.Docsupdated': 'no', 'Custom.Mergedtointegration': 'no' },
|
|
57
|
+
Committed: { 'Custom.Planwritten': 'yes', 'Custom.Implementationcomplete': 'no', 'Custom.Reviewpassed': 'no', 'Custom.Testspassing': 'no', 'Custom.Docsupdated': 'no', 'Custom.Mergedtointegration': 'no' },
|
|
58
|
+
'In Progress': { 'Custom.Planwritten': 'yes', 'Custom.Implementationcomplete': 'free', 'Custom.Reviewpassed': 'no', 'Custom.Testspassing': 'free', 'Custom.Docsupdated': 'free', 'Custom.Mergedtointegration': 'no' },
|
|
59
|
+
'In Testing': { 'Custom.Planwritten': 'yes', 'Custom.Implementationcomplete': 'yes', 'Custom.Reviewpassed': 'free', 'Custom.Testspassing': 'free', 'Custom.Docsupdated': 'free', 'Custom.Mergedtointegration': 'no' },
|
|
60
|
+
Done: { 'Custom.Planwritten': 'yes', 'Custom.Implementationcomplete': 'yes', 'Custom.Reviewpassed': 'yes', 'Custom.Testspassing': 'yes', 'Custom.Docsupdated': 'yes', 'Custom.Mergedtointegration': 'yes' },
|
|
61
|
+
Removed: { 'Custom.Planwritten': 'free', 'Custom.Implementationcomplete': 'free', 'Custom.Reviewpassed': 'free', 'Custom.Testspassing': 'free', 'Custom.Docsupdated': 'free', 'Custom.Mergedtointegration': 'free' },
|
|
62
|
+
};
|
|
63
|
+
export type WorkflowRule = 'yes' | 'no' | 'free';
|
|
64
|
+
|
|
65
|
+
export interface WorkflowViolation {
|
|
66
|
+
flagRef: WorkflowFlagRef;
|
|
67
|
+
flagLabel: string;
|
|
68
|
+
required: 'true' | 'false';
|
|
69
|
+
state: string;
|
|
70
|
+
failureReason?: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const GATED_TYPES = ['Product Backlog Item', 'Bug'] as const;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Evaluate the RESULTING (state, flags) pair against the matrix. One
|
|
77
|
+
* violation per breached yes/no row; `free` rows and exempt types
|
|
78
|
+
* (Feature/Epic) yield none. A flag absent from `flags` counts as false,
|
|
79
|
+
* matching an unset Azure boolean. A state outside the seven board states
|
|
80
|
+
* has no rows and yields no violations.
|
|
81
|
+
*/
|
|
82
|
+
export function evaluateWorkflowState(
|
|
83
|
+
workItemType: string,
|
|
84
|
+
state: string,
|
|
85
|
+
flags: Partial<Record<WorkflowFlagRef, boolean>> = {},
|
|
86
|
+
): WorkflowViolation[] {
|
|
87
|
+
if (!(GATED_TYPES as readonly string[]).includes(workItemType)) return [];
|
|
88
|
+
const rules = WORKFLOW_STATE_RULES[state as WorkflowState];
|
|
89
|
+
if (!rules) return [];
|
|
90
|
+
const violations: WorkflowViolation[] = [];
|
|
91
|
+
for (const flagRef of WORKFLOW_FLAG_REFS) {
|
|
92
|
+
const rule = rules[flagRef];
|
|
93
|
+
if (rule === 'free') continue;
|
|
94
|
+
if ((flags[flagRef] ?? false) !== (rule === 'yes')) {
|
|
95
|
+
violations.push({
|
|
96
|
+
flagRef,
|
|
97
|
+
flagLabel: WORKFLOW_FLAG_LABELS[flagRef],
|
|
98
|
+
required: rule === 'yes' ? 'true' : 'false',
|
|
99
|
+
state,
|
|
100
|
+
...(WORKFLOW_FAILURE_REASONS[flagRef] === undefined ? {} : { failureReason: WORKFLOW_FAILURE_REASONS[flagRef] }),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return violations;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function formatWorkflowViolation(violation: WorkflowViolation): string {
|
|
108
|
+
const reason = violation.failureReason === undefined ? '' : ` (${violation.failureReason})`;
|
|
109
|
+
return `fenced by workflow matrix: State '${violation.state}' requires '${violation.flagLabel}' to be ${violation.required}${reason}`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** One refusal line per violation, joined for a loud multi-line error. */
|
|
113
|
+
export function formatWorkflowRefusal(violations: WorkflowViolation[]): string {
|
|
114
|
+
return violations.map(formatWorkflowViolation).join('\n');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Pick the workflow flags out of a raw fields record (an Azure work item's
|
|
119
|
+
* `fields`, or a write's `fields` argument). Only strict booleans count;
|
|
120
|
+
* anything else is coerced to false rather than guessed at.
|
|
121
|
+
*/
|
|
122
|
+
export function pickWorkflowFlags(fields: Record<string, unknown> | undefined): Partial<Record<WorkflowFlagRef, boolean>> {
|
|
123
|
+
const flags: Partial<Record<WorkflowFlagRef, boolean>> = {};
|
|
124
|
+
for (const flagRef of WORKFLOW_FLAG_REFS) {
|
|
125
|
+
if (fields !== undefined && flagRef in fields) flags[flagRef] = fields[flagRef] === true;
|
|
126
|
+
}
|
|
127
|
+
return flags;
|
|
128
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"schema": 1,
|
|
4
4
|
"repository": "https://dev.azure.com/amsterdamdatalabs/Infrastructure-AzDo/_git/adl-agent-control",
|
|
5
5
|
"branch": "main",
|
|
6
|
-
"interval_seconds":
|
|
6
|
+
"interval_seconds": 43200,
|
|
7
7
|
"update_policy": "latest-stable",
|
|
8
8
|
"allow_major_updates": true,
|
|
9
9
|
"remove_deleted_entries": true,
|
|
@@ -23,22 +23,33 @@
|
|
|
23
23
|
"vscode_settings": {
|
|
24
24
|
"enabled": true
|
|
25
25
|
},
|
|
26
|
+
"repo_maintain": {
|
|
27
|
+
"branch_max_age_days": 7
|
|
28
|
+
},
|
|
26
29
|
"scratch_reap": {
|
|
27
30
|
"enabled": true,
|
|
28
31
|
"idle_days": 1,
|
|
29
32
|
"reap_days": 7,
|
|
30
33
|
"remove_worktrees": true
|
|
31
34
|
},
|
|
35
|
+
"brew_upgrade_exclude": [],
|
|
32
36
|
"protected_tools": ["git", "jq"],
|
|
33
37
|
"git_global_config": {
|
|
38
|
+
"credential.helper": ["", "{git-credential-manager}"],
|
|
39
|
+
"credential.https://dev.azure.com.useHttpPath": "true",
|
|
34
40
|
"lfs.ssh://ssh.dev.azure.com/.sshtransfer": "never",
|
|
35
|
-
"lfs.https://ssh.dev.azure.com/.locksverify": "false"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
41
|
+
"lfs.https://ssh.dev.azure.com/.locksverify": "false",
|
|
42
|
+
"push.autoSetupRemote": "true",
|
|
43
|
+
"push.default": "current",
|
|
44
|
+
"branch.autoSetupMerge": "simple",
|
|
45
|
+
"init.defaultBranch": "main",
|
|
46
|
+
"advice.addEmbeddedRepo": "false",
|
|
47
|
+
"fetch.prune": "true",
|
|
48
|
+
"pull.rebase": "false",
|
|
49
|
+
"rerere.enabled": "true",
|
|
50
|
+
"merge.conflictStyle": "zdiff3",
|
|
51
|
+
"diff.algorithm": "histogram",
|
|
52
|
+
"core.autocrlf": "false"
|
|
42
53
|
}
|
|
43
54
|
},
|
|
44
55
|
"mac": {
|
|
@@ -48,7 +59,7 @@
|
|
|
48
59
|
"ast-grep": {"manager": "brew", "package": "ast-grep", "executable": "ast-grep"},
|
|
49
60
|
"azure-cli": {"manager": "brew", "package": "azure-cli", "executable": "az"},
|
|
50
61
|
"bun": {"manager": "brew", "package": "bun", "executable": "bun"},
|
|
51
|
-
"
|
|
62
|
+
"enact-embedding": {"manager": "embedding-model", "package": "enact-embedding", "executable": "enact-embedding/model/model.bin", "version": "0.0.1", "source": "minishlab/potion-multilingual-128M", "vocab_limit": 150000, "dim": 256, "reason": "Model data is downloaded and verified into the per-user cache; it is not an Adl code component."},
|
|
52
63
|
"code-review-graph": {"manager": "pip", "package": "code-review-graph", "executable": "code-review-graph"},
|
|
53
64
|
"crg": {"manager": "shim", "package": "code-review-graph", "executable": "/usr/local/bin/crg"},
|
|
54
65
|
"curl": {"manager": "brew", "package": "curl", "executable": "curl"},
|
|
@@ -62,44 +73,31 @@
|
|
|
62
73
|
"git": {"manager": "brew", "package": "git", "executable": "git"},
|
|
63
74
|
"jq": {"manager": "brew", "package": "jq", "executable": "jq"},
|
|
64
75
|
"just": {"manager": "brew", "package": "just", "executable": "just"},
|
|
65
|
-
"lean-ctx": {"manager": "release-archive-latest", "package": "lean-ctx", "executable": "/usr/local/bin/lean-ctx", "repo": "yvgude/lean-ctx", "asset": "lean-ctx-aarch64-apple-darwin.tar.gz", "checksums_asset": "SHA256SUMS", "archive_executable": "lean-ctx"},
|
|
66
76
|
"node": {"manager": "brew", "package": "node", "executable": "node"},
|
|
77
|
+
"orca": {"manager": "brew", "package": "stablyai/orca/orca", "tap": "stablyai/orca", "executable": "orca", "reason": "Stably's Orca agent runtime (com.stablyai.orca), official tap. Cask auto_updates: reconcile installs when missing and never fights the in-app stable-channel updater. No version pinned here. Linux CLI (orca-ide) has no cask — still undeclared, see plans/GAPS-AND-FINDINGS.md."},
|
|
67
78
|
"ripgrep": {"manager": "brew", "package": "ripgrep", "executable": "rg"},
|
|
68
79
|
"search": {"manager": "shim", "package": "enact-docs-search", "executable": "/usr/local/bin/search"},
|
|
69
80
|
"shellcheck": {"manager": "brew", "package": "shellcheck", "executable": "shellcheck"},
|
|
70
81
|
"shfmt": {"manager": "brew", "package": "shfmt", "executable": "shfmt"},
|
|
71
82
|
"uv": {"manager": "brew", "package": "uv", "executable": "uv"},
|
|
72
83
|
"yq": {"manager": "brew", "package": "yq", "executable": "yq"}
|
|
73
|
-
},
|
|
74
|
-
"launch_agents": {
|
|
75
|
-
"git-maintain": {
|
|
76
|
-
"label": "com.adl.git-maintain",
|
|
77
|
-
"source": "packages/fleet/jobs/git-maintain",
|
|
78
|
-
"entry": "src/main.ts",
|
|
79
|
-
"start_interval_seconds": 86400,
|
|
80
|
-
"run_at_load": true,
|
|
81
|
-
"repo_scope": {"root": "Documents", "glob": "*", "recursive": true},
|
|
82
|
-
"environment": {
|
|
83
|
-
"PATH": "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
|
84
|
-
},
|
|
85
|
-
"log": "Library/Logs/adl/git-maintain.log",
|
|
86
|
-
"replaces": [".local/bin/git-maintain.sh"]
|
|
87
|
-
}
|
|
88
84
|
}
|
|
89
85
|
},
|
|
90
86
|
"devices": {
|
|
91
87
|
"m3": {
|
|
92
88
|
"administrator": "tarunrana",
|
|
93
89
|
"default_agent": "agent-tarun",
|
|
90
|
+
"git_user": {"name": "Tarun Rana", "email": "tarun.rana@amsterdamdatalabs.com"},
|
|
94
91
|
"home": "/Users/tarunrana",
|
|
95
92
|
"minimum_free_gib": 20,
|
|
96
93
|
"schedule_minute": 5,
|
|
94
|
+
"repo_location": "/Users/tarunrana/workspace",
|
|
97
95
|
"brew_upgrade_all": true,
|
|
98
96
|
"surface_clis": [
|
|
99
97
|
{"name": "claude", "manager": "native", "command": "claude", "update_args": ["update"]},
|
|
100
98
|
{"name": "codex", "manager": "brew", "command": "brew", "update_args": ["upgrade", "--cask", "codex"]},
|
|
101
99
|
{"name": "kimi", "manager": "native", "command": "kimi", "update_args": ["upgrade"]},
|
|
102
|
-
{"name": "opencode", "manager": "
|
|
100
|
+
{"name": "opencode", "manager": "bun", "package": "opencode-ai", "command": "opencode"},
|
|
103
101
|
{"name": "agent", "manager": "native", "command": "agent", "update_args": ["update"]}
|
|
104
102
|
],
|
|
105
103
|
"tools": {
|
|
@@ -111,15 +109,17 @@
|
|
|
111
109
|
"m5": {
|
|
112
110
|
"administrator": "ranahome",
|
|
113
111
|
"default_agent": "agent-tarun",
|
|
112
|
+
"git_user": {"name": "Tarun Rana", "email": "tarun.rana@amsterdamdatalabs.com"},
|
|
114
113
|
"home": "/Users/ranahome",
|
|
115
114
|
"minimum_free_gib": 20,
|
|
116
115
|
"schedule_minute": 35,
|
|
116
|
+
"repo_location": "/Users/ranahome/workspace",
|
|
117
117
|
"brew_upgrade_all": true,
|
|
118
118
|
"surface_clis": [
|
|
119
119
|
{"name": "claude", "manager": "native", "command": "claude", "update_args": ["update"]},
|
|
120
120
|
{"name": "codex", "manager": "brew", "command": "brew", "update_args": ["upgrade", "--cask", "codex"]},
|
|
121
121
|
{"name": "kimi", "manager": "native", "command": "kimi", "update_args": ["upgrade"]},
|
|
122
|
-
{"name": "opencode", "manager": "
|
|
122
|
+
{"name": "opencode", "manager": "bun", "package": "opencode-ai", "command": "opencode"},
|
|
123
123
|
{"name": "agent", "manager": "native", "command": "agent", "update_args": ["update"]}
|
|
124
124
|
],
|
|
125
125
|
"tools": {
|
|
@@ -133,12 +133,16 @@
|
|
|
133
133
|
"linux": {
|
|
134
134
|
"common": {
|
|
135
135
|
"os_upgrade": true,
|
|
136
|
+
"git_global_config": {
|
|
137
|
+
"credential.credentialStore": "cache",
|
|
138
|
+
"credential.cacheOptions": "--timeout 604800"
|
|
139
|
+
},
|
|
136
140
|
"tools": {
|
|
137
141
|
"agent-vault-cli": {"manager": "release-archive-latest", "package": "agent-vault", "executable": "/usr/local/bin/agent-vault", "repo": "Infisical/agent-vault", "asset": "agent-vault_{version}_linux_amd64.tar.gz", "checksums_asset": "checksums.txt", "archive_executable": "agent-vault"},
|
|
138
142
|
"ast-grep": {"manager": "brew", "package": "ast-grep", "executable": "ast-grep"},
|
|
139
143
|
"azure-cli": {"manager": "brew", "package": "azure-cli", "executable": "az"},
|
|
140
144
|
"bun": {"manager": "brew", "package": "bun", "executable": "bun"},
|
|
141
|
-
"
|
|
145
|
+
"enact-embedding": {"manager": "embedding-model", "package": "enact-embedding", "executable": "enact-embedding/model/model.bin", "version": "0.0.1", "source": "minishlab/potion-multilingual-128M", "vocab_limit": 150000, "dim": 256, "reason": "Model data is downloaded and verified into the per-user cache; it is not an Adl code component."},
|
|
142
146
|
"code-review-graph": {"manager": "pip", "package": "code-review-graph", "executable": "code-review-graph"},
|
|
143
147
|
"crg": {"manager": "shim", "package": "code-review-graph", "executable": "/usr/local/bin/crg"},
|
|
144
148
|
"curl": {"manager": "brew", "package": "curl", "executable": "curl"},
|
|
@@ -152,7 +156,6 @@
|
|
|
152
156
|
"git": {"manager": "brew", "package": "git", "executable": "git"},
|
|
153
157
|
"jq": {"manager": "brew", "package": "jq", "executable": "jq"},
|
|
154
158
|
"just": {"manager": "brew", "package": "just", "executable": "just"},
|
|
155
|
-
"lean-ctx": {"manager": "release-archive-latest", "package": "lean-ctx", "executable": "/usr/local/bin/lean-ctx", "repo": "yvgude/lean-ctx", "asset": "lean-ctx-x86_64-unknown-linux-gnu.tar.gz", "checksums_asset": "SHA256SUMS", "archive_executable": "lean-ctx"},
|
|
156
159
|
"node": {"manager": "brew", "package": "node", "executable": "node"},
|
|
157
160
|
"ripgrep": {"manager": "brew", "package": "ripgrep", "executable": "rg"},
|
|
158
161
|
"search": {"manager": "shim", "package": "enact-docs-search", "executable": "/usr/local/bin/search"},
|
|
@@ -165,15 +168,16 @@
|
|
|
165
168
|
"hostinger-vps-1": {
|
|
166
169
|
"administrator": "root",
|
|
167
170
|
"default_agent": "agent-tarun",
|
|
171
|
+
"git_user": {"name": "Tarun Rana", "email": "tarun.rana@amsterdamdatalabs.com"},
|
|
168
172
|
"home": "/root",
|
|
169
173
|
"minimum_free_gib": 25,
|
|
170
174
|
"schedule_minute": 50,
|
|
171
175
|
"scratch_repos": ["/root/enact-webview"],
|
|
172
|
-
"
|
|
176
|
+
"repo_location": "/root/workspace",
|
|
173
177
|
"brew_upgrade_all": true,
|
|
174
178
|
"surface_clis": [
|
|
175
179
|
{"name": "claude", "manager": "native", "command": "claude", "update_args": ["update"]},
|
|
176
|
-
{"name": "opencode", "manager": "
|
|
180
|
+
{"name": "opencode", "manager": "bun", "package": "opencode-ai", "command": "opencode"},
|
|
177
181
|
{"name": "kimi", "manager": "native", "command": "kimi", "update_args": ["upgrade"]},
|
|
178
182
|
{"name": "codex", "manager": "unknown", "report_only": true, "executable": "/root/codex"}
|
|
179
183
|
],
|
|
@@ -186,14 +190,15 @@
|
|
|
186
190
|
"strato-vps-1": {
|
|
187
191
|
"administrator": "root",
|
|
188
192
|
"default_agent": "agent-tarun",
|
|
193
|
+
"git_user": {"name": "Tarun Rana", "email": "tarun.rana@amsterdamdatalabs.com"},
|
|
189
194
|
"home": "/root",
|
|
190
195
|
"minimum_free_gib": 25,
|
|
191
196
|
"schedule_minute": 20,
|
|
192
197
|
"scratch_repos": ["/root/enact-webview"],
|
|
193
|
-
"
|
|
198
|
+
"repo_location": "/root/workspace",
|
|
194
199
|
"brew_upgrade_all": true,
|
|
195
200
|
"surface_clis": [
|
|
196
|
-
{"name": "opencode", "manager": "
|
|
201
|
+
{"name": "opencode", "manager": "bun", "package": "opencode-ai", "command": "opencode"},
|
|
197
202
|
{"name": "kimi", "manager": "native", "command": "kimi", "update_args": ["upgrade"]}
|
|
198
203
|
],
|
|
199
204
|
"tools": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"properties": {
|
|
9
9
|
"config": {
|
|
10
10
|
"type": "object",
|
|
11
|
-
"required": ["schema", "repository", "branch", "interval_seconds", "update_policy", "allow_major_updates", "remove_deleted_entries", "global_surface_sweep", "kimi_hooks", "surface_policy", "global_agents", "vscode_settings", "scratch_reap", "
|
|
11
|
+
"required": ["schema", "repository", "branch", "interval_seconds", "update_policy", "allow_major_updates", "remove_deleted_entries", "global_surface_sweep", "kimi_hooks", "surface_policy", "global_agents", "vscode_settings", "repo_maintain", "scratch_reap", "brew_upgrade_exclude", "protected_tools", "git_global_config"],
|
|
12
12
|
"properties": {
|
|
13
13
|
"global_surface_sweep": {
|
|
14
14
|
"type": "object",
|
|
@@ -52,6 +52,15 @@
|
|
|
52
52
|
"enabled": {"const": true}
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
|
+
"repo_maintain": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"description": "The 12-hourly repository step (adl maintain). branch_max_age_days: local branches whose tip commit is older than this many days are deleted with a WARN line carrying the tip sha; integration/main/master/develop, the checked-out HEAD and any branch checked out in a worktree are never deleted.",
|
|
58
|
+
"additionalProperties": false,
|
|
59
|
+
"required": ["branch_max_age_days"],
|
|
60
|
+
"properties": {
|
|
61
|
+
"branch_max_age_days": {"type": "integer", "minimum": 1}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
55
64
|
"scratch_reap": {
|
|
56
65
|
"type": "object",
|
|
57
66
|
"description": "Reclaim scratch-worktree disk on the devices that declare scratch_repos. The regenerable-artifact tier is always on; remove_worktrees arms the destructive tier.",
|
|
@@ -64,30 +73,40 @@
|
|
|
64
73
|
"remove_worktrees": {"type": "boolean"}
|
|
65
74
|
}
|
|
66
75
|
},
|
|
67
|
-
"
|
|
68
|
-
"type": "
|
|
69
|
-
"description": "
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
}
|
|
76
|
+
"brew_upgrade_exclude": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"description": "Homebrew formulae and casks the automatic brew upgrade step never upgrades (an outdated excluded package is logged and skipped). Not a brew pin and not a version pin. git: every Homebrew git upgrade installs an ad-hoc-signed binary at a new Cellar path, which re-prompts the osxkeychain ACL.",
|
|
79
|
+
"uniqueItems": true,
|
|
80
|
+
"items": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9@._+/-]*$"}
|
|
81
|
+
},
|
|
82
|
+
"git_global_config": {"$ref": "#/$defs/git_global_config"}
|
|
73
83
|
}
|
|
74
84
|
},
|
|
75
|
-
"mac": {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
"mac": {"$ref": "#/$defs/platform"},
|
|
86
|
+
"linux": {"$ref": "#/$defs/platform"}
|
|
87
|
+
},
|
|
88
|
+
"$defs": {
|
|
89
|
+
"git_global_config": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"description": "Global git config entries set for the administrator by bin/git-defaults (reconcile). A value is a string (single-valued key) or an ordered array of strings (multi-valued key, e.g. the empty-reset-then-helper pattern of credential.helper): the key is rewritten with --unset-all then --add in order when the current values differ. Keys not declared here are never touched. The only placeholder is {git-credential-manager}, resolved at run time as the administrator; when it is not installed the key is skipped with a WARN. Platform common may add keys for that platform only.",
|
|
92
|
+
"propertyNames": {"pattern": "^[A-Za-z][A-Za-z0-9-]*\\..+"},
|
|
93
|
+
"additionalProperties": {
|
|
94
|
+
"oneOf": [
|
|
95
|
+
{"type": "string"},
|
|
96
|
+
{"type": "array", "minItems": 1, "items": {"type": "string"}}
|
|
97
|
+
]
|
|
80
98
|
}
|
|
81
99
|
},
|
|
82
|
-
"
|
|
83
|
-
"
|
|
100
|
+
"git_user": {
|
|
101
|
+
"type": "object",
|
|
102
|
+
"additionalProperties": false,
|
|
103
|
+
"required": ["name", "email"],
|
|
104
|
+
"description": "user.name and user.email set in the administrator's global git config on this device. Every device carries the same identity so the human git setup is identical on every host.",
|
|
84
105
|
"properties": {
|
|
85
|
-
"
|
|
86
|
-
"
|
|
106
|
+
"name": {"type": "string", "minLength": 1},
|
|
107
|
+
"email": {"type": "string", "minLength": 1}
|
|
87
108
|
}
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
"$defs": {
|
|
109
|
+
},
|
|
91
110
|
"tool": {
|
|
92
111
|
"type": "object",
|
|
93
112
|
"additionalProperties": false,
|
|
@@ -101,6 +120,7 @@
|
|
|
101
120
|
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
|
102
121
|
"archive_executable": {"type": "string", "pattern": "^[^/][^\\n]*$"},
|
|
103
122
|
"repo": {"type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$"},
|
|
123
|
+
"tap": {"type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$", "description": "brew only: tap (owner/repo) to ensure is tapped before install/upgrade — required for fully-qualified package names like stablyai/orca/orca, which Homebrew will not auto-tap. Declaring it also grants item-level brew trust (`brew trust --formula|--cask <package>`) per Homebrew ≥6 tap trust; the whole tap is never trusted."},
|
|
104
124
|
"asset": {"type": "string", "pattern": "^[^/][^\\n]*$"},
|
|
105
125
|
"checksums_asset": {"type": "string", "pattern": "^[^/][^\\n]*$"},
|
|
106
126
|
"source": {"type": "string", "pattern": "^[^/][^\\n]*$"},
|
|
@@ -157,14 +177,18 @@
|
|
|
157
177
|
"type": "object",
|
|
158
178
|
"additionalProperties": {"$ref": "#/$defs/tool"}
|
|
159
179
|
},
|
|
160
|
-
"relative_path": {"type": "string", "pattern": "^(?!/)(?!.*(^|/)\\.\\.(/|$)).+$"},
|
|
161
180
|
"surface_cli": {
|
|
162
181
|
"type": "object",
|
|
163
182
|
"additionalProperties": false,
|
|
164
183
|
"required": ["name", "manager"],
|
|
165
184
|
"properties": {
|
|
166
185
|
"name": {"type": "string", "minLength": 1},
|
|
167
|
-
"manager": {"enum": ["native", "npm", "brew", "unknown"]},
|
|
186
|
+
"manager": {"enum": ["native", "npm", "brew", "bun", "unknown"]},
|
|
187
|
+
"package": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"pattern": "^(@[a-z0-9][a-z0-9._-]*/)?[a-z0-9][a-z0-9._-]*$",
|
|
190
|
+
"description": "manager=bun only: the bare npm registry package, installed and updated with `bun add -g <package>@latest` as the device administrator. Never a version spec; versions are never pinned."
|
|
191
|
+
},
|
|
168
192
|
"command": {"type": "string", "minLength": 1, "pattern": "^[^/]+$"},
|
|
169
193
|
"executable": {"type": "string", "pattern": "^/"},
|
|
170
194
|
"update_args": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}},
|
|
@@ -174,7 +198,20 @@
|
|
|
174
198
|
{
|
|
175
199
|
"if": {"properties": {"report_only": {"const": true}}, "required": ["report_only"]},
|
|
176
200
|
"then": {"required": ["executable"]},
|
|
177
|
-
"else": {"required": ["command"
|
|
201
|
+
"else": {"required": ["command"]}
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"if": {"properties": {"manager": {"const": "bun"}}, "required": ["manager"]},
|
|
205
|
+
"then": {
|
|
206
|
+
"required": ["package", "command"],
|
|
207
|
+
"properties": {"report_only": {"const": false}},
|
|
208
|
+
"not": {"required": ["update_args"]}
|
|
209
|
+
},
|
|
210
|
+
"else": {
|
|
211
|
+
"not": {"required": ["package"]},
|
|
212
|
+
"if": {"properties": {"report_only": {"const": true}}, "required": ["report_only"]},
|
|
213
|
+
"else": {"required": ["update_args"]}
|
|
214
|
+
}
|
|
178
215
|
},
|
|
179
216
|
{
|
|
180
217
|
"if": {"properties": {"manager": {"const": "brew"}}, "required": ["manager"]},
|
|
@@ -197,49 +234,17 @@
|
|
|
197
234
|
}
|
|
198
235
|
]
|
|
199
236
|
},
|
|
200
|
-
"launch_agent": {
|
|
201
|
-
"type": "object",
|
|
202
|
-
"additionalProperties": false,
|
|
203
|
-
"required": ["label", "source", "entry", "start_interval_seconds", "run_at_load", "environment", "log"],
|
|
204
|
-
"properties": {
|
|
205
|
-
"label": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"},
|
|
206
|
-
"source": {"$ref": "#/$defs/relative_path", "description": "Checkout-relative job directory; reconcile compiles it to a dedicated signed binary, rebuilt when its content hash changes."},
|
|
207
|
-
"entry": {"$ref": "#/$defs/relative_path", "description": "TypeScript entry file relative to source."},
|
|
208
|
-
"start_interval_seconds": {"type": "integer", "minimum": 60},
|
|
209
|
-
"run_at_load": {"type": "boolean"},
|
|
210
|
-
"repo_scope": {
|
|
211
|
-
"type": "object",
|
|
212
|
-
"additionalProperties": false,
|
|
213
|
-
"required": ["root", "glob", "recursive"],
|
|
214
|
-
"properties": {
|
|
215
|
-
"root": {"$ref": "#/$defs/relative_path", "description": "Repository scan root relative to the device administrator's home."},
|
|
216
|
-
"glob": {"type": "string", "minLength": 1},
|
|
217
|
-
"recursive": {"const": true}
|
|
218
|
-
}
|
|
219
|
-
},
|
|
220
|
-
"environment": {
|
|
221
|
-
"type": "object",
|
|
222
|
-
"propertyNames": {"pattern": "^[A-Z_][A-Z0-9_]*$"},
|
|
223
|
-
"additionalProperties": {"type": "string"}
|
|
224
|
-
},
|
|
225
|
-
"log": {"$ref": "#/$defs/relative_path"},
|
|
226
|
-
"replaces": {"type": "array", "items": {"$ref": "#/$defs/relative_path"}}
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
"launch_agents": {
|
|
230
|
-
"description": "User LaunchAgents enact-vps installs for the device administrator (macOS only).",
|
|
231
|
-
"type": "object",
|
|
232
|
-
"additionalProperties": {"$ref": "#/$defs/launch_agent"}
|
|
233
|
-
},
|
|
234
237
|
"platform": {
|
|
235
238
|
"type": "object",
|
|
236
239
|
"required": ["common", "devices"],
|
|
237
240
|
"properties": {
|
|
238
241
|
"common": {
|
|
239
242
|
"type": "object",
|
|
243
|
+
"additionalProperties": false,
|
|
240
244
|
"required": ["tools"],
|
|
241
245
|
"properties": {
|
|
242
246
|
"os_upgrade": {"type": "boolean"},
|
|
247
|
+
"git_global_config": {"$ref": "#/$defs/git_global_config"},
|
|
243
248
|
"tools": {"$ref": "#/$defs/tools"}
|
|
244
249
|
}
|
|
245
250
|
},
|
|
@@ -248,7 +253,7 @@
|
|
|
248
253
|
"additionalProperties": {
|
|
249
254
|
"type": "object",
|
|
250
255
|
"additionalProperties": false,
|
|
251
|
-
"required": ["administrator", "default_agent", "home", "minimum_free_gib", "schedule_minute", "tools"],
|
|
256
|
+
"required": ["administrator", "default_agent", "git_user", "home", "minimum_free_gib", "schedule_minute", "tools"],
|
|
252
257
|
"properties": {
|
|
253
258
|
"administrator": {"type": "string", "minLength": 1},
|
|
254
259
|
"default_agent": {
|
|
@@ -256,6 +261,7 @@
|
|
|
256
261
|
"pattern": "^agent-[a-z0-9-]+$",
|
|
257
262
|
"description": "The adl identity a plain `claude`/`codex` session (no `adl run --as`) acts as on this device, and the identity host automation (sync-and-reconcile, scratch-reap) uses via git-ado. Written by reconcile to the machine's single default-agent file (docs/architecture/cli-design.md, 2026-09-27 decisions)."
|
|
258
263
|
},
|
|
264
|
+
"git_user": {"$ref": "#/$defs/git_user"},
|
|
259
265
|
"home": {"type": "string", "pattern": "^/"},
|
|
260
266
|
"minimum_free_gib": {"type": "integer", "minimum": 1},
|
|
261
267
|
"schedule_minute": {"type": "integer", "minimum": 0, "maximum": 59},
|
|
@@ -274,14 +280,10 @@
|
|
|
274
280
|
"items": {"type": "string", "pattern": "^/[^\\s]*[^/\\s]$"},
|
|
275
281
|
"uniqueItems": true
|
|
276
282
|
},
|
|
277
|
-
"
|
|
278
|
-
"type": "
|
|
279
|
-
"description": "
|
|
280
|
-
"
|
|
281
|
-
"type": "string",
|
|
282
|
-
"pattern": "^/(?!$)(?!.*\\s)(?!.*/$)(?!.*\\.\\.)(?!.*[aA][zZ][aA][gG][eE][nN][tT])(?!.*[vV][sS][tT][sS]\\.[aA][gG][eE][nN][tT]).+$"
|
|
283
|
-
},
|
|
284
|
-
"uniqueItems": true
|
|
283
|
+
"repo_location": {
|
|
284
|
+
"type": "string",
|
|
285
|
+
"description": "One absolute directory on this host. `adl reconcile` maintains (fetch --prune, fast-forward integration and main, safe branch prune, then `adl install --repo`) every IMMEDIATE child of it that carries adl-config.toml and is a git top-level, as the device administrator. It is the entire scope of that step: nothing outside it is scanned or touched, and a child that resolves outside it is refused. A missing or unreadable location fails the run; a host that declares none skips the step with a log line. The case-insensitive azagent/vsts.agent ban keeps it away from Azure Pipelines agent installs (JSON Schema `pattern` has no case-insensitive flag, so the classes are spelled out).",
|
|
286
|
+
"pattern": "^/(?!$)(?!.*\\s)(?!.*/$)(?!.*\\.\\.)(?!.*[aA][zZ][aA][gG][eE][nN][tT])(?!.*[vV][sS][tT][sS]\\.[aA][gG][eE][nN][tT]).+$"
|
|
285
287
|
},
|
|
286
288
|
"tools": {"$ref": "#/$defs/tools"}
|
|
287
289
|
}
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
* path computation every consumer of the READ side needs too
|
|
23
23
|
* (`defaultAgentFilePath`). The read itself lives in ONE place,
|
|
24
24
|
* `packages/azdo/src/lib/agent-identity.ts`'s `readDefaultAgentFile` /
|
|
25
|
-
* `resolveAgentIdentity`
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* `resolveAgentIdentity` — every reader in this repo, including this
|
|
26
|
+
* package's own scratch-reap.ts, goes through that module rather than
|
|
27
|
+
* duplicating the read here.
|
|
28
28
|
*
|
|
29
29
|
* `root` is an injectable filesystem root so tests can point every path here
|
|
30
30
|
* at a disposable directory instead of the real system path — a test must
|