@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
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
last_update: 2026-09-28T15:10:00Z
|
|
3
|
+
title: Agent notes ledger
|
|
4
|
+
description: Fixture task ledger, one append-only line per task start and finish.
|
|
5
|
+
type: Operations
|
|
6
|
+
status: stable
|
|
7
|
+
sources: packages/agent-settings/assets/GLOBAL-AGENTS.md
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent notes ledger
|
|
11
|
+
|
|
12
|
+
An append-only log; one line when an agent starts a task and one when it finishes.
|
|
13
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Experiment
|
|
3
|
+
title: "Fixture experiment plan"
|
|
4
|
+
description: "A research page whose type differs from the other fixture; the Research profile must not constrain type."
|
|
5
|
+
status: draft
|
|
6
|
+
created: 2026-09-30
|
|
7
|
+
last_update: '2026-09-30T00:00:00Z'
|
|
8
|
+
sources:
|
|
9
|
+
- apps/example/src/stream.ts
|
|
10
|
+
- dev/config/profiles/local.yaml
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Fixture experiment plan
|
|
14
|
+
|
|
15
|
+
Hypotheses, phases and a go/no-go gate would go here.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Research
|
|
3
|
+
title: "Fixture with an ad-hoc key"
|
|
4
|
+
description: "A research page that carries every required field plus one key the register admits nowhere."
|
|
5
|
+
status: draft
|
|
6
|
+
created: 2026-10-01
|
|
7
|
+
last_update: '2026-10-01T06:13:54Z'
|
|
8
|
+
sources:
|
|
9
|
+
- plans/features/example/spec.md
|
|
10
|
+
review_frequency: weekly
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Fixture with an ad-hoc key
|
|
14
|
+
|
|
15
|
+
Nothing here is decided.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Research
|
|
3
|
+
title: "Fixture with two ad-hoc keys"
|
|
4
|
+
description: "A research page that carries every required field plus two keys the register admits nowhere."
|
|
5
|
+
status: draft
|
|
6
|
+
created: 2026-10-01
|
|
7
|
+
last_update: '2026-10-01T06:13:54Z'
|
|
8
|
+
sources:
|
|
9
|
+
- plans/features/example/spec.md
|
|
10
|
+
owner: someone
|
|
11
|
+
review_frequency: weekly
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Fixture with two ad-hoc keys
|
|
15
|
+
|
|
16
|
+
Nothing here is decided.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Research
|
|
3
|
+
title: "Fixture with optional keys"
|
|
4
|
+
description: "A research page whose extra keys are all in the register's common_optional list."
|
|
5
|
+
status: draft
|
|
6
|
+
created: 2026-10-01
|
|
7
|
+
last_update: '2026-10-01T06:13:54Z'
|
|
8
|
+
sources:
|
|
9
|
+
- plans/features/example/spec.md
|
|
10
|
+
stale_after: '2027-01-01'
|
|
11
|
+
verified: true
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Fixture with optional keys
|
|
15
|
+
|
|
16
|
+
Nothing here is decided.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Research
|
|
3
|
+
title: "Fixture research input"
|
|
4
|
+
description: "A research page that carries every field the Research profile requires."
|
|
5
|
+
status: draft
|
|
6
|
+
created: 2026-10-01
|
|
7
|
+
last_update: '2026-10-01T06:13:54Z'
|
|
8
|
+
sources:
|
|
9
|
+
- plans/features/example/spec.md
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Fixture research input
|
|
13
|
+
|
|
14
|
+
Nothing here is decided.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Architecture
|
|
3
|
+
title: "Architecture page with a research-only key"
|
|
4
|
+
description: "An architecture page carrying created: the Research profile requires that key, but this profile does not admit it."
|
|
5
|
+
status: draft
|
|
6
|
+
created: 2026-10-01
|
|
7
|
+
sources: packages/example/**
|
|
8
|
+
related: docs/architecture/created-date.md
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Architecture page with a research-only key
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
## Target
|
|
16
|
+
|
|
17
|
+
## Invariant
|
|
18
|
+
|
|
19
|
+
## Verification
|
|
20
|
+
|
|
21
|
+
Nothing here is decided.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Experiment
|
|
3
|
+
title: "Research-shaped architecture page"
|
|
4
|
+
description: "Research frontmatter under docs/architecture: the Research profile must not capture it."
|
|
5
|
+
status: draft
|
|
6
|
+
last_update: '2026-10-01T06:13:54Z'
|
|
7
|
+
sources: packages/example/**
|
|
8
|
+
related: docs/architecture/research-shaped.md
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Research-shaped architecture page
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
## Component
|
|
16
|
+
|
|
17
|
+
## Constraint
|
|
18
|
+
|
|
19
|
+
## Verification
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Operations
|
|
3
|
+
title: "Fixture runbook"
|
|
4
|
+
description: "An operations page with no last_update: that field is the Research profile's, not Operations'."
|
|
5
|
+
status: stable
|
|
6
|
+
sources: packages/example/**
|
|
7
|
+
related: docs/operations/runbook.md
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Fixture runbook
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
What this runbook is for.
|
|
15
|
+
|
|
16
|
+
## Procedure
|
|
17
|
+
|
|
18
|
+
The steps.
|
|
19
|
+
|
|
20
|
+
## Access
|
|
21
|
+
|
|
22
|
+
Who may run it.
|
|
23
|
+
|
|
24
|
+
## Verification
|
|
25
|
+
|
|
26
|
+
How to check it worked.
|
|
@@ -4,23 +4,36 @@ Two fixtures, matching the shell version's exact scenarios: a compliant
|
|
|
4
4
|
Architecture page, and one with an invalid `status` value. Each corpus carries
|
|
5
5
|
its own cut-down profile register, passed as the `profiles` input override —
|
|
6
6
|
the packaged production register is not what these two scenarios are about.
|
|
7
|
+
|
|
8
|
+
The tests below them grade the PACKAGED register: the task-ledger profile, and
|
|
9
|
+
the Research profile for `docs/research/**` together with the engine rule it
|
|
10
|
+
needs (a profile may declare no `type`, leaving the value unconstrained).
|
|
11
|
+
|
|
12
|
+
The last section grades the closed key set (2026-10-02): a document may carry
|
|
13
|
+
only the keys its profile admits — `common_required`, `common_optional`, and
|
|
14
|
+
the profile's own `required` — and every other frontmatter key is reported by
|
|
15
|
+
name.
|
|
7
16
|
"""
|
|
8
17
|
|
|
9
18
|
from __future__ import annotations
|
|
10
19
|
|
|
11
20
|
import pathlib
|
|
12
21
|
|
|
22
|
+
import pytest
|
|
23
|
+
import yaml
|
|
24
|
+
|
|
13
25
|
from adl_compliance import runner
|
|
14
26
|
from adl_compliance.core.verdict import Outcome
|
|
15
27
|
from adl_compliance.policy.registry import load
|
|
16
28
|
|
|
17
29
|
FIXTURES = pathlib.Path(__file__).parent / "fixtures"
|
|
30
|
+
PACKAGED_REGISTER = pathlib.Path(__file__).parent / "docs-okf-profiles.yaml"
|
|
18
31
|
ROW = load().by_id("DOC-006")
|
|
19
32
|
|
|
20
33
|
|
|
21
|
-
def run(case: str) -> object:
|
|
34
|
+
def run(case: str, only: tuple[str, ...] | None = None) -> object:
|
|
22
35
|
directory = FIXTURES / case
|
|
23
|
-
given = tuple(
|
|
36
|
+
given = only if only is not None else tuple(
|
|
24
37
|
str(p.relative_to(directory))
|
|
25
38
|
for p in directory.rglob("*.md")
|
|
26
39
|
)
|
|
@@ -47,3 +60,216 @@ def test_no_set_is_could_not_run() -> None:
|
|
|
47
60
|
inputs={ROW.id: {"profiles": FIXTURES / "okf-profile-violation" / "docs-okf-profiles.yaml"}},
|
|
48
61
|
)
|
|
49
62
|
assert verdict.outcome is Outcome.COULD_NOT_RUN
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def run_packaged(case: str, only: tuple[str, ...] | None = None) -> object:
|
|
66
|
+
"""Grade a fixture against the PACKAGED register (no `profiles` override),
|
|
67
|
+
because the subject here is the register this package ships."""
|
|
68
|
+
directory = FIXTURES / case
|
|
69
|
+
given = only if only is not None else tuple(
|
|
70
|
+
str(p.relative_to(directory)) for p in directory.rglob("*.md")
|
|
71
|
+
)
|
|
72
|
+
return runner.run(ROW, directory, given)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_the_task_ledger_matches_a_packaged_profile() -> None:
|
|
76
|
+
"""`docs/notes.md` is the repository's task ledger (the global agent rule:
|
|
77
|
+
one line at the start and one at the finish of every task). It carries
|
|
78
|
+
OKF frontmatter and a `## Lines` section and nothing else a profile could
|
|
79
|
+
demand, so the packaged register must select a profile for it."""
|
|
80
|
+
verdict = run_packaged("okf-ledger-clean")
|
|
81
|
+
assert verdict.outcome is Outcome.CLEAN, verdict.render()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def test_the_task_ledger_profile_requires_the_lines_section() -> None:
|
|
85
|
+
"""Without this, the clean case above also passes against a profile that
|
|
86
|
+
asserts nothing about the ledger."""
|
|
87
|
+
verdict = run_packaged("okf-ledger-no-lines")
|
|
88
|
+
assert verdict.outcome is Outcome.FINDINGS
|
|
89
|
+
assert any("missing one of headings: Lines" in f.message for f in verdict.findings), (
|
|
90
|
+
verdict.render()
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def messages(verdict: object, relative: str) -> list[str]:
|
|
95
|
+
"""Every message reported against one file, sorted, so a test can assert the
|
|
96
|
+
EXACT set rather than that some finding somewhere mentioned a field."""
|
|
97
|
+
return sorted(f.message for f in verdict.findings if f.path == relative)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# ---- a profile may leave `type` unconstrained (engine) ----------------------
|
|
101
|
+
#
|
|
102
|
+
# The two pages that moved to docs/research/ differ in `type` (Research and
|
|
103
|
+
# Experiment), so the Research profile cannot name one. `type` is optional per
|
|
104
|
+
# profile: a profile that declares none asserts nothing about the VALUE, while
|
|
105
|
+
# `common_required` still demands the field.
|
|
106
|
+
|
|
107
|
+
UNTYPED = "okf-profile-untyped"
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@pytest.mark.parametrize("page", ["typed-research.md", "typed-experiment.md"])
|
|
111
|
+
def test_a_profile_that_declares_no_type_accepts_any_type_value(page: str) -> None:
|
|
112
|
+
verdict = run(UNTYPED, only=(f"docs/research/{page}",))
|
|
113
|
+
assert verdict.outcome is Outcome.CLEAN, verdict.render()
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def test_a_profile_that_declares_no_type_still_requires_the_field_to_be_present() -> None:
|
|
117
|
+
"""Unconstrained is not optional: `type` is in `common_required`."""
|
|
118
|
+
relative = "docs/research/no-type.md"
|
|
119
|
+
verdict = run(UNTYPED, only=(relative,))
|
|
120
|
+
assert verdict.outcome is Outcome.FINDINGS
|
|
121
|
+
assert messages(verdict, relative) == ["missing required OKF field type"], verdict.render()
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def test_a_profile_that_declares_a_type_still_constrains_it() -> None:
|
|
125
|
+
"""Guard for the change above: making `type` optional per profile must not
|
|
126
|
+
drop the assertion for the profiles that DO declare one. The page is
|
|
127
|
+
research-shaped (type Experiment) but sits under docs/architecture/, so the
|
|
128
|
+
Architecture profile grades it and rejects the type -- which also shows the
|
|
129
|
+
Research profile does not reach outside docs/research/."""
|
|
130
|
+
relative = "docs/architecture/research-shaped.md"
|
|
131
|
+
verdict = run_packaged("okf-research-neighbours", only=(relative,))
|
|
132
|
+
assert verdict.outcome is Outcome.FINDINGS
|
|
133
|
+
assert messages(verdict, relative) == [
|
|
134
|
+
"type must be 'Architecture' (got 'Experiment')",
|
|
135
|
+
], verdict.render()
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
# ---- the packaged Research profile ------------------------------------------
|
|
139
|
+
|
|
140
|
+
RESEARCH = "okf-research"
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def research(page: str) -> str:
|
|
144
|
+
return f"docs/research/{page}"
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
@pytest.mark.parametrize(
|
|
148
|
+
("page", "declared_type"),
|
|
149
|
+
[("research-ok.md", "Research"), ("experiment-ok.md", "Experiment")],
|
|
150
|
+
)
|
|
151
|
+
def test_a_research_page_with_every_required_field_passes_whatever_its_type(
|
|
152
|
+
page: str, declared_type: str
|
|
153
|
+
) -> None:
|
|
154
|
+
"""Both real pages moved to docs/research/ declare a different `type`; each
|
|
155
|
+
carries title, description, status, created, last_update and sources, and neither
|
|
156
|
+
carries `related` (the profile does not require it)."""
|
|
157
|
+
source = (FIXTURES / RESEARCH / research(page)).read_text()
|
|
158
|
+
assert f"\ntype: {declared_type}\n" in source, "the fixture must declare the type it is named for"
|
|
159
|
+
assert "related" not in source
|
|
160
|
+
verdict = run_packaged(RESEARCH, only=(research(page),))
|
|
161
|
+
assert verdict.outcome is Outcome.CLEAN, verdict.render()
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
@pytest.mark.parametrize(
|
|
165
|
+
("page", "expected"),
|
|
166
|
+
[
|
|
167
|
+
("missing-title.md", ["missing required OKF field title"]),
|
|
168
|
+
("missing-description.md", ["missing required OKF field description"]),
|
|
169
|
+
(
|
|
170
|
+
"missing-status.md",
|
|
171
|
+
["invalid OKF status None", "missing required OKF field status"],
|
|
172
|
+
),
|
|
173
|
+
("missing-last-update.md", ["missing profile field last_update"]),
|
|
174
|
+
("missing-sources.md", ["missing profile field sources"]),
|
|
175
|
+
("missing-created.md", ["missing profile field created"]),
|
|
176
|
+
],
|
|
177
|
+
)
|
|
178
|
+
def test_each_missing_research_field_is_reported_by_name(page: str, expected: list[str]) -> None:
|
|
179
|
+
verdict = run_packaged(RESEARCH, only=(research(page),))
|
|
180
|
+
assert verdict.outcome is Outcome.FINDINGS, verdict.render()
|
|
181
|
+
assert messages(verdict, research(page)) == sorted(expected), verdict.render()
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def test_a_page_outside_docs_research_is_graded_by_its_own_profile() -> None:
|
|
185
|
+
"""The runbook has no `last_update`. That field is the Research profile's;
|
|
186
|
+
the Operations profile must not have gained it."""
|
|
187
|
+
verdict = run_packaged("okf-research-neighbours", only=("docs/operations/runbook.md",))
|
|
188
|
+
assert verdict.outcome is Outcome.CLEAN, verdict.render()
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def test_without_the_research_profile_a_research_page_matches_no_profile(
|
|
192
|
+
tmp_path: pathlib.Path,
|
|
193
|
+
) -> None:
|
|
194
|
+
"""Negative control. The finding this profile exists to remove is
|
|
195
|
+
"no OKF profile matches this path". Take the PACKAGED register, drop only
|
|
196
|
+
its Research profile, and the same page reproduces that finding; with the
|
|
197
|
+
profile in place the finding is gone. The only difference between the two
|
|
198
|
+
runs is the profile."""
|
|
199
|
+
register = yaml.safe_load(PACKAGED_REGISTER.read_text())
|
|
200
|
+
kept = [p for p in register["profiles"] if "docs/research/**" not in p["paths"]]
|
|
201
|
+
assert len(kept) == len(register["profiles"]) - 1, (
|
|
202
|
+
"the packaged register must carry exactly one profile covering docs/research/**"
|
|
203
|
+
)
|
|
204
|
+
register["profiles"] = kept
|
|
205
|
+
without = tmp_path / "docs-okf-profiles.yaml"
|
|
206
|
+
without.write_text(yaml.safe_dump(register))
|
|
207
|
+
|
|
208
|
+
page = research("research-ok.md")
|
|
209
|
+
before = runner.run(
|
|
210
|
+
ROW, FIXTURES / RESEARCH, (page,), inputs={ROW.id: {"profiles": without}},
|
|
211
|
+
)
|
|
212
|
+
assert before.outcome is Outcome.FINDINGS
|
|
213
|
+
assert messages(before, page) == ["no OKF profile matches this path"], before.render()
|
|
214
|
+
|
|
215
|
+
after = run_packaged(RESEARCH, only=(page,))
|
|
216
|
+
assert after.outcome is Outcome.CLEAN, after.render()
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# ---- the frontmatter key set is closed (2026-10-02) --------------------------
|
|
220
|
+
#
|
|
221
|
+
# required-only grading has a hole the register itself kept documenting: keys
|
|
222
|
+
# nobody admitted accumulated in real documents because nothing rejected them.
|
|
223
|
+
# The set a document may draw from is exactly its profile's admission list —
|
|
224
|
+
# common_required, common_optional, and the profile's own required — and any
|
|
225
|
+
# other key is reported by name. That is the same extra="forbid" contract
|
|
226
|
+
# core/models.py grades this package's own policy documents with, applied at
|
|
227
|
+
# the frontmatter layer; the root agent rule's "admit the new key by editing
|
|
228
|
+
# docs-okf-profiles.yaml, never ad-hoc in a document" is this rule's workflow.
|
|
229
|
+
|
|
230
|
+
NEIGHBOURS = "okf-research-neighbours"
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def test_a_frontmatter_key_outside_the_vocabulary_is_reported_by_name() -> None:
|
|
234
|
+
"""`review_frequency` is audit metadata the Compliance Assessment profile
|
|
235
|
+
wants and nothing else admits; parked on a research page it is reported,
|
|
236
|
+
not graded around."""
|
|
237
|
+
relative = research("extra-key.md")
|
|
238
|
+
verdict = run_packaged(RESEARCH, only=(relative,))
|
|
239
|
+
assert verdict.outcome is Outcome.FINDINGS, verdict.render()
|
|
240
|
+
assert messages(verdict, relative) == [
|
|
241
|
+
"unknown OKF frontmatter key 'review_frequency'"
|
|
242
|
+
], verdict.render()
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def test_every_unknown_frontmatter_key_is_reported() -> None:
|
|
246
|
+
relative = research("extra-keys.md")
|
|
247
|
+
verdict = run_packaged(RESEARCH, only=(relative,))
|
|
248
|
+
assert verdict.outcome is Outcome.FINDINGS, verdict.render()
|
|
249
|
+
assert messages(verdict, relative) == [
|
|
250
|
+
"unknown OKF frontmatter key 'owner'",
|
|
251
|
+
"unknown OKF frontmatter key 'review_frequency'",
|
|
252
|
+
], verdict.render()
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def test_common_optional_frontmatter_keys_are_accepted() -> None:
|
|
256
|
+
"""`stale_after` and `verified` are in the register's common_optional:
|
|
257
|
+
allowed on any document, required of none. An admitted-optional key must
|
|
258
|
+
not be reported — the set is closed, not shrunk to required-only."""
|
|
259
|
+
relative = research("optional-keys.md")
|
|
260
|
+
verdict = run_packaged(RESEARCH, only=(relative,))
|
|
261
|
+
assert verdict.outcome is Outcome.CLEAN, verdict.render()
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def test_a_key_only_another_profile_requires_is_unknown_here() -> None:
|
|
265
|
+
"""The set is closed PER PROFILE, not per register: `created` is in the
|
|
266
|
+
vocabulary — the Research profile requires it — but the Architecture
|
|
267
|
+
profile does not admit it, so an architecture page carrying it is
|
|
268
|
+
reported. Otherwise every profile's required list would leak into every
|
|
269
|
+
other profile by construction."""
|
|
270
|
+
relative = "docs/architecture/created-date.md"
|
|
271
|
+
verdict = run_packaged(NEIGHBOURS, only=(relative,))
|
|
272
|
+
assert verdict.outcome is Outcome.FINDINGS, verdict.render()
|
|
273
|
+
assert messages(verdict, relative) == [
|
|
274
|
+
"unknown OKF frontmatter key 'created'"
|
|
275
|
+
], verdict.render()
|
package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/register.py
CHANGED
|
@@ -12,6 +12,11 @@ over the same YAML would disagree with this one the moment either check grew a
|
|
|
12
12
|
field, exactly as `checks/coverage/register.py`'s docstring records for
|
|
13
13
|
`COV-002`/`COV-003`.
|
|
14
14
|
|
|
15
|
+
Retired 2026-10-01: `checks/coverage/register.py` and the whole `coverage`
|
|
16
|
+
domain (COV-001..005) were deleted. Every mention of them in this docstring is
|
|
17
|
+
kept as the record of why this register is shared, not as a pointer to code that
|
|
18
|
+
still exists.
|
|
19
|
+
|
|
15
20
|
This is the one genuinely CROSS-domain register in the estate — every other
|
|
16
21
|
shared document (the coverage register, the Rust policy JSON) is read by two
|
|
17
22
|
checks that already share a domain. `core/` holds no precedent for a register
|
|
@@ -19,6 +19,8 @@ single gate's test module (no other ported check re-asserts it either).
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
+
import pathlib
|
|
23
|
+
|
|
22
24
|
import pytest
|
|
23
25
|
from helpers import corpus, corpus_files
|
|
24
26
|
|
|
@@ -220,8 +222,15 @@ def test_no_set_is_could_not_run() -> None:
|
|
|
220
222
|
def test_an_absent_docs_root_is_a_finding_not_a_pass() -> None:
|
|
221
223
|
"""An absent directory yields an empty set, and an empty set is a clean
|
|
222
224
|
pass everywhere else in this estate. Without this structural probe the
|
|
223
|
-
tree losing docs/ entirely would pass in silence.
|
|
224
|
-
|
|
225
|
+
tree losing docs/ entirely would pass in silence.
|
|
226
|
+
|
|
227
|
+
The root is `repository/lockfile-integrity`'s `clean` corpus, which holds no
|
|
228
|
+
`docs/` at all (a backend/frontend lockfile pair). It was the retired
|
|
229
|
+
`coverage/baseline` `passing` corpus until the `coverage` domain was deleted
|
|
230
|
+
2026-10-01."""
|
|
231
|
+
verdict = runner.run(
|
|
232
|
+
ROW, corpus("repository", "lockfile-integrity") / "clean", given=()
|
|
233
|
+
)
|
|
225
234
|
assert verdict.outcome is Outcome.FINDINGS, verdict.render()
|
|
226
235
|
assert "docs content root is missing" in verdict.render()
|
|
227
236
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"""The `layout.directory-ratchet` gate.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
One gate is one folder: `check.py` is the rule; the test and the fixture
|
|
4
|
+
corpora live beside it. The document the gate GRADES does NOT belong beside
|
|
5
|
+
the check — it is the CONSUMER's own register, named by the check's `inputs`
|
|
6
|
+
(`<compliance>/ratchets/LAY-004-over-limit-directory.yaml`, the K-42 history
|
|
7
|
+
on `inputs` in check.py). Only the fixtures' registers sit in here.
|
|
6
8
|
"""
|
|
7
9
|
|
|
8
10
|
from __future__ import annotations
|