Skip to content

Latest commit

 

History

History
207 lines (178 loc) · 9.85 KB

File metadata and controls

207 lines (178 loc) · 9.85 KB

Documentation audit

This audit checks the docs as a system: entry points, root-level process and legal files, project scope, setup and validation notes, safety and privacy posture, architecture and planning docs, local links, and the places where code, tests, workflows, and docs meet.

Everything below the marker is generated from the tree by tools/doc_audit.py. Run make docs-audit to regenerate it; make docs-audit-check and tests/test_doc_audit.py fail the build if the committed block has drifted from the repository. The counts are therefore never older than the commit that ships them.

That is the point of this rewrite. The previous version of this file was hand-typed on 2026-07-08 and nothing regenerated or checked it, so its pass verdicts stayed while its evidence went stale. By 2026-08 its test-file count was low by roughly 3x, its workflow list named four of six — omitting the daily live-site sentinel and the signed release pipeline, the two an outside reviewer would most want to see audited — and its architecture-doc count was smaller than the ADR directory alone. A document published to show that this project's process claims are real had become a validation surface reporting success about records it no longer inspected, which is the exact failure this repository's other gates exist to prevent.

Two things the generator deliberately does not do:

  • It does not print pass for a count. A presence check and a link check are predicates and can pass or fail. "100 test files" is an inventory number, not a verdict, and the old table's standing pass on a "Validation surface" row whose evidence was a test-file count borrowed authority the number never had. Counts are reported as inventory.
  • It does not stamp a date. A generated timestamp would drift every day and make the drift check meaningless; git already dates the file. The dated narrative of the original sweep is kept below, outside the generated block, where it reads as history rather than as a current verdict.

Scope notes

  • Generated sites, deployed app routes, raw third-party HTML captures, and golden fixture websites are product or data surfaces, not authored documentation, and are excluded from the inventory and the link counts.
  • docs/standards/ is vendored from the portfolio standards repository. It is counted as a content group rather than listed file by file, so it stays visible without swamping the inventory.
  • The link check covers relative Markdown links only. External URLs are not fetched: this gate is about links that must resolve inside the tree, and a network check would make it non-deterministic.

Remediation history

2026-07-08 sweep (historical record, not a current verdict). That pass:

  • added the missing root-level legal, conduct, contribution, and security files it found absent;
  • added docs/PROJECT-SCOPE.md as the plain-language project and boundary map;
  • added the first version of this audit record so future doc changes had a dated baseline;
  • added or refreshed the docs index so scope, audit, and primary docs were easy to find;
  • added docs/standards/README.md.

2026-08-14. Replaced the hand-typed tables with the generated block below, after the counts were found to be roughly 3x out of date with nothing in the repository able to refresh or contradict them.

Everything between these markers is generated by tools/doc_audit.py from the tree at this commit. Do not edit it by hand: run make docs-audit. make docs-audit-check (and tests/test_doc_audit.py) fail if it has drifted.

Presence and link checks

These are real predicates, so they can pass or fail.

Check Result Evidence
Entry doc pass README.md
Root process docs pass CONTRIBUTING.md, SECURITY.md, CHANGELOG.md
Root legal, citation, and conduct docs pass LICENSE, NOTICE, CITATION.cff, CODE_OF_CONDUCT.md
Root-adjacent GitHub templates pass .github/PULL_REQUEST_TEMPLATE.md, .github/CODEOWNERS
Local doc links resolve pass 446 relative links checked in 91 Markdown files; 0 unresolved

Inventory

Counts, not verdicts. A count cannot pass or fail; it can only be current, which is what generating it from the tree buys.

Surface Count Evidence
Hand-authored docs 95 Markdown at the repository root and under docs/, data/, infra/, notebooks/, schema/, src/, tests/, web/, plus the root legal and template files
Test files 107 tests/test_*.py
Workflow files 6 .github/workflows/*.yml
Grouped/vendored doc content 16 docs/standards/ (16)

By category

Up to 5 representative files per category; the complete list follows below.

Category Count Representative files
architecture and interfaces 16 docs/adr/0000-record-architecture-decisions.md, docs/adr/0002-exposure-normalization-and-confidence-intervals.md, docs/adr/0003-pure-python-statistics-and-planar-geometry.md, docs/adr/0004-standards-applicability.md, docs/adr/0005-build-pages-artifact-before-deployment.md, plus 11 more
entry points and repo process 11 .github/CODEOWNERS, .github/PULL_REQUEST_TEMPLATE.md, CHANGELOG.md, CITATION.cff, CODE_OF_CONDUCT.md, plus 6 more
examples and guides 4 docs/teaching/FACILITATOR-GUIDE.es.md, docs/teaching/FACILITATOR-GUIDE.md, notebooks/README.md, notebooks/teaching/README.md
other docs 43 benchmarks/README.md, benchmarks/SCORECARD.md, data/README.md, data/published/davis-ranked.md, data/published/davis-sensitivity.md, plus 38 more
planning and research 9 docs/RESEARCH-ROADMAP.md, docs/ROADMAP.md, docs/ideation/01-deep-dive.md, docs/ideation/02-large-scale-fixes.md, docs/ideation/03-expansions.md, plus 4 more
safety, privacy, accessibility, and audits 12 docs/ACCESSIBILITY.md, docs/DOCUMENTATION-AUDIT.md, docs/DPIA.md, docs/INTAKE-AND-ABUSE.md, docs/RE-IDENTIFICATION.md, plus 7 more

Workflow files checked

  • .github/workflows/ci.yml
  • .github/workflows/live-integrity.yml
  • .github/workflows/mutation.yml
  • .github/workflows/release.yml
  • .github/workflows/scorecard.yml
  • .github/workflows/secret-scan-scheduled.yml

Package and workspace metadata

  • Node workspace web/package.json (scripts: axe, contract, rtl).
  • Python package nearmiss (>=3.11).

Full hand-authored doc inventory

  • .github/CODEOWNERS
  • .github/PULL_REQUEST_TEMPLATE.md
  • CHANGELOG.md
  • CITATION.cff
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • DEFINITION_OF_DONE.md
  • LICENSE
  • NOTICE
  • README.md
  • SECURITY.md
  • benchmarks/README.md
  • benchmarks/SCORECARD.md
  • data/README.md
  • data/published/davis-ranked.md
  • data/published/davis-sensitivity.md
  • data/published/preregistration/README.md
  • data/published/riverside-ranked.md
  • data/published/riverside-sensitivity.md
  • docs/ACCESSIBILITY.md
  • docs/ADAPTING.md
  • docs/BRAND.md
  • docs/CLAIMS.md
  • docs/COUNTY-DRILLDOWN-IMPLEMENTATION-PLAN.md
  • docs/COVERAGE-TIERS.md
  • docs/DATA-CARD.md
  • docs/DECISION-DOSSIER-TEMPLATE.md
  • docs/DECISION-DOSSIER.md
  • docs/DOCUMENTATION-AUDIT.md
  • docs/DPIA.md
  • docs/I18N.md
  • docs/INGESTION.md
  • docs/INTAKE-AND-ABUSE.md
  • docs/LIMITATIONS.md
  • docs/LIVE-INTEGRITY.md
  • docs/METHODOLOGY.md
  • docs/MUTATION-TESTING.md
  • docs/PERFORMANCE.md
  • docs/PREREGISTRATION.md
  • docs/PRIVATE-COUNTY-CROSSWALK-REVIEW.md
  • docs/PRODUCT-EXPANSION-PLAN.md
  • docs/PROJECT-SCOPE.md
  • docs/PUBLIC-COUNTY-ARTIFACT-CONTRACT.md
  • docs/PUBLIC-COUNTY-BOUNDARY-CONTRACT.md
  • docs/PUBLIC-COUNTY-RELEASE-INDEX-CONTRACT.md
  • docs/RE-IDENTIFICATION.md
  • docs/README.md
  • docs/REAL-DATA.md
  • docs/RESEARCH-ROADMAP.md
  • docs/RESPONSIBLE-TECH-AUDITS.md
  • docs/ROADMAP.md
  • docs/STATE-MAP-DRILLDOWN-PLAN.md
  • docs/SUBMISSIONS.md
  • docs/THREAT-MODEL.md
  • docs/USER-RESEARCH.md
  • docs/accessibility/ACR.md
  • docs/adr/0000-record-architecture-decisions.md
  • docs/adr/0002-exposure-normalization-and-confidence-intervals.md
  • docs/adr/0003-pure-python-statistics-and-planar-geometry.md
  • docs/adr/0004-standards-applicability.md
  • docs/adr/0005-build-pages-artifact-before-deployment.md
  • docs/adr/0006-separate-official-outcomes-from-contributor-reports.md
  • docs/adr/0007-content-addressed-fail-closed-ingestion.md
  • docs/adr/0008-normalize-local-fars-into-private-verified-artifacts.md
  • docs/adr/0009-separate-source-declaration-verification-and-triangulation.md
  • docs/adr/0010-schedule-read-only-live-integrity-verification.md
  • docs/adr/0011-version-public-fars-provenance-corrections.md
  • docs/adr/0012-solo-maintainer-provisional-review-attestation.md
  • docs/adr/0013-keep-python-311-floor.md
  • docs/adr/0014-county-fars-context-requires-a-verified-public-projection.md
  • docs/adr/0015-a-singleton-gi-star-neighborhood-is-labeled-and-never-significant.md
  • docs/audits/2026-06-16-verification.md
  • docs/audits/2026-07-16-national-evidence-studio-a11y.md
  • docs/audits/README.md
  • docs/findings/2026-08-15-potsdam-real-run.md
  • docs/findings/README.md
  • docs/ideation/01-deep-dive.md
  • docs/ideation/02-large-scale-fixes.md
  • docs/ideation/03-expansions.md
  • docs/ideation/04-impact-and-sequencing.md
  • docs/ideation/README.md
  • docs/privacy/exp-05-dp-segment-time-bands.md
  • docs/research/2026-06-17-bug-review-and-user-research.md
  • docs/research/2026-06-20-synthetic-user-interviews.md
  • docs/teaching/FACILITATOR-GUIDE.es.md
  • docs/teaching/FACILITATOR-GUIDE.md
  • infra/README.md
  • integrations/qgis/README.md
  • notebooks/README.md
  • notebooks/teaching/README.md
  • schema/dataset.schema.md
  • src/honest_rates/README.md
  • src/nearmiss/README.md
  • tests/README.md
  • web/README.md