diff infinite_canvas/docs/entities-and-components.md @ 281:c57149ad216e default tip

Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
author MrJuneJune <me@mrjunejune.com>
date Tue, 18 Aug 2026 22:18:15 -0700
parents 49e9e591c9bb
children
line wrap: on
line diff
--- a/infinite_canvas/docs/entities-and-components.md	Tue Aug 18 19:14:53 2026 -0700
+++ b/infinite_canvas/docs/entities-and-components.md	Tue Aug 18 22:18:15 2026 -0700
@@ -60,9 +60,10 @@
 - hovered/pressed scene entity;
 - camera.
 
-Open developer dropdowns are modal because Raygui draws their item list beyond
-the panel rectangle and consumes outside clicks to close. While one is open,
-neither native web surfaces nor canvas entities receive pointer input behind it.
+Open developer dropdowns and the snapshot-name editor are modal because Raygui
+consumes keyboard or outside-click input while editing. While either is open,
+native web surfaces, canvas entities, dictation hotkeys, and camera movement do
+not receive that input.
 
 Text editing blocks WASD/arrow camera movement. Scrollable entities consume an
 unmodified wheel. Ctrl/Cmd + wheel remains available to the camera for anchored
@@ -72,4 +73,26 @@
 entity. Their visual-line layout is shared by drawing, hit testing, vertical
 cursor movement, and caret visibility, so wrapped text and mouse selection use
 the same geometry. Ctrl on Windows/Linux and Cmd on macOS drive select/copy/
-cut/paste shortcuts; Ctrl or Option performs word navigation.
+cut/paste shortcuts; Ctrl or Option performs word navigation. A selected text
+area exposes a bottom-right resize handle. Dragging it changes both dimensions,
+reflows wrapped lines immediately, and keeps the caret within the scrollable
+viewport.
+
+## Snapshot boundary
+
+Developer Controls saves named native snapshots under the user state directory
+as versioned `.zmap` files. The encoder writes explicit little-endian fields
+rather than copying `Canvas_Entity` memory, then uses a payload checksum,
+bounded entity count, finite geometry validation, and an atomic temporary-file
+rename. Loading is transactional: the live scene is not cleared until the
+entire snapshot validates.
+
+The current snapshot preserves numeric canvas entity IDs because conversation
+routing uses them. Those IDs are canvas-local handles, not final
+cross-workspace identities. Domain data should eventually normalize into
+stable keys such as `conversation_id`, `asset_id`, and `component_id`; an
+entity snapshot should retain only the typed key plus its visual state.
+
+Transient pointers, CEF surfaces, Copilot SDK sessions, hover state, active
+agent work, and removal animations are never serialized. Browser and image
+surfaces reconstruct from their retained HTTP(S) source after load.