Outcome
Deliver the smallest end-to-end Rust editor slice needed by the program M3 gate: open the explicitly licensed M3 authored map, display it through the shared renderer, make one safe semantic edit, validate and save it losslessly, reopen it, and launch the wrapper-owned isolated playtest.
This is a vertical integration proof, not the full M4 map editor. Work landed here must be the first usable path through the same application/toolkit/renderer boundaries that M4 extends; no throwaway parser, renderer, or save path is allowed.
Scope
- Compose the editor application shell against released or profile-pinned M2
content-toolkit and renderer APIs.
- Discover/open the pinned M3 project and one map from the licensed compiled map chain.
- Adapt the lossless authored document to a renderer-owned scene and show one correct pan/zoom viewport.
- Select one object by semantic identity, change one schema-defined property through a toolkit transaction, and show the resulting diagnostics and text/semantic diff.
- Save atomically with revision preconditions, reopen, and prove unchanged data/comments/order/unknown fields were preserved.
- Undo or explicitly discard the edit and prove the source returns to the expected digest.
- Invoke the versioned wrapper playtest contract for the selected map/coordinate using disposable state; the editor does not start or manage server/client processes directly.
- Expose enough deterministic headless/application-model control for
atrinik#271 to reproduce the workflow in CI, with named graphical smoke steps for Linux/Windows.
Boundaries
content-toolkit owns parsing, semantic documents, diagnostics, transactions, diff, validation, and writes.
renderer owns GPU/resources/scene/offscreen presentation and semantic picking identity.
- Editor owns application state, the document-to-scene adapter, the bounded command/UI flow, and wrapper invocation.
- No client, protocol, server, classic editor module, Java, Python, Gridarta, source-tree runtime path, or duplicated implementation is an editor dependency.
- The M3 slice may have deliberately narrow project/navigation/tool UI; the complete tabs, tools, palette, inspectors, recovery, automation, and non-map panels remain M4/M5 issues.
Acceptance criteria
- A clean replacement-default workspace builds the editor slice without any classic checkout or GPL tool dependency.
- The pinned M3 file opens, renders through the exact shared renderer, and yields stable semantic selection for the target object.
- One preconditioned semantic edit produces the expected minimal diff; validate/save/reopen preserves all unrelated bytes and authored semantics.
- A stale revision, invalid property, unwritable path, or failed validation causes zero source mutation and an actionable diagnostic.
- The isolated playtest uses only supported
./atrinik topology/scenario operations, distinct disposable state, exact release coordinates, and complete cleanup.
- Headless automation plus Linux/Vulkan and Windows/D3D12 smoke evidence is published to
atrinik#271 with content/toolkit/renderer digests and license provenance.
- The implementation is retained and extended by
editor#3–#6, #10, and #11; no M3-only alternate code path remains.
Dependencies and parallelization
Depends on editor bootstrap/architecture (editor#1/#2), the M2 authored-document/scene integration in editor#12, the minimum released toolkit/parser/transaction APIs, baseline renderer scene/resource/offscreen APIs, the M3 content slice, and the wrapper playtest contract.
Application composition, authored-to-scene adaptation, the bounded transaction UI, headless control, and wrapper playtest adapter can proceed in parallel once their versioned M2 interfaces exist. Full M4 UX work may begin concurrently but does not need to close for this vertical slice.
Licensing
Editor code/tests are MIT. Any approved-grantor reuse requires complete-history provenance evidence and third-party review; otherwise implementation is independent. The M3 content and assets retain their exact licenses and attribution.
Outcome
Deliver the smallest end-to-end Rust editor slice needed by the program M3 gate: open the explicitly licensed M3 authored map, display it through the shared renderer, make one safe semantic edit, validate and save it losslessly, reopen it, and launch the wrapper-owned isolated playtest.
This is a vertical integration proof, not the full M4 map editor. Work landed here must be the first usable path through the same application/toolkit/renderer boundaries that M4 extends; no throwaway parser, renderer, or save path is allowed.
Scope
content-toolkitandrendererAPIs.atrinik#271to reproduce the workflow in CI, with named graphical smoke steps for Linux/Windows.Boundaries
content-toolkitowns parsing, semantic documents, diagnostics, transactions, diff, validation, and writes.rendererowns GPU/resources/scene/offscreen presentation and semantic picking identity.Acceptance criteria
./atriniktopology/scenario operations, distinct disposable state, exact release coordinates, and complete cleanup.atrinik#271with content/toolkit/renderer digests and license provenance.editor#3–#6,#10, and#11; no M3-only alternate code path remains.Dependencies and parallelization
Depends on editor bootstrap/architecture (
editor#1/#2), the M2 authored-document/scene integration ineditor#12, the minimum released toolkit/parser/transaction APIs, baseline renderer scene/resource/offscreen APIs, the M3 content slice, and the wrapper playtest contract.Application composition, authored-to-scene adaptation, the bounded transaction UI, headless control, and wrapper playtest adapter can proceed in parallel once their versioned M2 interfaces exist. Full M4 UX work may begin concurrently but does not need to close for this vertical slice.
Licensing
Editor code/tests are MIT. Any approved-grantor reuse requires complete-history provenance evidence and third-party review; otherwise implementation is independent. The M3 content and assets retain their exact licenses and attribution.