Developer environment audit · Updated 2026-06-27

Developer Environment Drift Audit: README vs mise.toml vs CI vs Package Scripts vs Agent Tasks

A practical audit checklist for finding setup drift between local developer machines, README instructions, mise, uv, CI, package scripts, env examples, and coding-agent task rules.

Developer environment drift is what happens after a project setup contract is written but reality moves on. README says one thing, CI runs another, `mise.toml` pins different tools, package scripts hide extra commands, `.env.example` is stale, and coding agents learn the wrong workflow from old docs.

This audit gives teams a periodic way to compare the declared setup contract against what actually happens on clean machines, CI runners, local shells, and agent workspaces. It is the maintenance layer after adopting mise, uv, project setup contracts, and agentic coding governance.

RepoDaily verdict

Run a drift audit whenever tool versions, CI images, onboarding docs, package managers, environment variables, or agent task rules change. The goal is not a prettier README; it is one reproducible setup path that humans, CI, and coding agents can all follow without hidden tribal knowledge.

Quick matrix

Drift surfaceCompareHealthy signalDrift signal
Tool versions`mise.toml`, lockfiles, CI image, READMESame pinned Node/Python/uv/pnpm/Terraform versionsREADME says Node 20, mise pins 22, CI uses latest
Python workflowuv commands, pyproject, uv.lock, CI setupREADME and CI both use `uv sync` / `uv run`Local uses uv, CI still installs requirements manually
Package scriptspackage.json, Makefile, mise tasks, docsTasks call one shared command pathnpm scripts hide extra flags not in README
Environment variables`.env.example`, mise env, CI secrets, docsVariable names and secret boundaries matchCI needs variables never documented locally
Build and test commandsREADME, CI YAML, mise tasks, package scriptsOne documented command reproduces CI core checksCI fails only because hidden setup runs there
Agent task rulesCLAUDE.md, Codex policy, denied paths, task docsAgents use the same safe commands and denied-path policyAgents invent setup from stale README fragments
Release pathrelease scripts, CI deploy jobs, README, tasksDeploy/release tasks are risk-labeled and ownedRelease uses undocumented local credentials or versions
Onboarding evidencefresh clone, clean machine, PR review notesNew developer can run setup without private contextSetup depends on asking the one person who knows

Environment drift scorecard

Score each repo 0–2 before claiming setup is reproducible.

Audit area0 points1 point2 pointsAudit question
README parityOutdated or incompleteMostly correctMatches current setup and CICan a new teammate follow it today?
mise/uv alignmentAbsent or contradictoryPartially alignedPins and commands match actual workflowDo tool pins match what CI runs?
CI transparencyHidden setupSome docsCore CI commands are documented locallyCan local dev reproduce CI failure?
Env hygieneVariables unknownExamples existSecret boundaries and examples maintainedWhich variables are secret and where sourced?
Task ownershipNo ownersInformal ownerTasks and setup files have reviewersWho approves setup drift fixes?
Agent compatibilityAgents use guessesSome guidanceAgent rules mirror setup contractWould Claude/Codex run the same safe path?

30-minute developer environment drift audit

Use this plan for one repository before a release, onboarding push, or agent rollout.

0–5 min: surface inventory

List README, mise.toml, pyproject/uv.lock, package scripts, Makefiles, CI YAML, env examples, and agent docs.

Success checkAll setup surfaces are visible.

5–12 min: local path check

Run or inspect the documented install, test, build, and dev commands from a clean perspective.

Success checkThe local happy path is known or gaps are explicit.

12–18 min: CI path check

Compare CI image, install steps, cache, commands, versions, and secret injection with local docs.

Success checkCI differences are named as intentional or drift.

18–24 min: env and agent check

Compare env examples with CI/runtime variables and check agent instructions for safe commands.

Success checkSecrets and agent commands match policy.

24–30 min: drift fix decision

Choose the source of truth, assign owner, open drift PR, or schedule a deeper audit.

Success checkThe audit produces a concrete next change, not only notes.

Drift audit flow

  1. Start from a clean clone and list every declared setup surface: README, `mise.toml`, uv files, package scripts, Makefiles, CI YAML, env examples, CLAUDE.md, and agent policy files.
  2. Record the actual local happy path: install tools, sync dependencies, run tests, run build, and start the dev server.
  3. Record the actual CI path: image, install steps, cache, commands, secret injection, build/test/deploy jobs, and version pins.
  4. Compare local, CI, docs, and agent rules line by line; mark differences as intentional, stale, unknown, or dangerous.
  5. Fix the smallest source of truth first: update `mise.toml`, uv lock, README, CI commands, or task definitions so one path is authoritative.
  6. Assign owners and a next audit date so drift does not return silently.

Scenario table

ScenarioAudit focusFix pattern
New developer cannot start projectREADME vs clean-machine setupRewrite happy path and add missing tool pins
CI fails but local passesCI image, cache, command flags, env vars, tool versionsMake CI mirror README or document intentional differences
uv migration partially doneuv.lock, pyproject, CI install, old requirements filesChoose uv as source of truth or mark it optional
mise adopted but ignoredmise.toml vs package scripts vs CIMake README and CI call mise-backed commands
Agent-generated PR uses wrong commandCLAUDE.md/Codex policy vs setup contractUpdate agent instructions and denied-command policy
Release depends on one laptoprelease task, credentials, tool versions, CI deploy pathMove release into owned task/CI path with secret manager rules
Env examples are stale.env.example, docs, CI secrets, runtime configRegenerate example names and classify secret/non-secret values

Drift risk checklist

False reproducibility

A green CI badge does not prove local setup works, and a working laptop does not prove CI can reproduce it.

README archaeology

Old setup instructions train humans and agents to run outdated commands.

Hidden CI behavior

Undocumented install flags, cache keys, and environment variables make failures hard to debug locally.

Secret drift

Environment variables can change name, source, or meaning without `.env.example` or docs being updated.

Tool version split-brain

Generated files and lockfiles drift when developers and CI use different tool versions.

Agent drift amplification

Coding agents amplify stale docs because they can run wrong setup steps faster than humans notice.

Audit implementation patterns

Clean-machine audit

Run the happy path on a machine or container without preinstalled project tools.

Command inventory

List every setup, test, build, dev, release, and deploy command from README, CI, package scripts, mise, and Makefiles.

Version diff

Compare tool versions from mise, package manager, lockfiles, CI image, and runtime logs.

Env diff

Compare `.env.example`, docs, CI secrets, runtime config, and secret-manager entries by variable name and meaning.

Agent dry run

Ask the coding-agent instructions which commands are safe, then verify they match the project setup contract.

Drift PR template

Every fix PR should state drift found, source of truth, files changed, local proof, CI proof, and next audit date.

FAQ

Short answers for teams auditing developer environment drift.

How often should we run a drift audit?

Run it before releases, after toolchain migrations, before onboarding cohorts, and before enabling coding agents on a repo.

Is drift always bad?

No. CI may intentionally differ from local setup. The problem is undocumented or unowned drift.

What is the best source of truth?

Usually a small combination: `mise.toml` for tools/tasks, uv files for Python dependencies, README for human path, and CI for enforcement.

Why include coding agents in an environment audit?

Agents read docs and run commands. If setup docs are stale, agents can multiply mistakes quickly.

Related radar

Infrastructure & Runtime Radar

Related RepoDaily briefs

Sources

  1. mise documentation
  2. mise tasks documentation
  3. mise environments documentation
  4. uv documentation
  5. uv project guide
  6. gstack
  7. Claude Code docs
  8. OpenAI Codex CLI docs

Feedback

Did this page help you make a decision?

Anonymous feedback helps RepoDaily improve what is actually useful.

Report outdated or missing evidence