Skip to content

emrg: the abstain window's lower bound is this cycle's own run, not the previous cycle's #2338

Closed

Description

@argszero

Origin: rant 2026-10-16T22:24:41.422997+08:00
Part: 2/2

The abstain window's lower bound is the previous cycle's start, so a cycle abstains on any head pushed from the previous cycle's start onward — that is, "any head pushed while this cycle runs", not "the head this cycle pushed". The host ruled the widening away (2026-10-16T22:18:15, this host's session):

You have not made this clear and I have not understood it. I think the requirement "nor one pushed by the cycle immediately before it" should not exist. That the cycle that pushed it cannot vote is already enough.

(translated from the Chinese original)

Part 1/2 (#2334 → PR #2335, merged as 32fa3eef) gave the window its far bound. This part narrows the near bound to this cycle's own start and deletes the machinery that existed only to widen it and to disclose the widening.

What changes

  • Window.start becomes cycle_start(cycle) — this cycle's own run start. The span is [own_start, following_start), and Window.covers (the one predicate the three carriers share) is unchanged.
  • Deleted from scripts/review-queue.py: previous_cycle, with_dispatches, Window.previous, Window.inferred, Window.inferred_clause, Window.dispatch_unread, Window.boundary_unmeasured, Window.corpus_shortfall, and the dispatch/session corpus that fed them (sessions_root, resolve_session_dirs, dispatch_ids, dispatched_ids, corpus_read_failure, _dispatch_lines). Their whole purpose was to find the previous cycle or to correct a boundary the records could not supply; a boundary that is this cycle's own id needs no corpus.
  • Deleted from scripts/check-vote-count.py and scripts/cast-vote.py: the pushed < window.start refusal and its boundary_unmeasured guard. A push before this cycle's start is simply not this cycle's work, so the vote counts; there is no longer an unmeasured boundary below the start.
  • Deleted from scripts/review-queue.py::next_action: the second abstain branch, the row for a push below a window whose far end was never measured.
  • --prev-cycle and --sessions-dir (and $EMRG_SESSIONS_DIR) lose their meaning and are removed; --cycles-log stays, because the far bound still reads the record corpus.
  • emrg/server/evolution_prompt.md R3 loses the clause "nor one pushed by the cycle immediately before it".

Effect

A head pushed by the immediately-previous cycle becomes votable, which is what the host asked for: the vote is no longer blocked by "you were running when it was pushed", only by "you pushed it". Measured on this host, the case that motivated the ruling: cyc20261016-181619's span narrows from [2026-10-16 17:23:22, ...) to its own run, so PR #2326's head — pushed by cyc20261016-183420 — is no longer the earlier cycle's own work.

Not in this issue

The far bound's own disclosure gap (an unreadable record corpus leaves end=None silently, indistinguishable from "nothing followed this cycle") is left as it is: that reading is the safe direction (an open far bound delays a vote, never credits one), and closing it is a separate change.

Activity

  1. argszero commented on Oct 16, 2026

    @argszero
    OwnerAuthor

    Handled by #2339

  2. pm25coder commented on Oct 17, 2026

    @pm25coder
    Collaborator

    Reading this row's ORIGIN-UNRESOLVED from the machine that wrote it: the handle 2026-10-16T22:24:41.422997+08:00 is not in this host's ledger (~/.emrg/rants.jsonl), and retention cannot explain that — submit_rant cleanup drops the oldest rows, while this ledger's newest record is 2026-09-30T14:26:19.933784+08:00, already older than the handle before the instant it names. Nothing here ranked above it and was pruned, and nothing here had received it by the ledger's last write.

    So the rant was submitted on another machine, where the timestamp resolves against that machine's own ledger. An Origin: line is host-local by construction — the ledger is private to a host while the issue tracker is shared — so this row is neither a defect in #2339 nor evidence that a rant is missing: it is a chain only the submitting machine can walk. Recorded so a later cycle does not re-open the question.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions