The bus keeper reads a bare stream's max-age-days "none" as kept for good (issue 1966, recovery) #635

Merged
mesh-tools merged 1 commits from fix/keeper-age-none into main 2026-11-08 22:53:04 +00:00
Member

Recovery fix (recovery-fixes-merge-and-tell; the operator: "you can deliver stuff yourself", 2026-11-08).

Symptom. The bus keeper on novox is unhealthy: "refused: mesh-knowledge_reviews: the option max-age-days is "none", not a whole number".

Cause. The indexer's judge accepts max-age-days: "none" for a bare stream (mesh-delivery judge/busstate.go noAge, with its own test row "a bare stream, complete"). The keeper's options.int reads only whole numbers, so the two parts read one manifest field differently.

Fix. options.ageDays reads "none" as no age limit, and the bare stream's plan uses it. A new row in TestEachTemplateIsPlannedUnderTheModulesNames fails without the fix.

Quick or thorough. I chose the quick fix: one function in the bus module, and this kind is met for the first time. The thorough fix is one shared reader of the template options in mesh-sdk catalogue, used by both the judge and the keeper; it is noted on issue 1966.

Checked locally. go vet ./... and go test ./... in modules/nats.

Delivery. This changes only the keeper's program (the tools artifact), so the bus server's container is not recreated. The bus module's policy is record, so its move waits for the operator's yes.

Undo. Revert this merge.

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Recovery fix (recovery-fixes-merge-and-tell; the operator: "you can deliver stuff yourself", 2026-11-08). **Symptom.** The bus keeper on novox is unhealthy: "refused: mesh-knowledge_reviews: the option max-age-days is \"none\", not a whole number". **Cause.** The indexer's judge accepts `max-age-days: "none"` for a bare stream (mesh-delivery judge/busstate.go `noAge`, with its own test row "a bare stream, complete"). The keeper's `options.int` reads only whole numbers, so the two parts read one manifest field differently. **Fix.** `options.ageDays` reads "none" as no age limit, and the bare stream's plan uses it. A new row in `TestEachTemplateIsPlannedUnderTheModulesNames` fails without the fix. **Quick or thorough.** I chose the quick fix: one function in the bus module, and this kind is met for the first time. The thorough fix is one shared reader of the template options in mesh-sdk catalogue, used by both the judge and the keeper; it is noted on issue 1966. **Checked locally.** `go vet ./...` and `go test ./...` in modules/nats. **Delivery.** This changes only the keeper's program (the `tools` artifact), so the bus server's container is not recreated. The bus module's policy is record, so its move waits for the operator's yes. **Undo.** Revert this merge. https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-tools added 1 commit 2026-11-08 22:53:00 +00:00
The bus keeper reads a bare stream's max-age-days "none" as kept for good, as the judge accepts it
mesh/delivery merged: source.main moved to novox/mesh-catalog@7fd4ed589806
mesh/check checking bc8cb3b153cf on 7fd4ed589806
bc8cb3b153
mesh-knowledge's stream reviews says max-age-days "none", which the indexer's judge accepts
(judge/busstate.go noAge), but the keeper refused it ("not a whole number"), so the stream was
never made and the keeper stayed unhealthy (2026-11-08, issue 1966). Quick fix; the thorough one,
one shared reader of the template options in mesh-sdk catalogue for the judge and the keeper, is
noted on issue 1966.

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

Delivery novox/mesh-catalog@bc8cb3b153cf — merged since 2026-11-08T22:53:07Z

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

Transitions

  • 2026-11-08 22:53 (new) → proposed (announced): novox/mesh-catalog#635's head announced
  • 2026-11-08 22:53 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-08 22:53 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-catalog@bc8cb3b153cf` — **merged** since 2026-11-08T22:53:07Z **Source** — source.main moved to novox/mesh-catalog@7fd4ed589806. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-08 22:53 (new) → proposed (announced): novox/mesh-catalog#635's head announced - 2026-11-08 22:53 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-08 22:53 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 7fd4ed5898 into main 2026-11-08 22:53:04 +00:00
mesh-tools deleted branch fix/keeper-age-none 2026-11-08 22:53:05 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#635