Context
Commit 0e0703d deleted V2's LLM Evaluator: src/v2/agents/evaluator.ts, contracts/verdict-contract.ts, contracts/fail-loud-dispatcher.ts, the evaluate CLI command, evaluations/ dir. Net: −5 files, ~450 LOC, 8 fewer tests.
Stated rationale: 'Claude Code, Anthropic's Building Effective Agents, Antigravity all use one LLM + deterministic gates + HITL — the LLM Evaluator is double-counting.'
The 2026-05-27 grilling re-baselined V2 against collapsed. The rationale was wrong on two counts.
Error 1 · Misidentified baseline
The 'V1 four-agent shape' the deletion rationale references is V1-original (pre-collapsed). Collapsed already simplified that. Collapsed KEEPS an LLM Evaluator (library-course-generation.yaml lines 84-102) with two modes (per-unit + cross-unit) specifically because:
- The deterministic linter validates STRUCTURAL correctness only; can't judge whether content delivers on Big Ideas, whether rubrics are pedagogically sound, whether vocabulary is consistent.
- The HITL gate is binary (teacher approves or doesn't); doesn't provide per-artifact structured feedback to the Generator's self-correct loop.
Error 2 · Misread Claude Code's convergence
Claude Code's Task tool is invoked many times per session — every Read, every Grep, every code-review skill, every diagnose skill is a Task invocation. ONE Task primitive, MANY sub-agents — not 'one LLM.'
Anthropic's 'Building effective agents' post describes orchestrator-workers explicitly: central LLM dispatches multiple worker sub-agents.
Antigravity 2.0 is a multi-agent system: planner, executor, browser, evaluator agents.
The convergent pattern is 'one Task primitive + many prompts' (ADR 0005), not 'one LLM.' Under that frame, the Evaluator deletion solved a problem that didn't exist.
Operator confirmation
During the 2026-05-27 grilling: 'Q-A confirmed. Bring back the Evaluator.' Follow-up: 'the collapsed architecture might have the wrong call. what would claude code do?' — which led to ADR 0005, with Evaluator re-introduced as PROMPT FILES, not a single TypeScript class.
Decision
Revert the SPIRIT of 0e0703d. Re-introduce the V2 Evaluator capability — but under the prompts-as-agents pattern (ADR 0005), not as a single TypeScript class.
- Deleted files do NOT come back verbatim — they were the wrong shape.
- Evaluator capability returns as prompts under curriculum-agents/prompts/gates/ (8 prompts: between-modules, unit-closure-m3, unit-closure-m4, all-units-closure-m3, all-units-closure-m4, final-sign-off, outline-to-structure, planning-to-generation).
- Historical per-edit judge prompts were retired by ADR 0013/0023; reviewed edits now use linear apply plus report-only readiness evidence.
- Generator's self-correct loop preserves: linter failures → Generator retry; Evaluator gate failures → Orchestrator decides feedback-to-Generator or pause-for-teacher.
- evaluations/ workspace dir does NOT come back as a top-level dir. Evaluator verdicts live in comments/gates/<gate-name>.md/<id>-judge.md.
Consequences
Positive
- • Capability parity with collapsed — V2 doesn't ship a regression vs its baseline.
- • Pattern alignment with ADR 0005 — Evaluator iterations cheap.
- • Foundation for subsequent waves — R2 (state machine) and R3 (milestone build-out) both depend on having evaluation prompts.
- • Cleaner separation between report-only evaluators and deterministic substrate checks.
Negative
- • Reverts the −5 files / ~450 LOC savings (savings were illusory — they removed capability).
- • Tests need re-introduction (targeting Task primitive + representative gate integration tests).
Neutral
- • evaluations/ dir doesn't come back; comments-on-the-gate-file is cleaner.
- • fail-loud semantics become Orchestrator decisions on Evaluator fail verdicts.
Migration / execution
- 1.No literal git revert 0e0703d. Too much has happened. Capability re-introduced in R1 via prompts-as-agents harness extension.
- 2.Stand up curriculum-agents/prompts/gates/ skeleton with stub headers per gate.
- 3.Wire invokeSubAgent to load gate prompts for Orchestrator-invoked evaluations.
- 4.Restore Generator's self-correct loop to take Evaluator verdicts as feedback.
- 5.Add Orchestrator verdict file convention: gates/<gate-name>.md frontmatter.
Open questions
- Evaluator verdict schema — exact frontmatter shape. Defer to R3 first milestone close.
- Generator-vs-Evaluator feedback loop — how many rejection rounds before escalating to teacher.
- Cross-gate Evaluator memory — does same Evaluator-prompt see prior gate's verdicts on same artifact.