---
id: w6/m1/t007
title: Render parity — REST stays mutation-free on owners; GraphQL/MCP/UI semantics match captured Render
worker: worker6
status: done
estimate: 20m
depends_on: [w6/m1/t006]
---

## Objective

Standing parity check for this milestone. Unusually, parity here is partly about **absence**: verify no REST mutation endpoints were added under `/v1/owners` (Render's REST is read-only for workspaces — RESEARCH-workspaces.md finding 9, verified against render-oss/cli's generated client). Then check the semantics that do exist against the captured artifact: plan names/limits, creation inputs, rename/delete guards.

## Context

- `docs/render-artifacts/workspace-lifecycle.md` (t001) is the reference.
- Surfaces to sweep: REST routes + GraphQL schema in `lego/backend/internal/api/`, core error shapes, and any MCP exposure (should be none yet — that's m2).

## Steps

1. Grep the REST router for owner/workspace mutation routes — must be none.
2. Diff plan names, limit numbers, and error semantics against the research doc + t001 artifact.
3. File drift as follow-up notes (inbox `w6/NNN.md`) rather than silently diverging.

## Files

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

## Acceptance criteria

- [ ] No REST workspace-mutation endpoints exist
- [ ] Plan lineup and limits match the verified research (Hobby/Pro/Scale/Enterprise; 5/25/1)
- [ ] Any deliberate drift is recorded as a w6 inbox note

## Out of scope

- m2's owners read endpoints (parity-checked there).
