[Feature] Git storage carries media and sidecars, not just a warning #515

Closed
opened 2026-07-22 09:28:33 +00:00 by brenno · 1 comment
Owner

Saving a deck to a git repository leaves work behind: video, audio, drawings (.ink.json) and user notes do not travel. deck_repo_serializer.dart (around line 129) skips the media; nothing under lib/services/git/ writes the two sidecars.

A blocking warning before the first commit now exists, naming what will not go along — so the user is told. But being told you are about to lose work is not the same as not losing it.

What to weigh before building. Media in a git repository is a size question: large binaries in history are a lasting cost. Consider routing them through the asset pool the way the other storage kinds do, and whether a per-file size limit belongs there. The two sidecars are small and textual and can simply travel.

Also check what the three-way merge should do with a changed .ink.jsondocs/design/GIT_STORAGE.md lists sidecar ink merge as an open point, and stroke identity is the hard part there.

Follows the warning added under "five paths where work silently disappeared".

Saving a deck to a git repository leaves work behind: video, audio, drawings (`.ink.json`) and user notes do not travel. `deck_repo_serializer.dart` (around line 129) skips the media; nothing under `lib/services/git/` writes the two sidecars. A blocking warning before the first commit now exists, naming what will not go along — so the user is told. But being told you are about to lose work is not the same as not losing it. **What to weigh before building.** Media in a git repository is a size question: large binaries in history are a lasting cost. Consider routing them through the asset pool the way the other storage kinds do, and whether a per-file size limit belongs there. The two sidecars are small and textual and can simply travel. Also check what the three-way merge should do with a changed `.ink.json` — `docs/design/GIT_STORAGE.md` lists sidecar ink merge as an open point, and stroke identity is the hard part there. Follows the warning added under "five paths where work silently disappeared".
Author
Owner

Media is done and merged (#540): video and audio now go through the same content-addressed pool as images, and come back as a staged file on desktop / mem: on web. The design gap was the return path, now recorded as D12 — WebAssetStore is an in-memory map, so the gigabyte that maxMediaBytes allows cannot go there.

One correction on my earlier reading of this issue: D5 had already decided the policy (partial clone plus a size warning, explicitly no hard cap). I said this needed a design decision first; it did not, and I should have read the design before saying so.

The sidecars are split off into their own issue, because they are three different problems rather than one: notes are decided and small, ink needs per-stroke identity settled in the annotation format before the D7 merge driver can be written, and the seal raises a question nobody has answered yet — what a seal means once the deck lives in a branch that can be rewritten or force-pushed.

Closing this one as the media half; the sidecar half continues there.

Media is done and merged (#540): video and audio now go through the same content-addressed pool as images, and come back as a staged file on desktop / `mem:` on web. The design gap was the *return* path, now recorded as D12 — `WebAssetStore` is an in-memory map, so the gigabyte that `maxMediaBytes` allows cannot go there. One correction on my earlier reading of this issue: **D5 had already decided the policy** (partial clone plus a size warning, explicitly no hard cap). I said this needed a design decision first; it did not, and I should have read the design before saying so. The sidecars are split off into their own issue, because they are three different problems rather than one: notes are decided and small, ink needs per-stroke identity settled in the annotation *format* before the D7 merge driver can be written, and the seal raises a question nobody has answered yet — what a seal means once the deck lives in a branch that can be rewritten or force-pushed. Closing this one as the media half; the sidecar half continues there.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#515
No description provided.