@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.
- package/bin/adl +2 -2
- package/bin/git +16 -17
- package/bin/git-ado +25 -24
- 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/fleet-host.sh +8 -5
- package/bin/reconcile +482 -232
- package/bin/reconcile-host +30 -20
- package/bin/setup +20 -17
- package/bin/shell-path-policy +15 -5
- package/bin/sync-and-reconcile +62 -64
- package/bin/validate-manifest +33 -9
- package/package.json +2 -10
- package/packages/agent-hooks/README.md +14 -9
- package/packages/agent-hooks/assets/hooks.json +0 -20
- 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 +12 -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 +131 -0
- 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 +33 -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 +14 -16
- 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 +0 -2
- 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/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 +1 -3
- package/packages/azdo/scripts/probe-ado-rules.ts +311 -0
- 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 +44 -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-ladder.csv +241 -0
- package/packages/azdo/src/workflow-rules-matrix.csv +85 -0
- package/packages/azdo/src/workflow-rules.ts +194 -0
- package/packages/fleet/manifest.json +35 -11
- package/packages/fleet/manifest.schema.json +62 -10
- 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 +13 -13
- package/packages/fleet/src/managed-settings.ts +7 -7
- package/packages/fleet/src/repo-maintain.ts +91 -55
- package/packages/fleet/src/scratch-reap.ts +5 -5
- 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 +258 -2
- 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/plan_metadata.py +9 -4
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/check.py +1 -1
- 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
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/test_check.py +3 -3
- 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 -9
- 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/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.yaml
CHANGED
|
@@ -32,69 +32,6 @@
|
|
|
32
32
|
schema: adl.gate-profile/v1
|
|
33
33
|
rows:
|
|
34
34
|
|
|
35
|
-
# ---- coverage ----
|
|
36
|
-
- id: COV-001
|
|
37
|
-
name: backend-crate
|
|
38
|
-
domain: coverage
|
|
39
|
-
title: Run retained backend crate coverage gate
|
|
40
|
-
severity: M
|
|
41
|
-
controls:
|
|
42
|
-
- EC-A.8.29
|
|
43
|
-
engine:
|
|
44
|
-
scope:
|
|
45
|
-
- <rust>/**
|
|
46
|
-
grants: 0
|
|
47
|
-
timeout_ms: 60000
|
|
48
|
-
- id: COV-002
|
|
49
|
-
name: backend-ratchet
|
|
50
|
-
domain: coverage
|
|
51
|
-
title: Reject backend coverage decline below its ratchet
|
|
52
|
-
severity: H
|
|
53
|
-
controls:
|
|
54
|
-
- EC-A.8.28
|
|
55
|
-
engine:
|
|
56
|
-
scope:
|
|
57
|
-
- <rust>/**
|
|
58
|
-
grants: 0
|
|
59
|
-
timeout_ms: 60000
|
|
60
|
-
- id: COV-003
|
|
61
|
-
name: baseline
|
|
62
|
-
domain: coverage
|
|
63
|
-
title: Run retained coverage baseline gate
|
|
64
|
-
severity: M
|
|
65
|
-
controls:
|
|
66
|
-
- EC-A.8.29
|
|
67
|
-
engine:
|
|
68
|
-
scope:
|
|
69
|
-
- <rust>/**
|
|
70
|
-
grants: 0
|
|
71
|
-
timeout_ms: 60000
|
|
72
|
-
- id: COV-004
|
|
73
|
-
name: config-committed
|
|
74
|
-
domain: coverage
|
|
75
|
-
title: Require coverage ratchet data to be committed
|
|
76
|
-
severity: M
|
|
77
|
-
controls:
|
|
78
|
-
- EC-A.8.29
|
|
79
|
-
engine:
|
|
80
|
-
scope:
|
|
81
|
-
- <compliance>/policy/inputs/coverage-baseline.json
|
|
82
|
-
grants: 0
|
|
83
|
-
timeout_ms: 60000
|
|
84
|
-
- id: COV-005
|
|
85
|
-
name: full
|
|
86
|
-
domain: coverage
|
|
87
|
-
title: Run retained coverage gate
|
|
88
|
-
severity: M
|
|
89
|
-
controls:
|
|
90
|
-
- EC-A.8.29
|
|
91
|
-
engine:
|
|
92
|
-
scope:
|
|
93
|
-
- <rust>/**
|
|
94
|
-
- <compliance>/checks/coverage/full/coverage-modules.list
|
|
95
|
-
grants: 0
|
|
96
|
-
timeout_ms: 60000
|
|
97
|
-
|
|
98
35
|
# ---- docs ----
|
|
99
36
|
- id: DOC-001
|
|
100
37
|
name: adr-lifecycle
|
|
@@ -238,7 +175,7 @@ rows:
|
|
|
238
175
|
grants: 0
|
|
239
176
|
timeout_ms: 60000
|
|
240
177
|
|
|
241
|
-
# ----
|
|
178
|
+
# ---- docs (continued: indexes, ledger, closed-set) ----
|
|
242
179
|
- id: DOC-008
|
|
243
180
|
name: indexes
|
|
244
181
|
domain: docs
|
|
@@ -301,6 +238,104 @@ rows:
|
|
|
301
238
|
- '<docs>/**'
|
|
302
239
|
grants: 0
|
|
303
240
|
timeout_ms: 60000
|
|
241
|
+
- id: DOC-011
|
|
242
|
+
name: filename
|
|
243
|
+
domain: docs
|
|
244
|
+
title: Require docs/ Markdown stems to be lower-kebab
|
|
245
|
+
severity: M
|
|
246
|
+
controls:
|
|
247
|
+
- EC-A.5.37
|
|
248
|
+
engine:
|
|
249
|
+
# docs/ only. The plans tree is deliberately NOT here: its pages answer
|
|
250
|
+
# to the board (LAY-009 owns plans/ frontmatter) and a filename rule is
|
|
251
|
+
# no more able to grade them than a profile is.
|
|
252
|
+
#
|
|
253
|
+
# The scope below mirrors DOC-006 (docs.okf-profile) EXACTLY -- one
|
|
254
|
+
# tree, both docs/ content gates walking it -- with the rationale
|
|
255
|
+
# comments carried over, adjusted only where they were
|
|
256
|
+
# profile-specific:
|
|
257
|
+
scope:
|
|
258
|
+
- <docs>/**
|
|
259
|
+
# A holding area for work that is not yet a Feature on the board.
|
|
260
|
+
# DOC-006 excludes it from profiling by design; mirrored here so a
|
|
261
|
+
# page DOC-006 does not grade is not graded for its filename either.
|
|
262
|
+
- '!<docs>/proposals/**'
|
|
263
|
+
# DOC-006 has excluded compliance/ since 2026-09-15, pending a real
|
|
264
|
+
# compliance audit (its pages answer to audit metadata, not to a
|
|
265
|
+
# gate a writer can satisfy from the document). The exclusion is
|
|
266
|
+
# mirrored here unchanged.
|
|
267
|
+
- '!<docs>/compliance/**'
|
|
268
|
+
# Tree guides are not pages: AGENTS.md and CLAUDE.md say what
|
|
269
|
+
# belongs in a directory and are governed by layout.agents-layout.
|
|
270
|
+
# The check also exempts the two names by rule -- a name may not be
|
|
271
|
+
# lower-kebab and still be correct -- so these excludes are
|
|
272
|
+
# belt-and-braces over that exemption, mirroring DOC-006.
|
|
273
|
+
- '!<docs>/**/AGENTS.md'
|
|
274
|
+
- '!<docs>/AGENTS.md'
|
|
275
|
+
- '!<docs>/**/CLAUDE.md'
|
|
276
|
+
- '!<docs>/CLAUDE.md'
|
|
277
|
+
# A knowledge index is a catalog of a tree, not a page about the
|
|
278
|
+
# system (DOC-006's reasoning); its stem ("index") is
|
|
279
|
+
# kebab-conforming anyway, and the exclusion is mirrored so both
|
|
280
|
+
# gates walk the same tree.
|
|
281
|
+
- '!<docs>/**/index.md'
|
|
282
|
+
grants: 0
|
|
283
|
+
timeout_ms: 60000
|
|
284
|
+
- id: DOC-012
|
|
285
|
+
name: directory-size
|
|
286
|
+
domain: docs
|
|
287
|
+
title: Cap each docs/ directory's page count via the directory ratchet
|
|
288
|
+
severity: M
|
|
289
|
+
controls:
|
|
290
|
+
- EC-A.5.38
|
|
291
|
+
engine:
|
|
292
|
+
# docs/ only. The plans tree is deliberately NOT here: its pages answer
|
|
293
|
+
# to the board (LAY-009 owns plans/ frontmatter) and a page-count cap
|
|
294
|
+
# is no more able to grade them than a filename rule is.
|
|
295
|
+
#
|
|
296
|
+
# The cap is CONFIG, not register content (owner ruling 2026-10-02):
|
|
297
|
+
# it is the repository's declared
|
|
298
|
+
# [controls.compliance.limits].docs_pages_per_directory, arriving as
|
|
299
|
+
# the docs-pages-per-directory declaration; absent, the engine default
|
|
300
|
+
# of 15 stands. The LAY-004 directory-ratchet register holds ONLY
|
|
301
|
+
# per-directory exemption baselines (docs_pages.baseline): an entry
|
|
302
|
+
# exempts its directory up to the recorded count; an absent register or
|
|
303
|
+
# section means NO exemptions, so the cap is enforced bare. At zero
|
|
304
|
+
# exemptions the register file is deleted. docs/decisions/ is exempt by
|
|
305
|
+
# rule at any depth below it — the flat ADR log is flat-by-design, not
|
|
306
|
+
# an over-cap directory.
|
|
307
|
+
#
|
|
308
|
+
# The scope below mirrors DOC-006 (docs.okf-profile) EXACTLY -- one
|
|
309
|
+
# tree, all three docs/ content gates walking it -- with the rationale
|
|
310
|
+
# comments carried over, adjusted only where they were
|
|
311
|
+
# filename-specific:
|
|
312
|
+
scope:
|
|
313
|
+
- <docs>/**
|
|
314
|
+
# A holding area for work that is not yet a Feature on the board.
|
|
315
|
+
# DOC-006 excludes it from profiling by design; mirrored here so a
|
|
316
|
+
# page DOC-006 does not grade is not counted against the cap either.
|
|
317
|
+
- '!<docs>/proposals/**'
|
|
318
|
+
# DOC-006 has excluded compliance/ since 2026-09-15, pending a real
|
|
319
|
+
# compliance audit (its pages answer to audit metadata, not to a
|
|
320
|
+
# gate a writer can satisfy from the document). The exclusion is
|
|
321
|
+
# mirrored here unchanged.
|
|
322
|
+
- '!<docs>/compliance/**'
|
|
323
|
+
# Tree guides are not pages: AGENTS.md and CLAUDE.md say what
|
|
324
|
+
# belongs in a directory and are governed by layout.agents-layout.
|
|
325
|
+
# The check's rule-level exemption is decisions/ (the flat ADR log,
|
|
326
|
+
# flat-by-design) rather than these names, so these excludes are
|
|
327
|
+
# the whole of the guide story here, mirroring DOC-006.
|
|
328
|
+
- '!<docs>/**/AGENTS.md'
|
|
329
|
+
- '!<docs>/AGENTS.md'
|
|
330
|
+
- '!<docs>/**/CLAUDE.md'
|
|
331
|
+
- '!<docs>/CLAUDE.md'
|
|
332
|
+
# A knowledge index is a catalog of a tree, not a page about the
|
|
333
|
+
# system (DOC-006's reasoning); it does not count against the page
|
|
334
|
+
# cap either, and the exclusion is mirrored so the docs gates walk
|
|
335
|
+
# the same tree.
|
|
336
|
+
- '!<docs>/**/index.md'
|
|
337
|
+
grants: 0
|
|
338
|
+
timeout_ms: 60000
|
|
304
339
|
|
|
305
340
|
# ---- layout ----
|
|
306
341
|
- id: LAY-001
|
|
@@ -366,6 +401,14 @@ rows:
|
|
|
366
401
|
controls:
|
|
367
402
|
- EC-A.5.36
|
|
368
403
|
engine:
|
|
404
|
+
# The ceilings are CONFIG, not register content (generic ratchet
|
|
405
|
+
# principle, owner ruling 2026-10-02): they live in
|
|
406
|
+
# [controls.compliance.directory-ratchet].max_children and reach the
|
|
407
|
+
# engine as the directory-ceilings declaration. The LAY-004 register
|
|
408
|
+
# records exemption baselines only; an absent register means no
|
|
409
|
+
# exemptions allowed, so the ceilings are enforced bare. At zero
|
|
410
|
+
# recorded state the register file is deleted. No ceilings declared
|
|
411
|
+
# means nothing to enforce — the gate is inert.
|
|
369
412
|
scope:
|
|
370
413
|
- <typescript>/**
|
|
371
414
|
- <rust>/**
|
|
@@ -390,11 +433,16 @@ rows:
|
|
|
390
433
|
- '!**/Cargo.toml'
|
|
391
434
|
- '!**/build.rs'
|
|
392
435
|
- '!**/main.tf'
|
|
393
|
-
#
|
|
394
|
-
# (
|
|
395
|
-
#
|
|
396
|
-
#
|
|
397
|
-
#
|
|
436
|
+
# The ratchet register is a named INPUT of this gate, not a scope entry:
|
|
437
|
+
# it is the CONSUMER's own file (<compliance>/ratchets/
|
|
438
|
+
# LAY-004-over-limit-directory.yaml -- the estate's settled location for
|
|
439
|
+
# a consumer-owned ratchet number, see packages/repo-controls/src/
|
|
440
|
+
# config.ts), and <compliance> is not one of this row's scope trees, so
|
|
441
|
+
# editing the register does not select this gate -- the same known gap
|
|
442
|
+
# DOC-006's packaged profile register has. It shipped as package data
|
|
443
|
+
# once and graded one donor repository's shape against every other
|
|
444
|
+
# repository (K-42); the `inputs` entry and
|
|
445
|
+
# test_the_register_is_not_packaged_data guard that return.
|
|
398
446
|
# Tree-scoped only. Every verdict is a directory's DIRECT FILE COUNT, which
|
|
399
447
|
# is only knowable by listing all of that directory's children: on a diff
|
|
400
448
|
# scope DIR-002 can never fire and DIR-001's single-file rule misfires on
|
|
@@ -404,7 +452,8 @@ rows:
|
|
|
404
452
|
# removes. `full` (`selects: all-rows`) picks this row up regardless.
|
|
405
453
|
# Not an exception catalogue: `structural_grant = True` on the check
|
|
406
454
|
# already forces the allowance to 0 regardless of this field. The ratchet
|
|
407
|
-
# register itself is
|
|
455
|
+
# register itself is the consumer's own file, reached through the check's
|
|
456
|
+
# named `inputs`, not package data (see check.py).
|
|
408
457
|
grants: 0
|
|
409
458
|
timeout_ms: 60000
|
|
410
459
|
- id: LAY-006
|
|
@@ -466,25 +515,6 @@ rows:
|
|
|
466
515
|
- <plans>/**
|
|
467
516
|
grants: 0
|
|
468
517
|
timeout_ms: 60000
|
|
469
|
-
- id: LAY-010
|
|
470
|
-
name: profile-data
|
|
471
|
-
domain: layout
|
|
472
|
-
title: Enforce data-backed layout profile predicates
|
|
473
|
-
severity: M
|
|
474
|
-
controls:
|
|
475
|
-
- EC-A.5.36
|
|
476
|
-
engine:
|
|
477
|
-
# The two `*.md` globs are removed. They are residue from the multi-mode
|
|
478
|
-
# profile-data.sh this engine was split out of: its `layout.markdown-trees`
|
|
479
|
-
# branch read Markdown, and that branch now lives in its own gate
|
|
480
|
-
# (check-markdown-tree-location.sh) with its own row. This engine reads
|
|
481
|
-
# PostgreSQL migrations and nothing else, so the globs only made every
|
|
482
|
-
# documentation change schedule a gate with nothing to say. A stale scope
|
|
483
|
-
# is a silent pass in one direction and dead work in the other (K-17).
|
|
484
|
-
scope:
|
|
485
|
-
- <rust>/crates/**
|
|
486
|
-
grants: 0
|
|
487
|
-
timeout_ms: 60000
|
|
488
518
|
- id: LAY-011
|
|
489
519
|
name: references
|
|
490
520
|
domain: layout
|
|
@@ -592,7 +622,7 @@ rows:
|
|
|
592
622
|
- id: LAY-016
|
|
593
623
|
name: open-work-cap
|
|
594
624
|
domain: layout
|
|
595
|
-
title:
|
|
625
|
+
title: Cap open plans and open gaps at ten
|
|
596
626
|
severity: M
|
|
597
627
|
controls:
|
|
598
628
|
- EC-A.5.36
|
|
@@ -613,14 +643,16 @@ rows:
|
|
|
613
643
|
engine:
|
|
614
644
|
scope:
|
|
615
645
|
- '**'
|
|
616
|
-
#
|
|
617
|
-
#
|
|
618
|
-
#
|
|
619
|
-
#
|
|
646
|
+
# LFS-001's own test cases are generated at test time under tmp_path
|
|
647
|
+
# (the committed LFS fixtures were retired 2026-10-01), so this gate no
|
|
648
|
+
# longer commits oversized binaries. The `!**/fixtures/**` exclusion
|
|
649
|
+
# remains because OTHER gates still commit fixtures, and fixture data
|
|
650
|
+
# is test input, not repository content to grade.
|
|
620
651
|
- '!**/fixtures/**'
|
|
621
652
|
grants: 0
|
|
622
653
|
timeout_ms: 60000
|
|
623
654
|
|
|
655
|
+
# ---- pipeline ----
|
|
624
656
|
- id: PIP-004
|
|
625
657
|
name: phase-disjoint
|
|
626
658
|
domain: pipeline
|
|
@@ -675,6 +707,13 @@ rows:
|
|
|
675
707
|
- EC-A.5.21
|
|
676
708
|
engine:
|
|
677
709
|
scope:
|
|
710
|
+
# The tree-derived DEFAULT: each half is exactly two entries under its own
|
|
711
|
+
# tree. A repository whose manifests do not sit one level under its tree
|
|
712
|
+
# (enact-combined: a brace-union `typescript` tree, manifests at the root and
|
|
713
|
+
# under apps/*/) states the paths itself with `[controls.compliance.lockfiles]`
|
|
714
|
+
# (`bun-manifests`/`bun-lockfiles`, `cargo-manifests`/`cargo-lockfiles`); a
|
|
715
|
+
# declared half REPLACES that half's two entries, in the scope and in what the
|
|
716
|
+
# check grades. See `LockfileIntegrity.declared_scope`.
|
|
678
717
|
- <rust>/Cargo.toml
|
|
679
718
|
- <rust>/Cargo.lock
|
|
680
719
|
- <typescript>/package.json
|
|
@@ -736,56 +775,3 @@ rows:
|
|
|
736
775
|
- '**'
|
|
737
776
|
grants: 0
|
|
738
777
|
timeout_ms: 60000
|
|
739
|
-
- id: REL-001
|
|
740
|
-
name: changeset-plan
|
|
741
|
-
domain: release
|
|
742
|
-
title: Run retained changeset-plan gate
|
|
743
|
-
severity: M
|
|
744
|
-
controls:
|
|
745
|
-
- EC-A.8.32
|
|
746
|
-
engine:
|
|
747
|
-
scope:
|
|
748
|
-
# The gate's own "release-relevant" case list, which is six paths, not
|
|
749
|
-
# one tree. `.changeset/**` alone understated it by five: while the gate
|
|
750
|
-
# resolved its own diff those five were still tested, so the row and the
|
|
751
|
-
# code disagreed and the code won. Now the row is the narrowing, so a
|
|
752
|
-
# missing entry here is a file the gate can no longer see.
|
|
753
|
-
- .changeset/**
|
|
754
|
-
- VERSION
|
|
755
|
-
- CHANGELOG.md
|
|
756
|
-
- <workflows>/package.json
|
|
757
|
-
- <workflows>/changesets/package.json
|
|
758
|
-
- <workflows>/changesets/bun.lock
|
|
759
|
-
grants: 0
|
|
760
|
-
timeout_ms: 60000
|
|
761
|
-
- id: REL-004
|
|
762
|
-
name: version-release
|
|
763
|
-
domain: release
|
|
764
|
-
title: Run retained version-release gate
|
|
765
|
-
severity: M
|
|
766
|
-
controls:
|
|
767
|
-
- EC-A.8.32
|
|
768
|
-
engine:
|
|
769
|
-
scope:
|
|
770
|
-
# The FOUR files check.sh actually reads: VERSION and CHANGELOG.md
|
|
771
|
-
# directly, plus the two entries in its `versioned_files` array. The
|
|
772
|
-
# prior brace-glob form, `{VERSION,CHANGELOG.md,backend/Cargo.toml,
|
|
773
|
-
# frontend/package.json,.changeset}/**`, appended `/**` after each
|
|
774
|
-
# FILE name -- `_glob_bash_pattern` in lib/glob.sh requires a literal
|
|
775
|
-
# "/" then more characters after the alternation, which a bare file
|
|
776
|
-
# never has, so the pattern matched none of VERSION, CHANGELOG.md,
|
|
777
|
-
# backend/Cargo.toml or frontend/package.json and only `.changeset/**`
|
|
778
|
-
# ever selected this row (K-13: a positive glob matching nothing
|
|
779
|
-
# excludes everything). backend/Cargo.toml (0.1.52) and
|
|
780
|
-
# frontend/package.json (2.1.41) carry their own independent
|
|
781
|
-
# versioning, not the release VERSION (0.0.11) -- check.sh does not
|
|
782
|
-
# read either, so they are not restored here; adding them would
|
|
783
|
-
# trigger this gate for two files it has no logic to grade.
|
|
784
|
-
- VERSION
|
|
785
|
-
- CHANGELOG.md
|
|
786
|
-
- <workflows>/package.json
|
|
787
|
-
- <workflows>/changesets/package.json
|
|
788
|
-
grants: 0
|
|
789
|
-
timeout_ms: 60000
|
|
790
|
-
|
|
791
|
-
# ---- rust ----
|
|
@@ -27,7 +27,7 @@ from ..core.constants import Constants
|
|
|
27
27
|
from ..core.finding import Severity
|
|
28
28
|
from ..core.models import StrictModel
|
|
29
29
|
from ..core.errors import CouldNotRun
|
|
30
|
-
from .config import PLACEHOLDER,
|
|
30
|
+
from .config import PLACEHOLDER, expand
|
|
31
31
|
from collections.abc import Mapping
|
|
32
32
|
|
|
33
33
|
from .config import load as load_tree_map
|
package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/root_shape.py
CHANGED
|
@@ -21,10 +21,27 @@ choice — none can be moved into an owning tree without breaking the tool that
|
|
|
21
21
|
reads them. The same is true of `pyproject.toml` for Python and `Cargo.toml`
|
|
22
22
|
for Rust. A repository using none of a section simply never matches its
|
|
23
23
|
entries; an entry that permits an absent file costs nothing.
|
|
24
|
+
|
|
25
|
+
**Non-standard entries are declared per repository, not listed here.** The sets
|
|
26
|
+
below hold only what is standard across repositories. A repository that keeps
|
|
27
|
+
something else at its root — a `STATUS.md` register, an `apps/` tree — declares
|
|
28
|
+
it in its own `adl-config.toml` under `[controls.compliance.root]` (`files` and
|
|
29
|
+
`dirs`). That arrives in the engine as the `root-files` and `root-dirs`
|
|
30
|
+
declarations (comma-separated), and `allowed_root_files` / `allowed_root_dirs`
|
|
31
|
+
return the central set UNION those names. The gates compute the effective set at
|
|
32
|
+
grade time from `Context.declarations`; the module-level sets stay the central
|
|
33
|
+
defaults and are never mutated.
|
|
24
34
|
"""
|
|
25
35
|
|
|
26
36
|
from __future__ import annotations
|
|
27
37
|
|
|
38
|
+
from collections.abc import Mapping
|
|
39
|
+
|
|
40
|
+
# The `Context.declarations` keys a repository's `[controls.compliance.root]`
|
|
41
|
+
# table is sent under (`--declare root-files=a,b` / `--declare root-dirs=x,y`).
|
|
42
|
+
ROOT_FILES_DECLARATION = "root-files"
|
|
43
|
+
ROOT_DIRS_DECLARATION = "root-dirs"
|
|
44
|
+
|
|
28
45
|
# ── Files ─────────────────────────────────────────────────────────────────────
|
|
29
46
|
|
|
30
47
|
VCS_AND_META: frozenset[str] = frozenset({
|
|
@@ -63,14 +80,12 @@ GOVERNANCE: frozenset[str] = frozenset({
|
|
|
63
80
|
# Registers read by whoever picks the work up next. They sit at the root
|
|
64
81
|
# because that is where someone arriving at the repository looks.
|
|
65
82
|
#
|
|
66
|
-
#
|
|
67
|
-
#
|
|
68
|
-
#
|
|
83
|
+
# Only the standard ones. A repository's own registers (a STATUS.md, a DRIFT.md)
|
|
84
|
+
# are not standard: it declares them under `[controls.compliance.root] files`.
|
|
85
|
+
# (Tarun, 2026-10-01 — reverses the 2026-09-27 central listing.)
|
|
69
86
|
REGISTERS: frozenset[str] = frozenset({
|
|
70
87
|
"GAPS-AND-FINDINGS.md",
|
|
71
88
|
"OPEN-ITEMS.md",
|
|
72
|
-
"STATUS.md",
|
|
73
|
-
"DRIFT.md",
|
|
74
89
|
})
|
|
75
90
|
|
|
76
91
|
NODE_TOOLCHAIN: frozenset[str] = frozenset({
|
|
@@ -140,6 +155,10 @@ PROJECT_CONFIG: frozenset[str] = frozenset({
|
|
|
140
155
|
"docker-compose.yml",
|
|
141
156
|
"drizzle.config.ts",
|
|
142
157
|
"adl-config.toml",
|
|
158
|
+
# An adl-controlled Enact repository carries BOTH config files at its root,
|
|
159
|
+
# permanently (Tarun, 2026-10-01: "there will be both"). Built in here so no
|
|
160
|
+
# repository declares it by hand under `[controls.compliance.root] files`.
|
|
161
|
+
"enact-config.toml",
|
|
143
162
|
"justfile",
|
|
144
163
|
})
|
|
145
164
|
|
|
@@ -184,12 +203,10 @@ KNOWLEDGE_TREES: frozenset[str] = frozenset({
|
|
|
184
203
|
"specs",
|
|
185
204
|
})
|
|
186
205
|
|
|
206
|
+
# Only the standard source trees. `apps/` and `packaging/` are not standard — a
|
|
207
|
+
# repository that has them declares them under `[controls.compliance.root] dirs`.
|
|
208
|
+
# (Tarun, 2026-10-01 — reverses the 2026-09-27 central listing.)
|
|
187
209
|
SOURCE_TREES: frozenset[str] = frozenset({
|
|
188
|
-
# `apps/` (deployables) and `packaging/` are sanctioned root directories in
|
|
189
|
-
# the Enact monorepo layout this repository follows — the Enact monorepo
|
|
190
|
-
# itself carries both. (Tarun, 2026-09-27.)
|
|
191
|
-
"apps",
|
|
192
|
-
"packaging",
|
|
193
210
|
"backend",
|
|
194
211
|
"compliance",
|
|
195
212
|
"docker",
|
|
@@ -248,3 +265,28 @@ ALLOWED_ROOT_DIRS: frozenset[str] = (
|
|
|
248
265
|
# deliberately tiny: this package installs into repositories whose shape it does
|
|
249
266
|
# not know, and every entry here is a demand made of all of them.
|
|
250
267
|
REQUIRED_ROOT_FILES: frozenset[str] = frozenset({"AGENTS.md"})
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# ── Per-repository declarations ───────────────────────────────────────────────
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def declared_root_names(declarations: Mapping[str, str], key: str) -> frozenset[str]:
|
|
274
|
+
"""The names a repository declared under `key` — a comma-separated string.
|
|
275
|
+
|
|
276
|
+
Whitespace around a name is stripped and empty entries are dropped, so
|
|
277
|
+
`" a, ,b,"` is `{"a", "b"}`. An absent key is the empty set, never an error:
|
|
278
|
+
a repository that declares nothing is graded against the central set alone.
|
|
279
|
+
"""
|
|
280
|
+
return frozenset(
|
|
281
|
+
name for name in (part.strip() for part in declarations.get(key, "").split(",")) if name
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def allowed_root_files(declarations: Mapping[str, str]) -> frozenset[str]:
|
|
286
|
+
"""Root files permitted for THIS repository: the central set plus `root-files`."""
|
|
287
|
+
return ALLOWED_ROOT_FILES | declared_root_names(declarations, ROOT_FILES_DECLARATION)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def allowed_root_dirs(declarations: Mapping[str, str]) -> frozenset[str]:
|
|
291
|
+
"""Root directories permitted for THIS repository: the central set plus `root-dirs`."""
|
|
292
|
+
return ALLOWED_ROOT_DIRS | declared_root_names(declarations, ROOT_DIRS_DECLARATION)
|
|
@@ -143,12 +143,20 @@ def applicable_files(
|
|
|
143
143
|
exhaustive: bool,
|
|
144
144
|
universe: Iterable[str] | None,
|
|
145
145
|
trees: Mapping[str, str] | None,
|
|
146
|
+
restated: tuple[str, ...] | None = None,
|
|
146
147
|
) -> FileSet:
|
|
147
|
-
"""Resolve one row's scope once, for both ordinary and batched execution.
|
|
148
|
+
"""Resolve one row's scope once, for both ordinary and batched execution.
|
|
149
|
+
|
|
150
|
+
`restated` is the raw scope a check built from the repository's declarations
|
|
151
|
+
(`Check.declared_scope`), replacing the row's own; it is expanded and has its
|
|
152
|
+
absent trees dropped exactly like the registry's, and it is graded whole.
|
|
153
|
+
"""
|
|
154
|
+
raw_scope = row.engine.scope if restated is None else restated
|
|
155
|
+
whole_scope = check.whole_scope or restated is not None
|
|
148
156
|
try:
|
|
149
157
|
patterns = tuple(
|
|
150
158
|
expand(pattern, trees)
|
|
151
|
-
for pattern in
|
|
159
|
+
for pattern in raw_scope
|
|
152
160
|
if not absent(pattern, trees)
|
|
153
161
|
)
|
|
154
162
|
except TreeMapError as exc:
|
|
@@ -166,7 +174,7 @@ def applicable_files(
|
|
|
166
174
|
"a scope selecting nothing is could-not-run, never a clean pass"
|
|
167
175
|
)
|
|
168
176
|
|
|
169
|
-
if not
|
|
177
|
+
if not whole_scope or not narrowed:
|
|
170
178
|
return narrowed
|
|
171
179
|
if universe is None:
|
|
172
180
|
if not exhaustive:
|
|
@@ -292,6 +300,7 @@ def run(
|
|
|
292
300
|
trees: Mapping[str, str] | None = None,
|
|
293
301
|
declared_trees: Mapping[str, str] | None = None,
|
|
294
302
|
batch_results: Mapping[str, BatchResult] | None = None,
|
|
303
|
+
committed_sizes: Mapping[str, int] | None = None,
|
|
295
304
|
) -> Verdict:
|
|
296
305
|
"""Grade one row.
|
|
297
306
|
|
|
@@ -303,6 +312,9 @@ def run(
|
|
|
303
312
|
`universe` is the complete Git-visible tree supplied alongside a narrowed
|
|
304
313
|
set for checks declaring `whole_scope`; without it, a triggered such check
|
|
305
314
|
is could-not-run rather than counting a partial tree.
|
|
315
|
+
`committed_sizes` is path -> size of the blob Git stores, measured by the CLI
|
|
316
|
+
(the only caller of git) and carried into `Context` for a check that reads it;
|
|
317
|
+
a path absent from it has no committed fact and is graded by the worktree.
|
|
306
318
|
"""
|
|
307
319
|
try:
|
|
308
320
|
check_class = lookup(row.id)
|
|
@@ -310,6 +322,11 @@ def run(
|
|
|
310
322
|
return could_not_run(row, f"no check implements {row.id}")
|
|
311
323
|
|
|
312
324
|
try:
|
|
325
|
+
# A check may restate its scope from what the repository declares; the
|
|
326
|
+
# default answers `None` and the registry's scope stands. Asked here,
|
|
327
|
+
# inside the same guard, so a malformed declaration is the row's
|
|
328
|
+
# could-not-run verdict.
|
|
329
|
+
restated = check_class.declared_scope(row.engine.scope, declarations or {})
|
|
313
330
|
narrowed = applicable_files(
|
|
314
331
|
row,
|
|
315
332
|
check_class,
|
|
@@ -317,11 +334,12 @@ def run(
|
|
|
317
334
|
exhaustive=exhaustive,
|
|
318
335
|
universe=universe,
|
|
319
336
|
trees=trees,
|
|
337
|
+
restated=restated,
|
|
320
338
|
)
|
|
321
339
|
except CouldNotRun as exc:
|
|
322
340
|
return could_not_run(row, str(exc))
|
|
323
341
|
|
|
324
|
-
if check_class.whole_scope and not narrowed:
|
|
342
|
+
if (check_class.whole_scope or restated is not None) and not narrowed:
|
|
325
343
|
return decide(row, (), (), ())
|
|
326
344
|
|
|
327
345
|
missing = [tool for tool in check_class.requires if shutil.which(tool) is None]
|
|
@@ -347,6 +365,7 @@ def run(
|
|
|
347
365
|
root=root, row=row,
|
|
348
366
|
inputs=resolve_inputs(check_class, root, inputs, stack, trees, declared_trees),
|
|
349
367
|
declarations=dict(declarations or {}),
|
|
368
|
+
committed_sizes=dict(committed_sizes or {}),
|
|
350
369
|
batch_reports=batch.reports if batch is not None else None,
|
|
351
370
|
batch_error=batch.error if batch is not None else None,
|
|
352
371
|
)
|
|
@@ -14,19 +14,12 @@
|
|
|
14
14
|
"scripts": {
|
|
15
15
|
"typecheck": "tsc --noEmit",
|
|
16
16
|
"test": "bun test tests --coverage --timeout 30000",
|
|
17
|
-
"check": "tsc --noEmit && bun test tests --coverage --timeout 30000"
|
|
18
|
-
"coverage:ratchet": "bun workflows/scripts/coverage/ci-ratchet.ts",
|
|
19
|
-
"coverage:produce": "bun test tests --coverage --timeout 30000 && bun workflows/scripts/coverage/command.ts"
|
|
17
|
+
"check": "tsc --noEmit && bun test tests --coverage --timeout 30000"
|
|
20
18
|
},
|
|
21
19
|
"dependencies": {
|
|
22
|
-
"@tailwindcss/node": "4.2.1",
|
|
23
|
-
"istanbul-lib-coverage": "3.2.2",
|
|
24
|
-
"svelte": "5.38.10",
|
|
25
|
-
"tailwindcss": "4.1.11",
|
|
26
20
|
"typescript": "5.9.3"
|
|
27
21
|
},
|
|
28
22
|
"devDependencies": {
|
|
29
|
-
"@types/bun": "1.4.2"
|
|
30
|
-
"@types/istanbul-lib-coverage": "2.0.6"
|
|
23
|
+
"@types/bun": "1.4.2"
|
|
31
24
|
}
|
|
32
25
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Records the activity/deny log row, like every other bundled hook. The Git LFS
|
|
3
|
+
# chaining for this hook (git-lfs installs a post-merge) runs in TypeScript, in
|
|
4
|
+
# src/hook.ts's `runHook` via src/lfs.ts -- the credential environment git
|
|
5
|
+
# handed the hook only exists there; see src/lfs.ts's header.
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || exit 0
|
|
9
|
+
cd "$ROOT"
|
|
10
|
+
|
|
11
|
+
# shellcheck source=lib/hook-log.sh
|
|
12
|
+
. "$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)/lib/hook-log.sh"
|
|
13
|
+
hook_log_init post-merge "$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo HEAD)"
|
|
@@ -88,9 +88,9 @@ while IFS= read -r git_variable; do
|
|
|
88
88
|
unset "$git_variable"
|
|
89
89
|
done < <(git rev-parse --local-env-vars)
|
|
90
90
|
|
|
91
|
-
#
|
|
92
|
-
# command-scoped config environment. The parent Git process
|
|
93
|
-
#
|
|
91
|
+
# azdo-push injects no credential (git-ado is the one boundary), but a caller's
|
|
92
|
+
# command-scoped Git config environment may still be set. The parent Git process
|
|
93
|
+
# keeps it for the push; checks launched by this hook must never inherit it.
|
|
94
94
|
if [[ "$git_config_count" =~ ^[0-9]+$ ]]; then
|
|
95
95
|
for ((index = 0; index < git_config_count; index++)); do
|
|
96
96
|
unset "GIT_CONFIG_KEY_${index}" "GIT_CONFIG_VALUE_${index}"
|