| Comment: | docs(manifest): state where a reparent diverges from a rebuild
A reparent propagates from the new parent, which fossil's manifest_reparent_checkin does not, and never removes the tags inherited from the old parent, which fossil does not either; fossil's own rebuild is order-dependent there. Say both in ReparentCheckins, and rename the reparent test so it no longer claims full convergence. Note in the CHANGELOG that a failed sync no longer sweeps before it returns, so artifacts committed outside a phantom fill wait for the next crosslink. Tracked in #432. |
|---|---|
| Timelines: | family | ancestors | descendants | both | main | trunk | perf/tag-repair-batch |
| Files: | files | file ages | folders |
| SHA3-256: |
9ff7dea0b577ebe9dcaabdf118c99e35 |
| User & Date: | [email protected] on 2026-10-20 05:45:46.000 |
| Other Links: | branch diff | manifest | tags |
|
2026-10-20
| ||
| 06:29 |
test(manifest): probe arrival order against a rebuild
TestArrivalOrderMatchesRebuild builds a random history per seed, delivers its blobs to a fresh repository in random order and rounds, crosslinking after each, and compares tags and leaves with a rebuild. It runs only when LIBFOSSIL_ARRIVAL_PROBE names a seed count. Without reparents every seed must match; with them it reports the seeds that differ, the divergence documented on ReparentCheckins. Tracked in #432. check-in: 4f3f1669e6 user: [email protected] tags: main, perf/tag-repair-batch, trunk | |
| 05:45 |
docs(manifest): state where a reparent diverges from a rebuild
A reparent propagates from the new parent, which fossil's manifest_reparent_checkin does not, and never removes the tags inherited from the old parent, which fossil does not either; fossil's own rebuild is order-dependent there. Say both in ReparentCheckins, and rename the reparent test so it no longer claims full convergence. Note in the CHANGELOG that a failed sync no longer sweeps before it returns, so artifacts committed outside a phantom fill wait for the next crosslink. Tracked in #432. check-in: 9ff7dea0b5 user: [email protected] tags: main, perf/tag-repair-batch, trunk | |
| 04:47 |
fix(manifest): apply leaf rechecks in the transaction that links the batch
Each link transaction now runs the whole repair gate before it commits: the reparent pass, tag propagation from the parents it linked, and the leaf rechecks it scheduled. Fossil's manifest_crosslink_end runs the reparent pass and leaf_do_pending_checks inside the transaction that linked the check-ins, so a crash can never leave a committed check-in without its leaf row; this does the same. The schedule records whether a transaction linked anything, so one that linked nothing skips the gate. The gate at the end of a sweep or a receive is gone. Finalize repairs only what a caller linked through LinkStored in a transaction it opened itself rather than through ReceiveLinker.WithTx, which is all that can still leave work on the schedule. Tracked in #432. check-in: 8c00d632b7 user: [email protected] tags: main, perf/tag-repair-batch, trunk | |