@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
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
-
# Stage
|
|
5
|
-
#
|
|
6
|
-
#
|
|
4
|
+
# Stage 1 of the CI pipeline for pull requests into `integration` (stage 2
|
|
5
|
+
# runs the tests). It forces the PR author, usually an agent, to reconcile with
|
|
6
|
+
# integration before anything merges:
|
|
7
7
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
8
|
+
# the PR source branch contains integration's tip
|
|
9
|
+
#
|
|
10
|
+
# That is the only check. The version bump is not a PR concern any more: the
|
|
11
|
+
# integration-merge pipeline bumps after the merge (Tarun, 2026-10-01).
|
|
10
12
|
#
|
|
11
13
|
# Read-only: this script only fetches and reads. It never pushes, and the only
|
|
12
14
|
# refs it writes are the two remote-tracking refs it fetches.
|
|
13
|
-
#
|
|
14
|
-
# Run from the package directory (like version-bump.sh); the manifest is
|
|
15
|
-
# resolved repo-relative through `git rev-parse --show-prefix`.
|
|
16
15
|
|
|
17
16
|
# CI never carries an agent identity. Never set one here, and never inherit
|
|
18
17
|
# one from the caller.
|
|
@@ -23,17 +22,11 @@ die() {
|
|
|
23
22
|
exit 1
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
version_file=''
|
|
27
25
|
pr_source=''
|
|
28
26
|
base=''
|
|
29
27
|
|
|
30
28
|
while [[ $# -gt 0 ]]; do
|
|
31
29
|
case "$1" in
|
|
32
|
-
--file)
|
|
33
|
-
[[ $# -ge 2 ]] || die '--file requires a path'
|
|
34
|
-
version_file="$2"
|
|
35
|
-
shift 2
|
|
36
|
-
;;
|
|
37
30
|
--pr-source)
|
|
38
31
|
[[ $# -ge 2 ]] || die '--pr-source requires a branch'
|
|
39
32
|
pr_source="$2"
|
|
@@ -50,8 +43,6 @@ while [[ $# -gt 0 ]]; do
|
|
|
50
43
|
esac
|
|
51
44
|
done
|
|
52
45
|
|
|
53
|
-
[[ -n "$version_file" ]] || die '--file is required'
|
|
54
|
-
[[ "$version_file" == 'package.json' ]] || die 'only --file package.json is supported'
|
|
55
46
|
[[ -n "$pr_source" ]] || die '--pr-source is required'
|
|
56
47
|
[[ -n "$base" ]] || die '--base is required'
|
|
57
48
|
|
|
@@ -66,8 +57,7 @@ case "$branch" in
|
|
|
66
57
|
;;
|
|
67
58
|
esac
|
|
68
59
|
|
|
69
|
-
|
|
70
|
-
manifest_path="${prefix}${version_file}"
|
|
60
|
+
git rev-parse --show-prefix > /dev/null || die 'not inside a git work tree'
|
|
71
61
|
|
|
72
62
|
base_ref="refs/remotes/origin/$base"
|
|
73
63
|
branch_ref="refs/remotes/origin/$branch"
|
|
@@ -79,35 +69,9 @@ base_short="$(git rev-parse --short "$base_ref")" || die "cannot resolve $base_r
|
|
|
79
69
|
|
|
80
70
|
if ! git merge-base --is-ancestor "$base_ref" "$branch_ref"; then
|
|
81
71
|
missing="$(git rev-list --count "$branch_ref..$base_ref")"
|
|
82
|
-
echo "reconcile-guard: FAIL — $branch does not contain integration's tip ($base_short)
|
|
72
|
+
echo "reconcile-guard: FAIL — $branch does not contain integration's tip ($base_short) — reconcile: git pull origin integration, then push" >&2
|
|
83
73
|
echo "reconcile-guard: $missing integration commit(s) missing from $branch" >&2
|
|
84
74
|
exit 1
|
|
85
75
|
fi
|
|
86
76
|
|
|
87
|
-
|
|
88
|
-
local ref="$1" text
|
|
89
|
-
text="$(git show "$ref:$manifest_path")" || die "cannot read $manifest_path at $ref"
|
|
90
|
-
printf '%s' "$text" | node -e '
|
|
91
|
-
const version = JSON.parse(require("node:fs").readFileSync(0, "utf8")).version
|
|
92
|
-
if (typeof version !== "string") process.exit(1)
|
|
93
|
-
process.stdout.write(version)
|
|
94
|
-
' || die "cannot read a string version from $manifest_path at $ref"
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
parse_version() {
|
|
98
|
-
[[ "$1" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]] || die "cannot parse '$1' as a release version x.y.z"
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
base_version="$(read_version "$base_ref")"
|
|
102
|
-
branch_version="$(read_version "$branch_ref")"
|
|
103
|
-
|
|
104
|
-
parse_version "$base_version"
|
|
105
|
-
target="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.$((BASH_REMATCH[3] + 1))"
|
|
106
|
-
parse_version "$branch_version"
|
|
107
|
-
|
|
108
|
-
if [[ "$branch_version" != "$target" ]]; then
|
|
109
|
-
echo "reconcile-guard: FAIL — $branch version $branch_version is not integration $base_version + 1 patch ($target). Stage 1 bumps it; re-run the PR build after reconciling." >&2
|
|
110
|
-
exit 1
|
|
111
|
-
fi
|
|
112
|
-
|
|
113
|
-
echo "reconcile-guard: PASS — $branch contains integration $base_short and is at $target"
|
|
77
|
+
echo "reconcile-guard: PASS — $branch contains integration $base_short"
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
-
# STAGE 1 of the
|
|
5
|
-
# version allocation
|
|
6
|
-
#
|
|
7
|
-
#
|
|
4
|
+
# STAGE 1 of the promote pipeline (push to `integration`): the integration-merge
|
|
5
|
+
# build owns package version allocation (Tarun, 2026-10-01 -- a PR's
|
|
6
|
+
# build-validation policy ignores `[skip ci]`, so a bump pushed from PR CI
|
|
7
|
+
# re-queued itself; a push to a branch honours it). After a merge lands on
|
|
8
|
+
# `integration` this sets the manifest to that commit's version + patch 1:
|
|
8
9
|
#
|
|
9
|
-
# version-bump.sh --file package.json --
|
|
10
|
-
# --base integration --push
|
|
10
|
+
# version-bump.sh --file package.json --integration --push
|
|
11
11
|
#
|
|
12
|
-
# The Azure Pipelines
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
12
|
+
# The Azure Pipelines build checks out the detached commit that triggered the
|
|
13
|
+
# run with persisted credentials, so `git push` authenticates as the project
|
|
14
|
+
# build service (which needs Contribute + "Bypass policies when pushing" on
|
|
15
|
+
# `integration`). The bump commit is created on that checkout, carries
|
|
16
|
+
# `[skip ci]` so the push does not trigger this pipeline again, and is pushed
|
|
17
|
+
# with a plain fast-forward -- never forced. If integration moved since the
|
|
18
|
+
# checkout the push is rejected and the script fails loud; the newer merge's
|
|
19
|
+
# own run bumps. No npm query, no PR.
|
|
20
20
|
|
|
21
21
|
# CI never carries an agent identity: the push below authenticates as the
|
|
22
22
|
# project build service through the checkout's persisted System.AccessToken.
|
|
@@ -29,8 +29,7 @@ die() {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
version_file=''
|
|
32
|
-
|
|
33
|
-
base_branch=''
|
|
32
|
+
integration_mode=false
|
|
34
33
|
push_bump=false
|
|
35
34
|
|
|
36
35
|
while [[ $# -gt 0 ]]; do
|
|
@@ -40,15 +39,9 @@ while [[ $# -gt 0 ]]; do
|
|
|
40
39
|
version_file="$2"
|
|
41
40
|
shift 2
|
|
42
41
|
;;
|
|
43
|
-
--
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
shift 2
|
|
47
|
-
;;
|
|
48
|
-
--base)
|
|
49
|
-
[[ $# -ge 2 ]] || die '--base requires a branch name'
|
|
50
|
-
base_branch="$2"
|
|
51
|
-
shift 2
|
|
42
|
+
--integration)
|
|
43
|
+
integration_mode=true
|
|
44
|
+
shift
|
|
52
45
|
;;
|
|
53
46
|
--push)
|
|
54
47
|
push_bump=true
|
|
@@ -60,52 +53,14 @@ while [[ $# -gt 0 ]]; do
|
|
|
60
53
|
esac
|
|
61
54
|
done
|
|
62
55
|
|
|
56
|
+
[[ -n "$version_file" ]] || die '--file is required'
|
|
63
57
|
[[ "$version_file" == 'package.json' ]] || die 'only --file package.json is supported'
|
|
64
|
-
[[
|
|
65
|
-
[[ -n "$base_branch" ]] || die '--base is required'
|
|
58
|
+
[[ "$integration_mode" == true ]] || die '--integration is required'
|
|
66
59
|
[[ "$push_bump" == true ]] || die '--push is required'
|
|
67
60
|
|
|
68
|
-
# Accept `refs/heads/x` (Build.SourceBranch / System.PullRequest.SourceBranch)
|
|
69
|
-
# or a bare `x`; anything else under refs/ is not a branch.
|
|
70
|
-
source_branch="${pr_source#refs/heads/}"
|
|
71
|
-
case "$source_branch" in
|
|
72
|
-
'') die '--pr-source names an empty branch' ;;
|
|
73
|
-
refs/*) die "--pr-source '$pr_source' is not a branch ref (expected 'refs/heads/<name>' or '<name>')" ;;
|
|
74
|
-
esac
|
|
75
|
-
base_branch="${base_branch#refs/heads/}"
|
|
76
|
-
if [[ "$source_branch" == "$base_branch" || "$source_branch" == 'main' || "$source_branch" == 'integration' ]]; then
|
|
77
|
-
die "refusing to bump '$source_branch': the PR source must be a feature branch, not the base ('$base_branch'), main or integration"
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
61
|
git diff --quiet || die 'working tree is not clean before version bump'
|
|
81
62
|
git diff --cached --quiet || die 'index is not clean before version bump'
|
|
82
63
|
repo_root="$(git rev-parse --show-toplevel)" || die 'cannot resolve the repository root'
|
|
83
|
-
# The script runs from the package directory (e.g. apps/cli); the manifest's
|
|
84
|
-
# repository-relative path is how it is read from the base branch.
|
|
85
|
-
repo_prefix="$(git rev-parse --show-prefix)" || die 'cannot resolve the working directory inside the repository'
|
|
86
|
-
repo_relative_file="${repo_prefix}${version_file}"
|
|
87
|
-
|
|
88
|
-
# Read both tips fresh from origin. The PR build's checkout is the detached
|
|
89
|
-
# merge commit; bumping that would push a commit that is not the branch's own
|
|
90
|
-
# history, so the working tree is moved onto a REAL branch at the source tip.
|
|
91
|
-
git fetch origin \
|
|
92
|
-
"refs/heads/$base_branch:refs/remotes/origin/$base_branch" \
|
|
93
|
-
"refs/heads/$source_branch:refs/remotes/origin/$source_branch" || \
|
|
94
|
-
die "cannot fetch '$base_branch' and '$source_branch' from origin"
|
|
95
|
-
|
|
96
|
-
# The source must already contain the base's tip: the version it is bumped to
|
|
97
|
-
# is derived from that tip, so a source behind it would be validated against a
|
|
98
|
-
# merge the bump never saw.
|
|
99
|
-
if ! git merge-base --is-ancestor "refs/remotes/origin/$base_branch" "refs/remotes/origin/$source_branch"; then
|
|
100
|
-
missing_count="$(git rev-list --count "refs/remotes/origin/$source_branch..refs/remotes/origin/$base_branch")"
|
|
101
|
-
base_short="$(git rev-parse --short "refs/remotes/origin/$base_branch")"
|
|
102
|
-
echo "version-bump: FAIL — $source_branch does not contain $base_branch's tip ($base_short); reconcile first: git pull origin $base_branch && git push" >&2
|
|
103
|
-
echo "version-bump: $missing_count commit(s) on $base_branch are missing from $source_branch" >&2
|
|
104
|
-
exit 1
|
|
105
|
-
fi
|
|
106
|
-
|
|
107
|
-
git checkout -q -B "$source_branch" "refs/remotes/origin/$source_branch" || \
|
|
108
|
-
die "cannot check out '$source_branch' at its origin tip"
|
|
109
64
|
|
|
110
65
|
[[ -f "$version_file" ]] || die "manifest not found: $version_file"
|
|
111
66
|
|
|
@@ -113,20 +68,11 @@ read_version() {
|
|
|
113
68
|
node -e 'const version = JSON.parse(require("node:fs").readFileSync(0, "utf8")).version; if (typeof version !== "string") process.exit(1); process.stdout.write(version)'
|
|
114
69
|
}
|
|
115
70
|
|
|
116
|
-
base_version="$(git show "refs/remotes/origin/$base_branch:$repo_relative_file" | read_version)" || \
|
|
117
|
-
die "cannot read a string version from $repo_relative_file on origin/$base_branch"
|
|
118
|
-
if [[ ! "$base_version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
|
119
|
-
die "cannot parse '$base_version' (origin/$base_branch) as a release version x.y.z"
|
|
120
|
-
fi
|
|
121
|
-
next_version="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.$((BASH_REMATCH[3] + 1))"
|
|
122
|
-
|
|
123
71
|
current_version="$(read_version < "$version_file")" || die "cannot read a string version from $version_file"
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
echo "version-bump: $source_branch already at $next_version (integration $base_version); nothing to bump"
|
|
127
|
-
echo '##vso[task.setvariable variable=bumped;isOutput=true]false'
|
|
128
|
-
exit 0
|
|
72
|
+
if [[ ! "$current_version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
|
|
73
|
+
die "cannot parse '$current_version' ($version_file) as a release version x.y.z"
|
|
129
74
|
fi
|
|
75
|
+
next_version="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.$((BASH_REMATCH[3] + 1))"
|
|
130
76
|
|
|
131
77
|
node -e '
|
|
132
78
|
const fs = require("node:fs")
|
|
@@ -142,7 +88,7 @@ node -e '
|
|
|
142
88
|
# package.json can reach. No file, or no `pre_bump` key: no scripts, and
|
|
143
89
|
# everything below this comment is a no-op, so the resulting commit is
|
|
144
90
|
# byte-identical to the behaviour before this feature existed (see
|
|
145
|
-
# packages/repo-controls/tests/version-bump-
|
|
91
|
+
# packages/repo-controls/tests/version-bump-integration-pre-bump.test.ts).
|
|
146
92
|
config_path="$repo_root/adl-config.toml"
|
|
147
93
|
pre_bump_list=''
|
|
148
94
|
if [[ -f "$config_path" ]]; then
|
|
@@ -226,9 +172,10 @@ fi
|
|
|
226
172
|
|
|
227
173
|
git -C "$repo_root" add -A
|
|
228
174
|
git diff --cached --quiet && die "version bump produced no staged change (expected at least $version_file)"
|
|
229
|
-
#
|
|
230
|
-
# re-
|
|
231
|
-
git commit -m "chore: bump version $current_version to $next_version"
|
|
232
|
-
git push origin "HEAD:refs/heads
|
|
233
|
-
|
|
234
|
-
|
|
175
|
+
# `[skip ci]` (Azure DevOps: a push whose commits contain it does not trigger CI
|
|
176
|
+
# pipelines) keeps this push from re-running the promote pipeline that made it.
|
|
177
|
+
git commit -m "chore: bump version $current_version to $next_version [skip ci]"
|
|
178
|
+
if ! git push origin "HEAD:refs/heads/integration"; then
|
|
179
|
+
die "push to integration rejected: integration moved since checkout, so this bump is stale; the next merge's run bumps"
|
|
180
|
+
fi
|
|
181
|
+
echo "version-bump: bumped integration from $current_version to $next_version; pushed"
|
|
@@ -12,13 +12,12 @@
|
|
|
12
12
|
# never-unit-tested Azure push code into the report at once, and 100% became
|
|
13
13
|
# unreachable in a single commit.
|
|
14
14
|
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
# percentage is derived, so it moves whenever a file's size moves.
|
|
15
|
+
# `coverageRegressions` is the shared ratchet primitive used by every controlled
|
|
16
|
+
# repository. This repository's root producer measures all workspace packages,
|
|
17
|
+
# writes coverage/coverage-summary.json, and pre-push grades it against the
|
|
18
|
+
# committed copy. Today's untested lines may shrink but never grow. Counts rather
|
|
19
|
+
# than percentages: a percentage is derived, so it moves whenever a file changes
|
|
20
|
+
# size.
|
|
22
21
|
#
|
|
23
22
|
# Nothing bespoke lives here. An earlier pass wrote a second ratchet and a second
|
|
24
23
|
# record file for this repo alone; that was the package failing to eat its own
|
|
@@ -150,13 +150,12 @@ it. `tests/core/` is the one exception, for the spine (`Check`, `scope`,
|
|
|
150
150
|
|
|
151
151
|
## Status
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
Every row of the registry is implemented — 28 of 28, counted by importing
|
|
154
154
|
`adl_compliance.checks` and measuring `len(CHECKS)` (`checks/__init__.py`'s
|
|
155
|
-
explicit registry tuple), not by re-reading this paragraph.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
a silent pass.
|
|
155
|
+
explicit registry tuple), not by re-reading this paragraph. The shell
|
|
156
|
+
`compliance_new/` tree this package ported from is gone, not frozen: a row
|
|
157
|
+
with no Python implementation exits 2 with `no check implements <id>` —
|
|
158
|
+
never a silent pass, and today no row reaches that.
|
|
160
159
|
|
|
161
160
|
[`docs/operations/adl-compliance-invariants.md`](../../../../docs/operations/adl-compliance-invariants.md)
|
|
162
161
|
records what is not true yet, including two rows that do not
|
|
@@ -66,7 +66,9 @@ def the_corpora_declare_their_shape(
|
|
|
66
66
|
# empty packaged map. Seeding it here would make them vacuous.
|
|
67
67
|
return
|
|
68
68
|
|
|
69
|
-
seeded
|
|
69
|
+
def seeded() -> config.TreeMap:
|
|
70
|
+
return config.TreeMap(version=1, trees=fixture_trees())
|
|
71
|
+
|
|
70
72
|
monkeypatch.setattr(config, "load", seeded)
|
|
71
73
|
monkeypatch.setattr(registry, "load_tree_map", seeded)
|
|
72
74
|
|
|
@@ -13,14 +13,11 @@ scan would blur the difference.
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
15
|
from ..core.check import Check
|
|
16
|
-
from .coverage.backend_crate import BackendCrate
|
|
17
|
-
from .coverage.backend_ratchet import BackendRatchet
|
|
18
|
-
from .coverage.baseline import CoverageBaseline
|
|
19
|
-
from .coverage.config_committed import CoverageConfigCommitted
|
|
20
|
-
from .coverage.full import CoverageFull
|
|
21
16
|
from .docs.adr_lifecycle import AdrLifecycle
|
|
22
17
|
from .docs.closed_set import DocsClosedSet
|
|
18
|
+
from .docs.directory_size import DocsDirectorySize
|
|
23
19
|
from .docs.english_only import DocsEnglishOnly
|
|
20
|
+
from .docs.filename import DocsFilename
|
|
24
21
|
from .docs.index_updated import IndexUpdated
|
|
25
22
|
from .docs.indexes import Indexes
|
|
26
23
|
from .docs.ledger import DocsLedger
|
|
@@ -34,15 +31,12 @@ from .layout.markdown_trees import MarkdownTrees
|
|
|
34
31
|
from .layout.open_work_cap import OpenWorkCap
|
|
35
32
|
from .layout.placement import Placement
|
|
36
33
|
from .layout.plans_layout import PlansLayout
|
|
37
|
-
from .layout.profile_data import ProfileData
|
|
38
34
|
from .layout.references import References
|
|
39
35
|
from .layout.root_closed_set import RootClosedSet
|
|
40
36
|
from .layout.root_markdown_allowlist import RootMarkdownAllowlist
|
|
41
37
|
from .layout.scripts_size_depth import ScriptsSizeDepth
|
|
42
38
|
from .lfs.integrity import Integrity
|
|
43
39
|
from .pipeline.phase_disjoint import PhaseDisjoint
|
|
44
|
-
from .release.changeset_plan import ChangesetPlan
|
|
45
|
-
from .release.version_release import VersionRelease
|
|
46
40
|
from .repository.banned_commands import BannedCommands
|
|
47
41
|
from .repository.ignored_paths import IgnoredPaths
|
|
48
42
|
from .repository.license_declared import LicenseDeclared
|
|
@@ -51,17 +45,13 @@ from .repository.lockfile_integrity import LockfileIntegrity
|
|
|
51
45
|
CHECKS: tuple[type[Check], ...] = (
|
|
52
46
|
AdrLifecycle,
|
|
53
47
|
AgentsLayout,
|
|
54
|
-
BackendCrate,
|
|
55
|
-
BackendRatchet,
|
|
56
48
|
BannedCommands,
|
|
57
|
-
ChangesetPlan,
|
|
58
49
|
CiPaths,
|
|
59
|
-
CoverageBaseline,
|
|
60
|
-
CoverageConfigCommitted,
|
|
61
|
-
CoverageFull,
|
|
62
50
|
DirectoryRatchet,
|
|
63
51
|
DocsClosedSet,
|
|
52
|
+
DocsDirectorySize,
|
|
64
53
|
DocsEnglishOnly,
|
|
54
|
+
DocsFilename,
|
|
65
55
|
DocsLedger,
|
|
66
56
|
DocsSemantics,
|
|
67
57
|
IgnoredPaths,
|
|
@@ -77,12 +67,10 @@ CHECKS: tuple[type[Check], ...] = (
|
|
|
77
67
|
PhaseDisjoint,
|
|
78
68
|
Placement,
|
|
79
69
|
PlansLayout,
|
|
80
|
-
ProfileData,
|
|
81
70
|
References,
|
|
82
71
|
RootClosedSet,
|
|
83
72
|
RootMarkdownAllowlist,
|
|
84
73
|
ScriptsSizeDepth,
|
|
85
|
-
VersionRelease,
|
|
86
74
|
)
|
|
87
75
|
|
|
88
76
|
_BY_ID: dict[str, type[Check]] = {check.id: check for check in CHECKS}
|
|
@@ -111,8 +111,15 @@ def test_a_redeclared_docs_tree_is_still_graded(tmp_path) -> None:
|
|
|
111
111
|
def test_an_absent_decisions_directory_is_a_finding_not_a_pass() -> None:
|
|
112
112
|
"""An absent directory yields an empty set, and an empty set is a clean pass
|
|
113
113
|
everywhere else in this estate. Without this structural probe the tree
|
|
114
|
-
losing docs/decisions/ entirely would pass in silence.
|
|
115
|
-
|
|
114
|
+
losing docs/decisions/ entirely would pass in silence.
|
|
115
|
+
|
|
116
|
+
The root is `repository/lockfile-integrity`'s `clean` corpus, which holds no
|
|
117
|
+
`docs/` at all (a backend/frontend lockfile pair). It was the retired
|
|
118
|
+
`coverage/baseline` `passing` corpus until the `coverage` domain was deleted
|
|
119
|
+
2026-10-01."""
|
|
120
|
+
verdict = verdict_for(
|
|
121
|
+
"DOC-001", corpus("repository", "lockfile-integrity") / "clean", given=()
|
|
122
|
+
)
|
|
116
123
|
assert verdict.outcome is Outcome.FINDINGS, verdict.render()
|
|
117
124
|
assert "decisions directory is missing" in verdict.render()
|
|
118
125
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# notes
|
|
@@ -92,6 +92,17 @@ def test_declared_dirs_and_files_stay_silent() -> None:
|
|
|
92
92
|
assert f"docs/{entry}: undeclared" not in text
|
|
93
93
|
|
|
94
94
|
|
|
95
|
+
def test_the_task_ledger_is_declared() -> None:
|
|
96
|
+
"""`docs/notes.md` is the repository's task ledger (global agent rule: one
|
|
97
|
+
line at the start and one at the finish of every task), so it is a
|
|
98
|
+
declared top-level file. The stray file next to it is still reported, which
|
|
99
|
+
proves the ledger is allowed by name and not because the gate went quiet."""
|
|
100
|
+
assert "docs/notes.md" in corpus_files(CORPUS)
|
|
101
|
+
messages = tuple(f.render() for f in findings_for(corpus_files(CORPUS)))
|
|
102
|
+
assert not any("docs/notes.md" in m for m in messages), messages
|
|
103
|
+
assert any("docs/stray-root-file.md" in m for m in messages), messages
|
|
104
|
+
|
|
105
|
+
|
|
95
106
|
def test_an_empty_set_grades_nothing() -> None:
|
|
96
107
|
"""Every undeclared entry is still on disk. A check that grades only what
|
|
97
108
|
it is handed must report none of them against an empty given set."""
|