Skip to content
go-libfossil Check-in [d385bc8746]
Login

Check-in [d385bc8746]

Overview
Comment:Merge pull request #524 from danmestas/feat/receive-size-budget

feat(sync): per-store artifact size budget on the receive path

Timelines: family | ancestors | descendants | both | main | trunk
Files: files | file ages | folders
SHA3-256: d385bc87469fc72a324b340e856cfe2cda9a85cf799a8d73e2f140c92c9991d1
User & Date: [email protected] on 2026-10-29 01:51:38.000
Other Links: branch diff | manifest | tags
Context
2026-10-29
03:30
Merge pull request #526 from danmestas/perf/wasm-size-and-refusal

Return receive-budget refusals as *RefusedError; libfossil_nohttp tag cuts the TinyGo engine ~97 KB check-in: 0ffed7ff5f user: [email protected] tags: main, trunk

03:06
feat(sync): return a receive-budget refusal to the host as *RefusedError

With HandleOpts.MaxStoredBytes set, a refused push rolls its request transaction back and replies with one error card. A host whose storage treats any rollback as an abort of the whole call (a Durable Object running the request in one transactionSync) discards that reply, so the client saw only "transaction rolled back".

HandleSyncWithOpts now returns the encoded reply together with a *RefusedError whose Message is the error card's text, matchable with errors.As. Such a host can report or render the refusal itself without parsing xfer; a host serving HTTP sends the reply as before. Only the budget refusal reports this way, so no released behaviour changes: the budget is unreleased and opt-in. check-in: dd7401ad01 user: [email protected] tags: main, trunk

02:06
fix(sync): a horizon store refuses a pull it does not hold and mints no seed

A server over a horizon clone answered a horizon pull or sync at an earlier C from its own partial graph. It now refuses any horizon pull whose held set is not a subset of its own with one error card and no content, rolled back whole, and a go-libfossil client fails the round on that reply (draft-fossil-horizon-00 §6.4). partial-mirror serves it, as it does an uncovered clone. The clone coverage check now judges the horizon the request asked for, not the depth serving cut it to.

A store at a structural horizon no longer mints a seed from its own seed: it answers a structural request at the content level (§6.2.3) and names its horizon-history-url. The requester falls back and reports HorizonRemedy, naming C and the dense origin that holds the manifests below it; the CLI prints it.

The concept doc states when a horizon store may serve a horizon peer. Conformance covers §6.4 on the pull path, a structural store answering as content, and the fallback a structural clone takes from such a peer; zit pulls from a go-libfossil horizon store in both outcomes.

Closes #490 check-in: 8802c5704f user: [email protected] tags: feat/horizon-peer-serving, main, trunk

01:51
Merge pull request #524 from danmestas/feat/receive-size-budget

feat(sync): per-store artifact size budget on the receive path check-in: d385bc8746 user: [email protected] tags: main, trunk

01:42
fix(sync): name a too-big file only to a reader, never by a private check-in

The budget refusal names the file and check-in only when the requester may read the repository, and phantomName skips private check-ins. HandleOpts, XferHandler and ServeHTTP document that the default handler applies no budget, so a host that needs one serves HandleSyncWithOpts itself.

Tests: an artifact held in full is not refused; a bare phantom is; a path holding card syntax goes out as one encoded error line; a sync round with pull and igot cards is refused whole with FilesReceived 0. Atomicity checks now cover unclustered, phantom, delta and mlink alongside blob. check-in: 41102e04af user: [email protected] tags: feat/receive-size-budget, main, trunk

00:48
Merge pull request #522 from danmestas/perf/memo-tree-encoding

perf(content): keep the memo's trees as interned id sets and differences check-in: 6d860dc574 user: [email protected] tags: main, trunk

Changes