---
id: w5/m10/t006
title: Render parity — REST/GraphQL/MCP/UI consistency for the domain surface
worker: worker5
status: done
estimate: 30m
depends_on: [w5/m10/t005]
---

## Objective

Check the milestone's user-facing changes are consistent across every surface they expose: the DNS-record fields and verify verb must carry the same fields, semantics, and error shapes on REST, GraphQL, and MCP (`lego/backend/internal/apps/`), and the dashboard must render what the API serves — then compare against the t003 Render capture and file any drift as follow-up work rather than silently diverging.

## Context

- `docs/ADR006-bex-api.md` — the one-core/thin-adapters contract this checks.
- `docs/ADR018-render-parity.md` — the "Verify / DNS instructions" row is ◐ today; flip it (◐→✅ where earned) with evidence pointers once verified.
- Render side: the t003 capture + `POST …/custom-domains/{idOrName}/verify` from the 2026-07-09 REST re-audit.

## Steps

1. Diff the three adapters' domain payloads (field names, nullability, error shapes) against each other and the capture.
2. Drive the dashboard flow against the real backend shape (or the updated stub) and confirm it renders the API's fields verbatim.
3. Update the parity ledger row with evidence; file follow-up notes for any conscious divergence.

## Files

- `docs/ADR018-render-parity.md`
- (verification only across `lego/backend/internal/apps/`, `dashboard/src/features/services/`)

## Acceptance criteria

- [ ] Same DNS-record + verify semantics on REST/GraphQL/MCP; dashboard renders them unmodified.
- [ ] Parity ledger row updated with evidence pointers; any drift filed, none silent.

## Out of scope

- New features; fixing drift beyond small corrections (file follow-ups instead).
