Uscha is a spec-driven, tool-agnostic methodology for development with LLM coding agents. Down-to-earth AI-assisted development: the AI executes, the human governs, the evidence decides. No ceremony where it isn't earned, rigor where the stakes justify it (critical paths, migrations).
| Gate | What it reads | |
|---|---|---|
| golden-diff | byte-comparison .received vs .approved; exit 0 CLEAN / 1 DIVERGE / 2 NOT-RUN (zero fixtures = NOT-RUN, never CLEAN) | BLOCKS |
| pit-check | PIT XML (mutation testing = do the tests assert?) — scheduled/incremental tier, not inner-loop; a failing report is persisted via log-gate | BLOCKS |
| gate-check | diff structure (removed tests incl. whole-file deletions, disabled tests, lowered or deleted thresholds); suppressions, rewritten asserts & measured test-count drop = soft REVIEW (--strict gates) | BLOCKS |
| rebuild | COVERS/DIVERGE; the one that exits 1 unless COVERS | BLOCKS |
| readiness | 0-100 KPI, always exit 0; hard caps (tests red ≤35, BLOCKER/CRITICAL ≤65, unresolved escalation ≤75) | REPORTS |
| simplicity-check | numeric budgets (+lines 400, net growth, files, nesting depth, largest hunk); a dim >1.5× budget floors OVERBUILT | BLOCKS |
| simplicity · abstractions | abstraction count/density — deliberately unweighted (false positives on records/DTOs) | ADVISES |
| spec-check · structure | missing out-of-scope section, absent/empty acceptance criteria — facts, exit 1 | BLOCKS |
| spec-check · prose | heuristics over SPEC prose (vague terms, EARS, stack naming); --strict gates them | ADVISES |
Hard exit 1, break the chain. Objective, cheap, no opinion. The agent runs them inline in /uscha-devloop and persists each verdict with log-gate; a failing fact gate blocks convergence and caps readiness ≤65.
They report, they don't block (except --strict). A heuristic over natural language that blocks generates false positives → the dev disables it → dead gate.
# the agent runs the fact gates INLINE in /uscha-devloop and persists them with log-gate spec → code (agent) → /uscha-devloop gates inline: golden-diff · pit-check · gate-check · simplicity # exit 0/1 → qa_ledger.py log-gate → readiness = 0-100 KPI (hard caps, always exit 0) → converge → STOP at the merge gate → the human READS the diff → ship # spec-check prose and abstractions run as advisory: they inform, they don't block
What a regex can't judge (contradictory clauses? over-architected?) is NOT faked as deterministic: it goes to the non-correlated checker (a different agent family, or at least a different profile — process discipline, not enforced by code). Computational within the file; inferential cross-file.
npx --yes @andresmassello/uscha@latest install · then npx … init in the repo (kit 1.50.0). · Governance: the AI executes, the methodology governs, the evidence decides, the human approves.