Artifact b5efbc1f4ebd390b5807e9be56bbe290d658aea2defbfe7cf605799dc308be8c:
- File
internal/content/available.go
-
2026-10-24 11:10:13
— part of check-in
[8b946de415]
on branch main
— 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. (user: [email protected], size: 14470) [annotate] [blame] [check-ins using]
- 2026-10-24 11:10:21 — part of check-in [b6e785b914] on branch feat/horizon-dfloor-receive — Merge branch 'feat/471-seed-refusal' into feat/seed-receive-drop (user: [email protected], size: 14470) [annotate] [blame] [check-ins using]
- 2026-10-24 11:42:44 — part of check-in [928524bd8c] on branch main — Merge branch 'feat/471-seed-refusal' into feat/horizon-names-seed-refusal (user: [email protected], size: 14470) [annotate] [blame] [check-ins using]
-
2026-10-24 12:32:24
— part of check-in
[5a7c2ba12e]
on branch main
— Merge pull request #476 from danmestas/feat/horizon-names-seed-refusal
feat(horizon): named horizons with depth, and origin seed refusal (user: [email protected], size: 14470) [annotate] [blame] [check-ins using]
-
2026-10-24 11:10:13
— part of check-in
[8b946de415]
on branch main
— fix(sync): an unresolvable pending chain no longer blocks a fill (#471)