Skip to content

Phase 4: joiner with missing pre-join control messages stalls silently #187

Closed

Description

@dezren39

Application messages wait on the control messages they name. A joiner that is missing pre-join controls keeps those messages held with no signal to the user. Welcomes already need that history. Decide whether to surface a stalled-delivery state and how long to wait before asking a member (P4.6 lazy history is the answer path).

Activity

  1. dezren39 commented on Oct 24, 2026

    @dezren39
    MemberAuthor

    id train triage (2026-10-24): needs-decision — project owner: surface a stalled-delivery state for joiners missing pre-join controls (P4.6 lazy history is the answer path).

  2. added
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    on Oct 27, 2026
  3. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

    • Agent: queue worker (repo-worker-code), lane D
    • Session / ID: queue task 2035
    • Found via: queue claim
    • Task: Triage issue Phase 4: joiner with missing pre-join control messages stalls silently #187 — verify a joiner missing pre-join control messages stalls with no signal against current main, then route as scoped follow-up or close with evidence
    • Expectation: s — triage verdict backed by code citation at HEAD
    • Links: n/a yet
  4. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

    Verdict: CONFIRMED — delivery waiting on missing pre-join control messages is invisible at HEAD a3cdf6c9a35df1ff8b88b7a02d62e5c04ca4c94a. There is no signal to the user or to any caller.

    Evidence (fresh reads of current main, not the issue text):

    • pkgs/id/src/encryption/ordering.rs — OrdererState.waiting: BTreeMap<Hash, Vec<Hash>> is private, with no accessor anywhere (only internal uses in queue() / make_ready). queue() inserts a message there whenever a parent it names is not ready, and it waits indefinitely. The module header says it plainly: "A message is delivered once every message it names is delivered… earlier messages wait in the queue."
    • pkgs/id/src/encryption/scheme.rs — Session's public surface (is_welcomed, epoch*, members, process, request_history, …) has nothing that exposes parent-missing waiting messages.
    • The one nearby signal covers a different wait: request_history() (P4.6) iterates Session.held for messages missing a group secret. It cannot see orderer-waiting messages at all, so the existing lazy-history answer path has no trigger for the pre-join-control case.

    Routing: the follow-up packet pins the two decisions the issue leaves open — (1) whether to surface a stalled-delivery state: yes, as a read-only Session::stalled_delivery() returning each waiting message id with the parent ids it is missing, backed by a small accessor on OrdererState; (2) how long to wait: no timer inside Session (it has no clock — same reasoning as the #186 held bound); the surface is immediate and deterministic, and the caller (CLI / sync loop) polls it and drives the existing welcome/history/re-sync paths. No new Received variant, no delivery-semantics change, no dropping of waiting messages. Enqueued as queue task 2977 (small_fix, dedupe repo-health:v1:fix:developing-today/code:issue:187, packet queue-packets/packet-187-fix.json). This issue stays open and is labelled queue/queued for that task.

  5. added
    queue/queuedHas a queued task in the Supabase agent queue
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 29, 2026
  6. 43 remaining items

  7. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked 20 min — root cause is #2403, not this diff

    Verified this shift (not re-done work): the branch still carries the implemention exactly as pinned — Session::stalled_delivery() → Vec<StalledDelivery> sorted by message id, empty before delivery starts, filtered to still-missing parents, no timer, caller contract documented; the three new tests are present. Nothing on the branch needed changing.

    Why it cannot land (measured, 19:52–19:56Z): main is still frozen at 5a34fa70 (#2233, 10:57Z). The merge queue accepts entries, builds each merge group successfully, then ejects every one on a ~2.5 min cadence, including with an empty queue — #2216, #2367, #2373 all ejected, main never moved. That is #2403; the keystone for main's fmt/clippy debt (#2151 / PR #2335) is subject to the same ejection, so #2221's check failures cannot be cleared from this lane. Details posted at #2403 and the addendum.

    Resume brief: once #2403 is fixed and main is fmt/clippy-clean — PUT /pulls/2221/update-branch, wait for green, merge under the standing criteria (targeted tests verified, diff matches intent, no hold). Do not re-enqueue #2335 again: task 3495 owns it, and repeated adds were churn.

  8. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  9. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  10. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked again — implementation verified, blocked purely on repo infra (openchamber scheduled lane, 2026-10-29T21:52Z)

    Resumed task 2977 from its awaiting_ci checkpoint and re-verified everything fresh; the blocking condition has not moved.

    Parked 1 h (not_before 22:41Z) rather than 20 min: both resume conditions are external infra fixes, not a CI wait, so a 20-minute retry would just re-observe the same state. Resume when #2403 stops ejecting and #2151 is fmt/clippy-clean on main; then update-branch #2221, merge on green, complete, strip labels. (Not re-enqueuing keystone #2335 from this task — task 3495 owns it.)

  11. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  12. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    Agent note — blocked on the repo-wide merge-queue stall (queue task 2977, PR #2221)

    The fix for #187 is finished: PR #2221 queue/2977-187-stalled-delivery at head 8883eb46, code + tests verified on a previous shift. It cannot go green because it inherits main's red fmt/clippy debt (its cargo-fmt-check, clippy-lint, rustfmt-check and treefmt-check jobs fail on files it does not touch), and that debt is only cleared by PR #2335 — which is itself stuck.

  13. added
    queue/blockedQueue or user escalation state
    status/blockedQueue or user escalation state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Oct 29, 2026
  14. added a commit that references this issue on Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)queue/blockedQueue or user escalation statestatus:donework/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions