Skip to content
go-libfossil Check-in [928524bd8c]
Login

Check-in [928524bd8c]

Overview
Comment:Merge branch 'feat/471-seed-refusal' into feat/horizon-names-seed-refusal
Timelines: family | ancestors | descendants | both | main | trunk
Files: files | file ages | folders
SHA3-256: 928524bd8c0101eb3eaba10d18062705b9beafa8a10dbb37983cb90cf024941f
User & Date: [email protected] on 2026-10-24 11:42:44.000
Other Links: branch diff | manifest | tags
Context
2026-10-24
12:11
docs(conformance): note the horizon pin matches zit's version-0.7.1 tag check-in: cc09488fc6 user: [email protected] tags: main, trunk
11:42
Merge branch 'feat/471-seed-refusal' into feat/horizon-names-seed-refusal check-in: 928524bd8c user: [email protected] tags: main, trunk
11:10
fix(sync): an unresolvable pending chain no longer blocks a fill (#471)

Review of a067c6e. JudgeFilled treated content.Expand's chain-bound error as a store fault and returned it, and DeltaStored failed storeDeltaContent with it.

A pusher could plant a dangling chain longer than maxDeltaChainDepth under a basis R, building it by re-rooting. After that, every honest push, pull or clone that supplied R as a delta failed for good.

Fix: - content now wraps its cycle and depth errors in ErrChainUnresolvable, and exports MaxDeltaChainDepth. - seedcheck counts ErrChainUnresolvable as unreadable, alongside a hash mismatch and a delta that does not apply or fails its checksum. Such a row is skipped and stays pending, so it stays withheld. - Real faults are still returned, such as content that does not decompress. - The classification uses errors.Is on the sentinel, so the expansion JudgeFilled already performs is not repeated.

Tests: - TestHorizonOverDeepPendingChainDoesNotBlockFill plants a pending row one node past the bound under R, then pushes R as a delta on a held basis. The push succeeds, R is stored and readable, and the over-deep row stays withheld. - TestUnresolvableChainSentinel pins the sentinel for a cycle and for a chain past the bound. - Dropping the classification, or either wrap, fails a test.

A cycle never reaches seedcheck: the receive pass's own basis-chain walk (receive_pass.go chainEnd) refuses it first. check-in: 8b946de415 user: [email protected] tags: main, trunk

07:10
Merge branch 'feat/471-seed-refusal' into feat/horizon-names-seed-refusal check-in: 0b3bc67376 user: [email protected] tags: main, trunk
Changes