The builder's build log gets a cap that holds its 30 days, and the grants part raises a held stream's cap, never lowers it (issue 1966, recovery) #186

Merged
mesh-tools merged 2 commits from fix/1966-build-log-age into main 2026-11-09 09:14:15 +00:00
Member

Recovery fix. By the operator's 2026-11-09 answer "Through the gate", it merges through the gate on the operator's Approve.

Cause

LOG_mesh-delivery-builder_build-log held 1002193339 of 1073741824 bytes (93%) on 2026-11-09 and grows about 3 MiB an hour (951.9 MiB at 07:47 UTC, 954.9 at 08:42). That leaves about 22 hours before the full log refuses new entries and builds stop. ADR 0571 §1 keeps the log 30 days, so its age stays and its cap rises. But the grants part left a held stream's limits as they are (the operator's 2026-11-05 ruling), so a raised cap in a manifest never reached the bus.

Decision

The operator, 2026-11-09 09:07 UTC on Telegram, "Yes, raise only": a held stream's declared cap is applied when it is larger, never smaller, said in its event.

Change

  • mesh-delivery-builder: build-log gets max-mib: 3072 beside max-age-days: 30, through builds.BuilderLogMiB, asserted in manifest_test.go.
  • mesh-grants:
    • The assert of a held stream raises its MaxBytes to the manifest's when that is larger. It never lowers, and no other limit changes. The raise is once per manifest digest.
    • It is said in the asserted event (raised) and a journal line.
    • grants_assert always writes its ask, so a raise can be asked by hand, and its description says raise only.

Quick or thorough

  • Quick: shorten the age to 7 days. Not taken: it contradicts ADR 0571 §1 and loses history.
  • Thorough, chosen: every held stream, log, bucket or object store gets its declared larger cap, by one rule in the grants part.

Evidence

  • Rows in existing tests: a raise, and a lower that is refused. The existing integration subtest raises and then refuses to lower against an embedded bus.
  • go vet, go vet -tags integration and go test pass in mesh-grants and mesh-delivery-builder.
  • Storage: the bus reserves about 46.5 GiB of caps, about 48.5 GiB after this, with 878 GiB free on the bus node.
  • The manifest validator gives identical verdicts on trunk and change.

Live check

After delivery, the first pass of the grants part (or grants_assert for mesh-delivery-builder) raises LOG_mesh-delivery-builder_build-log to 3221225472 bytes, said in its asserted event.

Undo

Revert this merge. A raised cap stays raised, because nothing lowers it.

Reviewed-by: mesh-code-reviewer@shanks (for fix-1965) at 1591831886, two rounds.

https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i

Recovery fix. By the operator's 2026-11-09 answer "Through the gate", it merges through the gate on the operator's Approve. ## Cause LOG_mesh-delivery-builder_build-log held 1002193339 of 1073741824 bytes (93%) on 2026-11-09 and grows about 3 MiB an hour (951.9 MiB at 07:47 UTC, 954.9 at 08:42). That leaves about 22 hours before the full log refuses new entries and builds stop. ADR 0571 §1 keeps the log 30 days, so its age stays and its cap rises. But the grants part left a held stream's limits as they are (the operator's 2026-11-05 ruling), so a raised cap in a manifest never reached the bus. ## Decision The operator, 2026-11-09 09:07 UTC on Telegram, "Yes, raise only": a held stream's declared cap is applied when it is larger, never smaller, said in its event. ## Change - mesh-delivery-builder: build-log gets `max-mib: 3072` beside `max-age-days: 30`, through builds.BuilderLogMiB, asserted in manifest_test.go. - mesh-grants: - The assert of a held stream raises its MaxBytes to the manifest's when that is larger. It never lowers, and no other limit changes. The raise is once per manifest digest. - It is said in the `asserted` event (`raised`) and a journal line. - grants_assert always writes its ask, so a raise can be asked by hand, and its description says raise only. ## Quick or thorough - Quick: shorten the age to 7 days. Not taken: it contradicts ADR 0571 §1 and loses history. - Thorough, chosen: every held stream, log, bucket or object store gets its declared larger cap, by one rule in the grants part. ## Evidence - Rows in existing tests: a raise, and a lower that is refused. The existing integration subtest raises and then refuses to lower against an embedded bus. - go vet, go vet -tags integration and go test pass in mesh-grants and mesh-delivery-builder. - Storage: the bus reserves about 46.5 GiB of caps, about 48.5 GiB after this, with 878 GiB free on the bus node. - The manifest validator gives identical verdicts on trunk and change. ## Live check After delivery, the first pass of the grants part (or grants_assert for mesh-delivery-builder) raises LOG_mesh-delivery-builder_build-log to 3221225472 bytes, said in its asserted event. ## Undo Revert this merge. A raised cap stays raised, because nothing lowers it. Reviewed-by: mesh-code-reviewer@shanks (for fix-1965) at 15918318862217fbe14f6a40f8e15fb40711aab7, two rounds. https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-tools added 2 commits 2026-11-09 09:13:22 +00:00
The log grew about 3 MiB an hour on 2026-11-09 (951.9 MiB at 07:47 UTC, 954.9 at 08:42)
against the bus's default cap of 1 GiB, about 23 hours before builds stop. ADR 0571 §1
keeps it 30 days, so the cap rises to 3072 MiB instead of the age falling.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
A held stream's size cap is raised to its manifest's when larger, never lowered (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@58520d343537
mesh/check checking 159183188622 on 58520d343537
1591831886
The operator, 2026-11-09 09:07: raise only. The grants part's assert raises it, says it in its asserted event and the
journal with the old and new cap, and grants_assert asks it by hand.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Author
Member

Delivery novox/mesh-delivery@159183188622 — merged since 2026-11-09T09:14:18Z

Source — source.main moved to novox/mesh-delivery@58520d3435. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-11-09 09:13 (new) → proposed (announced): novox/mesh-delivery#186's head announced
  • 2026-11-09 09:13 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-09 09:14 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-delivery@159183188622` — **merged** since 2026-11-09T09:14:18Z **Source** — source.main moved to novox/mesh-delivery@58520d343537. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-09 09:13 (new) → proposed (announced): novox/mesh-delivery#186's head announced - 2026-11-09 09:13 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-09 09:14 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit 58520d3435 into main 2026-11-09 09:14:15 +00:00
mesh-tools deleted branch fix/1966-build-log-age 2026-11-09 09:14:15 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#186