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

341
pnpm-lock.yaml generated
View File

@@ -955,6 +955,70 @@ importers:
specifier: ^3.0.0
version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)
packages/editor:
dependencies:
"@repo/core-runner-protocol":
specifier: workspace:*
version: link:../core-runner-protocol
"@repo/core-shared":
specifier: workspace:*
version: link:../core-shared
"@xyflow/react":
specifier: ^12.0.0
version: 12.11.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react:
specifier: ^19.0.0
version: 19.2.4
react-dom:
specifier: ^19.0.0
version: 19.2.4(react@19.2.4)
zod:
specifier: ^3.24.0
version: 3.25.76
zustand:
specifier: ^5.0.0
version: 5.0.14(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4))
devDependencies:
"@repo/core-eslint":
specifier: workspace:*
version: link:../core-eslint
"@repo/core-testing":
specifier: workspace:*
version: link:../core-testing
"@repo/core-typescript":
specifier: workspace:*
version: link:../core-typescript
"@storybook/react":
specifier: ^8.6.0
version: 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.9.3)
"@testing-library/jest-dom":
specifier: ^6.5.0
version: 6.9.1
"@testing-library/react":
specifier: ^16.0.0
version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
"@testing-library/user-event":
specifier: ^14.5.0
version: 14.6.1(@testing-library/dom@10.4.1)
"@types/react":
specifier: ^19.0.0
version: 19.2.14
"@types/react-dom":
specifier: ^19.0.0
version: 19.2.3(@types/react@19.2.14)
"@vitest/coverage-v8":
specifier: ^3.2.4
version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))
jsdom:
specifier: ^25.0.0
version: 25.0.1
typescript:
specifier: ^5.8.0
version: 5.9.3
vitest:
specifier: ^3.0.0
version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)
turbo/generators:
dependencies:
"@turbo/gen":
@@ -6672,6 +6736,42 @@ packages:
integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==,
}
"@types/d3-color@3.1.3":
resolution:
{
integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==,
}
"@types/d3-drag@3.0.7":
resolution:
{
integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==,
}
"@types/d3-interpolate@3.0.4":
resolution:
{
integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==,
}
"@types/d3-selection@3.0.11":
resolution:
{
integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==,
}
"@types/d3-transition@3.0.9":
resolution:
{
integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==,
}
"@types/d3-zoom@3.0.8":
resolution:
{
integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==,
}
"@types/debug@4.1.13":
resolution:
{
@@ -7211,6 +7311,28 @@ packages:
integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==,
}
"@xyflow/react@12.11.2":
resolution:
{
integrity: sha512-eLAlDWJfWnQEhJwGMjlWdAXO9eYllKpliUmPQlAmOLxz6mExXuzMVDUKLMquixgkrtmMFFtug3jGKmYYld12cA==,
}
peerDependencies:
"@types/react": ">=17"
"@types/react-dom": ">=17"
react: ">=17"
react-dom: ">=17"
peerDependenciesMeta:
"@types/react":
optional: true
"@types/react-dom":
optional: true
"@xyflow/system@0.0.79":
resolution:
{
integrity: sha512-czLyOh91NF0hIzbNzwi8I6GlqG23BHh2435OddfI6uiaLH3xdrdygO93gqgH1Bv9mhy8XPFQJOBn1FTq4LvEWA==,
}
accepts@1.3.8:
resolution:
{
@@ -7870,6 +7992,12 @@ packages:
integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==,
}
classcat@5.0.5:
resolution:
{
integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==,
}
clean-stack@2.2.0:
resolution:
{
@@ -8160,6 +8288,71 @@ packages:
}
engines: { node: ">=0.8" }
d3-color@3.1.0:
resolution:
{
integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==,
}
engines: { node: ">=12" }
d3-dispatch@3.0.1:
resolution:
{
integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==,
}
engines: { node: ">=12" }
d3-drag@3.0.0:
resolution:
{
integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==,
}
engines: { node: ">=12" }
d3-ease@3.0.1:
resolution:
{
integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==,
}
engines: { node: ">=12" }
d3-interpolate@3.0.1:
resolution:
{
integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==,
}
engines: { node: ">=12" }
d3-selection@3.0.0:
resolution:
{
integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==,
}
engines: { node: ">=12" }
d3-timer@3.0.1:
resolution:
{
integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==,
}
engines: { node: ">=12" }
d3-transition@3.0.1:
resolution:
{
integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==,
}
engines: { node: ">=12" }
peerDependencies:
d3-selection: 2 - 3
d3-zoom@3.0.0:
resolution:
{
integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==,
}
engines: { node: ">=12" }
data-urls@5.0.0:
resolution:
{
@@ -13687,6 +13880,14 @@ packages:
"@types/react":
optional: true
use-sync-external-store@1.6.0:
resolution:
{
integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==,
}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
utf8-byte-length@1.0.5:
resolution:
{
@@ -14227,6 +14428,45 @@ packages:
integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==,
}
zustand@4.5.7:
resolution:
{
integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==,
}
engines: { node: ">=12.7.0" }
peerDependencies:
"@types/react": ">=16.8"
immer: ">=9.0.6"
react: ">=16.8"
peerDependenciesMeta:
"@types/react":
optional: true
immer:
optional: true
react:
optional: true
zustand@5.0.14:
resolution:
{
integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==,
}
engines: { node: ">=12.20.0" }
peerDependencies:
"@types/react": ">=18.0.0"
immer: ">=9.0.6"
react: ">=18.0.0"
use-sync-external-store: ">=1.2.0"
peerDependenciesMeta:
"@types/react":
optional: true
immer:
optional: true
react:
optional: true
use-sync-external-store:
optional: true
zwitch@2.0.4:
resolution:
{
@@ -18444,6 +18684,27 @@ snapshots:
dependencies:
"@types/node": 22.19.17
"@types/d3-color@3.1.3": {}
"@types/d3-drag@3.0.7":
dependencies:
"@types/d3-selection": 3.0.11
"@types/d3-interpolate@3.0.4":
dependencies:
"@types/d3-color": 3.1.3
"@types/d3-selection@3.0.11": {}
"@types/d3-transition@3.0.9":
dependencies:
"@types/d3-selection": 3.0.11
"@types/d3-zoom@3.0.8":
dependencies:
"@types/d3-interpolate": 3.0.4
"@types/d3-selection": 3.0.11
"@types/debug@4.1.13":
dependencies:
"@types/ms": 2.1.0
@@ -18863,6 +19124,31 @@ snapshots:
"@xtuc/long@4.2.2": {}
"@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)":
dependencies:
"@xyflow/system": 0.0.79
classcat: 5.0.5
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
zustand: 4.5.7(@types/react@19.2.14)(react@19.2.4)
optionalDependencies:
"@types/react": 19.2.14
"@types/react-dom": 19.2.3(@types/react@19.2.14)
transitivePeerDependencies:
- immer
"@xyflow/system@0.0.79":
dependencies:
"@types/d3-drag": 3.0.7
"@types/d3-interpolate": 3.0.4
"@types/d3-selection": 3.0.11
"@types/d3-transition": 3.0.9
"@types/d3-zoom": 3.0.8
d3-drag: 3.0.0
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-zoom: 3.0.0
accepts@1.3.8:
dependencies:
mime-types: 2.1.35
@@ -19237,6 +19523,8 @@ snapshots:
cjs-module-lexer@2.2.0: {}
classcat@5.0.5: {}
clean-stack@2.2.0: {}
cli-cursor@5.0.0:
@@ -19394,6 +19682,42 @@ snapshots:
find-pkg: 0.1.2
fs-exists-sync: 0.1.0
d3-color@3.1.0: {}
d3-dispatch@3.0.1: {}
d3-drag@3.0.0:
dependencies:
d3-dispatch: 3.0.1
d3-selection: 3.0.0
d3-ease@3.0.1: {}
d3-interpolate@3.0.1:
dependencies:
d3-color: 3.1.0
d3-selection@3.0.0: {}
d3-timer@3.0.1: {}
d3-transition@3.0.1(d3-selection@3.0.0):
dependencies:
d3-color: 3.1.0
d3-dispatch: 3.0.1
d3-ease: 3.0.1
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-timer: 3.0.1
d3-zoom@3.0.0:
dependencies:
d3-dispatch: 3.0.1
d3-drag: 3.0.0
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-transition: 3.0.1(d3-selection@3.0.0)
data-urls@5.0.0:
dependencies:
whatwg-mimetype: 4.0.0
@@ -23103,6 +23427,10 @@ snapshots:
optionalDependencies:
"@types/react": 19.2.14
use-sync-external-store@1.6.0(react@19.2.4):
dependencies:
react: 19.2.4
utf8-byte-length@1.0.5: {}
util-deprecate@1.0.2: {}
@@ -23543,4 +23871,17 @@ snapshots:
zod@3.25.76: {}
zustand@4.5.7(@types/react@19.2.14)(react@19.2.4):
dependencies:
use-sync-external-store: 1.6.0(react@19.2.4)
optionalDependencies:
"@types/react": 19.2.14
react: 19.2.4
zustand@5.0.14(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)):
optionalDependencies:
"@types/react": 19.2.14
react: 19.2.4
use-sync-external-store: 1.6.0(react@19.2.4)
zwitch@2.0.4: {}