Last reviewed: 2026-09-23 for the v0.8.0 development line. Overworld sprite, Graphics sheet and Palette save implementation status refreshed from consolidated bd9f0497a on 2026-10-05; other dated evidence remains unchanged.
This is the public capability and persistence ledger. The editor capability parity plan owns implementation order and acceptance gates. The capability assessment summarizes the Hyrule Magic / ZScream comparison. No whole-editor percentage establishes parity.
The September 22 audit baseline is mainline d609e6254 and placement candidate 7ba7d76ce; the latter's app build and 43 focused tests passed without a publication, installation, or release claim. Subsequent candidate a730d6557 adds door/sprite/pot-item undo and shared property controls, following plan commit 5fc5af950. Its app and unit-test builds succeeded; 150 selected tests across 21 suites passed with no skips, including 22 entity lifecycle and five shared inspector UI cases. The only post-test changes were formatting whitespace, verified through whitespace-normalized staged content. These are Source + Focused results; ROM save/reopen, Runtime, CI, installation, and Release qualification remain pending. Verify Git and artifact state before promotion.
The prior room/chest-content candidate is aeb0b1200 on codex/editor-parity-dungeon-authoring. Room metadata, existing chest contents, named controls, and atomic multiroom Clear stale are described in the formal plan's historical increment. App and unit builds passed; 475 selected tests across 36 suites passed with zero failures and zero skips, including 94 new cases. Scoped Clang analyzer checks passed on two mutation modules. These are Source + Focused results, including synthetic editor save/decode/byte-preservation checks; mainline, installed app, vanilla/Oracle application-to-disk/runtime qualification, CI, and Release status are unchanged.
The prior compound chest candidate is 478206247 on the same branch. It pairs object and contents mutations for placement, deletion, type changes, and undo; ordinary object copy/paste preserves rewards and layer/order edits preserve correspondence. Its shared inspector starts placement in the canvas and follows selected chests. Source + Focused evidence; focused verification: 569 tests across 37 suites passed, with zero failures and zero skips. App and unit builds passed. Scoped Clang analyzer checks passed for the two new mutation modules. Preflight validates six shared chest/big-key-lock slots with chests preceding locks, global 168-record capacity including dirty/unopened rooms, and exact chest-region manifest policy. Object-stream allocation remains a Save-time check. See the chest increment for its evidence and residual qualification limits.
The prior mixed-selection candidate is eac49e2bd. Existing Workbench/inspector/canvas commands now share one validated operation for objects, doors, sprites, pot items, and paired chest rewards. Delete, duplicate, cut/paste, nudge, and group drag produce one undo action; failed copy preserves the clipboard. Rigid spacing and exact door slots replace independent per-domain movement. Source + Focused evidence: 640 tests across 39 suites passed with zero failures and zero skips. Save closes pending gestures; no-op drags retain redo history and prior save dirtiness. This does not add rendered UI, vanilla/Oracle application-to-disk/runtime, CI, installation, or Release evidence. See the mixed-selection increment.
The prior reciprocal normal-door candidate is be973563f. The shared inspector previews both rooms, chooses upper/lower layer, and creates or updates the ordinary outer-wall return door only through Create Return Door or Update Pair. Lazy target loading preserves clean project WaterFill tiles, mask, and count, and rejects dirty partial state. Both endpoints validate and undo together through the existing batch action. Exact slots, adjacency boundaries, passage conflicts, stale previews, ROM identity, and unloaded target parsing are guarded. Verification: 807 tests across 44 suites — passed with zero failures and zero skips. App/unit builds: passed. Scoped analyzer: passed for the six selected implementation files and their explicit header scope. DA-3 remains partial for stairs, pits, special doors, and runtime qualification. The authored-room transfer candidate below follows this checkpoint. See the connection increment.
The current authored-room transfer candidate is bb185d1ae, following authored-room source 2520aa6b0 and documentation df1cc4f2d. yaze.room v1 adds same-project clone and clipboard JSON exchange through shared Room controls, with seven selectable domains and Core defaults. Target destinations are preserved unless explicitly included; numeric graphics/layout/message IDs are references, not packaged assets. Detached persistence preflight checks real capacity, shared tables, disabled save flags, and write policy before one undoable replacement. Stale source/target plans reject; water masks preserve other rooms, and water saving merges unopened saved zones. Verification: 989 tests across 49 suites; all passed, zero failures and zero skipped. See the transfer handoff for exact commands and scope. The 807-test connection result is historical. The repair enforces native block storage, accepts shared pot terminators, moves preview GameData to the heap, and offers explicit shared-header recovery. JSON preserves residual chest records and normalizes physical block slots. The exit-door report was not reproduced; confirmed exit guards have regression coverage. Independent save/reopen must be rerun on this source. Next is DA-5 application disk/runtime qualification of the combined candidate. DA-4 project-file/asset compatibility and DA-3 remaining connection families remain separate work; no native file-picker or complete asset-pack claim is made.
| Status | Meaning |
|---|---|
| Implemented | The named capability exists. This does not imply a qualified release or completion of adjacent capabilities. |
| Partial | Part of the workflow exists, but a named editing, undo, persistence, or acceptance requirement is incomplete. |
| Missing | The named implementation is absent or an explicit stub. A search that did not locate a feature should be reported as an audit gap rather than an absolute absence. |
| Blocked | The application deliberately refuses the workflow until its required implementation or safety proof exists. |
| Candidate | An implementation exists on a named change or branch and awaits integration or acceptance. |
| Evidence | What must be recorded |
|---|---|
| Source | Exact code commit, entry points, and relevant read/write/undo paths inspected. |
| Focused | Discovered test names, exact command, tested commit, result, and any skips. Includes synthetic ImGui tests; does not imply ROM proof. |
| ROM | ROM profile/hash, disposable input/output, write/reopen/readback comparison, and expected write ranges. Direct serializer and full application save are distinct paths. |
| Runtime | Named emulator/game scenario, capture identity, and observed result. Static pixels do not prove gameplay behavior. |
| Release | Exact packaged artifact and digest, platform, CI, install/launch acceptance, and required workflow checks. A local source build is not this evidence. |
Promote the specific workflow, not every feature in its editor. Prior "Tester ready" labels described bounded beta attempts; they did not certify all entity types, undo domains, or save paths. A GUI smoke test or a test called "E2E" is not automatically a complete edit → save → close → reopen test.
All baseline statements below are Source observations. Existing test coverage is useful but must be linked to a specific workflow and commit before it is used for promotion.
| Editor / workflow | Status | Existing path | Remaining boundary |
|---|---|---|---|
| Dungeon room authoring | Partial | Existing room elements and guarded save, plus the candidate slices below | Remaining authoring domains, connection families, complete room operations, and GUI-to-disk/runtime acceptance remain. DA-1 and DA-2 are not complete. |
| Workbench tile-object placement improvements | Candidate | 7ba7d76ce: live placement controls, once/repeat, selected inserted object, Place another, physical sizes; Source + Focused | Isolated candidate ROM and runtime validation, integration, and packaged acceptance remain. See the validation handoff. |
| Door/sprite/pot-item undo and shared properties | Candidate | a730d6557: DA-1 domain snapshots/restore and DA-2 shared Workbench/standalone inspector; render invalidation, reserved-sprite validation, paste selection, and deferred input isolation have focused checks | Context-mismatched connected-view editing is gated. ROM save/reopen, runtime, CI, installation, and release qualification remain; other DA-1/DA-2 domains are open. |
| Room metadata undo and named property controls | Candidate, Source + Focused at aeb0b1200 | Typed header/tag/layout/floor/message/destination edits; room-bound deferred input; snapshots preserve hidden BG2 state and separate layout/floor save dirtiness; atomic multiroom Clear stale batch | Full application save/reopen, runtime, and packaged acceptance remain. This single-domain batch does not complete general compound editing. |
| Compound chest authoring | Candidate, Source + Focused at 478206247 | Shared placement, record/reward/type selection, canvas selection, and delete controls; paired object/contents undo; ordinary object clipboard preserves rewards; layer/order remapping; event-slot/global-table/manifest preflight | Save still validates object-stream allocation. This chest-only evidence predates the mixed-selection candidate below. Vanilla/Oracle full-application disk save/reopen, game behavior, manual UX, CI, and packaged acceptance remain unqualified. |
| Atomic mixed-selection editing | Candidate, Source + Focused at eac49e2bd | Shared delete/duplicate/cut/copy/paste/nudge/group-drag planner and one undo; chest rewards retained; supported count/encoding/coordinate checks; exact door anchors; no partial publication on rejection | Object-stream allocation remains Save-time. Author-time manifest preflight covers chest ranges only. Full application disk persistence, rendered UX, game behavior, CI, and packaged qualification remain. |
| Reciprocal normal-door connections | Candidate at be973563f; verification above | Shared endpoint preview and Create Return Door / Update Pair; exact outer slots and adjacency; guarded target load retaining project WaterFill data; one batch Undo/Redo preserving other domains | Stairs, pits, special door families, internal seams, and arbitrary destinations are outside this slice. Save-time allocation, full application disk persistence, runtime traversal, human UX, CI, and packaged qualification remain. |
| Authored-room clone/import | Candidate at bb185d1ae; DA-4 is Partial | Versioned clipboard/native-file JSON and same-project clone; explicit object/chest/special metadata, door, sprite, pot-item, property, collision, and water domains; preserved destinations by default; detached save preflight and one undo action | Project-file/asset compatibility and portable resource packing remain. Numeric references require compatible assets. Application disk transaction/reopen, runtime, human UX, CI, and packaged acceptance remain separate. |
| Overworld map/entrance/exit/item/property editing | Partial | Domain-specific save methods called by OverworldEditor::Save() when their flags are enabled | Entity undo and full application acceptance need completion. Save support must be checked per domain and ROM layout. |
| Overworld sprite persistence | Partial; writer implemented at consolidated bd9f0497a | Overworld::PrepareSpriteSave plans three state tables; OverworldEditor::Save checks capacity/manifest and applies the plan transactionally | Complete entity undo and application Save As/reopen/runtime qualification for every advertised state and ROM layout. Unloaded or unsupported map/state ownership and positions outside the 16-pixel grid refuse saving. |
| Message | Partial | Transactional save of valid parsed text through coordinated save when enabled | GUI-to-disk reopen and runtime acceptance for the advertised ROM profile. |
| Palette | Partial; coordinated saving implemented at consolidated bd9f0497a | Pending PaletteManager colors join File Save/Save As when Save All Palettes or Save Dungeon Palettes is enabled; session history and live previews remain in memory until save | Paired palette-slot/pixel remapping is available through source Edit Graphics for supported static 3bpp dungeon/Overworld targets; one Graphics Undo and disposable Oracle Save As/reopen are covered. Other palettes/profiles and runtime appearance remain to qualify. JSON import/export is implemented when JSON support is enabled. |
| Assembly | Partial | Save File writes active ASM source; Asar patch application is a separate ROM operation | Source reopen/dirty-close and separately fenced patch-application qualification. |
| Sprite | Partial | Custom .zsm editing/saving; vanilla sprite viewing | Qualify .zsm roundtrip and complete/disable incomplete vanilla controls. Dungeon sprite placement is a separate workflow. |
| Settings | Implemented for configuration-file persistence | Settings/layouts save outside the ROM | Panel-to-restart acceptance is separate from ROM capability and release proof. |
| Graphics pixel-sheet persistence | Partial; guarded 3bpp writer implemented at consolidated bd9f0497a | Session pixels, Undo, PNG exchange and coordinated GraphicsEditor::Save with preflight, approved allocation, rollback and decoded readback | Requires save_graphics_sheet; other formats and full runtime/native qualification remain open. Disabling the flag refuses pending pixel edits; enabling it does not override sheet ownership, reserved-sheet policy, pixel-index limits, or approved free-space requirements. |
| Graphics groups and polyhedral editing | Partial | Existing registered editors and model operations | Audit and qualify their specific persistence paths; do not list the tools as missing or assume pixel-sheet proof covers them. |
| Screen | Blocked for coordinated save with any pending domain | Dungeon-map, Tile16, title-screen, and pause-map models; partial inventory UI | All pending Screen domains block central save. Direct title/pause ROM writers also fail closed. Naming screen is empty; credits/ending screen authoring needs a targeted audit. |
| Music | Partial; instrument/sample saving Missing | Tracker/piano roll, playback, song serialization, separate editor save path | Not in coordinated Save ROM. SaveInstruments and SaveSamples return Unimplemented; WAV import is a placeholder; event clipboard is incomplete. |
| Hex / Memory | Partial | Raw-ROM inspection and expert editing surface | No complete editor dirty/undo/save contract; outside the supported tester edit workflow. |
| Emulator | Partial | Play testing and runtime inspection | Save-state UI and conditional-breakpoint workflows remain incomplete; independent emulator evidence is still required. |
| Agent | Partial | Build/provider-specific chat and tools | Not a coordinated ROM-save participant; tool output is not proof of a desktop editing workflow. |
EditorManager::SaveRom() is the application persistence boundary. The source refresh at consolidated bd9f0497a (2026-10-05) replaces the earlier blanket Graphics/Palette exclusions. Before serializers mutate the ROM, it rejects pending Graphics, Palette or graphics-group edits when their save setting is disabled, and all pending Screen edits. Eligible loaded editors then serialize Dungeon, Overworld, Palette, enabled Graphics and Message data inside the coordinated transaction, followed by ROM safety checks, conflict handling, backup policy, and disk write.
Important exceptions:
OverworldEditor::Save() covers maps, entrances, exits, items, and enabled properties/music/custom overworld data. Its planned sprite writes also run when map saving is disabled.ScreenEditor::Save() does not bypass the central pending-Screen block. Enabling kSaveDungeonMaps does not bypass it; enabling kSaveGraphicsSheet authorizes only the guarded sheet writer.ScreenEditor::SaveTitleScreenToRom() and SaveOverworldMapToRom() return errors until their readback requirements are met. A custom-map export is a separate file workflow, not a ROM save.Search the current checkout before changing an entry point: these are anchors, not permission to replace a newer implementation with an older design.
Existing synthetic, serializer, CLI, and visual tests remain valuable evidence. Do not silently upgrade their scope to packaged GUI save acceptance. The formal plan lists the next implementation slices; do not duplicate its task state here.
z3ed provides scriptable inspection, guarded edits, validation, snapshots, and agent workflows. See the z3ed CLI guide. A CLI writer test does not promote the corresponding desktop workflow automatically.
The web build uses browser storage/downloads and does not include the emulator. It requires separate browser acceptance; see the Web App guide.
The combined candidate shares pit/stair header-slot controls across Workbench and standalone room details, including named arrival layers and destination navigation. The pit-plane edit now participates in metadata undo/save. Source-backed vanilla plane choices are 00–02; existing raw 03 is preserved, not silently changed. App/unit build and 264 focused tests passed with no skips. Placed-staircase slot mapping, reciprocal stair behavior, human UX and game traversal remain open.