fix(store): name the nested Timelines/ layout on >= 8.7 storage (#95) - #96
Merged
Merged
Conversation
diagnose already attached the redacted nested_evidence block and fixture already bundled Timelines/, both keyed off nestedTimelines.length. The next_action and the version support note were keyed off the layout value, which stays content-/info-primary above 8.7 by design — so a modern store got a report carrying nested evidence with no prose explaining why. Adds NESTED_TIMELINES_MODERN_ACTION, emitted when nested documents exist but the layout is not timelines-nested. It asserts nothing: #50's 7.x discard risk and #68's 8.5.0 survival observation both predate the 8.7 storage change and neither transfers across it. Write-time stays silent. CapCut creates Timelines/ routinely on modern builds (#60), so a per-write warning would fire for the majority on a hazard nobody has evidenced.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #95.
The split
nestedTimelinesis populated on every store. The layout value is not —timelines-nestedrequires!modernStorage, so it stops at 8.7 by design, which is what keeps #50's 7.x claim off modern storage.Four consumers, two keyed each way:
cmdDiagnosenested_evidencenested_timelines.lengthcapcut fixturebundlenestedTimelines.lengthdiagnosenext_actionlayoutversionsupport notelayoutSo a >= 8.7 project with a nested
Timelines/directory produced adiagnosereport carryingnested_timelinesand a full redactednested_evidenceblock, and not one line of prose in that report said what the structure was.fixturewould bundle the exact layout #50 has been blocked on since 2026-08-01 without ever mentioning that the bundle is what's wanted.The change
NESTED_TIMELINES_MODERN_ACTION, emitted fromdiagnoseDraftStoreand theversioncommand when nested documents exist but the layout is nottimelines-nested.It asserts nothing in either direction. #50 reports 7.x discarding root-mirror edits; #68 reports 8.5.0 regenerating the nested file from the root, byte-identical after a round trip. Both predate the 8.7 storage change and neither transfers across it, so the note names the structure, states that it is unevidenced above 8.7, and ends on the fixture CTA.
Deliberately unchanged
Timelines/<id>/draft_info.jsonafter opening a CLI-written draft, so modern builds produce the directory routinely — a per-write warning would fire for the majority about a hazard nobody has evidenced. That is the timelines-nested write warning is gated on layout, not app version — shows 7.x text to 8.5.0 users #68 failure mode one storage generation later.sync-timelinesstays silent, same reason.layout,canonical, ortargets.Tests
test/timelines-layout.test.mjs, new>= 8.7 storage is named, not assertedblock: claim-freediagnoseaction, matchingversionnote, evidence-and-prose agreement, no false positive without the directory, and exactly one nested note across 7.9.0 / 8.5.0 / 8.7.0 / 9.2.8.The existing
>= 8.7 ... stay silentcase is retitled towrite silently— it still asserts write-path silence, and its diagnose assertion is tightened from "no action containingdiscard" to "no action containingmay discard those edits", since the new note mentions the word only to disclaim it.812/812 green, lint clean.