<?xml version="1.0" encoding="UTF-8"?>
<spec xmlns="https://vibevm.org/spec/1">
  <title id="root">CARD: scaffold-e-fast-loop — Per-Cell Fast Verification Loop (TypeScript)</title>
  <status stage="spec" state="done"/>
  <p p="1"><fact id="status-line" status="impl/done">**Discipline v0.2 · BETA · T2 · TypeScript**</fact></p>
  <section id="band-one-identity" title="Band 1 — Identity &amp; Recognition">
    <p p="2"><fact id="CLASSIFICATION" status="impl/done">Classification: layer=E (verification) + H (weak-reader); mechanism=scaffold E.</fact></p>
    <p p="3"><fact id="INTENT" status="impl/done">Intent: Guarantee every cell is independently type-checkable and testable in seconds (`tsc --noEmit -p &lt;cell&gt;` + `vitest run &lt;cell&gt;`), so an agent's edit→check→read-error→edit loop gets a first signal fast enough to steer — the substrate that makes every other scaffold's pass/fail usable.</fact></p>
    <p p="4"><fact id="ALSO-KNOWN-AS" status="spec/done">Also Known As: tight feedback loop; incremental check; project-reference isolation; per-project typecheck; watch mode; agent-computer interface.</fact></p>
    <p p="5"><fact id="APPLICABILITY-RECOGNITION" status="impl/done">Applicability / Recognition: Apply when — a cell cannot be checked without type-checking/building the whole repo; the only verification is a multi-minute CI run; an agent must wait minutes for a signal. *Detector seed:* `tsc --noEmit -p &lt;cell&gt;` or `vitest run &lt;cell&gt;` fails to run in isolation, OR the cell has no project reference / vitest project → recognition fires (verification locality beats capability, R3-007).</fact></p>
  </section>
  <section id="band-two-justification" title="Band 2 — Justification &amp; Tradeoffs">
    <p p="6"><fact id="MOTIVATION" status="spec/done">Motivation: A weak agent in a bounded loop gets one signal per multi-minute CI run — useless. With `tsc --noEmit -p &lt;cell&gt;` + `vitest run &lt;cell&gt;` returning in seconds (sub-second under the TS 7 / "Corsa" native compiler, ~10× faster checking), the same agent iterates ten times in the budget that previously bought zero feedback. The interpreter-budget result confirms: more local runs help agents that can use feedback; the loop is the amplifier.</fact></p>
    <p p="7"><fact id="STRUCTURE-AND-PARTICIPANTS" status="impl/done">Structure &amp; Participants: *Cell isolation* (a project reference / a `vitest` project) · *Fast checker* (`tsc --noEmit -p` + `vitest`) · *Structured error* (Class F) · *Budget guard* (first signal &lt; ~60s).</fact></p>
    <p p="8"><fact id="COLLABORATIONS" status="impl/done">Collaborations: Runs Classes C/D/G checks and the type-level tests (guide §12); consumes Class B's compile checks; emits Class F diagnostics. The raid executor runs this per batch.</fact></p>
    <p p="9"><fact id="GOALS-AND-NON-GOALS" status="impl/done">Goals / Non-Goals: *Goals:* sub-minute first signal per cell; make the loop the standard agent workflow. *Non-Goals:* NOT replacing full CI (still runs at merge); does NOT create capability — scaffolds amplify, they do not create.</fact></p>
    <p p="10"><fact id="CONSEQUENCES" status="spec/done">Consequences: (+) every other scaffold becomes loop-usable; (+) iteration count rises within budget; the native Corsa compiler sharpens this further. (−) requires cells genuinely isolable (drives §3 cell design); barrel-file sprawl breaks project-reference isolation; (−) fast checks may miss what full CI catches — gate-mode checks backstop.</fact></p>
    <p p="11"><fact id="ALTERNATIVES" status="spec/done">Alternatives: whole-repo `tsc`/CI only (too slow for an agent loop); manual testing (not mechanical). Neither is a substitute.</fact></p>
    <p p="12"><fact id="RISKS-AND-ASSUMPTIONS" status="spec/done">Risks &amp; Assumptions: assumes cells are isolable; god-modules and giant barrels break this (anti-pattern). *Sunset:* none — the loop is foundational.</fact></p>
    <p p="13"><fact id="EVIDENCE-AND-TRANSFER-STRENGTH" status="spec/done">Evidence &amp; Transfer-strength: R3-007 (verification locality, theory), R2C interpreter-budget result (more runs amplify capable agents, benchmark), BLD-010 (30–60s practical threshold). Class: benchmark + theory. Tag: **[E-strong]**.</fact></p>
  </section>
  <section id="band-three-operation" title="Band 3 — Operation">
    <fence lang="card-ops" p="14">trigger: WHEN a cell lacks a sub-minute isolated check, OR verification requires a full-repo typecheck/build THEN apply
mode: gate            # a structural precondition, verified at merge
routine:
  1. Make the cell an independently checkable unit (a project reference + a vitest project).
  2. Provide `tsc --noEmit -p &lt;cell&gt;` scope for it.
  3. Ensure `vitest run &lt;cell&gt;` runs in isolation, &lt; ~60s.
  4. Wire the cell's Class C/D/G + type-level checks into that command.
  5. Confirm first-signal latency is within budget; if not, narrow the project or reduce test case counts.
checker: harness assertion `cell-fast-loop-present` (cell type-checks+tests in isolation under budget)
raid_role: layer=infrastructure; order=after:cell-boundaries; batch=cell
budget: active_rules=1; first_signal=&lt;60s by definition</fence>
  </section>
</spec>
