---
id: w1/m18/t007
title: "Render parity: rootDir across REST/GraphQL/MCP/UI"
worker: worker1
status: done
estimate: 30m
depends_on: [w1/m18/t005, w1/m18/t006]
---

## Objective

Verify `rootDir` is consistent across every surface bex-api exposes (REST, GraphQL, MCP) and check semantics against Render's own Root Directory setting, flagging any drift as follow-up rather than silently diverging.

## Context

- `docs/ADR006-bex-api.md` — bex-api is meant to be Render-compatible across REST/GraphQL/MCP.
- Render reference: https://render.com/docs/monorepo-support#setting-a-root-directory (field name `rootDir` in Render's own service API, per the brainstorm research).
- The dashboard UI half is intentionally a separate milestone (`w5/m13`) since there is no build/deploy settings section yet to extend — note that here rather than treating it as a gap in this milestone.

## Steps

1. Compare bex's `rootDir` field name, optionality, and default (empty = repo root) against Render's documented `rootDir` semantics.
2. Confirm REST/GraphQL/MCP all expose the same field name/shape/behavior (cross-check t005's work).
3. Record any deliberate drift (e.g. bex auto-detects Dockerfile vs. Render's explicit build command usage) in `docs/ADR018-render-parity.md` if not already covered there.
4. Explicitly note that dashboard UI parity is deferred to `w5/m13`, not missing from this milestone.

## Files

- `docs/ADR018-render-parity.md` (update if a new ledger row is warranted)
- `lego/backend/internal/apps/{rest,graphql,mcp}.go` (verification only, no new code expected beyond t005)

## Acceptance criteria

- [x] `rootDir` field name/semantics confirmed identical across REST/GraphQL/MCP
- [x] Any drift from Render's own `rootDir` behavior is documented, not silent
- [x] `docs/ADR018-render-parity.md` reflects the new capability (or explicitly why it doesn't need a new row)

## Out of scope

- Building the dashboard UI itself (`w5/m13`).
