Files
deepseek-harness/docs/rfc/implemented/process/2026-06-11-quality-gates.md
T
Tianyi Cui 605587e79c docs(rfc): classify RFCs by kind via path-encoded subdirectories
Add a second axis to every RFC — its class (feature, bug-fix,
simplification, architecture, process, testing) — encoded in the path
as docs/rfc/{lifecycle}/{class}/file.md. The folder is the label, so
the closed set is enforced by structure rather than a parsed field.

Two new doc-sync gates back it:
- verify-rfc-classification: every RFC sits in a valid class folder and
  the README index lists it under the matching lifecycle→class heading.
- verify-doc-refs: every docs/*.md path cited in a packages|examples TS
  comment resolves — closes a drift class verify-md-links can't see, and
  catches the four comment refs this reorg moved.

The README gains a Classification section explaining the taxonomy and
per-class index sub-sections. A self-referential process RFC records why
the scheme is path-encoded and gated.
2026-06-20 22:29:45 +08:00

1.8 KiB

RFC: Mechanical quality gates over prose guidelines

Status: implemented (accepted 2026-06-11)

Context

This codebase is developed primarily by coding agents. Agents follow enforced gates far more reliably than prose conventions, and "a lot of work" is not a cost argument when agents do the labor. Early evidence: tests that didn't typecheck shipped (vitest doesn't typecheck) and were only caught by a review.

Decision

Every AGENTS.md promise gets a command that exits non-zero, wired into git hooks and CI both calling the same package.json scripts:

  • Max-strict TypeScript (noUncheckedIndexedAccess, exactOptionalPropertyTypes, …); tests and examples typecheck in CI via tsconfig.typecheck.json (vendored packages resolve as built declarations).
  • ESLint strict-type-checked + @stylistic (the house style, enforced); vendored code excluded.
  • Per-file 100% coverage on packages/*/src (v8); unreachable defensive guards carry /* v8 ignore */ with stated reasons instead of deletion.
  • knip (dead code/deps), publint (package correctness), workspace constraints (workspace rules: private, cordis peer+dev, uniform version, ESM).
  • lefthook pre-commit (lint staged, typecheck, vendor-manifest guard) and pre-push (tests, hygiene); CI runs the full matrix on node 24/26 plus a demo smoke test driving the echo-agent end to end.

Consequences

  • Conventions survive agent turnover; violations fail fast and locally.
  • The gates themselves are code to maintain; config changes are reviewed like any change.
  • 100%-coverage pressure can produce assertion-free tests — mutation testing is the planned counterweight (see the mutation-testing proposal).