4.4 KiB
4.4 KiB
| id | ticket | title | status | created | decisions | tags | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| PLN-0004 | world-editor-journey-spec | Journey Commit and Validation | done | 2026-06-19 |
|
|
Briefing
Implement the explicit World Editor commit action that validates WorldLayoutSO and publishes only logical Journey data into JGraphSO.
Source Decisions
DEC-0001: World Editor / Journey V1.
Target
Create the publication pipeline from WorldLayoutSO to JGraphSO:
- validation service,
- error/warning reporting,
- commit button behavior,
- deterministic conversion to runtime logical Journey data,
- publication metadata.
Scope
- Editor-only validation and commit code.
- Conversion from World Editor authoring records to runtime
JGraphSO. - Generate/update
JStage,JEndpoint, andJConnectionrecords. - Preserve stable ids across repeated commits.
- Block commit on errors.
- Allow commit with warnings.
Out Of Scope
- Stage scene generation.
- Stage bake.
- Loading hints.
- Concrete requirements.
- Runtime traversal behavior.
- Automatic Stage Editor sync.
- Unified editor shell.
Execution Plan
-
Add validation types.
- Target
Assets/Scripts/Editor/GON/WorldEditor. - Create severity enum: error and warning.
- Create validation message record with severity, message, and optional authoring object id.
- Target
-
Add
WorldLayoutValidator.- Validate same-layer tile overlap.
- Validate connection endpoints exist.
- Validate connection does not connect an endpoint to itself.
- Validate endpoint type compatibility.
- Validate socket cardinality: at most one connection.
- Validate socket face is a free Stage tile face.
- Validate sockets connect opposite faces on adjacent tiles when physically connected.
- Validate anchor/lift cannot coexist on same WorldTile.
- Validate lift alignment by x/y and differing layer.
- Validate lift cardinality: exactly one connection when required, at most one connection in all cases.
- Validate required endpoint without connection as error.
- Validate optional endpoint without connection as warning.
-
Add
JourneyCommitter.- Input:
WorldLayoutSOand targetJGraphSO. - Run validation before writing.
- If errors exist, abort without modifying
JGraphSO. - If only warnings exist, allow commit and show warnings.
- Write
sourceWorldLayoutId,publishedAt,schemaVersion, and optional deterministiccontentHash. - Write
JStage, endpoint, and connection records only. - Do not create Stage scenes, Stage geometry, Stage objects, or Stage bake artifacts.
- Input:
-
Wire commit into
WorldEditorWindow.- Add or enable commit button.
- Let the user choose/create a target
JGraphSO. - Display validation messages after commit attempt.
- Mark changed assets dirty and save through Unity asset APIs.
-
Add validation display.
- Reuse UI Toolkit patterns from the Stage Editor inspector/top bar where practical.
- Show errors and warnings clearly.
- Keep visual polish secondary to correctness for V1.
Acceptance Criteria
- Commit button publishes
JGraphSOonly. - Commit button never generates Stage scenes or Stage bake output.
- Commit aborts when validation errors exist.
- Commit can proceed with warnings.
- Required endpoint without connection is an error.
- Optional endpoint without connection is a warning.
JGraphSOpublication metadata is written on successful commit.- Repeated commits preserve stable ids rather than regenerating ids from names or positions.
Validation
- Unity compile succeeds.
- Manually verify commit of a minimal valid layout with two stages and a socket connection.
- Manually verify commit aborts when two stages overlap on the same WorldLayer tile.
- Manually verify commit aborts when a required endpoint has no connection.
- Manually verify commit allows an optional unconnected endpoint and reports a warning.
- Manually verify no Stage scene, Stage geometry, or Stage bake output is created by commit.
- No automated tests are required for this phase.
Risks
- Id preservation can be broken if conversion derives ids from mutable fields; use stored stable ids from authoring data.
- Validation and commit can become coupled to UI; keep validation and conversion in separate services.
- Content hash can become noisy if it includes non-deterministic ordering or timestamps; omit or narrow it if deterministic hashing is not cheap.