Issue 1126 notes 77, 79, 80. Group fix/ace-tun made mesh-build-image report a node without a working /dev/net/tun as unhealthy. The assigner reads unhealthy as a failed delivery, so it held the new build d43ede40 for every node and moved ace back to the pre-fix build, which takes image asks and fails them.
Now only 'cannot run' is unhealthy: the runtime directory cannot be made, buildah missing, no subuid or subgid range, no user namespace, or the disk under its floor (issue 1839 AC1). Without tun the node stays healthy and says 'not eligible to build images, so it takes no image ask: '. The reason is in Eligible() (Capacity.Ineligible, capacity 0, so no ask is pulled), in Status's new eligible field, and in a log line on each change. Steps still end refused with the cause.
Quick vs thorough: quick (the split in this module); the thorough form, mesh-sdk buildstep carrying the split for every build module, waits until a second build module gets an eligibility check (note 79).
Tests: TestANodeWithoutTunIsHealthyAndSaysItIsNotEligible (fails first) and TestWithoutBuildahTheNodeIsUnhealthyNotIneligible; 57 unit + 6 integration (budget 500/50). The 22 catalog checks pass. The README says the new behaviour.
Issue 1126 notes 77, 79, 80. Group fix/ace-tun made mesh-build-image report a node without a working /dev/net/tun as unhealthy. The assigner reads unhealthy as a failed delivery, so it held the new build d43ede40 for every node and moved ace back to the pre-fix build, which takes image asks and fails them.
Now only 'cannot run' is unhealthy: the runtime directory cannot be made, buildah missing, no subuid or subgid range, no user namespace, or the disk under its floor (issue 1839 AC1). Without tun the node stays healthy and says 'not eligible to build images, so it takes no image ask: <cause>'. The reason is in Eligible() (Capacity.Ineligible, capacity 0, so no ask is pulled), in Status's new `eligible` field, and in a log line on each change. Steps still end refused with the cause.
Quick vs thorough: quick (the split in this module); the thorough form, mesh-sdk buildstep carrying the split for every build module, waits until a second build module gets an eligibility check (note 79).
Tests: TestANodeWithoutTunIsHealthyAndSaysItIsNotEligible (fails first) and TestWithoutBuildahTheNodeIsUnhealthyNotIneligible; 57 unit + 6 integration (budget 500/50). The 22 catalog checks pass. The README says the new behaviour.
Reviewed-by: rev-ineligible@shanks at 363039f337ad1684865f989391a65ff067547e64
Deliverynovox/mesh-catalog@363039f337ad — merged since 2026-10-28T14:20:45Z
Source — source.main moved to novox/mesh-catalog@387ee59140. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-28 14:02 (new) → proposed (announced): novox/mesh-catalog#546's head announced
2026-10-28 14:02 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-10-28 14:20 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@363039f337ad` — **merged** since 2026-10-28T14:20:45Z
**Source** — source.main moved to novox/mesh-catalog@387ee59140c4. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-28 14:02 (new) → proposed (announced): novox/mesh-catalog#546's head announced
- 2026-10-28 14:02 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-10-28 14:20 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`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Issue 1126 notes 77, 79, 80. Group fix/ace-tun made mesh-build-image report a node without a working /dev/net/tun as unhealthy. The assigner reads unhealthy as a failed delivery, so it held the new build d43ede40 for every node and moved ace back to the pre-fix build, which takes image asks and fails them.
Now only 'cannot run' is unhealthy: the runtime directory cannot be made, buildah missing, no subuid or subgid range, no user namespace, or the disk under its floor (issue 1839 AC1). Without tun the node stays healthy and says 'not eligible to build images, so it takes no image ask: '. The reason is in Eligible() (Capacity.Ineligible, capacity 0, so no ask is pulled), in Status's new
eligiblefield, and in a log line on each change. Steps still end refused with the cause.Quick vs thorough: quick (the split in this module); the thorough form, mesh-sdk buildstep carrying the split for every build module, waits until a second build module gets an eligibility check (note 79).
Tests: TestANodeWithoutTunIsHealthyAndSaysItIsNotEligible (fails first) and TestWithoutBuildahTheNodeIsUnhealthyNotIneligible; 57 unit + 6 integration (budget 500/50). The 22 catalog checks pass. The README says the new behaviour.
Reviewed-by: rev-ineligible@shanks at
363039f337Delivery
novox/mesh-catalog@363039f337ad— merged since 2026-10-28T14:20:45ZSource — source.main moved to novox/mesh-catalog@387ee59140. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.