---
id: w6/m2/t006
title: Render parity — field-for-field diff of owners/members/MCP responses vs Render's docs
worker: worker6
status: done
estimate: 20m
depends_on: [w6/m2/t003, w6/m2/t004, w6/m2/t005]
---

## Objective

Standing parity gate: diff live bex responses (both endpoints, members, a filtered service list, the three MCP tools) field-for-field against t001's pinned Render schemas, and confirm REST/GraphQL/MCP expose consistent workspace semantics (same ids, same role names, same error shapes). File drift as follow-ups; never silently diverge.

## Context

- Reference: `docs/render-artifacts/owners-api.md` (t001), `docs/ADR006-bex-api.md` (one core, thin adapters).
- Include the negative check: still no mutations under `/v1/owners`.

## Steps

1. Capture live bex responses on a two-workspace fixture; diff against pinned schemas.
2. Cross-surface sweep: the same workspace list via REST, GraphQL (`workspaces`), and MCP (`list_workspaces`) must agree on ids/names/plans/roles.
3. Record drift as `w6/NNN.md` inbox notes.

## Files

- `lego/backend/internal/api/`
- `docs/render-artifacts/owners-api.md`

## Acceptance criteria

- [x] Field-level diff produced; discrepancies fixed or filed (`docs/render-artifacts/owners-api.md` §Parity check; drift filed as `w6/001.md`)
- [x] REST/GraphQL/MCP agree on workspace data for the same caller
- [x] No owners mutations exist (`rest.go` registers GET only)

## Out of scope

- Dashboard UI parity (w6/m3's parity task).
