---
path: /studio/isis/3d-editing
surface: studio
domain: isis
auth:
  signed-in + studio entitlement (AAA-gated — segment `3d-editing` in
  `AAA_ONLY_STUDIO_ROUTES`; non-AAA users get 307 → `/aaa-upgrade?from=…` or 404
  hard-block per `resolveStudioBoundary`)
source: apps/oshun/web/src/app/studio/isis/3d-editing/page.tsx
status: walked
last_walked:
  '2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data
  (2xx), console/page-errors, expected content, screenshot verified; live
  screen-reader, touch, offline, and telemetry-delivery checks pending a manual
  AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; body
  re-derived 2026-06-03 from current source (lane-console architecture)'
---

# Isis 3D Editing

## Purpose

Hybrid Isis 3D-editing surface. The load-bearing wired piece is the live
pre-export manifold-repair lane, which runs the real `@isis/3d-post-pipeline`
repairer over an edited mesh and reports export-readiness. Around it sits a
retained browser-side mesh-editing expert shell (sculpt / paint / UV staging
over demo geometry) backed by `@oshun-web/isis-3d-browser`.

## Entry points

- Breadcrumb / quick-action card from `/studio/isis/3d-generation`
- Studio index (`/studio`)
- Direct URL / bookmark (AAA-gated)

## Layout regions

`page.tsx` mounts `ShellLayout active="studio"` with a breadcrumb panel.

- **Breadcrumb panel** (`data-isis-3d-editing-breadcrumbs`): Studio → Isis 3D
  Generation → (current)
- **Workspace panel** (`data-isis-3d-editing-workspace`):
  - `<h1>` "Isis 3D Editing Workspace" (`WorkspaceHeading`) + summary
    (`data-isis-3d-editing-summary`) and runtime / stroke-count / history pills
    (`data-isis-3d-editing-runtime-pill`, `…-stroke-count-pill`,
    `…-history-pill`)
  - **Live pre-export manifold repair lane** (`data-mrl-lane`, `<h2>`
    `data-mrl-heading` "Live Pre-export Manifold Repair") — the wired,
    real-backed lane
  - The browser-side editing stage shell (`data-isis-3d-editing-stage-shell`,
    `…-stage`, `…-stage-tool`, `…-stage-brush`, etc.) operating on demo
    geometry/texture
- **Route map panel** (`data-isis-3d-editing-route-map`): `<h2>` "Route Map"
  enumerating `STUDIO_ISIS_3D_EDITING_ROUTE_MAP`
- **Quick-actions panel**: `quickAction` links to `/studio/isis/3d-generation`,
  `/studio/isis/gaussian-splatting`, and "Back to Studio workspace index" →
  `/studio`

## States

### Manifold repair lane (wired)

- [ ] **Loading** — `data-mrl-loading` "Loading manifold-repair gate…"
- [ ] **Unauthorized** — `data-mrl-unauthorized` (admin-scope fail-closed on
      401/403, "Isis workspace scope required to repair meshes.")
- [ ] **Error** — `data-mrl-error` on the mount GET
- [ ] **Ready (form)** — `data-mrl-form` mesh JSON textarea + submit
- [ ] **Result** — `data-mrl-result` with `data-mrl-headline`
      (`data-export-ready` yes/no), `data-mrl-actions`, `data-mrl-blocking`; or
      `data-mrl-repair-error`

### Browser editing shell (legacy, client-side)

- [ ] **Stage shell** — sculpt / paint / UV staging over demo geometry; no
      `/v1` call, runs entirely in `@oshun-web/isis-3d-browser`

## Interactions

### Repair mesh (`data-mrl-form`)

- [ ] **Mesh repair JSON** — `data-mrl-payload` textarea (positions + indices +
      options)
- [ ] **Repair mesh** — `data-mrl-submit` submit; POSTs to
      `/v1/admin/isis/3d-editing/repair-mesh`, returns before/after topology +
      export-ready verdict

### Browser editing shell

- [ ] **Tool / brush / falloff / radius controls** — drive vertex
      paint / sculpt operations on the demo mesh (client-only)

### Route map

- [ ] **Route-map articles** — non-interactive path + purpose entries

### Quick-actions

- [ ] **Open Isis 3D Generation workspace** → `/studio/isis/3d-generation`
- [ ] **Open Isis Gaussian Splatting workspace** →
      `/studio/isis/gaussian-splatting`
- [ ] **Back to Studio workspace index** → `/studio`

## Data & contracts

- **Reads**: `GET /v1/admin/isis/3d-editing` (`REPAIR_ENDPOINT`) on mount — gate
  check
- **Writes**: `POST /v1/admin/isis/3d-editing/repair-mesh`
  (`REPAIR_RUN_ENDPOINT`) — run the manifold repairer
- **Realtime**: None
- **Caching**: client `fetch` on mount, `cache: 'no-store'`,
  `buildBffAuthHeaders()`
- **Auth**: admin-scoped fail-closed (401/403 → unauthorized state); AAA-gated
  studio route behind `resolveStudioBoundary`
- **Component sources**:
  - `apps/oshun/web/src/components/studio/StudioIsis3DEditingWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioIsis3DEditingManifoldRepairLane.tsx`
  - `apps/oshun/web/src/components/studio/StudioIsis3DEditingRouteMap.ts`

## Cross-references

- Studio overview: [`../../studio-overview.md`](../../studio-overview.md)
- Sibling routes:
  - [`studio-isis-3d-generation.md`](./studio-isis-3d-generation.md)
  - [`studio-isis-gaussian-splatting.md`](./studio-isis-gaussian-splatting.md)
  - [`studio-isis-3d-post-processing.md`](./studio-isis-3d-post-processing.md)

## Open questions / known gaps

- [ ] The browser editing shell runs on `createStudioIsis3DEditingDemoGeometry`
      / demo textures, not a real uploaded asset — it is an interactive demo
      surface, not yet wired to a persisted mesh store
- [ ] Only the manifold-repair lane is wired to a `/v1` endpoint; sculpt/paint/UV
      edits are not yet persisted server-side
