---
id: w2/m7/t007
title: Render parity — REST/GraphQL/MCP consistency vs captured Render behavior
worker: worker2
status: done
estimate: 30m
depends_on: [w2/m7/t003, w2/m7/t004, w2/m7/t005, w2/m7/t006]
---

## Objective

The standing parity gate: diff the three shipped adapters against each other (same fields, semantics, error shapes from the one core) and against the t001 capture (Render's OpenAPI, MCP schemas, dashboard GraphQL). Flip the ledger's Key Value row REST/GraphQL/MCP cells ✖→✅ with evidence; any conscious divergence (e.g. `maxmemoryPolicy` unbuilt, password-always-on vs Render's unauthenticated-internal default) gets a ledger note or follow-up item, never silence.

## Context

- docs/ADR018-render-parity.md § Key Value row + § Gap backlog row — both currently point at this milestone.
- docs/ADR006-bex-api.md one-core/thin-adapters contract.
- UI cell stays ✖ until w5/m12 ships — note the pointer.

## Steps

1. Exercise each verb on all three surfaces against one live CR; diff payloads.
2. Compare against the capture; list divergences and file them (inbox notes or ledger annotations).
3. Update the ledger row cells + evidence, and docs/ADR006-bex-api.md's surface catalog.

## Files

- `docs/ADR018-render-parity.md`, `docs/ADR006-bex-api.md`

## Acceptance criteria

- [ ] Three surfaces agree on fields/semantics/errors; evidence recorded.
- [ ] Ledger row updated; every divergence filed, none silent.

## Out of scope

- Dashboard UI cell (w5/m12).
