Follow-up to #63, found verifying it live: with the poll the only announcer, three merges at 18:05:5x were announced (once each — #63 works) at 18:10:29, 4.5 min late. Every 30 s the poll asked every repository for its pull requests; a pass outlasted the tick (setInterval), passes ran beside each other and slowed each other, and two concurrent passes could each announce the same merge before either recorded it.
A pass asks only repositories whose updated_at is at or after a minute before the last look (a merge is a push, which moves it); all of them before the first look, and any whose time is unknown. Compared as moments, not strings.
The next pass is scheduled when the previous one ends (setTimeout chain), so passes never overlap.
Test: movedSince (moved / old / unknown / an offset time) added to test/pages.test.ts; both tests pass in node 23; index.ts and client.ts syntax-checked.
Follow-up to #63, found verifying it live: with the poll the only announcer, three merges at 18:05:5x were announced (once each — #63 works) at 18:10:29, 4.5 min late. Every 30 s the poll asked every repository for its pull requests; a pass outlasted the tick (setInterval), passes ran beside each other and slowed each other, and two concurrent passes could each announce the same merge before either recorded it.
- A pass asks only repositories whose `updated_at` is at or after a minute before the last look (a merge is a push, which moves it); all of them before the first look, and any whose time is unknown. Compared as moments, not strings.
- The next pass is scheduled when the previous one ends (setTimeout chain), so passes never overlap.
Test: `movedSince` (moved / old / unknown / an offset time) added to test/pages.test.ts; both tests pass in node 23; index.ts and client.ts syntax-checked.
With the poll the only announcer of a merge, its cost showed: every 30 s it
asked every repository for its pull requests, a pass outlasted the tick, and
passes piled up beside each other — a merge was announced four and a half
minutes late, and two passes at once could each announce it. A pass now asks
only repositories updated since a minute before the last look, and the next
pass starts when this one ends. hq issue 250.
Deliverynovox/mesh-catalog@579d21a2095a — held since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.
Delivery plan — builds gitea → novox; no bus step
tier 0: gitea
novox: receives gitea
gitea provides npm-package-registry, git: its consumers are sent again after it
gitea keeps data (ADR 0233): what it holds is backed up before it moves
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#66 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@579d21a2095a` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds gitea → novox; no bus step
- tier 0: gitea
- novox: receives gitea
- gitea provides npm-package-registry, git: its consumers are sent again after it
- gitea keeps data (ADR 0233): what it holds is backed up before it moves
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#66 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `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.
Follow-up to #63, found verifying it live: with the poll the only announcer, three merges at 18:05:5x were announced (once each — #63 works) at 18:10:29, 4.5 min late. Every 30 s the poll asked every repository for its pull requests; a pass outlasted the tick (setInterval), passes ran beside each other and slowed each other, and two concurrent passes could each announce the same merge before either recorded it.
updated_atis at or after a minute before the last look (a merge is a push, which moves it); all of them before the first look, and any whose time is unknown. Compared as moments, not strings.Test:
movedSince(moved / old / unknown / an offset time) added to test/pages.test.ts; both tests pass in node 23; index.ts and client.ts syntax-checked.Delivery
novox/mesh-catalog@579d21a2095a— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds gitea → novox; no bus step
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.