feat(editor): scaffold editor package

UI-only feature package for the ADR-029 editor rebuild: tsconfig
rootDir '.', vitest jsdom base with '@' alias and honest L0 baseline
thresholds, conformance ESLint active, React 19, @xyflow/react +
zustand wired against the pre-approved 2026-07-12 library traces.
Minimal feature.manifest.ts (empty useCases — no binders; declares
requiredCores runner-protocol + baseline coverage band) so the editor
participates in pnpm conformance without weakening any lint rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
This commit is contained in:
2026-07-12 22:00:34 +02:00
parent e9edad69b4
commit c42eca5b80
12 changed files with 527 additions and 1 deletions

21
packages/editor/AGENTS.md Normal file
View File

@@ -0,0 +1,21 @@
# @repo/editor
Owns the rebuilt Veect editor UI (ADR-029): the React Flow board shell, the iframe frame node that hosts the runner's preview-adapter origin, the editor-side selection overlay, the canvas-protocol client (pinned-`targetOrigin` postMessage both directions, ADR-028), and the minimal zustand store (registry + selection only — DesignDoc v1 arrives with the `design-doc-and-editor-foundation` epic).
**Boundary tag:** feature. May import from core (`core-runner-protocol`, `core-shared`), feature, and tooling packages. Imported by apps (`apps/web-next` hosts the board from story 10).
**Public surface:**
- `.` (root) — contracts only: canvas-protocol schemas + types, the feature manifest.
- `./ui` — UI artifacts: board, frame node, selection overlay components, the editor store hook.
**Conventions:**
- UI-only feature package — `useCases` is empty in `src/feature.manifest.ts`; there are no DI binders. Manifest-first ordering applies the moment a use case appears.
- Every component in `src/ui/` has sibling `.stories.tsx` + `.test.tsx` files (`component-must-have-story` / `component-must-have-test`) — no exemption zone (ADR-029).
- Chrome (selection/hover rings) renders as editor-side overlays positioned from agent-reported geometry — never inside the iframe document (ADR-028).
- Board pan/zoom and frame drag are pure React Flow transforms — no canvas-protocol round-trip on drag (<16 ms/frame budget).
- The canvas-protocol message shapes agent editor are local zod schemas in `src/canvas-protocol/` for now; they reconcile with the adapter's agent script (walking-skeleton story 05) and `@repo/core-runner-protocol` in story 10. `render-frame` already comes from `@repo/core-runner-protocol`.
- The prototype under `docs/product/reference/project/veect-codebase/` is reference only never vendored (ADR-029).
**See:** `docs/decisions/adr-028-iframe-canvas.md`, `docs/decisions/adr-029-designdoc-v1-and-editor-rebuild.md`, `docs/work/epics/walking-skeleton/09-editor-package/_story.md`.