-
Notifications
You must be signed in to change notification settings - Fork 158
Fold integration drift gate into 'apm audit --drift' (or 'apm install --check') #1071
Copy link
Copy link
Closed
Labels
area/audit-policyapm-policy.yml schema, custom_checks, install-time enforcement.apm-policy.yml schema, custom_checks, install-time enforcement.area/ci-cdGitHub workflows, merge queue, gh-aw integrations, release pipeline.GitHub workflows, merge queue, gh-aw integrations, release pipeline.area/cliCLI command surface, flags, help text (cross-cutting).CLI command surface, flags, help text (cross-cutting).enhancementDeprecated: use type/feature. Kept for issue history; will be removed in milestone 0.10.0.Deprecated: use type/feature. Kept for issue history; will be removed in milestone 0.10.0.priority/highShips in current or next milestoneShips in current or next milestonestatus/needs-designDirection approved, design discussion required before code.Direction approved, design discussion required before code.status/triagedInitial agentic triage complete; pending maintainer ratification (silence = approval).Initial agentic triage complete; pending maintainer ratification (silence = approval).theme/governanceGoverned by policy. apm-policy, audit, enforcement, enterprise rollout.Governed by policy. apm-policy, audit, enforcement, enterprise rollout.type/featureNew capability, new flag, new primitive.New capability, new flag, new primitive.
Metadata
Metadata
Assignees
Labels
area/audit-policyapm-policy.yml schema, custom_checks, install-time enforcement.apm-policy.yml schema, custom_checks, install-time enforcement.area/ci-cdGitHub workflows, merge queue, gh-aw integrations, release pipeline.GitHub workflows, merge queue, gh-aw integrations, release pipeline.area/cliCLI command surface, flags, help text (cross-cutting).CLI command surface, flags, help text (cross-cutting).enhancementDeprecated: use type/feature. Kept for issue history; will be removed in milestone 0.10.0.Deprecated: use type/feature. Kept for issue history; will be removed in milestone 0.10.0.priority/highShips in current or next milestoneShips in current or next milestonestatus/needs-designDirection approved, design discussion required before code.Direction approved, design discussion required before code.status/triagedInitial agentic triage complete; pending maintainer ratification (silence = approval).Initial agentic triage complete; pending maintainer ratification (silence = approval).theme/governanceGoverned by policy. apm-policy, audit, enforcement, enterprise rollout.Governed by policy. apm-policy, audit, enforcement, enterprise rollout.type/featureNew capability, new flag, new primitive.New capability, new flag, new primitive.
Type
Projects
Status
Done
Problem
CI's APM Self-Check job (
.github/workflows/ci.yml:160) runsapm installthen assertsgit status --porcelain -- .github/ .claude/ .cursor/ .opencode/is empty as a shell-level drift gate. This catches one drift mode that the in-treeapm audit --cidoes not:audit --cicatches?content-integritySHA-256).apm/source added but neverapm installdThe third row bit PR #1067 (commit
a51921e4): adding.apm/instructions/linting.instructions.mdwithout re-runningapm installslipped past audit and was only caught by porcelain in CI.Why this matters
commands/audit.py:5already declares--driftis a planned mode. Folding the integration drift gate into it (orapm install --check) would:apmcommand to mirror CI locally;microsoft/apm-actionopt in viadrift-check: trueinstead of templating bash;run: |block fromci.yml.Proposed shape
Either:
apm audit --drift-- runsapm installagainst a scratch directory, diffs the resulting governed paths (.github/,.claude/,.cursor/,.opencode/) against the working tree, exits non-zero with a diff on mismatch.apm install --check-- same logic but as a no-write mode ofinstallitself (closer topip install --dry-runorterraform plan).Either should:
.apm/source not yet integrated).local_deployed_files/local_deployed_file_hashes.Follow-on
Once shipped, update
microsoft/apm-actionto exposedrift-check: true(companion to existingcompile: true), and migrate.github/workflows/ci.ymlto call it instead of the inline porcelain script.Context