@amsterdamdatalabs/adl-agent-control-darwin-arm64 0.1.4
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 +4 -0
- package/bin/cursor-settings +14 -0
- package/bin/default-agent-file +14 -0
- package/bin/git +670 -0
- package/bin/git-ado +425 -0
- package/bin/global-agents +14 -0
- package/bin/global-surface-sweep +14 -0
- package/bin/health-check +38 -0
- package/bin/kimi-hooks +14 -0
- package/bin/lean-ctx-observe-strip +361 -0
- package/bin/lib/bun-compile-build.sh +34 -0
- package/bin/lib/lean-ctx-observe-hooks.sh +634 -0
- package/bin/managed-settings +14 -0
- package/bin/opencode-hooks +14 -0
- package/bin/reconcile +2648 -0
- package/bin/scratch-reap +14 -0
- package/bin/shell-path-policy +64 -0
- package/bin/surface-policy +14 -0
- package/bin/sync-and-reconcile +215 -0
- package/bin/update-azure-agent-pool +29 -0
- package/bin/validate-manifest +171 -0
- package/bin/vscode-settings +14 -0
- package/package.json +44 -0
- package/packages/agent-hooks/README.md +411 -0
- package/packages/agent-hooks/assets/hooks.json +97 -0
- package/packages/agent-hooks/assets/opencode-plugin.template.ts +224 -0
- package/packages/agent-hooks/bunfig.toml +27 -0
- package/packages/agent-hooks/deploy-profile.json +53 -0
- package/packages/agent-hooks/deploy-profile.schema.json +120 -0
- package/packages/agent-hooks/package.json +23 -0
- package/packages/agent-hooks/src/cli/args.ts +99 -0
- package/packages/agent-hooks/src/cli/doctor.ts +241 -0
- package/packages/agent-hooks/src/cli/rules.ts +133 -0
- package/packages/agent-hooks/src/deploy/deploy.ts +181 -0
- package/packages/agent-hooks/src/deploy/doctor.ts +158 -0
- package/packages/agent-hooks/src/deploy/index.ts +17 -0
- package/packages/agent-hooks/src/deploy/json-merge.ts +115 -0
- package/packages/agent-hooks/src/deploy/legacy-lock.ts +213 -0
- package/packages/agent-hooks/src/deploy/list.ts +117 -0
- package/packages/agent-hooks/src/deploy/lock.ts +65 -0
- package/packages/agent-hooks/src/deploy/opencode-template.ts +74 -0
- package/packages/agent-hooks/src/deploy/profile.ts +117 -0
- package/packages/agent-hooks/src/deploy/render.ts +162 -0
- package/packages/agent-hooks/src/deploy/source.ts +84 -0
- package/packages/agent-hooks/src/gating/config.ts +514 -0
- package/packages/agent-hooks/src/gating/root.ts +117 -0
- package/packages/agent-hooks/src/hooks/briefing/handler.ts +22 -0
- package/packages/agent-hooks/src/hooks/briefing/index.ts +320 -0
- package/packages/agent-hooks/src/hooks/contract.ts +112 -0
- package/packages/agent-hooks/src/hooks/crg/handler.ts +22 -0
- package/packages/agent-hooks/src/hooks/crg/index.ts +209 -0
- package/packages/agent-hooks/src/hooks/lean-ctx/handler.ts +22 -0
- package/packages/agent-hooks/src/hooks/lean-ctx/index.ts +173 -0
- package/packages/agent-hooks/src/hooks/lean-ctx/mapping.ts +121 -0
- package/packages/agent-hooks/src/hooks/lean-ctx/scope-rewrite.ts +207 -0
- package/packages/agent-hooks/src/hooks/log.ts +233 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/config.ts +58 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/constants.ts +149 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/handler.ts +72 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/index.ts +203 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/match.ts +212 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/skill-roots.ts +73 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/skills.ts +98 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/tokenizer.ts +115 -0
- package/packages/agent-hooks/src/hooks/user-prompt-submit/vector.ts +174 -0
- package/packages/agent-hooks/src/hosts/impl/claude.ts +47 -0
- package/packages/agent-hooks/src/hosts/impl/codex.ts +47 -0
- package/packages/agent-hooks/src/hosts/impl/cursor.ts +40 -0
- package/packages/agent-hooks/src/hosts/impl/kimi.ts +47 -0
- package/packages/agent-hooks/src/hosts/impl/opencode.ts +54 -0
- package/packages/agent-hooks/src/hosts/registry.ts +29 -0
- package/packages/agent-hooks/src/hosts/spec.ts +113 -0
- package/packages/agent-hooks/src/lean-ctx/env.ts +106 -0
- package/packages/agent-hooks/src/lean-ctx/mcp.ts +140 -0
- package/packages/agent-hooks/src/lib/spawn-with-timeout.ts +120 -0
- package/packages/agent-hooks/src/log/writer.ts +230 -0
- package/packages/agent-hooks/src/main.ts +269 -0
- package/packages/agent-hooks/src/pre-tool-use/handler.ts +549 -0
- package/packages/agent-hooks/src/rules/engine.ts +293 -0
- package/packages/agent-hooks/src/rules/impl/adl-build-run-denied.ts +51 -0
- package/packages/agent-hooks/src/rules/impl/adl-git-credential-bypass.ts +320 -0
- package/packages/agent-hooks/src/rules/impl/adl-git-identity.ts +249 -0
- package/packages/agent-hooks/src/rules/impl/adl-git-push-policy.ts +258 -0
- package/packages/agent-hooks/src/rules/impl/adl-human-azdo-bypass.ts +731 -0
- package/packages/agent-hooks/src/rules/impl/adl-identity.ts +128 -0
- package/packages/agent-hooks/src/rules/impl/adl-mcp-cli.ts +179 -0
- package/packages/agent-hooks/src/rules/impl/adl-pr-complete-pending.ts +65 -0
- package/packages/agent-hooks/src/rules/impl/adl-pr-review-role.ts +156 -0
- package/packages/agent-hooks/src/rules/impl/adl-pr-role.ts +121 -0
- package/packages/agent-hooks/src/rules/impl/adl-session-required.ts +403 -0
- package/packages/agent-hooks/src/rules/impl/adl-token-minting-role.ts +92 -0
- package/packages/agent-hooks/src/rules/impl/adl-workitem-role.ts +74 -0
- package/packages/agent-hooks/src/rules/impl/advisory-coverage.ts +43 -0
- package/packages/agent-hooks/src/rules/impl/advisory-finder.ts +62 -0
- package/packages/agent-hooks/src/rules/impl/agent-secrets-stay-unread.ts +173 -0
- package/packages/agent-hooks/src/rules/impl/agent-tamper-protection.ts +508 -0
- package/packages/agent-hooks/src/rules/impl/fs-canonical-checkout.ts +86 -0
- package/packages/agent-hooks/src/rules/impl/fs-git-internals.ts +75 -0
- package/packages/agent-hooks/src/rules/impl/fs-mv.ts +66 -0
- package/packages/agent-hooks/src/rules/impl/fs-rm.ts +83 -0
- package/packages/agent-hooks/src/rules/impl/fs-trash.ts +140 -0
- package/packages/agent-hooks/src/rules/impl/git-core.ts +101 -0
- package/packages/agent-hooks/src/rules/impl/git-helpers.ts +408 -0
- package/packages/agent-hooks/src/rules/impl/git-history.ts +77 -0
- package/packages/agent-hooks/src/rules/impl/git-paths.ts +139 -0
- package/packages/agent-hooks/src/rules/impl/git-plumbing.ts +167 -0
- package/packages/agent-hooks/src/rules/impl/git-protected-tree.ts +132 -0
- package/packages/agent-hooks/src/rules/impl/git-transitions.ts +292 -0
- package/packages/agent-hooks/src/rules/impl/git-verify.ts +95 -0
- package/packages/agent-hooks/src/rules/impl/git-worktree.ts +265 -0
- package/packages/agent-hooks/src/rules/impl/mcp-tool.ts +76 -0
- package/packages/agent-hooks/src/rules/impl/messages.ts +128 -0
- package/packages/agent-hooks/src/rules/impl/parse-uncertain.ts +143 -0
- package/packages/agent-hooks/src/rules/impl/pr-completion.ts +35 -0
- package/packages/agent-hooks/src/rules/impl/shell-remote-script-exec.ts +63 -0
- package/packages/agent-hooks/src/rules/impl/tool-azure-devops.ts +283 -0
- package/packages/agent-hooks/src/rules/impl/tool-bun-test.ts +81 -0
- package/packages/agent-hooks/src/rules/impl/tool-cargo.ts +66 -0
- package/packages/agent-hooks/src/rules/impl/tool-chmod-hook.ts +42 -0
- package/packages/agent-hooks/src/rules/impl/tool-find.ts +82 -0
- package/packages/agent-hooks/src/rules/impl/tool-frontend.ts +83 -0
- package/packages/agent-hooks/src/rules/impl/tool-grep.ts +93 -0
- package/packages/agent-hooks/src/rules/impl/tool-lean-ctx-global.ts +594 -0
- package/packages/agent-hooks/src/rules/impl/tool-native-search.ts +77 -0
- package/packages/agent-hooks/src/rules/ports.ts +178 -0
- package/packages/agent-hooks/src/rules/registry.ts +233 -0
- package/packages/agent-hooks/src/rules/shell/git-identity.ts +1415 -0
- package/packages/agent-hooks/src/rules/shell/git-internals.ts +186 -0
- package/packages/agent-hooks/src/rules/shell/invocation.ts +1083 -0
- package/packages/agent-hooks/src/rules/shell/piped-script.ts +201 -0
- package/packages/agent-hooks/src/rules/shell/prefixes.ts +214 -0
- package/packages/agent-hooks/src/rules/shell/protected-carrier-writes.ts +108 -0
- package/packages/agent-hooks/src/rules/shell/protected-carriers.ts +149 -0
- package/packages/agent-hooks/src/rules/shell/split.ts +179 -0
- package/packages/agent-hooks/src/rules/shell/substitution.ts +394 -0
- package/packages/agent-hooks/src/rules/shell/token.ts +180 -0
- package/packages/agent-hooks/src/rules/shell/xargs.ts +81 -0
- package/packages/agent-hooks/src/rules/spec.ts +152 -0
- package/packages/agent-hooks/src/surface-policy.ts +37 -0
- package/packages/agent-hooks/tsconfig.json +23 -0
- package/packages/agent-settings/assets/GLOBAL-AGENTS.md +107 -0
- package/packages/agent-settings/assets/agents/architect.toml +30 -0
- package/packages/agent-settings/assets/agents/code-reviewer.toml +27 -0
- package/packages/agent-settings/assets/agents/critic.toml +35 -0
- package/packages/agent-settings/assets/agents/executor.toml +28 -0
- package/packages/agent-settings/assets/agents/explore.toml +25 -0
- package/packages/agent-settings/assets/agents/planner.toml +29 -0
- package/packages/agent-settings/assets/lean-ctx/config.toml +39 -0
- package/packages/agent-settings/assets/lean-ctx/gitignore +6 -0
- package/packages/agent-settings/assets/lean-ctx/layout.toml +5 -0
- package/packages/agent-settings/assets/mcp.json +20 -0
- package/packages/agent-settings/managed/README.md +331 -0
- package/packages/agent-settings/managed/claude-managed-settings.json +150 -0
- package/packages/agent-settings/managed/codex-requirements.toml +105 -0
- package/packages/agent-settings/protected.json +470 -0
- package/packages/agent-settings/src/deploy/agent-render.ts +94 -0
- package/packages/agent-settings/src/deploy/agent-toml.ts +76 -0
- package/packages/agent-settings/src/deploy/agents-deploy.ts +129 -0
- package/packages/agent-settings/src/deploy/doctor.ts +201 -0
- package/packages/agent-settings/src/deploy/index.ts +33 -0
- package/packages/agent-settings/src/deploy/json-pretty.ts +66 -0
- package/packages/agent-settings/src/deploy/lean-ctx-deploy.ts +138 -0
- package/packages/agent-settings/src/deploy/legacy-lock.ts +286 -0
- package/packages/agent-settings/src/deploy/list.ts +135 -0
- package/packages/agent-settings/src/deploy/lock.ts +112 -0
- package/packages/agent-settings/src/deploy/mcp-deploy.ts +175 -0
- package/packages/agent-settings/src/deploy/mcp-inspect.ts +56 -0
- package/packages/agent-settings/src/deploy/mcp-merge.ts +164 -0
- package/packages/agent-settings/src/deploy/mcp-render.ts +80 -0
- package/packages/agent-settings/src/deploy/mcp-source.ts +43 -0
- package/packages/agent-settings/src/deploy/profile.ts +296 -0
- package/packages/agent-settings/src/deploy/settings.ts +65 -0
- package/packages/agent-settings/src/global-agents.ts +230 -0
- package/packages/agent-settings/src/global-surface-sweep.ts +2179 -0
- package/packages/agent-settings/src/kimi-hooks.ts +455 -0
- package/packages/agent-settings/src/opencode-hooks.ts +76 -0
- package/packages/agent-settings/src/surface-policy.ts +441 -0
- package/packages/agent-settings/surface-policy.json +20 -0
- package/packages/agent-skills/assets/code-review/SKILL.md +100 -0
- package/packages/agent-skills/assets/codebase-design/SKILL.md +98 -0
- package/packages/agent-skills/assets/codebase-design/references/DEEPENING.md +37 -0
- package/packages/agent-skills/assets/codebase-design/references/DESIGN-IT-TWICE.md +44 -0
- package/packages/agent-skills/assets/codebase-design/references/TESTABILITY.md +29 -0
- package/packages/agent-skills/assets/debug-issue/SKILL.md +40 -0
- package/packages/agent-skills/assets/diagnosing-bugs/SKILL.md +100 -0
- package/packages/agent-skills/assets/diagnosing-bugs/references/FEEDBACK-LOOP-TACTICS.md +34 -0
- package/packages/agent-skills/assets/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/packages/agent-skills/assets/domain-modeling/SKILL.md +86 -0
- package/packages/agent-skills/assets/domain-modeling/references/ADR-FORMAT.md +47 -0
- package/packages/agent-skills/assets/domain-modeling/references/CONTEXT-FORMAT.md +60 -0
- package/packages/agent-skills/assets/explore-codebase/SKILL.md +41 -0
- package/packages/agent-skills/assets/handoff/SKILL.md +28 -0
- package/packages/agent-skills/assets/implement/SKILL.md +28 -0
- package/packages/agent-skills/assets/refactor-safely/SKILL.md +44 -0
- package/packages/agent-skills/assets/review-changes/SKILL.md +45 -0
- package/packages/agent-skills/assets/tdd/SKILL.md +49 -0
- package/packages/agent-skills/assets/tdd/references/mocking.md +59 -0
- package/packages/agent-skills/assets/tdd/references/tests.md +77 -0
- package/packages/agent-skills/assets/testing/SKILL.md +54 -0
- package/packages/agent-skills/assets/to-feature/SKILL.md +91 -0
- package/packages/agent-skills/assets/to-feature/references/FEATURE-SPEC-TEMPLATE.md +88 -0
- package/packages/agent-skills/assets/to-workitems/SKILL.md +90 -0
- package/packages/agent-skills/assets/to-workitems/references/AZURE-DEVOPS-HIERARCHY.md +118 -0
- package/packages/agent-skills/assets/to-workitems/references/TICKET-TEMPLATES.md +70 -0
- package/packages/agent-skills/assets/wayfinder/SKILL.md +100 -0
- package/packages/agent-skills/assets/wayfinder/references/TEMPLATES.md +35 -0
- package/packages/agent-skills/assets/wayfinder/references/TICKET-TYPES.md +8 -0
- package/packages/agent-skills/deploy-profile.json +9 -0
- package/packages/agent-skills/deploy-profile.schema.json +45 -0
- package/packages/agent-skills/dist/deploy.d.ts +27 -0
- package/packages/agent-skills/dist/deploy.d.ts.map +1 -0
- package/packages/agent-skills/dist/deploy.js +186 -0
- package/packages/agent-skills/dist/deploy.js.map +1 -0
- package/packages/agent-skills/dist/doctor.d.ts +24 -0
- package/packages/agent-skills/dist/doctor.d.ts.map +1 -0
- package/packages/agent-skills/dist/doctor.js +141 -0
- package/packages/agent-skills/dist/doctor.js.map +1 -0
- package/packages/agent-skills/dist/fs-utils.d.ts +8 -0
- package/packages/agent-skills/dist/fs-utils.d.ts.map +1 -0
- package/packages/agent-skills/dist/fs-utils.js +40 -0
- package/packages/agent-skills/dist/fs-utils.js.map +1 -0
- package/packages/agent-skills/dist/index.d.ts +8 -0
- package/packages/agent-skills/dist/index.d.ts.map +1 -0
- package/packages/agent-skills/dist/index.js +8 -0
- package/packages/agent-skills/dist/index.js.map +1 -0
- package/packages/agent-skills/dist/legacy-lock.d.ts +44 -0
- package/packages/agent-skills/dist/legacy-lock.d.ts.map +1 -0
- package/packages/agent-skills/dist/legacy-lock.js +121 -0
- package/packages/agent-skills/dist/legacy-lock.js.map +1 -0
- package/packages/agent-skills/dist/list.d.ts +23 -0
- package/packages/agent-skills/dist/list.d.ts.map +1 -0
- package/packages/agent-skills/dist/list.js +75 -0
- package/packages/agent-skills/dist/list.js.map +1 -0
- package/packages/agent-skills/dist/manifest.d.ts +15 -0
- package/packages/agent-skills/dist/manifest.d.ts.map +1 -0
- package/packages/agent-skills/dist/manifest.js +57 -0
- package/packages/agent-skills/dist/manifest.js.map +1 -0
- package/packages/agent-skills/dist/profile.d.ts +41 -0
- package/packages/agent-skills/dist/profile.d.ts.map +1 -0
- package/packages/agent-skills/dist/profile.js +86 -0
- package/packages/agent-skills/dist/profile.js.map +1 -0
- package/packages/agent-skills/dist/skill-config.d.ts +24 -0
- package/packages/agent-skills/dist/skill-config.d.ts.map +1 -0
- package/packages/agent-skills/dist/skill-config.js +68 -0
- package/packages/agent-skills/dist/skill-config.js.map +1 -0
- package/packages/agent-skills/dist/skill-meta.d.ts +17 -0
- package/packages/agent-skills/dist/skill-meta.d.ts.map +1 -0
- package/packages/agent-skills/dist/skill-meta.js +67 -0
- package/packages/agent-skills/dist/skill-meta.js.map +1 -0
- package/packages/agent-skills/package.json +31 -0
- package/packages/agent-skills/src/deploy.ts +222 -0
- package/packages/agent-skills/src/doctor.ts +178 -0
- package/packages/agent-skills/src/fs-utils.ts +40 -0
- package/packages/agent-skills/src/index.ts +29 -0
- package/packages/agent-skills/src/legacy-lock.ts +152 -0
- package/packages/agent-skills/src/list.ts +94 -0
- package/packages/agent-skills/src/manifest.ts +66 -0
- package/packages/agent-skills/src/profile.ts +128 -0
- package/packages/agent-skills/src/skill-config.ts +75 -0
- package/packages/agent-skills/src/skill-meta.ts +78 -0
- package/packages/agent-skills/tsconfig.build.json +13 -0
- package/packages/agent-skills/tsconfig.json +23 -0
- package/packages/azdo/README.md +111 -0
- package/packages/azdo/package.json +21 -0
- package/packages/azdo/src/azdo-pl.ts +275 -0
- package/packages/azdo/src/azdo-pr-review.ts +160 -0
- package/packages/azdo/src/azdo-pr.ts +289 -0
- package/packages/azdo/src/azdo-repo-doctor.ts +839 -0
- package/packages/azdo/src/azdo-wit.ts +145 -0
- package/packages/azdo/src/cli.ts +251 -0
- package/packages/azdo/src/lib/agent-identity.ts +198 -0
- package/packages/azdo/src/lib/agent-token.ts +167 -0
- package/packages/azdo/src/lib/client.ts +259 -0
- package/packages/azdo/src/lib/graph-identity.ts +153 -0
- package/packages/azdo/src/lib/validate-pr-metadata.ts +57 -0
- package/packages/azdo/src/mcp-server.ts +209 -0
- package/packages/azdo/src/tool-dispatch.ts +204 -0
- package/packages/azdo/tsconfig.json +13 -0
- package/packages/fleet/jobs/git-maintain/src/main.ts +588 -0
- package/packages/fleet/manifest.json +207 -0
- package/packages/fleet/manifest.schema.json +283 -0
- package/packages/fleet/src/default-agent-file.ts +144 -0
- package/packages/fleet/src/install-adl-package.ts +178 -0
- package/packages/fleet/src/install-embedding-model.ts +412 -0
- package/packages/fleet/src/launch-agents.ts +649 -0
- package/packages/fleet/src/managed-settings.ts +278 -0
- package/packages/fleet/src/scratch-reap.ts +601 -0
- package/packages/fleet/src/vscode-settings.ts +705 -0
- package/packages/fleet/systemd/adl-azure-agent-update.service +13 -0
- package/packages/fleet/systemd/adl-azure-agent-update.timer +10 -0
- package/packages/repo-controls/AGENTS.md +96 -0
- package/packages/repo-controls/CLAUDE.md +1 -0
- package/packages/repo-controls/LICENSE +20 -0
- package/packages/repo-controls/README.md +493 -0
- package/packages/repo-controls/assets/enable-integration-auto-complete.mjs +79 -0
- package/packages/repo-controls/assets/promote.ts +371 -0
- package/packages/repo-controls/assets/version-bump.sh +189 -0
- package/packages/repo-controls/azure-pipelines.yml +274 -0
- package/packages/repo-controls/bin/adl-repo-controls.ts +10 -0
- package/packages/repo-controls/bunfig.toml +58 -0
- package/packages/repo-controls/package/adl-compliance/AGENTS.md +163 -0
- package/packages/repo-controls/package/adl-compliance/CLAUDE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/conftest.py +78 -0
- package/packages/repo-controls/package/adl-compliance/pyproject.toml +31 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/__init__.py +50 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/__init__.py +98 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/check.py +210 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-bad-status/docs/architecture/overview.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-bad-status/docs/decisions/adr-901-proposed.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-broken-backlink/docs/decisions/adr-902-dangling.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-clean/docs/architecture/overview.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-clean/docs/decisions/adr-900-example.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-frontmatter-mismatch/.plans/b_committed/26-08-08-lifecycle-fixture.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-frontmatter-mismatch/.specs/demo/lifecycle.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-frontmatter-mismatch/docs/decisions/adr-903-frontmatter-mismatch.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-inactive-plan/.plans/c_done/26-08-08-completed-fixture.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-inactive-plan/.specs/demo/lifecycle.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/fixtures/adr-lifecycle-inactive-plan/docs/decisions/adr-904-completed-plan.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/test_check.py +127 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/check.py +91 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/CLAUDE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/architecture/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/compliance/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/decisions/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/index.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/operations/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/research/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/stray-root-file.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/totally-made-up/nonsense.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/test_check.py +106 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/check.py +291 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/fixtures/clean/backend/clean.rs +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/fixtures/excluded/frontend/mobile/src/i18n/locales/zh-CN/strings.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/fixtures/violation/backend/escaped.rs +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/fixtures/violation/backend/raw.rs +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/fixtures/violation/backend//346/226/207/344/273/266.rs +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/test_check.py +193 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/check.py +140 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/fixtures/index-updated-clean/docs/architecture/foo.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/fixtures/index-updated-clean/docs/architecture/index.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/fixtures/index-updated-violation/docs/architecture/foo.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/fixtures/index-updated-violation/docs/architecture/index.md +9 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/index_updated/test_check.py +98 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/check.py +378 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/docs-knowledge-indexes.yaml +192 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-clean/docs/index.md +14 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-clean/docs/one.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-clean/docs/two.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-clean/docs-knowledge-indexes.yaml +20 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-duplicate/docs/index.md +15 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-duplicate/docs/one.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-duplicate/docs/two.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-duplicate/docs-knowledge-indexes.yaml +16 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-missing-entry/docs/index.md +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-missing-entry/docs/one.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-missing-entry/docs/two.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-missing-entry/docs-knowledge-indexes.yaml +16 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/test_check.py +102 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/check.py +387 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/fixtures/ledger-bad-date/plans/LEDGER.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/fixtures/ledger-clean/plans/LEDGER.md +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/fixtures/ledger-empty-table/plans/LEDGER.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/fixtures/ledger-long-event/plans/LEDGER.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/fixtures/ledger-violation/plans/LEDGER.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/test_check.py +427 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/check.py +84 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/fixtures/markdown-structure-bad-fence/docs/bad-fence.md +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/fixtures/markdown-structure-bad-fence/docs/valid.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/fixtures/markdown-structure-bad-frontmatter/docs/bad-front-matter.md +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/fixtures/markdown-structure-bad-frontmatter/docs/valid.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/fixtures/markdown-structure-clean/docs/valid.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/markdown_ast/test_check.py +126 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/check.py +210 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/docs-okf-profiles.yaml +119 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs/architecture/demo.md +17 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs-okf-profiles.yaml +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs/architecture/bad-status.md +17 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs-okf-profiles.yaml +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/test_check.py +49 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/register.py +159 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/check.py +578 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-clean/docs/architecture/backend/crate-overview.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-clean/docs/architecture/team/team-overview.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-clean/docs/compliance/controls/control-matrix.md +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-clean/docs/compliance/controls/control-matrix.yaml +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-clean/docs/research/benchmarks/note.md +24 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/backend/crate-overview.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/product/stable-delivery.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/product/stable-recommendation.md +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/product/target-narration.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/team/team-overview.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/compliance/controls/control-matrix.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/compliance/controls/control-matrix.yaml +17 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/research/benchmarks/bad-research.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/test_check.py +461 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/check.py +124 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/.workflows/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/.workflows/CLAUDE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/CLAUDE.md +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/INVARIANTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/bad-pointer/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/bad-pointer/CLAUDE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/docs/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/docs/CLAUDE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/missing-pair/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/owned/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/fixtures/owned/CLAUDE.md +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/agents_layout/test_check.py +116 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/ci_paths/__init__.py +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/ci_paths/check.py +380 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/ci_paths/fixtures/redeclared-workflows-tree/automation/pipelines/pr-validation.yaml +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/ci_paths/test_check.py +274 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/check.py +227 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-clean/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-clean/grants.yaml +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/fresh/fresh.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub1/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub10/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub11/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub2/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub3/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub4/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub5/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub6/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub7/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub8/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub9/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/services/i18n/locales/de/common.json +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/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-excluded/frontend/packages/desktop/src/vendored-crate/Cargo.toml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/grants.yaml +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/fresh/fresh.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub1/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub10/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub11/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub2/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub3/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub4/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub5/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub6/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub7/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub8/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub9/only.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/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-unbaselined/grants.yaml +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/test_check.py +138 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/check.py +240 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/fixtures/markdown-trees-clean/.plans/a_new/plan.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/fixtures/markdown-trees-clean/backend/AGENTS.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/fixtures/markdown-trees-clean/docs/page.md +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/fixtures/markdown-trees-stray/backend/notes.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/fixtures/markdown-trees-stray/docs/page.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/test_check.py +220 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/__init__.py +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/check.py +225 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/fixtures/open-work-cap-clean/plans/GAPS-AND-FINDINGS.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/fixtures/open-work-cap-clean/plans/features/az601-clean/spec.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/test_check.py +330 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/check.py +240 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/agent/crates/enact-providers/src/snapshots/README.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/backend/crates/enact-app/assets/builtin-assistants/avatars/assistant.jpg +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/backend/crates/enact-assets/assets/logos/tools/coding/tool.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/backend/crates/enact-session/src/backend/codex_init_prompt.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/mobile/assets/images/icon.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/packages/desktop/src/renderer/assets/logos/brand/app.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/packages/desktop/src/renderer/assets/themes/default-theme.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/public/pwa/icon-192.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/resources/product.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-stray/apps/legacy/file.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-stray/backend/crates/enact-session/src/backend/README.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-stray/frontend/unapproved/screenshot.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/test_check.py +230 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plan_metadata.py +53 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/check.py +438 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-clean/plans/AGENTS.md +1 -0
- 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 +9 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-clean/plans/features/az347-test-coverage/spec.md +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-clean/plans/templates/feature.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-violation/plans/features/az347-test-coverage/items/az351-restore-entrypoint.md +9 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-violation/plans/features/az347-test-coverage/spec.md +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/test_check.py +461 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/check.py +62 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/NotAMigration.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/0001_long_prefix.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/001_init.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/002_add_index.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/003-dashed-slug.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/004_MixedCase.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/005_trailing space.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/01_short_prefix.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/not-a-migration.sql +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/test_check.py +116 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/check.py +188 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-broken/.plans/c_done/26-07-27-history.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-broken/docs/README.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-broken/docs/architecture/product/links.md +20 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-broken/docs/architecture/product/route-target.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-clean/.plans/c_done/26-07-27-history.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-clean/docs/README.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-clean/docs/architecture/product/links.md +20 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-clean/docs/architecture/product/route-target.md +8 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/test_check.py +166 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/check.py +135 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.agents/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.changeset/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.claude/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.code-review-graph/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.code-review-graph_old/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.codex/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.cursor/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.cursorrules +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.dockerignore +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.docs/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.donors/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.gitattributes +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.kimi-code/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.lfsconfig +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.mcp.json +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.opencode/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.workflows/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/CHANGELOG.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/CLAUDE-INVARIANTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/CLAUDE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/INDEPENDENT-VERIFICATION.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/INVARIANTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/LICENSE +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/NOTICE +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/README.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/RELEASE.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/VERSION +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/backend/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/compliance/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/dev/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/docker/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/docs/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/frontend/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/infra/declared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/justfile +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/opencode.jsonc +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/rule-tests/undeclared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/rules/undeclared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/unapproved-root/undeclared.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/undeclared-root-file.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/test_check.py +122 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/check.py +290 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/.changeset/some-change.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/.plans/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/.specs/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/.workflows/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/CHANGELOG.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/CLAUDE.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/INDEPENDENT-VERIFICATION.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/INVARIANTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/README.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/RELEASE.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/STRAY.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/docs/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/docs/architecture/note.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/frontend/README.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-missing-guide/.workflows/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-missing-guide/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-missing-guide/README.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-missing-guide/docs/overview.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-missing-guide/plans/AGENTS.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/test_check.py +329 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/check.py +127 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/a/b/c/d/at-limit.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/a/b/c/d/e/too-deep.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-01.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-02.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-03.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-04.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-05.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-06.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-07.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-08.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-09.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-10.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-11.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-12.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-13.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-14.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-15.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/fixtures/scripts-layout/.workflows/scripts/direct-16.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/test_check.py +163 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/check.py +169 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/attribute-without-conversion/.gitattributes +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/attribute-without-conversion/large file.bin +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/clean/.gitattributes +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/clean/large file.bin +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/clean/small.txt +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/missing-filter/large file.bin +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/unmatched-extension/.gitattributes +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/unmatched-extension/payload.dat +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/test_check.py +133 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/check.py +129 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/fixtures/disjoint/gate-registry.yaml +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/fixtures/empty/gate-registry.yaml +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/fixtures/overlapping/gate-registry.yaml +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/test_check.py +109 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/check.py +149 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/fixtures/clean/docs/readme.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/fixtures/relevant/VERSION +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/test_check.py +151 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/check.py +202 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/.workflows/changesets/package.json +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/.workflows/package.json +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/CHANGELOG.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/VERSION +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/.workflows/changesets/package.json +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/.workflows/package.json +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/CHANGELOG.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/VERSION +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/test_check.py +162 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/check.py +103 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/git-bad.sh +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/git-note.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/good.sh +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/grep-bad.sh +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/grep-note.sh +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/grep-trailing.sh +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/compliance_py/checks/notes.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/elsewhere/loose-git.sh +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/fixtures/no-banned-commands/elsewhere/loose-grep.sh +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/test_check.py +117 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/__init__.py +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/check.py +265 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/fixtures/ignored-paths/keep.log +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/fixtures/ignored-paths/src/main.rs +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/test_check.py +180 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/license_declared/__init__.py +12 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/license_declared/check.py +84 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/license_declared/fixtures/license-declared-clean/LICENSE +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/license_declared/fixtures/license-declared-mismatch/LICENSE +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/license_declared/fixtures/license-declared-missing/README.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/license_declared/test_check.py +66 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/check.py +167 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/Cargo.lock +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/Cargo.toml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/rust-toolchain.toml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/src/main.rs +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/frontend/bun.lock +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/Cargo.lock +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/Cargo.toml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/rust-toolchain.toml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/src/main.rs +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/frontend/bun.lock +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_check.py +109 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/cli.py +483 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/ast_grep.py +199 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/batch.py +52 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/check.py +303 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/constants.py +106 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/context.py +99 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/errors.py +32 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/finding.py +65 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/models.py +40 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/receipt.py +63 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/scope.py +82 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/verdict.py +161 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/__init__.py +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/config.py +131 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/config.toml +30 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/docs_shape.py +65 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.alt.yaml +791 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.schema.yaml +176 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.yaml +791 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/grants-registry.yaml +112 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/grants.py +129 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/registry.py +281 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/root_shape.py +250 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/severity-policy.yaml +114 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/providers/__init__.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/runner.py +371 -0
- package/packages/repo-controls/package/adl-compliance/uv.lock +199 -0
- package/packages/repo-controls/package.json +33 -0
- package/packages/repo-controls/scripts/hooks/commit-msg +63 -0
- package/packages/repo-controls/scripts/hooks/lib/hook-log.sh +62 -0
- package/packages/repo-controls/scripts/hooks/post-checkout +15 -0
- package/packages/repo-controls/scripts/hooks/post-commit +18 -0
- package/packages/repo-controls/scripts/hooks/pre-commit +82 -0
- package/packages/repo-controls/scripts/hooks/pre-push +144 -0
- package/packages/repo-controls/src/azdo-push.ts +463 -0
- package/packages/repo-controls/src/azure-devops-governance.ts +248 -0
- package/packages/repo-controls/src/azure-devops-remote.ts +61 -0
- package/packages/repo-controls/src/cli.ts +188 -0
- package/packages/repo-controls/src/compliance-config.ts +200 -0
- package/packages/repo-controls/src/config.ts +690 -0
- package/packages/repo-controls/src/constants.ts +97 -0
- package/packages/repo-controls/src/coverage-ratchet.ts +153 -0
- package/packages/repo-controls/src/doc-freshness.ts +172 -0
- package/packages/repo-controls/src/doctor.ts +304 -0
- package/packages/repo-controls/src/findings-ratchet.ts +163 -0
- package/packages/repo-controls/src/gitignore-block.ts +253 -0
- package/packages/repo-controls/src/hook-log.ts +72 -0
- package/packages/repo-controls/src/hook.ts +694 -0
- package/packages/repo-controls/src/install.ts +506 -0
- package/packages/repo-controls/src/integrity.ts +104 -0
- package/packages/repo-controls/src/promote.ts +25 -0
- package/packages/repo-controls/src/runtime.ts +110 -0
- package/packages/repo-controls/src/workflows-drift.ts +106 -0
- package/packages/repo-controls/src/worktree-guard.ts +272 -0
- package/packages/repo-controls/src/worktree-limit.ts +11 -0
- package/packages/repo-controls/tsconfig.json +14 -0
- package/packages/repo-controls/workflows/scripts/release/verify-npm-artifact.ts +119 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=Request latest stable Azure Pipelines agent for the Default pool
|
|
3
|
+
After=network-online.target adl-global-tools.service
|
|
4
|
+
Wants=network-online.target
|
|
5
|
+
|
|
6
|
+
[Service]
|
|
7
|
+
Type=oneshot
|
|
8
|
+
WorkingDirectory=/root/enact-vps
|
|
9
|
+
Environment=HOME=/root
|
|
10
|
+
Environment=AZURE_CONFIG_DIR=/root/.azure
|
|
11
|
+
Environment=XDG_CACHE_HOME=/root/.cache
|
|
12
|
+
ExecStart=/root/enact-vps/bin/update-azure-agent-pool /root/enact-vps/packages/fleet/manifest.json
|
|
13
|
+
TimeoutStartSec=10m
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
## Repository ownership
|
|
2
|
+
|
|
3
|
+
**Where a file lives decides which repo owns the rule that governs it.**
|
|
4
|
+
|
|
5
|
+
| Location | Owner |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| Under `$HOME` or `/usr/local` | `enact-vps` |
|
|
8
|
+
| Inside a repo, about agents | `adl-extensions` |
|
|
9
|
+
| Inside a repo, about git or workflow | `adl-repo-controls` |
|
|
10
|
+
|
|
11
|
+
Work in your own cwd. If a change belongs to another repo, raise it there — do
|
|
12
|
+
not reach across.
|
|
13
|
+
|
|
14
|
+
### The shared config file — decided, in progress
|
|
15
|
+
|
|
16
|
+
`adl-config.toml` at the repo root, its presence marking a repo
|
|
17
|
+
adl-hook-managed. It HARDCUT-replaced `.agents/enact-repo.toml` and
|
|
18
|
+
`.workflows/repo-controls.toml`. **Live since 2026-09-15** — `loadConfig` reads
|
|
19
|
+
`<repo>/adl-config.toml` and both old markers are gone.
|
|
20
|
+
|
|
21
|
+
Root tables are flat, each with one owner: `version`/`hooks`/`rules`/`repo`
|
|
22
|
+
belong to `adl hook`, `skills` to `adl-extensions`, `controls` to
|
|
23
|
+
`adl-repo-controls`.
|
|
24
|
+
|
|
25
|
+
Two rules bind every writer:
|
|
26
|
+
|
|
27
|
+
1. **No tool parses another tool's table** — not even to validate it.
|
|
28
|
+
2. **Never rewrite the whole document.** Parse-and-reserialize destroys comments
|
|
29
|
+
and tables the writer does not understand. Do text-level surgery on your own
|
|
30
|
+
block only.
|
|
31
|
+
|
|
32
|
+
### This repo — repo-local workflow and git conventions
|
|
33
|
+
|
|
34
|
+
**Rebuilt on `main`** as enact-m5's git workflow controls with a global CLI. No
|
|
35
|
+
connection to `enact-vps`.
|
|
36
|
+
|
|
37
|
+
- Global npm CLI `adl-repo-controls`: `install` / `uninstall` / `doctor --repo`,
|
|
38
|
+
`hook <name>`, `run <…>`. Requires bun ≥ 1.4 and bash ≥ 4.
|
|
39
|
+
- **Distributed via Azure Artifacts, internal only — never the public npm
|
|
40
|
+
registry.** The package is not marked private (Tarun: no secrets in the
|
|
41
|
+
package, publishing is fine); it is a deliberate decision, not an oversight —
|
|
42
|
+
the Azure Artifacts distribution is the intended channel regardless.
|
|
43
|
+
|
|
44
|
+
**This repo's own layout versus what it writes.** Package-owned hook sources
|
|
45
|
+
live under `scripts/hooks/`; commit `20ec790` removed the former
|
|
46
|
+
`scripts/verbatim/` mirror and its manifest when mechanism moved into the
|
|
47
|
+
package. The `.workflows/hooks/` stubs, the `.adl/logs/{repo-controls,
|
|
48
|
+
hooks-deny}.log` JSON-Lines streams (written via `adl-repo-controls log`,
|
|
49
|
+
`src/hook-log.ts` — `.enact/logs/` is a 2026-09-27 hard cut, no longer
|
|
50
|
+
written) and the `core.hooksPath` setting are what `install --repo` wires in
|
|
51
|
+
**target** repos.
|
|
52
|
+
|
|
53
|
+
**Rule values are defaults, not universals.** The bundled defaults are enact-m5's:
|
|
54
|
+
branch prefixes `feat|fix|docs|chore`, protected `main` and `integration`,
|
|
55
|
+
lowercase kebab-case descriptions, lowercase commit subject with an 80-character
|
|
56
|
+
limit and a fixed type list, plus the coverage ratchet and the behind-origin push
|
|
57
|
+
check. Per-repo values are config-driven, in `adl-config.toml`'s `[controls]`
|
|
58
|
+
table. Installing seeds `branches` and `pre_push.remote` only and arms no gate;
|
|
59
|
+
every other control is absent and therefore off until someone adds it.
|
|
60
|
+
|
|
61
|
+
**`doctor --repo` must detect a dangling `core.hooksPath`.** If the directory it
|
|
62
|
+
points at is missing, git silently runs no hooks and does not error. That is the
|
|
63
|
+
canonical presence-is-not-armedness case, and enact-m5 is currently in exactly
|
|
64
|
+
that state as a deliberate test fixture — detection is the pass criterion, not
|
|
65
|
+
repair.
|
|
66
|
+
|
|
67
|
+
Git hooks, the coverage ratchet and the push checks originated in enact-m5.
|
|
68
|
+
Commit `20ec790` is the hard cut that removed the byte-copy model; current
|
|
69
|
+
behaviour is package-owned and locked by the hook end-to-end and focused unit
|
|
70
|
+
tests, so a change is reviewed as product code rather than a manifest delta.
|
|
71
|
+
|
|
72
|
+
`[controls]` is **written once** on first install and never touched again, so
|
|
73
|
+
other tools' bytes and comments survive by construction.
|
|
74
|
+
|
|
75
|
+
enact-m5's commit-msg, coverage-ratchet and azdo-push checks have already moved
|
|
76
|
+
here.
|
|
77
|
+
|
|
78
|
+
### Conventions
|
|
79
|
+
|
|
80
|
+
- **Scratch work goes in `.scratchpad/`** at the repo root — never `/tmp` or
|
|
81
|
+
`/private/tmp`.
|
|
82
|
+
- **Two logs, deliberately separate:** a deny log where every row is something
|
|
83
|
+
blocked, and an activity log recording every invocation with the rule that
|
|
84
|
+
fired. Mixing routine passes into the deny log buries the signal.
|
|
85
|
+
|
|
86
|
+
### Presence is not armedness
|
|
87
|
+
|
|
88
|
+
A file existing, a block being present, a tool being on `PATH` — none of these
|
|
89
|
+
establish that the gate runs. Real instances from this system: a `core.hooksPath`
|
|
90
|
+
pointing at a renamed directory, which git silently ignores; a Cursor matcher
|
|
91
|
+
naming a tool that does not exist, so the guard never fires; MCP servers losing
|
|
92
|
+
`required`, turning a fatal failure into a silent degrade; lean-ctx resolving
|
|
93
|
+
built-in defaults instead of the repo config; a binary never rebuilt because the
|
|
94
|
+
check compared only a version string. Each looked configured. None were running.
|
|
95
|
+
|
|
96
|
+
Verify a gate by its own mechanism, never by a file being present.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Proprietary License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Amsterdam Data Labs B.V.
|
|
4
|
+
|
|
5
|
+
All rights reserved.
|
|
6
|
+
|
|
7
|
+
This software and its accompanying source code, documentation and configuration
|
|
8
|
+
are the confidential and proprietary property of Amsterdam Data Labs B.V..
|
|
9
|
+
|
|
10
|
+
No part of this work may be reproduced, copied, modified, distributed,
|
|
11
|
+
published, sublicensed or transmitted in any form or by any means, electronic
|
|
12
|
+
or mechanical, without the prior written permission of the copyright holder.
|
|
13
|
+
|
|
14
|
+
Unauthorised use, reproduction or distribution of this work, or any portion of
|
|
15
|
+
it, is a breach of that copyright and may result in civil and criminal
|
|
16
|
+
penalties.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
20
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
# adl-repo-controls
|
|
2
|
+
|
|
3
|
+
Repo-local **git workflow conventions** — the enact-m5 git hooks, commit-message
|
|
4
|
+
rules, coverage ratchet, push checks and CI hygiene scripts — packaged as one
|
|
5
|
+
global binary and installed into any repository through git's own
|
|
6
|
+
`core.hooksPath`.
|
|
7
|
+
|
|
8
|
+
Scope: workflow/git conventions only. Agent setup lives in adl-extensions;
|
|
9
|
+
the agent guard lives in adl hook. No lefthook, no husky, no npm lifecycle magic.
|
|
10
|
+
|
|
11
|
+
## How it works
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
target repo (committed) adl (fleet-installed; see below)
|
|
15
|
+
.workflows/hooks/pre-commit ─┐ adl repo controls hook <name>
|
|
16
|
+
.workflows/hooks/commit-msg ├─ sh stub ──▶ ├─ validates adl-config.toml [controls]
|
|
17
|
+
.workflows/hooks/pre-push │ exec ├─ checks bash >= 4
|
|
18
|
+
.workflows/hooks/post-commit │ └─ runs scripts/hooks/<name>
|
|
19
|
+
.workflows/hooks/post-checkout ─┘
|
|
20
|
+
adl-config.toml [controls] (config, shared file — see below) (package-owned script, config via env)
|
|
21
|
+
.workflows/repo-controls.lock.json (hashes)
|
|
22
|
+
local .git/config: core.hooksPath = .workflows/hooks
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- **Stubs** are POSIX `sh`, contain no paths, and fail loudly (with the install
|
|
26
|
+
command) when `adl` is not on `PATH` — never a silent skip. This package is
|
|
27
|
+
folded into the `adl` binary's `repo controls` namespace
|
|
28
|
+
(docs/architecture/cli-design.md §6, STATUS.md item 10); it is never itself a
|
|
29
|
+
standalone global command — hard cut, no `adl-repo-controls` compat shim
|
|
30
|
+
(adl-m3-finish item 1, 2026-09-27).
|
|
31
|
+
- **Bundled scripts** in `scripts/hooks/` are package-owned implementations.
|
|
32
|
+
They originated in enact-m5; commit `20ec790` removed the former byte-copy
|
|
33
|
+
tree and manifest when mechanism moved into this package. Their current
|
|
34
|
+
behaviour is exercised by `tests/hooks-e2e.test.ts` and focused unit tests.
|
|
35
|
+
- **Logs** (gitignored): `.adl/logs/repo-controls.log` gets a JSON-Lines row
|
|
36
|
+
for every hook invocation; `.adl/logs/hooks-deny.log` gets only `FAIL`
|
|
37
|
+
rows — shared with agent-hooks' own PreToolUse denies, so a human `git
|
|
38
|
+
commit` denial and an agent's blocked shell command land in one timeline.
|
|
39
|
+
Written via `adl repo controls log` (`src/hook-log.ts`), the same shared
|
|
40
|
+
`writeLogEntry` format every `.adl/logs/*.log` file uses
|
|
41
|
+
(docs/architecture/cli-design.md §5a). `.enact/logs/` is a hard cut: nothing writes
|
|
42
|
+
there any more; pre-existing evidence is left in place, never migrated.
|
|
43
|
+
|
|
44
|
+
## Hooks and gates: what runs where
|
|
45
|
+
|
|
46
|
+
`doctor` proves two different kinds of thing, and they run in two different
|
|
47
|
+
hooks (Tarun, 2026-09-28 — this split replaced a live bug where an ordinary
|
|
48
|
+
local `git commit` failed on a missing Agent Vault credential it should never
|
|
49
|
+
have needed):
|
|
50
|
+
|
|
51
|
+
- **`pre-commit`** runs `doctor` with the Azure DevOps promotion-governance
|
|
52
|
+
checks EXCLUDED (`azure-devops.remote`, `azure-devops.policy-read`,
|
|
53
|
+
`azure-devops.minimum-review`, `azure-devops.build-policy`). Every other
|
|
54
|
+
doctor check — the local hook surface, `adl-config.toml`, the lock, `bash`/
|
|
55
|
+
`bun`/`adl` on PATH — stays here, unchanged: these are offline and a commit
|
|
56
|
+
must never require network access or a minted token to succeed.
|
|
57
|
+
- **`pre-push`** runs the Azure DevOps promotion-governance checks alone,
|
|
58
|
+
fail-closed by name, same contract as every other doctor check: unreadable
|
|
59
|
+
evidence blocks the push, never a warning, never a silent pass. A push
|
|
60
|
+
already requires network access to the remote, so a network + token
|
|
61
|
+
requirement here is not a new cost the way it would be at commit time.
|
|
62
|
+
- **A bare `adl-repo-controls doctor` run** (not through either hook) keeps
|
|
63
|
+
reporting everything, exactly as before — this split only changes which
|
|
64
|
+
hook exercises which checks, never what `doctor` itself is capable of
|
|
65
|
+
reporting.
|
|
66
|
+
|
|
67
|
+
See `src/doctor.ts`'s `azureDevOpsPromotionGovernanceChecks` (the checks,
|
|
68
|
+
factored out of `doctor()` so pre-push can run them alone) and `src/hook.ts`'s
|
|
69
|
+
`azureDevOpsPromotionGovernanceGate` (the pre-push gate) plus `runHook`'s
|
|
70
|
+
`pre-commit`/`pre-push` wiring. `tests/doctor-gate.test.ts` proves both halves:
|
|
71
|
+
a release-configured pre-commit commits successfully with no network-capable
|
|
72
|
+
binary on `PATH` at all, and pre-push blocks by name when the token mint
|
|
73
|
+
fails and permits the push once it succeeds.
|
|
74
|
+
|
|
75
|
+
## Worktree-count backstop (`post-checkout`)
|
|
76
|
+
|
|
77
|
+
`MAX_WORKTREES` (`src/constants.ts`) is `3` — a repository may have at most 3
|
|
78
|
+
`git worktree list` entries at once, **counting the main working tree
|
|
79
|
+
itself**, so at most 2 linked worktrees beyond the main checkout.
|
|
80
|
+
|
|
81
|
+
Git has no pre-worktree hook — nothing runs *before* `git worktree add`
|
|
82
|
+
creates the checkout. `post-checkout` is the earliest hook it actually fires
|
|
83
|
+
(inside the *new* worktree, with the previous-HEAD argument set to the
|
|
84
|
+
all-zero OID and the branch-checkout flag set to `1` — see
|
|
85
|
+
`src/worktree-guard.ts`'s header for the full signature, including how it
|
|
86
|
+
tells a `worktree add` apart from an ordinary `git clone`'s own first
|
|
87
|
+
checkout). So "deny" here means: let the worktree get created, count what
|
|
88
|
+
`git worktree list --porcelain` now reports, and if that is over the limit,
|
|
89
|
+
actively run `git worktree remove --force <path>` on the just-created
|
|
90
|
+
worktree — from the *main* worktree, since git refuses to remove the
|
|
91
|
+
worktree a process's own cwd is inside — then exit non-zero. `git worktree
|
|
92
|
+
add` itself then reports failure, and no 4th worktree survives on disk.
|
|
93
|
+
|
|
94
|
+
Branch deletion (`git worktree add -b <branch>`) is **never** attempted: by
|
|
95
|
+
the time `post-checkout` runs, the branch ref already exists, indistinguishable
|
|
96
|
+
here from a branch that existed before and was merely checked out into a new
|
|
97
|
+
worktree. Only the worktree directory and its registration are removed; the
|
|
98
|
+
branch is always left in place.
|
|
99
|
+
|
|
100
|
+
This is the backstop for a **human** running `git worktree add` directly, or
|
|
101
|
+
for any agent path the hook-engine in `packages/agent-hooks` cannot see.
|
|
102
|
+
Agent-driven worktree creation itself is denied outright (not merely
|
|
103
|
+
limited) by that package's `git.worktree` rule, on every surface it can
|
|
104
|
+
observe (shell commands *and* native tools like Claude Code's `EnterWorktree`
|
|
105
|
+
or a `Task`/`Agent` launch with `isolation: "worktree"`) — see
|
|
106
|
+
[`../agent-hooks/README.md`](../agent-hooks/README.md).
|
|
107
|
+
|
|
108
|
+
## Requirements
|
|
109
|
+
|
|
110
|
+
- **bun >= 1.4** on `PATH` — runtime of the CLI and of the bundled enact-m5
|
|
111
|
+
TypeScript scripts (coverage ratchet, push lock, `azure-devops-push.ts` all use
|
|
112
|
+
`Bun.*` / `bun:sqlite`).
|
|
113
|
+
- **bash >= 4** first on `PATH` — the enact-m5 scripts use `${var,,}` (commit-msg) and `mapfile`
|
|
114
|
+
(repo-hygiene). macOS ships `/bin/bash` 3.2: install a newer bash
|
|
115
|
+
(`brew install bash`) and make sure GUI git clients see it. `doctor` and every
|
|
116
|
+
`hook` run check this and fail loudly on 3.x.
|
|
117
|
+
- git, and npm only to install the package.
|
|
118
|
+
- **`adl-agent-id` + `adl`** — only when `[controls.release]` is declared, and
|
|
119
|
+
only for a `doctor` run or `pre-push` (never `pre-commit` — see "Hooks and
|
|
120
|
+
gates: what runs where" below). The Azure DevOps promotion-governance checks
|
|
121
|
+
authenticate as the session's own agent identity (Tarun, 2026-09-28,
|
|
122
|
+
replacing a retired per-vault env file this package used to read directly):
|
|
123
|
+
`ADL_AGENT_ID_AGENT` from the environment when set (an `adl run` session, or
|
|
124
|
+
the fleet's managed shell rc exporting it from the machine default-agent
|
|
125
|
+
file), else the machine default-agent file itself — the identical fallback
|
|
126
|
+
`adl run` uses when `--as` is omitted. Neither present is a named failure,
|
|
127
|
+
never a silent default identity. The resolved agent is handed to
|
|
128
|
+
`adl-agent-id exec --agent <agent> -- adl id token <agent> --json`, the same
|
|
129
|
+
two-hop exec `bin/git-ado` and `packages/azdo` use for every other credentialed
|
|
130
|
+
Azure DevOps call; this package never sees the vault proxy, a CA, or a client
|
|
131
|
+
secret — only the finished bearer token, confined to the child process that
|
|
132
|
+
reads the target branch's remote policies. See
|
|
133
|
+
`docs/operations/agent-vault-environment.md` for the host-side broker
|
|
134
|
+
contract underneath `adl-agent-id`/`agent-vault` itself.
|
|
135
|
+
- **uv** — only if `[controls.compliance].enabled` is non-empty; see below.
|
|
136
|
+
- **ast-grep** — optional; only 3 of the compliance registry's 93 checks use it,
|
|
137
|
+
and the Python runner degrades those specific rows gracefully (not a hard failure)
|
|
138
|
+
when it is absent. `doctor` warns, never fails, on a missing `ast-grep`.
|
|
139
|
+
|
|
140
|
+
### Why bun (and not node)
|
|
141
|
+
|
|
142
|
+
This package is never distributed standalone (adl-m3-finish item 1/2, 2026-09-27):
|
|
143
|
+
`adl repo controls <command>` folds it into the one `adl` binary
|
|
144
|
+
(docs/architecture/cli-design.md §6), which the fleet installs via `bin/reconcile`'s
|
|
145
|
+
`bun-compile` manager; `apps/cli/src/commands/repo-controls.ts` resolves this
|
|
146
|
+
package's own unmodified root — this checkout's `packages/repo-controls`, or
|
|
147
|
+
`bin/reconcile`'s `repo-dir`-synced copy at `<libexec>/repo-controls` — and runs
|
|
148
|
+
`bin/adl-repo-controls.ts` (`src/cli.ts` only EXPORTS `main()`; it never calls
|
|
149
|
+
it) as a `bun` subprocess. That indirection exists because the scripts this
|
|
150
|
+
package must run verbatim are enact-m5's bun scripts (`bun
|
|
151
|
+
.../coverage/command.ts`, `#!/usr/bin/env bun` push wrapper, `Bun.spawnSync`,
|
|
152
|
+
`bun:sqlite`) plus real files on disk (vendored CI assets, the bundled hook
|
|
153
|
+
scripts, the uv-managed compliance engine) that a single compiled binary
|
|
154
|
+
cannot embed. Bun is therefore a hard runtime dependency no matter what the
|
|
155
|
+
CLI is written in; writing the CLI in bun keeps **one** runtime, lets the
|
|
156
|
+
`bin` entry run TypeScript directly (no build step, no `dist/` drift), and
|
|
157
|
+
gives the 100% lines/functions coverage gate natively via `bunfig.toml`.
|
|
158
|
+
|
|
159
|
+
### A second runtime — only if compliance is enabled
|
|
160
|
+
|
|
161
|
+
`package/adl-compliance` is a separate, bundled Python project (managed by
|
|
162
|
+
`uv`, which provisions its own Python 3.14+ — no system Python required). This
|
|
163
|
+
is not a contradiction of the "one runtime" point above: bash ≥ 4 is *already* a
|
|
164
|
+
second hard external dependency today, for the bundled enact-m5 hook scripts —
|
|
165
|
+
`uv`/Python simply joins bash in that same "externally invoked bundled tool"
|
|
166
|
+
category. Nothing about the CLI's own runtime changes; `adl-repo-controls`
|
|
167
|
+
itself still runs in-process under bun exactly as before.
|
|
168
|
+
|
|
169
|
+
`uv` is required **only** when `[controls.compliance].enabled` is non-empty (`run
|
|
170
|
+
compliance` will fail loudly, naming `uv`, if it's absent and needed) — installing
|
|
171
|
+
this package and running every other command (`install`, `uninstall`, `doctor`
|
|
172
|
+
with compliance disabled, `hook`, and the other `run` tools) never touches it.
|
|
173
|
+
|
|
174
|
+
The UI gate design and the source-to-sink proof required for genuine appearance
|
|
175
|
+
centralization are documented in
|
|
176
|
+
[`docs/architecture/ui-centralization-compliance.md`](docs/architecture/ui-centralization-compliance.md).
|
|
177
|
+
|
|
178
|
+
## CLI
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
adl-repo-controls install --repo <path> [--dry-run]
|
|
182
|
+
adl-repo-controls uninstall --repo <path> [--dry-run]
|
|
183
|
+
adl-repo-controls doctor --repo <path> [--json]
|
|
184
|
+
adl-repo-controls hook <pre-commit|commit-msg|pre-push|post-commit> [git hook args]
|
|
185
|
+
adl-repo-controls log <hook-name> <reason> [context] [message] (internal — called by the bundled hooks)
|
|
186
|
+
adl-repo-controls promote --repo <path>
|
|
187
|
+
adl-repo-controls run <azdo-push|coverage|repo-hygiene|validate-pr-metadata> --repo <path> [-- args]
|
|
188
|
+
adl-repo-controls run compliance --repo <path> [-- <gate-id or domain.name> | --summary | --files LIST | --log-dir DIR]
|
|
189
|
+
adl-repo-controls --version | help
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**install** requires an existing root `adl-config.toml`: that is the central
|
|
193
|
+
management marker. It deletes and rebuilds the complete adl-owned
|
|
194
|
+
`.workflows/` root, then appends its `[controls]` table only when that table is
|
|
195
|
+
missing. It appends the single shared root ignore `/.enact/logs/` and
|
|
196
|
+
`/.coverage-cache/` to `.gitignore`, writes the lock, and sets
|
|
197
|
+
`core.hooksPath=.workflows/hooks` with `git config --local`.
|
|
198
|
+
- Re-running is state-idempotent: the rebuilt root is byte-identical.
|
|
199
|
+
- `--dry-run` prints every action and changes nothing (files or git config).
|
|
200
|
+
- Extra, altered, missing, and retired managed files below `.workflows/` are
|
|
201
|
+
deleted or repaired on the next install. Pre-hard-cut log evidence is kept in
|
|
202
|
+
place as quarantine; it is never read, written, copied, moved, or deleted.
|
|
203
|
+
- Written files contain no absolute paths and no `$HOME`.
|
|
204
|
+
|
|
205
|
+
**uninstall** removes the authoritative `.workflows/` projection and
|
|
206
|
+
deactivates its hook path. Canonical logs, their root ignore, quarantined log
|
|
207
|
+
evidence, and runtime caches remain. `adl-config.toml` itself is never deleted — only the
|
|
208
|
+
`[controls]` span this package appended is ever spliced back out.
|
|
209
|
+
|
|
210
|
+
**doctor** is read-only and exits 1 on any failure: bash >= 4, bun, binary on
|
|
211
|
+
PATH, the bundled compliance package present at its packaged path, repository
|
|
212
|
+
root, `[controls]` config validity, (warning) `coverage/coverage-summary.json`
|
|
213
|
+
exists whenever `pre_push.coverage_ratchet` is enabled, `[controls.compliance]` config
|
|
214
|
+
validity, `uv` on PATH (only checked once `[controls.compliance].enabled` is non-empty;
|
|
215
|
+
otherwise reported ok unconditionally, same off-by-default posture as the
|
|
216
|
+
coverage-summary check), (warning only, same conditioning) `ast-grep` on PATH,
|
|
217
|
+
lock, each stub (present, unedited, executable), `core.hooksPath`, `.gitignore`
|
|
218
|
+
lines, and (warning) lock version skew. When `[controls.release]` is declared,
|
|
219
|
+
it also derives the configured `origin` remote, loads the validated canonical
|
|
220
|
+
Agent Vault file before reading Azure DevOps, and records separate fail-closed receipts for the HTTPS handle,
|
|
221
|
+
required owner reviewer, minimum-review reset, and build policy.
|
|
222
|
+
|
|
223
|
+
**run** executes a bundled enact-m5 tool against the repository with the config
|
|
224
|
+
exported: `azdo-push` (Azure DevOps push with push lock + behind-origin refusal),
|
|
225
|
+
`coverage <check-push|prewarm-push|status|unlock|...>`, `repo-hygiene` (CI
|
|
226
|
+
entrypoint), `validate-pr-metadata` (Azure PR title/description policy).
|
|
227
|
+
|
|
228
|
+
**run compliance** runs the bundled `adl-compliance` Python engine (via `uv`)
|
|
229
|
+
against the repository. `--root <repo>` is always injected first from `--repo`;
|
|
230
|
+
once `[controls.compliance].enabled` is non-empty, `--only <the enabled list, comma-joined>`
|
|
231
|
+
is injected right after it. Both are injected *before* any args given after `--`,
|
|
232
|
+
so a user-supplied `--root` or `--only` there overrides the injected one — last
|
|
233
|
+
flag wins, matching Python `argparse` semantics; this is intentional, not a bug to
|
|
234
|
+
guard against. Everything else (a bare gate id or `domain.name` target, `--summary`,
|
|
235
|
+
`--files LIST`, `--log-dir DIR`) passes straight through.
|
|
236
|
+
|
|
237
|
+
## Configuration — `adl-config.toml` `[controls]`
|
|
238
|
+
|
|
239
|
+
`adl-config.toml` (repository root) is a **shared file**: three separate tools
|
|
240
|
+
converge their config into it, one top-level table each — `[hooks]`/`[rules]`/
|
|
241
|
+
`[repo]` for `adl hook`, `[skills]` for `adl-extensions`, `[controls]` for
|
|
242
|
+
this package. A bare root-level `version = 1` is a tool-agnostic marker every
|
|
243
|
+
tool accepts and ignores. This package reads and writes **only its own
|
|
244
|
+
`[controls]` table**; every other byte of the file (including other tools'
|
|
245
|
+
comments) is opaque and is never inspected, reordered, or dropped.
|
|
246
|
+
|
|
247
|
+
`adl-config.toml`'s mere presence marks a repository as adl-hook-managed —
|
|
248
|
+
running `install` may effectively create that marker even if `adl hook` itself
|
|
249
|
+
is not installed there. `adl-config.toml` itself is never deleted by uninstall.
|
|
250
|
+
|
|
251
|
+
### Install wires the hooks. It arms nothing.
|
|
252
|
+
|
|
253
|
+
`install` seeds exactly three attributes — `version`, `branches` and
|
|
254
|
+
`pre_push.remote` — and **every gate is off**. A first install changes what no
|
|
255
|
+
`git push` and no `git commit` does until somebody opts in. `branches` and
|
|
256
|
+
`pre_push.remote` are seeded rather than omitted because they are not gates but the
|
|
257
|
+
vocabulary gates are phrased in, and because `pre-push` reads their env vars with
|
|
258
|
+
`${VAR:?}`, which aborts on an empty value: "no branch policy" cannot be spelled as
|
|
259
|
+
an empty list.
|
|
260
|
+
|
|
261
|
+
Seeding is **per attribute, and only when absent**. An attribute already in the file
|
|
262
|
+
is never rewritten, reordered or reformatted, whatever its value — so re-running
|
|
263
|
+
install (or a scheduled job that does) can add a missing key but can never arm,
|
|
264
|
+
disarm or restyle one you set. Granularity is the top-level key inside `[controls]`:
|
|
265
|
+
an inline table is one attribute, because editing inside one means rewriting bytes
|
|
266
|
+
you own. Nothing is parsed and re-serialized; text is spliced into the table's span.
|
|
267
|
+
|
|
268
|
+
`[controls]` is strictly validated: unknown keys and wrong types are errors. An
|
|
269
|
+
**absent** optional key is its documented default, never an error.
|
|
270
|
+
|
|
271
|
+
| Key | Seeded by install | Default when absent | enact-m5 | Effect |
|
|
272
|
+
|---|---|---|---|---|
|
|
273
|
+
| `branches.protected` | yes | *required* | `["main", "integration"]` | pre-push refuses while on these branches |
|
|
274
|
+
| `branches.prefixes` | yes | *required* | `["feat", "fix", "docs", "chore"]` | pre-push / azdo-push branch pattern `<prefix>/<kebab>` |
|
|
275
|
+
| `pre_push.remote` | yes | *required* | `"origin"` | remote azdo-push pushes to and reads status from |
|
|
276
|
+
| `pre_commit.biome` | no | `false` | `true` | Biome format+lint on the staged index snapshot |
|
|
277
|
+
| `pre_commit.staged_coverage` | no | `false` | `true` | enact-m5-only staged coverage measurement |
|
|
278
|
+
| `pre_commit.doc_freshness` | no | `false` | opt in | a staged `docs/` or `plans/` `.md` carries a `last_update` stamped within 5h |
|
|
279
|
+
| `pre_push.coverage_ratchet` | no | `false` | `true` | per outgoing commit, `coverage/coverage-summary.json` must exist and not regress |
|
|
280
|
+
| `pre_push.findings_ratchet` | no | `false` | opt in | per outgoing commit, every declared static-analysis counter's findings must not exceed the committed floor |
|
|
281
|
+
| `pre_push.static_checks` | no | `[]` | tsc, knip, svelte-check | `{ label, run }` commands run on an export of HEAD, pass cached per tree OID |
|
|
282
|
+
| `release.source` | no | `""` | `"integration"` | source branch for the managed promotion PR; no branch pair is guessed |
|
|
283
|
+
| `release.target` | no | `""` | `"main"` | target branch for the managed promotion PR |
|
|
284
|
+
| `release.merge_strategy` | no | `"squash"` | `"no-fast-forward"` | one of `squash`, `rebase`, `rebase-merge`, or `no-fast-forward` — sent to Azure DevOps as the matching wire value (`squash`, `rebase`, `rebaseMerge`, `noFastForward`) |
|
|
285
|
+
| `release.pre_bump` | no | `[]` | — | ordered, repository-relative script paths `version-bump.sh` runs from the repo root before the bump commit |
|
|
286
|
+
|
|
287
|
+
### `release.pre_bump` — multi-language version bumps
|
|
288
|
+
|
|
289
|
+
`version-bump.sh` only knows how to write to one JSON file's `version` field
|
|
290
|
+
(`--file package.json`). A repository whose version lives somewhere else too —
|
|
291
|
+
a Go `const`, a `Cargo.toml`, a generated changelog header — declares
|
|
292
|
+
`pre_bump` scripts to update that second place in the SAME commit, instead of
|
|
293
|
+
forking a second bump mechanism per language.
|
|
294
|
+
|
|
295
|
+
Each entry is a repository-relative path (rejected if absolute or containing
|
|
296
|
+
a `..` segment — the same check `[controls.integrity].watched` and
|
|
297
|
+
`pre_push.export_links` already apply) to a script `version-bump.sh` runs,
|
|
298
|
+
IN ORDER, with `bash`, from the repository root, after computing the next
|
|
299
|
+
unpublished version and before the bump commit. A path that does not exist on
|
|
300
|
+
disk is a validation error, checked for every declared script before any of
|
|
301
|
+
them run — a bad declaration fails clearly instead of leaving the repo
|
|
302
|
+
half-bumped.
|
|
303
|
+
|
|
304
|
+
Each script sees:
|
|
305
|
+
|
|
306
|
+
| Env var | Value |
|
|
307
|
+
|---|---|
|
|
308
|
+
| `ADL_CURRENT_VERSION` | the version being replaced |
|
|
309
|
+
| `ADL_NEXT_VERSION` | the version being allocated |
|
|
310
|
+
| `ADL_REPO_ROOT` | the repository root (also the script's cwd) |
|
|
311
|
+
|
|
312
|
+
...and does NOT see `SYSTEM_ACCESSTOKEN`, `AZURE_DEVOPS_EXT_PAT`, or any other
|
|
313
|
+
variable whose name ends `_TOKEN`, `_PAT`, `_SECRET`, or `_PASSWORD`
|
|
314
|
+
(case-insensitive) — a `pre_bump` script is repository-authored and
|
|
315
|
+
unreviewed by this package, and has no business seeing the pipeline's push or
|
|
316
|
+
PR credentials. A script that exits non-zero aborts the whole bump: no
|
|
317
|
+
commit, no push, no PR. Whatever a script writes inside the repository tree
|
|
318
|
+
is staged into the SAME commit as the `package.json` bump (`git add -A` from
|
|
319
|
+
the repo root, so nothing outside the repository or a script's own declared
|
|
320
|
+
path is ever swept in by accident); a script that writes into `.git` itself
|
|
321
|
+
(hooks, config, refs) is refused before any commit happens. There is no
|
|
322
|
+
equivalent guarantee against a script writing to an absolute path outside the
|
|
323
|
+
repository entirely — a plain shell script has no sandbox to enforce that,
|
|
324
|
+
and this package does not claim one. No `pre_bump` declared (the key absent,
|
|
325
|
+
or no `adl-config.toml` at all) is byte-identical to the behaviour before
|
|
326
|
+
this key existed: nothing extra runs, nothing extra is staged.
|
|
327
|
+
|
|
328
|
+
A Rust repository whose canonical version is `Cargo.toml`'s
|
|
329
|
+
`[package].version`, kept in sync with `package.json` on every bump:
|
|
330
|
+
|
|
331
|
+
```toml
|
|
332
|
+
[controls.release]
|
|
333
|
+
source = "integration"
|
|
334
|
+
target = "main"
|
|
335
|
+
pre_bump = ["scripts/bump-cargo-version.sh"]
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
```sh
|
|
339
|
+
#!/usr/bin/env bash
|
|
340
|
+
# scripts/bump-cargo-version.sh
|
|
341
|
+
set -euo pipefail
|
|
342
|
+
sed -i.bak -E "s/^version = \".*\"/version = \"${ADL_NEXT_VERSION}\"/" "${ADL_REPO_ROOT}/Cargo.toml"
|
|
343
|
+
rm -f "${ADL_REPO_ROOT}/Cargo.toml.bak"
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
The real case this was built for: agent-identities' Go binary has no
|
|
347
|
+
`package.json` version at all — its version is
|
|
348
|
+
`const Version = "0.4.1"` in
|
|
349
|
+
`adl-agent-id/cmd/adl-agent-id/main.go`. Its `pre_bump` script rewrites that
|
|
350
|
+
line instead:
|
|
351
|
+
|
|
352
|
+
```sh
|
|
353
|
+
#!/usr/bin/env bash
|
|
354
|
+
# scripts/bump-agentid-version.sh
|
|
355
|
+
set -euo pipefail
|
|
356
|
+
file="${ADL_REPO_ROOT}/adl-agent-id/cmd/adl-agent-id/main.go"
|
|
357
|
+
sed -i.bak -E "s/^const Version = \".*\"/const Version = \"${ADL_NEXT_VERSION}\"/" "$file"
|
|
358
|
+
rm -f "${file}.bak"
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
`install` copies two package-owned standalone CI assets byte-for-byte:
|
|
362
|
+
|
|
363
|
+
- `.workflows/promote.ts`
|
|
364
|
+
- `.workflows/scripts/enable-integration-auto-complete.mjs`
|
|
365
|
+
|
|
366
|
+
Both installed assets are real executable files, never symlinks. Their SHA-256
|
|
367
|
+
hashes live in `.workflows/repo-controls.lock.json`, and `doctor` fails if either
|
|
368
|
+
file, mode, or lock entry drifts from the canonical source under `assets/`. A
|
|
369
|
+
repository opts into promotion by declaring `[controls.release]` and wiring its
|
|
370
|
+
pipeline to run the installed promoter with the matching branch pair and merge
|
|
371
|
+
strategy. The helper creates or reuses the active PR and arms auto-complete
|
|
372
|
+
without deleting the source branch or transitioning work items — it never
|
|
373
|
+
names a reviewer on the PR (Tarun, 2026-09-27: naming one, typically the
|
|
374
|
+
person who pushed to `integration`, is a self-approval risk and contradicts
|
|
375
|
+
"agent-reviewer is optional, never required"). Before it reads or mutates PRs,
|
|
376
|
+
it proves the exact target branch has enabled blocking repository-wide
|
|
377
|
+
policies for at least one approval with `resetOnSourcePush = true` (the
|
|
378
|
+
author's own vote does not count towards it) and a build definition; a
|
|
379
|
+
missing or weaker policy fails promotion. Pre-commit calls the same read-only
|
|
380
|
+
doctor report and never repairs or stages the managed surface: run
|
|
381
|
+
`adl repo controls install --repo .` explicitly to repair it.
|
|
382
|
+
|
|
383
|
+
`[controls.compliance]` follows the same rule: install seeds `version` and
|
|
384
|
+
`enabled = []` only. `registry` and `[controls.compliance.trees]` have working
|
|
385
|
+
defaults and are not written into every repository.
|
|
386
|
+
|
|
387
|
+
Fixed conventions (enact-m5, not configurable): commit subject
|
|
388
|
+
`^(feat|fix|docs|refactor|perf|chore|release)(\([a-z0-9][a-z0-9-]*\))?: .+`, at most 80
|
|
389
|
+
characters, lowercase description without trailing period; `Merge `, `Revert "`
|
|
390
|
+
and `X.Y.Z` subjects exempt; no staged `.scratchpad` paths or new references;
|
|
391
|
+
`git diff --cached --check`; git environment scrubbed before push checks.
|
|
392
|
+
|
|
393
|
+
### Managed dot paths and protected controls
|
|
394
|
+
|
|
395
|
+
The pre-commit gate has two deliberately different outcomes:
|
|
396
|
+
|
|
397
|
+
- A changed or untracked **top-level** dot path is **commit-required**.
|
|
398
|
+
When it is omitted from the index, the hook names it and tells the author to
|
|
399
|
+
stage it. Once staged, it can be committed normally. This covers centrally
|
|
400
|
+
managed paths such as `.agents/**`, `.claude/**`, `.codex/**`, `.cursor/**`,
|
|
401
|
+
`.mcp.json`, and future top-level dot paths. Nested paths such as
|
|
402
|
+
`tools/.claude/**` are ordinary repository content. The designated ephemeral
|
|
403
|
+
scratch storage is never committable.
|
|
404
|
+
- A **protected control** requires human approval even when staged: every path
|
|
405
|
+
under `compliance/` or `workflows/`, `adl-config.toml`, and the repository's
|
|
406
|
+
explicit `[controls.integrity].watched` patterns. The same controls cannot be
|
|
407
|
+
left dirty while committing other work.
|
|
408
|
+
|
|
409
|
+
Git cannot make a pre-commit hook run for `git commit --no-verify`. That is the
|
|
410
|
+
reviewed human-only escape hatch for protected controls: `adl hook` denies
|
|
411
|
+
agents' uses of that flag, while Tarun may review a protected diff and commit it
|
|
412
|
+
manually with the flag. This package intentionally does not claim to enforce
|
|
413
|
+
that actor boundary itself.
|
|
414
|
+
|
|
415
|
+
Note: `doc_freshness` is this package's own check, not a bundled enact-m5 script —
|
|
416
|
+
the verbatim `workflows/hooks/pre-commit` is untouched and the check runs in
|
|
417
|
+
`runHook` before it. It carries the rule that used to be compliance row `DOC-003`
|
|
418
|
+
(same 5h window, same `YYYY-MM-DDTHH:MM:SSZ` format, same exclusions), graded on
|
|
419
|
+
the staged index instead of the whole `docs/` tree: as a registry row it reddened
|
|
420
|
+
every page five hours after anyone touched it, which no amount of editing kept
|
|
421
|
+
green. Blobs are read with `git show :<path>`, so the work-tree copy is irrelevant.
|
|
422
|
+
|
|
423
|
+
Note: with `coverage_ratchet = true` every pushed commit and its parent must
|
|
424
|
+
contain `coverage/coverage-summary.json` (Istanbul json-summary); commit a
|
|
425
|
+
baseline first or set it to `false`.
|
|
426
|
+
|
|
427
|
+
Note: with `findings_ratchet = true`, `[controls.findings]` says where the
|
|
428
|
+
floor lives (`floor`, default `compliance/ratchets/static-analysis-findings.yaml`)
|
|
429
|
+
and `[controls.findings.counters]` names the repository's own static-analysis
|
|
430
|
+
commands — a name -> command map the repository authors itself (e.g.
|
|
431
|
+
`lint = "just check-biome-lint"`), so no tool name is ever written into this
|
|
432
|
+
package; only the repository's own config names one. Each counter's command
|
|
433
|
+
must print one repository-relative path per line to stdout for a run that
|
|
434
|
+
completed (exit 0), one line per finding location — any other exit is that
|
|
435
|
+
counter failing to run, never zero findings and never a pass. The gate only
|
|
436
|
+
reads: it runs every declared counter fresh and fails naming the counter and
|
|
437
|
+
what regressed if its findings moved past the committed floor. It never
|
|
438
|
+
writes the floor — lowering it, to record an improvement, is a change a
|
|
439
|
+
human makes in the same commit as the fix, the same discipline
|
|
440
|
+
`coverage-floor.json` already keeps.
|
|
441
|
+
|
|
442
|
+
## Configuration — `adl-config.toml` `[controls.compliance]`
|
|
443
|
+
|
|
444
|
+
`install` also appends a `[controls.compliance]` table to the same shared
|
|
445
|
+
`adl-config.toml`, independently of `[controls]` (each table is its own
|
|
446
|
+
append-once/user-owned-afterwards span; installing, editing, or uninstalling one
|
|
447
|
+
never disturbs the other).
|
|
448
|
+
|
|
449
|
+
It is nested **under** `controls` rather than being a root-level `[compliance]`,
|
|
450
|
+
and that is load-bearing rather than cosmetic: `adl hook` decodes this same
|
|
451
|
+
shared file and rejects the whole document on an unrecognized **root** key, so a
|
|
452
|
+
root-level `[compliance]` turned every `adl hook` invocation in a repository
|
|
453
|
+
carrying it into a decode error. Keeping this package's config inside the one
|
|
454
|
+
root key it already owns needs no coordination with the other two tools — the
|
|
455
|
+
same "no tool parses another tool's table" rule the shared file is built on.
|
|
456
|
+
`tests/compliance-config.test.ts` guards this: the rendered config must only
|
|
457
|
+
ever use root keys `adl hook` accepts.
|
|
458
|
+
|
|
459
|
+
`[controls.compliance]` is strictly validated like `[controls]`
|
|
460
|
+
— unknown keys and wrong types are errors — except `[controls.compliance.trees]`, which is
|
|
461
|
+
a genuinely open string map: any key is accepted, only its value must be a
|
|
462
|
+
non-empty string.
|
|
463
|
+
|
|
464
|
+
| Key | Default | Effect |
|
|
465
|
+
|---|---|---|
|
|
466
|
+
| `version` | `1` | config schema version |
|
|
467
|
+
| `enabled` | `[]` | gate ids (`RST-001`) or `domain.name` addresses (`rust.acp-boundary`) to grade; empty = installed, nothing runs |
|
|
468
|
+
| `registry` | `"default"` | forward-compatible; today both values point at the same packaged registry YAML |
|
|
469
|
+
| `[controls.compliance.trees]` | `{}` (no entries) | per-key path overrides; a key absent here keeps the packaged (source-shaped) default for that key |
|
|
470
|
+
|
|
471
|
+
### Registry curation
|
|
472
|
+
|
|
473
|
+
The full compliance registry (145 rows) always ships and loads — `enabled` is
|
|
474
|
+
what decides which of those rows is ever graded, not what's present. The
|
|
475
|
+
packaged `[controls.compliance.trees]` defaults are shaped after the *original* source
|
|
476
|
+
repository the checks were authored against, not any arbitrary target repo. A
|
|
477
|
+
repository enabling any row needs its own `[controls.compliance.trees]` overrides for
|
|
478
|
+
whatever that row's scope actually needs in that repository's layout — this
|
|
479
|
+
package does **not** ship a pre-vetted "safe for any repo" subset; enabling a
|
|
480
|
+
row without pointing its trees at the right paths will simply grade the wrong
|
|
481
|
+
(or nonexistent) files.
|
|
482
|
+
|
|
483
|
+
## Development
|
|
484
|
+
|
|
485
|
+
```
|
|
486
|
+
bun install
|
|
487
|
+
bunx tsc --noEmit
|
|
488
|
+
bun test --coverage # 100% lines + functions gate (bunfig.toml)
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
Tests run real git in temporary repositories under `.scratchpad/test-tmp/`
|
|
492
|
+
(gitignored), exercising the installed stubs end to end. CI:
|
|
493
|
+
`azure-pipelines.yml` (publishing present but disabled).
|