Skip to content
go-libfossil Timeline
Login

Timeline

50 descendants and 50 ancestors of 052b3e87cb6b2f72

2026-10-21
11:48
feat(checkout): verify a present R card on extract, as fossil's checkout

Extract now runs fossil's repo-cksum check after materializing: a present R card is compared with the aggregate over every file the manifest names, read from the store, so a sparse checkout over a dense store reaches the same verdict as a dense one, and a sparse store skips the check. Like fossil, a disagreement is a warning delivered through ExtractOpts.Warn and never fails the extract; repo-cksum off disables it. The conformance case builds its repository with fossil and checks fossil warns exactly where go-libfossil does. Clears the SC-4.3-4 scope note. check-in: 318f46de9e user: [email protected] tags: feat/submanifest-reader, main, trunk

11:45
feat(sync): serve partial-mirror clones from the partial-mirror setting

A sparse store refuses a clone its cone does not cover unless the boolean partial-mirror repository setting is on, read as fossil reads a boolean setting. It reaches HandleSync, XferHandler, ServeHTTP and repo serve alike; libfossil.SettingPartialMirror names it. Closes SC-5.3-2. check-in: 6012d82bd6 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:44
feat(sparse): expose narrow-then-compact as Repo.CompactStore and repo cone compact

The public entry point refuses a dense store, as zit's pack --drop-elided does, and drops exactly the blobs that only out-of-cone F cards name. The test computes that set from the held artifacts, then verifies the store and recovers every dropped payload by widening through SetConeContext. check-in: 774f579bfa user: [email protected] tags: feat/submanifest-reader, main, trunk

11:42
fix(sync): bound a sparse clone round's walk by the dense batch measure

A cone-excluded row is charged at its expanded size plus card overhead, so a round over a long excluded run stops where a dense batch would and the cursor resumes it, instead of walking the whole run in one round. SC-6.2-1 stays partial: ordinary keep-set discovery still reads the whole store. check-in: 1da7f0f002 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:42
test(conformance): refuse a cone walk past the visited-node bound on the wire

Many check-ins sharing one wide sub-manifest cross the 1<<20 visit bound at depth two; 1023 roots are served and 1024 are refused the way depth 17 is. Clears the SC-8-2 scope note. check-in: 8652936469 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:40
test(conformance): cover widening over a sparse store

Widening a sparse-store checkout with a peer fetches and materializes exactly the newly covered payloads; with no peer it refuses naming the elided class and changes nothing; a peer lacking the content is refused with the unavailable artifact named. Clears the SC-3.5-2 scope note. check-in: fcb7f90f2c user: [email protected] tags: feat/submanifest-reader, main, trunk

11:35
docs(changelog): record cone-scoped transfer and record-only merge

The sparse-store entry said nothing yet fills a store sparsely and the sparse-checkout entry said a merge touching an uncovered file is refused; both are no longer true on this branch. check-in: 7720f39cd0 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:34
test(conformance): restate what SC-4.1-2 and SC-4.4-1 still lack

The checkout lane's review blockers are fixed and re-reviewed, so the two scope notes now name only what is unverified: durable crash recovery of the private marker, a conformance case for reverting a record-only change, and stash apply on a sparse checkout. check-in: 7163d16293 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:30
Merge branch 'fix/sparse-update-vmerge' into feat/sparse-consolidated check-in: ac542fa1de user: [email protected] tags: feat/submanifest-reader, main, trunk
11:29
fix(checkout): restore restoreCommitted's empty-path assertion

Only managed revert steps reach it, each with a resolved path, so the fallback for an empty path was dead code standing in for a broken invariant. check-in: a3cc82b191 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:29
refactor(checkout): drop the unreachable record-only merge payload path

Record-only merge steps return before the content switch, and a both-changed path outside the cone is refused, so storeMergePayload had no production caller. Its tests called it directly; they go with it, and the merge-failure test keeps its vmerge assertion. check-in: dac73e55c9 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:27
fix(checkout): hold record-only changes to the commit queue

A partial commit wrote every pending change outside the cone into the check-in. Such changes now behave as disk changes do: a full commit records them, a partial commit leaves them pending against the new version, and a partial commit is still refused while a merge is pending. Fossil-oracle tests cover the dense analog of each case. check-in: 802906e3b8 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:26
docs(sync): state the prepared sparse service's liveness limit

After the observed generation changes, every request falls back to dense and the service never re-prepares. Say so where the type is documented, so a caller does not expect sparse serving to resume after a foreign commit. check-in: 322c8ef406 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:26
fix(content): charge the sparse card budget only to decks

Preparation counted newlines in every artifact against the 1M card budget, so a repository holding one large multi-line text file was refused far below its byte limits. Only an artifact with a verified Z card can parse as a deck, so only those are charged cards and parsed; the byte budgets still bound all content. check-in: 2f0f64f464 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:25
fix(sync): send the private notice for a prepared sparse gimme

The prepared index left private and shunned RIDs out, so a gimme for an in-cone private artifact failed keeps() and got no reply, where the dense handler sends the private igot. A client never told the artifact is private can keep requesting it. The index now answers cone membership only, as the dense keep-set does; the handler's live private and shun gates decide visibility, so no payload is exposed. check-in: 87f44dbf99 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:24
fix(checkout): keep a pending merge across a sparse update

Fossil's update leaves vmerge alone, so the next commit records the merge parent. The sparse update cleared vmerge, losing the parent and letting a partial commit through while the merge was still pending. check-in: 5a070508db user: [email protected] tags: feat/submanifest-reader, main, trunk

11:18
fix(manifest): bound MergeParentFiles' required-content check by the caller's context

The fallback that explains a parent whose tree the store does not hold ran under context.Background, so a cancelled commit still paid for it. Commit passes its context; snapshot, which has no deadline, says so explicitly. check-in: c25e714b08 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:18
fix(sync): parse each structural node once in the required-content walk

The closure walk parsed a node before checking whether its frame had been visited, so a tree whose S cards name one sub-manifest many times parsed it once per reference: a 616 KB node took 0.46s at 50 references and 3.7s at 400. The visit and byte limits bound what is held, not that work, and a caller without a deadline could wait for days inside the budget.

The walk is its own function now, parsing through a callback it calls at most once per (artifact, baseline) pair, so a test can count parses. check-in: 6824f7701a user: [email protected] tags: feat/submanifest-reader, main, trunk

11:15
test(conformance): register sparse protocol bound cases honestly

(cherry picked from commit f10fb0eca15614a98bdecfc9d715464615738924) check-in: db1f83c19a user: [email protected] tags: feat/submanifest-reader, main, trunk

11:06
test(checkout): preserve public phantom visibility after merge failure

(cherry picked from commit fc1c110fa16c178c73a4bbf937c1f01cc41d5795) check-in: 20b51362a4 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:06
fix(checkout): refuse unstamped legacy sparse undo images

(cherry picked from commit 63520cd9e0d6ed4f96be8b302dfc217ee57da82f) check-in: 9d336c0907 user: [email protected] tags: feat/submanifest-reader, main, trunk

02:10
fix(checkout): refuse occupied destination SQLite sidecars check-in: 1208731132 user: [email protected] tags: feat/submanifest-reader, main, trunk
02:04
test(conformance): register canonical sparse recovery vectors check-in: 6e27cad4ad user: [email protected] tags: feat/submanifest-reader, main, trunk
01:58
test(conformance): retain partial review gate for physical sparse records check-in: 20c05b6e64 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:58
test(conformance): retain partial sparse lifecycle coverage check-in: 44737f0cbc user: [email protected] tags: feat/submanifest-reader, main, trunk
01:58
test(conformance): register record-only sparse merge coverage check-in: ed3318aae5 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:56
feat(sparse): recover required update content with explicit context check-in: 5e75c2e59a user: [email protected] tags: feat/submanifest-reader, main, trunk
01:52
fix(checkout): retain update target across readiness refusal check-in: f5e355bd08 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:50
fix(checkout): retain extra update failure rollback state check-in: 1fd5efc3bb user: [email protected] tags: feat/submanifest-reader, main, trunk
01:45
feat(checkout): add nonmutating update recovery planning check-in: 11b36b946c user: [email protected] tags: feat/submanifest-reader, main, trunk
01:41
Merge commit 'ba688b7' into feat/sparse-required-content check-in: f25fae939d user: [email protected] tags: feat/submanifest-reader, main, trunk
01:38
fix(sparse): preflight exports and explain local read refusals check-in: 068797500b user: [email protected] tags: feat/submanifest-reader, main, trunk
01:26
fix(cli): discover sparse checkout markers consistently check-in: 88b3cdd2ef user: [email protected] tags: feat/submanifest-reader, main, trunk
01:25
test(checkout): align public native interoperability with private sparse metadata check-in: b118dd3935 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:25
fix(checkout): skip carried baseline recovery for unborn checkouts check-in: 342ed76b79 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:25
test(checkout): isolate native sparse marker interoperability check-in: 8df112e120 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:25
fix(checkout): match recovery selection to enqueue union semantics check-in: 7f6bb342c3 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:25
Merge commit '24fb005' into feat/sparse-required-content check-in: acd2d2ea27 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:24
fix(cli): discover private checkout state during sparse recovery check-in: 740fd56d95 user: [email protected] tags: feat/submanifest-reader, main, trunk
01:11
fix(sparse): recover exact carried payloads for selective checkins check-in: b03e747f55 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:54
feat(checkout): expose nonmutating carried-file recovery selection check-in: 04a8ea0b25 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:53
fix(sparse): bind checkout recovery to full pending-state snapshots check-in: 0f9775add6 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:52
fix(checkout): finalize published commits despite late cancellation check-in: f1f8cd6cb8 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:52
test(sparse): expose selected checkin carried-payload recovery gap check-in: ed971d634b user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
feat(checkout): expose nonmutating context recovery guards check-in: 4c8312ae48 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
test(checkout): cover control-path extraction and data collisions check-in: 59f53f4abc user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
test(conformance): require widen and rerun for outside merge conflicts check-in: 3afd0481ed user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
test(conformance): discover private checkout state in sparse fixtures check-in: 4e00e588c9 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): carry outside pending bytes across update check-in: 04ddaed6a6 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): bind undo images to their materialization cone check-in: c06eb7bc22 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): mark record-only mode outcomes pending for revert check-in: 052b3e87cb user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): preserve public phantom visibility when filling merge bytes check-in: 31e9096847 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(stash): require widening before replaying excluded paths check-in: d1d2c218c0 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): preserve wider undo images without escaping cone check-in: 1f215be1a4 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
test(checkout): prove native commit after sparse densification check-in: a95deda46a user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): migrate legacy sparse records behind private marker check-in: 34d90cea93 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): protect disk metadata with simulated working storage check-in: 3fda9d3007 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): match sparse pending merge lifecycle check-in: 3779a280ac user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): separate sparse managed rows from pending outcomes check-in: c82ec862f2 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): stage sparse marker transitions before disk changes check-in: cf1e964bf5 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): isolate newly created sparse checkout metadata check-in: be8abf5ed3 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
test(conformance): keep record-only cases available on wasm check-in: 1d7c669153 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
test(conformance): cover record-only merges and native checkout boundary check-in: 7a7b6bfaee user: [email protected] tags: feat/submanifest-reader, main, trunk
00:43
fix(checkout): preserve record-only sparse merge changes check-in: 139d96b210 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:41
fix(sparse): retain explicit cone widening for future pulls check-in: e7ed09f027 user: [email protected] tags: feat/submanifest-reader, main, trunk
00:30
fix(sparse): bound local recovery and validate retained closure atomically check-in: 16c802bdd9 user: [email protected] tags: feat/submanifest-reader, main, trunk
2026-10-20
23:53
feat(sparse): add explicit public and CLI required-content recovery check-in: f57ca7de6a user: [email protected] tags: feat/submanifest-reader, main, trunk
23:51
feat(sparse): recover exact operation-selected payloads safely check-in: 221f0135ce user: [email protected] tags: feat/submanifest-reader, main, trunk
23:17
fix(sparse): preserve elided payloads across canonical recovery check-in: 40cdcdc837 user: [email protected] tags: feat/submanifest-reader, main, trunk
22:47
feat(sparse): recover exact required structural content atomically check-in: 7b478974f3 user: [email protected] tags: feat/submanifest-reader, main, trunk
21:38
perf(manifest): bound repair work by the linked batch (#455)

Propagate tags and apply scheduled leaf rechecks before each link transaction commits. Preserve sparse metadata repair, pretagged merge-parent rechecks, and rollback-safe retries. Tracked in #432. check-in: b38bf23f79 user: [email protected] tags: feat/submanifest-reader, main, trunk

21:00
fix(verify): audit leaves and parent ancestry (#454)

Use same-branch and arrival-order evidence for leaf validation, validate parent overrides, and match Fossil parent tokenization. Preserve sparse readiness and delta-tree scans within one verification snapshot. Tracked in #433. check-in: 35672aadc7 user: [email protected] tags: feat/submanifest-reader, main, trunk

19:07
fix(sync): preserve cleanup after a fatal clone refusal

Keep Fossil's mandatory operation-less second round without accepting any cleanup payload or clearing the refusal. Exercise dense and sparse refusal alongside the existing client compatibility cases. check-in: a453db484d user: [email protected] tags: feat/submanifest-reader, main, trunk

18:33
docs(conformance): record partial-tree lifecycle support and remaining limits check-in: b29428a4e2 user: [email protected] tags: feat/submanifest-reader, main, trunk
18:31
Merge commit 'bac111b' into feat/submanifest-reader check-in: e79a5cef6c user: [email protected] tags: feat/submanifest-reader, main, trunk
18:30
fix(manifest): scope sparse readiness proof to crosslink transactions check-in: 7ee2a8713d user: [email protected] tags: feat/submanifest-reader, main, trunk
18:23
test(manifest): cover sparse dependency arrival and cascade orders check-in: 61bc211295 user: [email protected] tags: feat/submanifest-reader, main, trunk
18:13
fix(verify): share snapshot-scoped sparse checkin readiness check-in: fe64b28b2d user: [email protected] tags: feat/submanifest-reader, main, trunk
18:10
Merge branch 'feat/submanifest-reader' into feat/sparse-tree-writer check-in: 08f1cd28ac user: [email protected] tags: feat/submanifest-reader, main, trunk
17:41
fix(manifest): preserve sparse ancestry and refuse incomplete file history check-in: ea3c1d6cc3 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:31
Merge public-content publication while preserving sparse carried files check-in: fb96ac5642 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:26
feat(manifest): derive sparse tree metadata with explicit completion gaps check-in: e96adae02f user: [email protected] tags: feat/submanifest-reader, main, trunk
17:26
fix(checkout): enumerate covered files over sparse tree stores check-in: 6878fdd664 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:20
Merge commit '45d80da' into feat/submanifest-reader check-in: eaa6316fd7 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:20
Merge commit 'f2cf3ed' into feat/submanifest-reader check-in: 1fe16a6bf5 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:20
Merge commit '80cfe22' into feat/submanifest-reader check-in: 4d78b267c8 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:20
test(conformance): require immediate error-only clone refusal check-in: 7bc35863dc user: [email protected] tags: feat/submanifest-reader, main, trunk
17:18
test(conformance): register sparse wire cases without hiding remaining gaps check-in: 743a561747 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:17
test(conformance): bound sparse protocol fixtures and document test scope check-in: bf7bc337f5 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:15
test(sync): cover failed cone fetch intent and retention counts check-in: 34adfc91d0 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:15
Merge commit '20b56c4' into feat/submanifest-reader check-in: 1f9f94350f user: [email protected] tags: feat/submanifest-reader, main, trunk
17:13
test(conformance): execute sparse sync protocol cases over loopback wire check-in: 233143abec user: [email protected] tags: feat/submanifest-reader, main, trunk
17:12
fix(sync): retain raw sparse provenance across rebuilds check-in: 5d727706dd user: [email protected] tags: feat/submanifest-reader, main, trunk
17:06
Merge branch 'feat/submanifest-reader' into feat/sparse-tree-writer check-in: 320629c0cb user: [email protected] tags: feat/submanifest-reader, main, trunk
17:06
fix(manifest): filter tree baselines before delta enumeration check-in: 9419a375f0 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:01
Merge sparse transfer with rebuild-safe compaction and schema guards check-in: a16e178c81 user: [email protected] tags: feat/submanifest-reader, main, trunk
17:00
Merge commit '00162b8' into feat/submanifest-reader check-in: e73fd9e276 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:58
test(conformance): distinguish subtree classification from writer support check-in: 440f271b07 user: [email protected] tags: feat/submanifest-reader, main, trunk
16:58
test(sparse): preserve compaction provenance across rebuild and sync

Exercise mixed held and nested missing S siblings after clearing and rebuilding derived tables. Repeated compaction preserves holdings and elided identities; ordinary sync must not request the rebuilt elided artifacts. check-in: 29a11b0aa8 user: [email protected] tags: feat/submanifest-reader, main, trunk

16:56
Merge commit 'bc7af6d' into feat/submanifest-reader check-in: 6edcdc4e4d user: [email protected] tags: feat/submanifest-reader, main, trunk
16:54
fix(content): compact healthy partial trees using shared provenance

Use raw cone references while independently verifying held bytes. Preserve leaves and nonterminal paths so missing descendants keep their range proofs. Exercise missing S nodes, stale derived indexes, and cancellation after an observed demotion. check-in: 55b3ca7155 user: [email protected] tags: feat/submanifest-reader, main, trunk