tetsuo_core/designer.py + overlays/design.md, post wave-2/3.
Philosophy (Case, 07-21): harnesses are lightweight gates — focus, drift-reduction, parallel work. The gate is heavy exactly once: at proof.designThe agent-is-router front door judges the request (or an explicit directive forces the lane). No regex classifies intent anywhere on this path./design · /design-loop · /design-qa (skill + checks.py + both law files). A missing capability is a ContractError at the door — never a degraded run.The controller classifies the outcome before the worker exists (classify_kind) and pins it via TETSUO_DESIGN_KIND. The worker cannot change it — evidence that names a different kind fails verify. "Ambiguous design stays on the non-code rail."
Static deliverable: Figma pages, exported boards, comps, direction gallery. Proof = exported Figma / screenshot pairs. Chosen when static-artifact language dominates or intent is ambiguous.
Working interface. Chosen when the ask opens with implement/build/ship/deploy/integrate, or the latest live-action verb outranks design verbs. Proof = the SERVED page, captured by tools/design-qa/capture.mjs.
| mode | meaning | status today |
|---|---|---|
rail | Deterministic pipeline — the /design phase sequence runs the show; the model creates only inside fixed steps. | the working default for new design work |
agent | The model owns the whole approach; harness supplies only the contract (laws, proofs, gate). | declared, exercised via direct asks |
hybrid | Rail phases with agent-owned interiors — /design-loop's living-interface cadence. | declared; the loop skill is its shape |
Declaration also fixes: max_attempts: 2 · supports_resume: true · required gate design-qa · peer harnesses open (the designer may call Strategy or any peer directly and owns local repair until the gate passes).
/design pipeline for new work, /design-loop for a living interface — never recreate layout/styling/motion/Figma recipes inline.s-p/design-taste.md and s-p/motion-polish-ruleset.md./design-qa's capture tool against the exact ARTIFACT file.ARTIFACT: <path inside the project>
DESIGN_EVIDENCE: {kind, artifact_sha256, signals, desktop, desktop_sha256, mobile, mobile_sha256, laws, judgments}
Field-exact — extra or missing keys fail. judgments must cover every design-qa row, each {verdict, shot, reason}, each bound to the correct proof (mobile rows to the mobile shot, the rest to desktop).
session_model("verifier")) reads the SAME bound screenshots against the same design-qa rows and issues its own verdict. The worker grades itself for honesty; the judge grades for the gate. This is the split that caught its own P0 on SP-641.classify_kind is the last regex making a judgment call on this path (live-ui vs design-only). Candidate for the triage declaration to carry kind instead, per the agent-is-router law.design-taste.md / motion-polish-ruleset.md are named-by-path in evidence; swap or version the taste without touching the harness.max_attempts: 2 and warm resume are declaration values, not code.session_model("verifier") routes through the model table; a new specialist judge is a table edit (model routing stays first-class).scripts/orchestrate/tetsuo_core/designer.py (586 lines, verify byte-stable since wave 2) · overlays/design.md · page hand-maintained, reviewed like code.