Audience: CTOs, senior engineers and anyone who wants to know what an audit looks at. Source of truth:
catalogue.jsonand the check files inaudit/checks/.Generated by
dev/build_masters.pyfrom the catalogue and the check files. Do not edit it by hand: change a source, then runmake update-masters.make checkfails when this page is stale.
The audit runs 76 checks in 13 families (catalogue 0.7.0). 62 are scored; the rest are reported for the whole picture and earn no credit. The engine decides 74 checks from the files alone; the agent judges 2. Each check below says what passes and why it matters. To fix a finding, follow the playbook it names in the implement master list.
| Severity | Meaning |
|---|---|
BLOCKER |
An agent cannot work safely until this is fixed |
DEGRADER |
An agent can work, but slower, with more mistakes or with less trust in its result |
COSMETIC |
Worth fixing; it does not change what an agent can do |
| Area | The question it answers | Families | Checks |
|---|---|---|---|
| Agent context | Can an agent find the code, the rules and the documents it needs before it edits anything? | IDX, AGT, DOC, NAV |
25 (3 BLOCKER, 16 DEGRADER, 6 COSMETIC) |
| Command surface and quality gates | Can an agent run one command that formats, lints, type-checks and tests, and trust its answer? | CMD, TOOL, TST, BASE |
20 (3 BLOCKER, 14 DEGRADER, 3 COSMETIC) |
| Enforcement in CI | Does the pipeline run the same gate the agent runs locally, and does it block the merge? | CI |
5 (2 BLOCKER, 3 DEGRADER) |
| Reproducible execution | Does the same command give the same result on a fresh machine, without a human in the loop? | EXEC |
8 (4 BLOCKER, 4 DEGRADER) |
| Safety boundaries and secrets | Is it written down, and enforced, what an agent must never touch or reveal? | CON, SEC |
7 (4 BLOCKER, 2 DEGRADER, 1 COSMETIC) |
| Team hygiene (informational) | Is the repository run like a team project? Reported for the whole picture; never scored. | HYG |
11 (11 COSMETIC) |
Can an agent find the code, the rules and the documents it needs before it edits anything?
3 checks: 2 BLOCKER, 1 DEGRADER.
BLOCKER · scored · engine check · fixed by register-index
- Passes when: a readable project- or user-level config names
codebase-memory-mcp. - Why it matters: Every later check and playbook assumes an agent can reach the index; without registration an agent
has no way to discover that one should exist (
docs/framework/phased-approach.md§ Phase 1: Agentic Bootstrap).
BLOCKER · scored · engine check · fixed by register-index
- Passes when: the index answers a structural query for this checkout, or the engine finds a store row whose root resolves to the target.
- Why it matters: An index of a different checkout is worse than none: it answers confidently with structure that no
longer exists (
docs/framework/phased-approach.md§ Activities).
DEGRADER · scored · engine check · fixed by register-index
- Passes when: the index's recorded revision matches
HEAD, or a direct freshness query reports no drift. - Why it matters: A stale graph is stale context: an agent edits based on symbols that have already moved or been
deleted (
docs/framework/phased-approach.md§ Activities).
12 checks: 1 BLOCKER, 10 DEGRADER, 1 COSMETIC.
BLOCKER · scored · engine check · fixed by adapt-agents-md
- Passes when:
AGENTS.mdexists at the repository root in canonical case, is not shadowed by a harness override in the same directory, is at least 400 characters, and contains no stub marker. - Why it matters:
AGENTS.mdis the entry point every harness is guaranteed to read; without it an agent infers conventions from whatever code it happens to open first (greenfield/README.md § 6.1 AGENTS.md).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: every declared component has its own
AGENTS.md(ratio 1.0), or there are no declared components beyond the root. - Why it matters: Monorepos have different rules per component; a single root file forces one component's conventions onto another (Phased-Approach.md § Activities).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: the file names
docs/as the documentation home,docs/STYLE_GUIDE.mdas the authoring rules, and the scratch-workspace directory as off-limits scratch, each on its own line. - Why it matters: Agents must know where permanent truth lives and what is off-limits, or they treat scratch notes as architecture (greenfield/README.md § 5.2 Templates & Guides).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: a sentence ties a stated documentation trigger (public interface, observable behaviour, architecture, an ADR, or documentation itself) to updating docs in the same change set.
- Why it matters: Docs must change in the same change set as the code they describe, or specs drift within days (greenfield/README.md § 5.2 Templates & Guides).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: all seven verbs (
format,format:check,lint,typecheck,test,check,security) are named in the instruction file and each resolves on a runner. - Why it matters: The agent needs the sanctioned verification path stated, or it invents one (
npx vitestwhere the project uses something else), diverging from what CI actually runs (greenfield/README.md § 1.4 The standardized command surface).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: at least two boundary rules each name a path that exists in the repository.
- Why it matters: Boundary rules must be stated, not inferred, or edits cross module lines nothing ever wrote down (greenfield/README.md § 6.1 AGENTS.md).
DEGRADER · scored · engine check · fixed by add-deny-rules
- Passes when: a prohibitions section exists and covers all four concerns (tests, generated files, the default branch, secrets) with an explicit rule for each.
- Why it matters: Explicit prohibitions work; implicit ones do not — an agent that is never told "never weaken a test" will weaken one (Phased-Approach.md § Activities).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: no vendor-only competitor exists, no shadowed pair exists, and either every known harness is reached or the file states which harnesses it does not reach.
- Why it matters:
AGENTS.md,CLAUDE.mdand.cursorrulesdisagreeing is obeyed as ambiguity, not flagged as a defect — inconsistent behaviour across harnesses, with no way to trace why (Phased-Approach.md § Phase 1: Agentic Bootstrap).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: the file states which branches exist and whether an agent may tag, release, publish, deploy or push, and names every branch the declared branch rules protect by name.
- Why it matters: Agents must know whether they may tag, release or push, or one triggers a release it had no authority to cut (Phased-Approach.md § Phase 1: Agentic Bootstrap).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: no configured pointer names a missing file, and no deferral phrase in the entry file names a file left unconfigured.
- Why it matters: A rule the agent is told to "read elsewhere first" is only as reliable as the harness's own willingness to follow that pointer — an unconfigured deferral is a rule that may never load (Phased-Approach.md § Phase 1: Agentic Bootstrap).
DEGRADER · scored · agent judgement · fixed by adapt-agents-md
- Passes when: at least 80% of rule lines are specific (by the count above) and every specific line checked resolves against the repository; no overview section exceeds roughly a fifth of the file (A14: the overview is optional and must not dominate).
- Why it matters: This is where A14 (above) is judged directly: a file full of generic, inferable advice costs inference time for no benefit, which is R-16's own finding (Phased-Approach.md § Activities).
COSMETIC · scored · engine check · fixed by adapt-agents-md
- Passes when: the rules exist and name the reader, how to report and how to ask for a decision.
- Why it matters: Agents report to people and ask them for decisions; without written rules each agent picks its own layout and the reader digs for the bottom line (greenfield/README.md § 5.2 Templates & Guides).
5 checks: 3 DEGRADER, 2 COSMETIC.
DEGRADER · scored · engine check · fixed by establish-docs-contract
- Passes when: at least one Markdown file exists anywhere under
docs/. - Why it matters:
docs/is the declared home for permanent documentation; without it on day one, documentation has nowhere canonical to start (greenfield/README.md § 5.1 Diátaxis Framework).
DEGRADER · scored · engine check · fixed by establish-docs-contract
- Passes when:
docs/STYLE_GUIDE.mdexists and the instruction file names it. - Why it matters: Agents need authoring rules they can cite instead of restating per page, or rules get restated and drift (greenfield/README.md § 5.2 Templates & Guides).
DEGRADER · scored · engine check · fixed by establish-docs-contract
- Passes when: no scratch directory exists anywhere, or one exists, is matched by an ignore rule, and nothing under it is tracked.
- Why it matters: Transient scratch must be separable and off-limits, or an agent reads work-in-progress notes as the current, settled requirement (greenfield/README.md § 6.2 Agent Scratchpad).
COSMETIC · scored · engine check · fixed by establish-docs-contract
- Passes when: a numbered-ADR directory exists, holds at least one entry, an index lists every entry, and no entry is a tombstone.
- Why it matters: Architectural decisions need a location and a registry, or the rationale lives only in chat and pull requests, and agents re-litigate settled decisions (greenfield/README.md § 5.2 Templates & Guides).
COSMETIC · scored · engine check · fixed by establish-docs-contract
- Passes when: every pass level holds.
- Why it matters: An agent reads the docs to learn the repository, and it writes more of them. Long sentences and vague words cost the next reader time. A flow with no diagram is slow to follow (greenfield/README.md § 5.2 Templates & Guides).
5 checks: 2 DEGRADER, 3 COSMETIC.
DEGRADER · scored · engine check · fixed by establish-docs-contract
- Passes when: at least one non-root component is declared by a build manifest, or the repository is single-root and the root itself declares a manifest.
- Why it matters: Constraint Engineering needs a bounded component to scope work to; without one, blast radius cannot be scoped or reviewed (docs/framework/overview.md § Applicability).
DEGRADER · scored · engine check · fixed by establish-docs-contract
- Passes when: at least one entry-point signal is found for the detected ecosystem(s).
- Why it matters: Agents must find where execution begins before they can reason about what is live versus dead code (greenfield/README.md § 1.9 Core DI interface file + public entry point).
COSMETIC · scored · engine check · fixed by establish-docs-contract
- Passes when: no oversized file, no catch-all directory, no checked-in binary, and no minified asset is found.
- Why it matters: Oversized files, catch-all directories, checked-in binaries and minified assets are exactly where agents are drawn when they explore, and exactly where they should not be working (Phased-Approach.md § Phase 1: Agentic Bootstrap).
COSMETIC · not scored · engine check · fixed by
establish-docs-contract
- Passes when: a
docs/architecture/file, an ADR directory, or a diagram file exists (any one). - Why it matters: A short map lets an agent orient before it explores instead of discovering structure by trial and error (Phased-Approach.md § Key Deliverables).
COSMETIC · not scored · engine check · fixed by
establish-docs-contract
- Passes when: every public symbol found (in the one censused language) is documented.
- Why it matters: Phase 2 territory, reported here only as a signal: without any documentation coverage signal an agent must read whole function bodies just to learn their signatures (Phased-Approach.md § Key Deliverables).
Can an agent run one command that formats, lints, type-checks and tests, and trust its answer?
4 checks: 2 BLOCKER, 2 DEGRADER.
BLOCKER · scored · engine check · fixed by define-command-surface
- Passes when: all seven verbs (
format,format:check,lint,typecheck,test,check,security) resolve, each on the same one runner. - Why it matters: The verbs are the contract; without them resolving an agent has no shared vocabulary for "how do I verify this" and invents its own command (greenfield/README.md § 1.4 The standardized command surface).
BLOCKER · scored · engine check · fixed by define-command-surface
- Passes when:
check's body invokes, directly or by a resolved verb, all three of a format-check, a typecheck and a test run. - Why it matters: A single pre-merge gate must exist and be the same one everywhere, or different people gate on different subsets of the verbs (greenfield/README.md § 1.4 The standardized command surface).
DEGRADER · scored · engine check · fixed by define-command-surface
- Passes when: at most one runner defines
check, or every runner but the primary delegates to it. - Why it matters: A runner other than the authoritative one must delegate, not compose its own gate, or nobody can tell which definition is the real one when they disagree (greenfield/README.md § 1.4 The standardized command surface).
DEGRADER · scored · engine check · fixed by define-command-surface
- Passes when: no read-only verb's command invokes a write verb, directly or by indirection.
- Why it matters: A gate that mutates the working tree while "verifying" it cannot be trusted to report on the code that was actually committed (greenfield/README.md § 1.4 The standardized command surface).
7 checks: 5 DEGRADER, 2 COSMETIC.
DEGRADER · scored · engine check · fixed by configure-quality-tools
- Passes when: a formatter config file is present and a
formatverb resolves on some runner. - Why it matters: Formatting must be free and non-negotiable, or every diff mixes style with substance and review
spends attention on noise (
docs/framework/phased-approach.md§ Activities).
DEGRADER · scored · engine check · fixed by configure-quality-tools
- Passes when: a linter config file is present and a
lintverb resolves on some runner. - Why it matters: A linter catches classes of defect before tests exist to catch them, including regressions an
agent introduces that no test yet covers (
docs/framework/phased-approach.md§ Activities).
DEGRADER · scored · engine check · fixed by configure-quality-tools
- Passes when: at least one strict-mode signal is found (
tsconfig.json: strict, mypy/pyright strict,<Nullable>enable</Nullable>, or atypecheckverb with--strict). - Why it matters: A strict type checker is the cheapest correctness gate available; without it, interface drift
between an agent's change and its callers is discovered at runtime instead of at review time
(
docs/framework/phased-approach.md§ Activities).
DEGRADER · scored · engine check · fixed by configure-quality-tools
- Passes when: at least one resolved verb's command matches a known dependency-audit invocation, and a CI step runs a dependency audit.
- Why it matters: Third-party risk is real and agents add dependencies; without a scan, a vulnerability can enter
through the very change an agent just made (
docs/framework/phased-approach.md§ Activities).
DEGRADER · scored · engine check · fixed by
add-hooks-and-commit-rules
- Passes when: a hook chain is wired (
.pre-commit-config.yaml,lefthook.yml/.yaml,core.hooksPath, or a referenced.husky/). - Why it matters: Enforcement must exist where an agent actually works, not only downstream in CI; a rule that lives only in CI is a rule an agent cannot honour before it commits (greenfield/README.md § 2.3 Git Hooks).
COSMETIC · scored · engine check · fixed by
add-hooks-and-commit-rules
- Passes when: a local rule (commitlint config,
commit-msghook file or equivalent pre-commit/lefthook stage) and a CI step that checks commit messages or the pull-request title are both found. - Why it matters: Release automation reads commit messages; without an enforced convention, version bumps and changelog generation silently stop working (greenfield/README.md § 2.3 Git Hooks).
COSMETIC · scored · engine check · fixed by
add-hooks-and-commit-rules
- Passes when: a guard in a wired hook chain names every branch the declared rules protect, or any guard is wired and no rules are declared.
- Why it matters: An agent commits on whatever branch is checked out. Without a local guard it learns that the branch is protected only when the push is refused, and then has to move its commits by hand (greenfield/README.md § 2.3 Git Hooks).
5 checks: 1 BLOCKER, 3 DEGRADER, 1 COSMETIC.
BLOCKER · scored · engine check · fixed by define-command-surface
- Passes when: a
testverb resolves and at least one test-source file exists. - Why it matters: An agent cannot verify a change it cannot run; a resolvable
testverb and a real suite are the floor every other test check stands on (greenfield/README.md § 3.2 Testing Policies).
DEGRADER · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: the test verb was run as a Tier-C probe and exited 0.
- Why it matters: Whether the suite is green today determines what an agent can safely attempt; without this an agent inherits a red baseline and cannot tell its own regressions from yours (greenfield/README.md § 3.2 Testing Policies).
DEGRADER · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: the census total is zero.
- Why it matters: A suite weakened with skip and expected-failure markers to reach green is the fingerprint of a gate that no longer catches the regressions it was meant to (greenfield/README.md § 3.2 Testing Policies).
DEGRADER · scored · engine check · fixed by adapt-agents-md,
add-baselines-and-ratchet
- Passes when: at least one entry document shows a single-test/subset invocation.
- Why it matters: Agent iteration speed is the workflow; without a documented single-test invocation an agent waits out the whole suite per attempt, or stops running tests altogether (Phased-Approach.md § Phase 1: Agentic Bootstrap).
COSMETIC · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: any one of the routes above finds coverage configured.
- Why it matters: A ratchet (
BASE-03) needs a number to hold the line on, and coverage is the number for the test surface; with none configured there is no floor to hold (greenfield/README.md § 3.1 vitest.config.ts).
4 checks: 4 DEGRADER.
DEGRADER · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: a baseline/suppression artifact is committed, or an equivalent mechanism is documented in
AGENTS.mdorCLAUDE.md. - Why it matters: Gates cannot be turned on over existing debt without mass failure; instrumentation that separates old debt from new debt must land first (Phased-Approach.md § Activities).
DEGRADER · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: an explicit numeric violation budget is committed somewhere the engine reads (
--max-warnings 12,max-issues: 5,violation_budget = 40). - Why it matters: The baseline must be a number, not an impression, or there is no way to tell whether debt is growing or shrinking (Phased-Approach.md § Activities).
DEGRADER · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: a numeric violation budget is committed, or a committed baseline artifact is referenced by name inside a CI workflow, or a comparison step is documented in one of the four entry documents.
- Why it matters: The policy must be executable, not aspirational, or every change quietly adds a little more debt on top of what was already frozen (Phased-Approach.md § Activities).
DEGRADER · scored · engine check · fixed by
add-baselines-and-ratchet
- Passes when: a coverage threshold is configured in test-runner configuration.
- Why it matters: Coverage is the most common form of the ratchet, and without a configured floor it decays invisibly, one untested branch at a time (greenfield/README.md § 4.1 Workflows).
Does the pipeline run the same gate the agent runs locally, and does it block the merge?
5 checks: 2 BLOCKER, 3 DEGRADER.
BLOCKER · scored · engine check · fixed by add-ci-parity
- Passes when: at least one workflow file exists and declares a pull-request trigger the engine's pattern recognises.
- Why it matters: Verification must be automatic and independent of the author, or "I ran the tests" before pushing is unverifiable by anyone else (greenfield/README.md § 4.1 Workflows).
BLOCKER · scored · engine check · fixed by add-ci-parity
- Passes when: every framework verb a CI command invokes also resolves locally.
- Why it matters: The gate an agent can run locally must be the gate that decides, or an agent optimises against a weaker local gate and discovers the real gap only at review (greenfield/README.md § 1.4 The standardized command surface).
DEGRADER · scored · engine check · fixed by add-ci-parity
- Passes when: no CI command names a runner target absent from every local runner manifest.
- Why it matters: A step with no local equivalent is a failure an agent cannot reproduce, so it cannot investigate or fix what CI is failing it on (greenfield/README.md § 1.4 The standardized command surface).
DEGRADER · scored · agent judgement · fixed by add-ci-parity
- Passes when: every job running a verb (or
check) gates on it — nocontinue-on-error, no swallowed exit code on the gating command — and the workflow is a required status check for merging (confirmed, not just assumed from the workflow file alone). - Why it matters: A pipeline that runs the verbs but does not fail the build when one of them fails is theatre, not enforcement (greenfield/README.md § 1.4 The standardized command surface).
DEGRADER · scored · engine check · fixed by add-ci-parity
- Passes when: every provider with workflow files has a linter that runs locally.
- Why it matters: An agent cannot run a workflow on its machine. A linter that knows the CI provider is its only check before a push: without one, a broken expression, a wrong action input or a script-injection risk is found only after the push (greenfield/README.md § 4.1 Workflows).
Does the same command give the same result on a fresh machine, without a human in the loop?
8 checks: 4 BLOCKER, 4 DEGRADER.
BLOCKER · scored · engine check · fixed by
pin-execution-environment
- Passes when: every detected pinnable ecosystem has at least one of its own pin files, or a matching
.tool-versionsline, or (node/python/go) the manifest-level constraint, and a pin reaches every module manifest of each pinned ecosystem. - Why it matters: An agent's runtime must be the repository's, not whatever happens to be on the host — otherwise the gate passes locally and fails in CI, or an agent reproduces nothing (greenfield/README.md § File Tree — What Gets Created).
BLOCKER · scored · engine check · fixed by
pin-execution-environment
- Passes when: every detected ecosystem's lockfile exists, is tracked, and (where parsing is attempted) agrees with the manifest.
- Why it matters: Every run must resolve identical dependencies; a lockfile that is missing, untracked, or stale turns "works on my machine" into a problem the agent inherits too (Phased-Approach.md § Phase 1: Agentic Bootstrap).
BLOCKER · scored · engine check · fixed by define-command-surface
- Passes when: a documented non-interactive install command exists, or a setup artifact exists and is named by one of the four doc files.
- Why it matters: An agent cannot answer an interactive prompt or provision a database by guessing; with no non-interactive path it is blocked before it can run anything (Phased-Approach.md § Phase 1: Agentic Bootstrap).
BLOCKER · scored · engine check · fixed by
env-inventory-and-secrets
- Passes when: every referenced key not on the allow-list is declared in a committed example file (including the case of no references at all).
- Why it matters: A variable the code needs but nobody wrote down fails at runtime, mid-task, and the agent debugs an environment problem it has no way to see coming (greenfield/README.md § File Tree — What Gets Created).
DEGRADER · scored · engine check · fixed by untrack-generated
- Passes when: no tracked path is classified
GENERATED, or every trackedGENERATEDpath carries a generated-file header in its first 20 lines. - Why it matters: An agent that edits a file the build regenerates loses its work silently, often not until the next CI run or review (Phased-Approach.md § Phase 1: Agentic Bootstrap).
DEGRADER · scored · engine check · fixed by adapt-agents-md
- Passes when: every documented command resolves, or no fenced shell command is documented at all.
- Why it matters: An agent runs the documented command literally; a command that does not resolve is the most expensive brownfield trap there is, discovered only after the agent has already acted on it (Phased-Approach.md § Phase 1: Agentic Bootstrap).
DEGRADER · scored · engine check · fixed by untrack-generated
- Passes when: each of the five concerns has at most one matching root config (including zero).
- Why it matters: One concern, one authoritative answer; with two configs for the same concern an agent (or a human) picks whichever result turns up first, which is not the same thing as picking correctly (Phased-Approach.md § Phase 1: Agentic Bootstrap).
DEGRADER · scored · engine check · fixed by
pin-execution-environment
- Passes when: no literal tool version in any file read, or the file is matched by a Renovate
customManagers(orregexManagers) file pattern. - Why it matters: Dependabot and Renovate read manifests, not commands. A tool version typed into a
Makefile, a workflow or a hook gets no security alert and no update, and an agent asked to upgrade the tool must find every copy by hand.
Is it written down, and enforced, what an agent must never touch or reveal?
4 checks: 2 BLOCKER, 1 DEGRADER, 1 COSMETIC.
BLOCKER · scored · engine check · fixed by add-deny-rules
- Passes when: the prohibitions section names, in a code span, at least one path or pattern that matches a file or directory of the repository.
- Why it matters: An agent cannot respect a boundary that exists only in someone's head; the deny list must be a concrete, written artifact, not an unstated expectation (Phased-Approach.md § Activities).
BLOCKER · scored · engine check · fixed by add-deny-rules
- Passes when: the prohibitions section names, in code spans, every test directory found.
- Why it matters: Tests are the safety net; an agent that may freely edit them is not actually gated by them, and can make a failure disappear instead of fixing it (docs/framework/overview.md § Principles).
DEGRADER · scored · engine check · fixed by add-deny-rules
- Passes when: no candidate root exists, or every root that exists is matched by an ignore rule and nothing under any of them is tracked.
- Why it matters: Scratch notes must not become context an agent treats as source of truth; a tracked or unignored scratch directory pollutes every session that follows (greenfield/README.md § 6.2 Agent Scratchpad).
COSMETIC · not scored · engine check · no playbook (the audit emits it as an input)
- Passes when: the draft was written to
do-not-do.draft.mdbeside the report. - Why it matters: The scan knows what is dangerous in this repository; without it, every adoption starts from a generic template that fits nobody and an agent (or a human) has to rediscover the same paths by exploring (Phased-Approach.md § Activities).
3 checks: 2 BLOCKER, 1 DEGRADER.
BLOCKER · scored · engine check · fixed by
env-inventory-and-secrets
- Passes when: no
.env/.env.*file is tracked, and ignore rules cover both shapes. - Why it matters: An agent's context is transmitted and logged; a tracked
.envfile is a credential exposed through the tool added for safety, not despite it (Phased-Approach.md § Phase 1: Agentic Bootstrap).
BLOCKER · scored · engine check · fixed by
env-inventory-and-secrets
- Passes when: no tracked text file (or, with tracked state unavailable, no file in the whole inventory) contains a credential-shaped line outside the repository's own allowlist.
- Why it matters: A hardcoded credential is the same exposure as a tracked
.envfile, just inside source or configuration instead of a dedicated file (Phased-Approach.md § Activities).
DEGRADER · scored · engine check · fixed by
env-inventory-and-secrets
- Passes when: ignore rules cover every one of the eleven documented secret shapes.
- Why it matters: The guard must exist before the accident — ignore rules that do not cover a secret shape let a single careless commit become permanent history (Phased-Approach.md § Phase 1: Agentic Bootstrap).
Is the repository run like a team project? Reported for the whole picture; never scored.
11 checks: 11 COSMETIC.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: a root README exists, reads as text, has at least 200 characters of body, carries no placeholder marker, and is not a bare title.
- Why it matters: An agent (or a person) must be able to orient itself in this project in seconds, not by opening files at random.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: a
CODEOWNERSfile exists at one of the recognised locations. - Why it matters: Review routing should be machine-readable, not tribal knowledge about who owns what.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: at least one
pull_request_template*file exists. - Why it matters: A reviewer needs the same information every time a change is filed, not whatever the author happened to think to write.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: at least one file exists under
.github/ISSUE_TEMPLATE/, or.github/ISSUE_TEMPLATE.mdexists. - Why it matters: A bug report or feature request filed in a structured way is faster to triage than free text.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: at least one
CONTRIBUTING-prefixed document exists at a repository-level location. - Why it matters: A contributor should not have to reverse-engineer the setup, the gate and the review flow from reading commit history.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: at least one
SECURITY-prefixed document exists at a repository-level location. - Why it matters: A vulnerability should have a documented, private way to be reported, not left to whatever channel the reporter happens to try first.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: a changelog document exists and its last commit is within 365 days of
HEAD's. - Why it matters: A reader needs to see what changed between two versions without diffing the whole history themselves.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: at least one text/Markdown document whose name contains
releaseexists. - Why it matters: Whoever cuts the next release should be following a written process, not reconstructing it from whoever did it last time's memory.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: a configuration exists, every detected ecosystem has an entry, and no entry has the trap.
- Why it matters: Dependencies should be patched on a schedule, not discovered stale during an incident. A configuration that silently misses an ecosystem, or whose rules do not reach security updates, looks like a policy and is not one.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: a root license file (one of the five recognised name prefixes) exists.
- Why it matters: Anyone using or contributing to the code needs to know the terms under which it may be used, without asking.
COSMETIC · not scored · engine check · fixed by add-repo-hygiene
- Passes when: rules are declared as code, and a two-branch model has a source-branch check.
- Why it matters: Protected-branch rules should be reviewed like any other change, not configured by hand in a settings page nobody diffs. In a two-branch model the release branch must also refuse pull requests from anything but the integration branch, and a ruleset cannot say that.
- The full rubric of each check (PARTIAL, FAIL, evidence, pitfalls):
audit/checks/. - Each check's requirement and framework section: Checks to framework map.
- How an audit runs: Run an audit.