Skip to content
go-libfossil Timeline
Login

Timeline

50 descendants and 50 ancestors of 5e75c2e59a707cdb

2026-10-21
13:02
docs(conformance): record the unreferenced-blob divergence from zit

A sparse clone sends the spine, in-cone nodes and in-cone blobs of draft 6.2; a held blob no F card names is none of these, so it is not sent, though zit's keep set holds it. check-in: 4529a3f71c user: [email protected] tags: feat/submanifest-reader, main, trunk

13:01
refactor(sync): remove the prepared sparse index and service

The per-round walk serves a cone clone, and nothing but tests reached the prepared index or the service that built it, so both go with their successor index. The whole-store reference loader stays for the pull inventory, compaction, verification and crosslink, and keeps its budget tests. The shun and private gates the prepared tests covered are now checked against the walk. check-in: ef6efa9f1e user: [email protected] tags: feat/submanifest-reader, main, trunk

12:47
docs(changelog): stash pop merges three-way; revert restores the version's mode check-in: 8f27b71159 user: [email protected] tags: feat/submanifest-reader, main, trunk
12:47
fix(sync): converge when a client drops the walk's progress

A sparse walk now sends one clone-cap cookie per round naming the row the next round starts at, with a part-walked check-in's progress. A request that returns to that check-in without echoing its progress comes from a client that drops it; the round steps past the row instead of resending the same batch forever, and the next pull fetches what the walk owed by name. A gimme in a cone request is answered densely, since the requester names it (6.4). The SC-6.2-1 note records the pull inventory's whole-store read, which matches zit's. check-in: 6766dd6cba user: [email protected] tags: feat/submanifest-reader, main, trunk

12:46
fix(checkout): revert restores the version's executable and symlink bits

Revert wrote a restored file with vfile's bits, which a pending merge may have changed, and left them in vfile. Fossil's revert writes the file with the reverted-to version's permission and records it in vfile.isexe and islink, so reverting a file whose only change is a merged executable bit takes the bit back off. versionPaths now carries each file's permission. check-in: da5d6546bb user: [email protected] tags: feat/submanifest-reader, main, trunk

12:41
fix(stash): merge popped changes three ways and keep merged exec bits, as fossil does

Apply now does what fossil's stash_apply does when a stashed file changed since the stash: it merges the stashed change (pivot: the stash baseline) onto the file on disk with merge_3way, writing fossil's conflict markers and NAME-baseline/-original/-merge on conflict, an empty file for binary content, and reporting each conflict. Previously the stashed bytes were restored verbatim, losing the current change.

Save reverts a file with a pending merge to the checked-out version's executable and symlink bits, and records them in vfile, as fossil's revert does; the stash keeps the merged bits and the pop restores them. checkout.VersionPaths becomes VersionPerms to supply those bits.

The sparse stash-record-only conformance case now expects fossil's result: a file the merge took unchanged keeps the checked-out content after a stash round trip. check-in: 04e3ea8301 user: [email protected] tags: feat/submanifest-reader, main, trunk

12:39
fix(sync): walk a check-in already sent as a delta source

Committing deltifies each manifest against its successor, so the first check-in's chain puts later manifests on the wire before their rows. A sparse round skipped those rows as already sent and never walked them, leaving their in-cone files to a later pull. The row is now walked without being sent again. Walk-only clones in the new cases hold no transit phantoms. check-in: 6791486470 user: [email protected] tags: feat/submanifest-reader, main, trunk

12:33
docs(conformance): narrow SC-6.2-1 to the pull inventory

A clone round now reads and walks only its batch. What remains of the MUST is a cone-scoped pull, which still classifies the whole held store to filter its igot inventory and gimme answers. The walk also carries its request context explicitly. check-in: cbc0f9a21e user: [email protected] tags: feat/submanifest-reader, main, trunk

12:33
feat(sync): walk a sparse clone's keep set per round

A cone-scoped clone no longer classifies the whole held store before its first round. Each round reads only the rows it reaches: structural artifacts go out at their row, and a check-in's row walks its tree, descending only nodes whose key range meets the cone and that its primary parent's tree does not carry over the same range, then sends the in-cone nodes and blobs that walk reaches. Content and sub-manifest rows wait for those walks and are charged as excluded rows are, so a round's work tracks its batch. A check-in whose walk outgrows a round resumes in the next one from progress kept in the clone-cap cookie. Delta bases the round did not reach are served in full form. The walk keeps the depth and visited-node bounds per request.

A round spent wholly inside an excluded run sends nothing yet advances its cursor; a coned clone now continues on that progress instead of reporting that the server stopped sending.

HandleEnd reports the artifacts a cone request classified. check-in: 2909f2a676 user: [email protected] tags: feat/submanifest-reader, main, trunk

12:30
docs(changelog): stash saves with a pending merge, as fossil does check-in: 84c7659789 user: [email protected] tags: feat/submanifest-reader, main, trunk
12:30
Merge branch 'fix/stash-pending-merge' into feat/submanifest-reader check-in: 15a47df65a user: [email protected] tags: feat/submanifest-reader, main, trunk
12:29
fix(stash): stash a pending merge as fossil does

Save no longer refuses while a merge is pending. As fossil's stash save, it stashes each changed file against the content last written for it (mrid) and reverts only the stashed files, so vmerge is kept and the next commit records the merge parent. A file the merge added is not in the checked-out version, so its revert deletes it.

Apply now fails before writing anything when a stashed modified file is missing from disk, as fossil's pop fails with "no such file" and rolls back; this is what a merge-added file meets after the save.

In a sparse checkout the record-only merge outside the cone is left pending and unmaterialized, and the in-cone files round-trip. check-in: c314e928f8 user: [email protected] tags: feat/submanifest-reader, main, trunk

12:20
test(checkout): read fossil's listing from stdout in the marker crash test

In the linked crash state both marker names are one file, and SQLite on Linux warns about the multiple links on stderr while fossil lists the record normally. CombinedOutput folded the warning into the file list. check-in: 83f574dc8f user: [email protected] tags: feat/submanifest-reader, main, trunk

12:10
docs(changelog): record widening fetch, marker crash safety and the R-card warning check-in: 59e0d0a668 user: [email protected] tags: feat/submanifest-reader, main, trunk
12:09
Merge branch 'feat/sparse-checkout-rows' into feat/submanifest-reader check-in: f0d200e75d user: [email protected] tags: feat/submanifest-reader, main, trunk
12:05
test(checkout): isolate fossil's home in the marker crash test check-in: b3f3835fbd user: [email protected] tags: feat/submanifest-reader, main, trunk
12:02
docs(changelog): record the partial-mirror setting, store-cone widening and compaction check-in: 169418042b user: [email protected] tags: feat/submanifest-reader, main, trunk
12:02
test(conformance): cover record-only revert and stash on a sparse checkout

Reverting a merge's out-of-cone changes by name, and with no names, leaves the record exactly where fossil's revert leaves the dense analog, without materializing anything. On a sparse checkout stash refuses a pending merge with the dense checkout's refusal, round-trips an in-cone edit as fossil does, and refuses to apply an out-of-cone file, naming the cone and keeping the entry. Clears the SC-4.4-1 scope note. check-in: 902108ace9 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:58
fix(checkout): recover a checkout marker move a crash interrupted

A crash between moveMarker's link and unlink left one checkout database under both the native and the private name, which discovery refused, so the checkout could not be opened again. moveMarker now records its target name in the database before linking, and Open completes the move to that name. A still-running transition keeps the same name, so an Open racing it converges instead of removing both names, and moveMarker treats an old name already removed as done.

Crash injection at every step of narrowing, widening and legacy migration reopens as the old or new state with files matching the cone; stock fossil either refuses the directory or lists the dense record, before and after recovery. Clears the SC-4.1-2 scope note. check-in: bb9805a794 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:56
Merge branch 'feat/sparse-server-rows' into feat/sparse-next

# Conflicts: # cli/repo_cone.go # conformance/requirements/sparse-cone.tsv # conformance/sparsesync_test.go check-in: afd72285e5 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:52
test(conformance): point the node-retention notes at zit #259

Section 5.1 permits holding out-of-cone nodes while 5.4 and 6.3 read as dropping or eliding them; zit holds them and so do we. The notes keep the rows PARTIAL until the draft says which sentence governs. check-in: 8ea7bd1ec4 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:52
docs(conformance): name the draft sentences zit's node retention contradicts

(cherry picked from commit 1e7b5f246ef9f5af5b366140eb03e7a80227f9bb) check-in: 42a5ef6dd7 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:51
feat(sparse): public policy-form demand fetch with saved-peer default

Repo.SetStoreConeContext replaces the store cone and pulls newly covered elided artifacts from an explicit peer through ordinary cone-scoped sync; with no peer it refuses naming the elided count, and a cancelled context refuses before any request, both leaving policy unchanged. repo cone store shows or replaces the store cone, defaulting the peer to last-sync-url. Closes SC-6.4-1 and SC-6.4-2. check-in: 08efefff20 user: [email protected] tags: feat/submanifest-reader, main, trunk

11:48
test(sparse): pin tree-manifest holdings on aware and cone-ignorant receive

An aware clone and pull hold exactly the spines, in-cone nodes and in-cone blobs and never request or receive the remainder. Against a cone-ignorant server the requester elides exactly the blobs every F card names out of the cone and keeps every structural artifact, as zit does. Expected sets come from the origin's decks. check-in: af86aff844 user: [email protected] tags: feat/submanifest-reader, main, trunk

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:15
fix(content): prove stored budgets before SQLite prefix materialization

Keep the first pass metadata-only: typeof and direct length(BLOB) retain SQLite OP_Column length/type flags. Reject other storage classes without reading content. A CAST or substr in this pass can materialize a whole value before its stored-byte budget, so prefix reads now follow the complete stored-total proof.

Charge prefix reads and potential SQLite bytes separately; prove aggregate declared inflation before full driver payload reads. Both-driver EXPLAIN regressions reject full-content OP_Column operations in metadata preflight. check-in: d5eb1f3a5a 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
01:08
fix(content): preflight stored bytes with SQLite blob semantics

A BLOB-affinity column can hold TEXT; SQLite length(TEXT) stops at NUL and is not a byte-allocation bound. Cast content to BLOB in metadata and guarded payload reads so malformed dynamically typed values cannot bypass stored-byte preflight.

The adversarial TEXT fixture previously read a one-MiB payload and reserved sixteen MiB of inflation before rejecting corruption. Both drivers now reject before any payload read or inflation reservation. check-in: a08e7e9d71 user: [email protected] tags: feat/submanifest-reader, main, trunk

01:03
fix(sync): isolate prepared fallback cache and cancellation

Never share RID-keyed cache state across prepared service transactions: protocol-fatal responses can roll back after expansion while returning a nil Go error. Reject canceled contexts before acquiring a transaction and propagate observer cancellation instead of serving densely.

Reproduce rollback, RID reuse and incorrect content under the replacement hash; verify cancellation and deadline responses do no dense work. Exercise newly shunned payload and basis suppression after prepared-proof invalidation. check-in: 632e7349e6 user: [email protected] tags: feat/submanifest-reader, main, trunk

01:03
fix(content): bound and prune sparse reference facts

Use metadata preflight and fixed-size inflation for ordinary reference discovery too. Bound artifacts, parser cards, stored bytes and declared expansions before payload and parser allocations. Preserve unknown retention for corrupt compression.

Retain only classification fields and structural identities, copying kept tokens so discarded wiki/forum bodies, cluster inventories and metadata cannot be pinned. Compare empty and large-body fixtures and reject oversized expansion reservations. check-in: a3c6ddef9a user: [email protected] tags: feat/submanifest-reader, main, trunk

01:03
fix(sync): withhold shunned payloads and clone delta bases

Match Fossil 2.28 send_file and send_compressed_file payload gates. A source-first clone must expand a dependent when its stored basis is shunned rather than forwarding that withheld basis. Preserve private notices, authorization and SHA3 refusal ordering.

Exercise real encoded requests through the ordinary handler and Fossil HTTP oracle. Canonical compressed clone can name a shunned public basis without sending it; this server expands instead to preserve its source-first guarantee. check-in: a402aa5cc6 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:54
fix(deck): reject overflowing W-card sizes before slicing check-in: 6d3755e966 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:36
feat(sync): index prepared sparse clone successors

Prepare verified raw references under explicit byte, card, artifact and index-slot budgets before allocating payload expansions. Use request-local cone spans over a cone-independent range index to skip excluded RID gaps without empty clone continuation pages.

Keep this internal: selected-content reconstruction still uses dense allocation behavior, ordinary pull still scans inventory, and retaining every tree node is not proof of tree-minimal emission. No public wrapper, capability grammar or client continuation changes. check-in: 065f76e22f 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
00:05
feat(sync): prototype internal prepared sparse serving lifecycle

Separate immutable cone-independent raw facts from request-local classification. Validate the observer connection, database generation and post-preparation file identity under a bound transaction. Unsupported, stale and mutating requests use dense fallback without cold cone discovery while preserving sparse-origin refusal.

Exercise real clone and pull over excluded candidates, same-request writes, observer lifecycle and durable cluster advertisements across restart. Classification and inventory remain whole-store work; this does not close sparse per-round resource bounds or expose a public lifecycle API. check-in: 63e0b940eb user: [email protected] tags: feat/submanifest-reader, main, trunk

2026-10-20
23:56
docs(sync): clarify exchange-local avoidance hint observations check-in: e500bfb4e3 user: [email protected] tags: feat/submanifest-reader, main, trunk
23:56
test(conformance): document commit hint conditional applicability check-in: 4436960f72 user: [email protected] tags: feat/submanifest-reader, main, trunk
23:56
test(conformance): verify exchange-local commit hint applicability check-in: 110f44ed85 user: [email protected] tags: feat/submanifest-reader, main, trunk