Block library
The reusable parts the Student Advocate is built from. Each block has one purpose, its own tests, its own mutation run against only those tests, a floor it may not fall below, and a page saying what to use it for and what not. The app inherits blocks by importing them; the block-library gate fails if an app copies a block's code.
15
blocks
176
block tests
15
at or above their floor
76.2%
average mutation score
| Block | What it is for | Tests | Mutation | Floor | Used by |
|---|---|---|---|---|---|
@zthr/egress | The one door to the network: allow-listed https hosts, named purposes, recorded | 11 | 92.9% | 80% | app:advocate factory:tools |
@zthr/evidence | Append-only, pseudonymous record of what the factory and the product did | 6 | 61.4% | 61% | app:advocate factory:tools |
@zthr/explore | Walks every action from every state to a fixpoint, checking invariants | 5 | 63.0% | 62% | factory:tools |
@zthr/gates | Gates that count only after planted defects make them fail; verdicts and ratchets | 22 | 68.1% | 68% | block:intent block:review block:runtime factory:tools |
@zthr/intent | Locked journey cards: goals in plain words, run in every mode and channel | 18 | 79.5% | 79% | app:advocate factory:tools |
@zthr/models | Model calls behind one interface, with a twin, budgets and family labels | 9 | 84.6% | 80% | app:advocate block:review factory:tools |
@zthr/operator | Leases, idempotent dispatches confirmed by lookup, and holds | 14 | 98.2% | 90% | app:advocate |
@zthr/plain-language | Reading grade, phrase rules and carelessness checks for any text | 11 | 80.2% | 80% | app:advocate |
@zthr/privacy | Canary tracing of sensitive fields and small-cell suppression | 6 | 85.2% | 85% | app:advocate |
@zthr/review | A multi-family review panel that can fail a change, never pass one alone | 15 | 93.8% | 80% | factory:tools |
@zthr/runtime | Consent ledger, sealed facts, approvals, outbound gate and refuse-to-start | 17 | 48.2% | 48% | app:advocate factory:tools |
@zthr/store | Owner-scoped document store and the classified data declaration | 8 | 88.4% | 85% | app:advocate factory:tools |
@zthr/twin-service | Clock, scenarios, health and OpenAPI for synthetic services | 10 | 86.7% | 85% | app:campus-services |
@zthr/twins | Twins of outside services (SMS, mail, calendars) with calibration dates | 8 | 100.0% | 80% | app:advocate |
@zthr/ui | Accessible, themed page parts shared by the app and the factory console | 16 | 12.4% | 12% | app:advocate factory:tools |
Floors are ratchets: they start at the score each block measured on its own tests and only rise. Mutation for a block runs only that block's own tests, so a block cannot lean on the app's tests to look strong.