Skip to content

PR state drives orders: a red required check reaches its owner; PRs carry orders; board derived from PRs #3541

Open

Description

@trissim

The slop: "what work is current, and what state is it in" has several writable copies (the commander's board file, Core orders, PRs, issues, chat), and the PR's live state reaches nobody mechanically. Result, 2026-10-27: #3535 sat with mergeStateStatus=BLOCKED (debt-src and debt-tools red: InheritanceCleanupPhase no longer holds, PlainStrIdAnnotation, StringSubscript ×2, StringIdentity, TypeErrors) while auto-merge was queued and review-verdict was green. No agent knew; it surfaced only because Tristan asked "how long before 3535 lands". The rules cover green ("the tick a PR goes green it is enqueued") but nothing covers red.

Across Tristan's 8 repos at the same time: 27 open PRs, 20 drafts, 17 untouched for over a week; 6 of the 14 stalled ones end in an "agent stopped at the usage limit" checkpoint commit nobody resumed (triage: claude-nra, 2026-10-27).

Shape (Tristan's direction, 2026-10-27): an order is an order; one PR carries one or more orders (batching is a judgment: "think like a compiler, time is a currency"). The PR plus its linked issues is the record of current work; everything else derives from it.

  • A red required check reaches its owner mechanically. The moment a required check on a PR that carries an open order fails, the carrying order's holder (and the commander) get one bus message naming the check, the failing measure lines, and the head; repeated failures of the same head don't repost (post on change). Green → enqueue stays as is.
  • Each order names the PR that carries it (many-to-one); an order with no carrying PR shows as unbatched.
  • The board/HUD derives from open PRs, their checks, their linked issues and the orders they carry — no hand-written board table.
  • A draft PR with no commit within its order's timer surfaces as stale against its owner: commit, or close with a one-line reason on its issue. A draft PR is a commitment ("somebody is fixing these; they close when it merges"), never a silent placeholder.
  • One PR per core issue; the PR body documents the overhaul (fork-orders.md rules 1a/1b, on Deal every bound session its rules, and gate tools on reading them #3535; model refactor: Extract MODEL from PFM into ObjectState (MVC separation) openhcs#58).

Related: agent-comms#3540 (bridge delivers a live reply behind a stale backlog; heartbeat reposts unchanged alarms), same "post on change" principle.

Activity

  1. trissim commented on Oct 27, 2026

    @trissim
    ContributorAuthor

    Correction after reading the source: the red-check rule already exists and is live. standing_rules.py:955-995 scans each PR's merge_blocks (from statusCheckRollup, todos.py:1119-1148) and posts the block, its remedy and "order ", but only for PRs linked to the commander's orders (pulls.linked_among(ordered, repo)). #3535 was opened by claude-nra outside any order, so the heartbeat had nothing to look at. The gap is work outside the order system: a PR with no carrying order is invisible to the heartbeat. First item changes to: every open PR by a fleet thread either carries an order or shows as unordered on the board, and its blocks reach its author.

  2. trissim commented on Oct 27, 2026

    @trissim
    ContributorAuthor

    Snapshot for the board (claude-nra triage, 2026-10-27, read-only, then verified): 21 open PRs not from today across Tristan's 8 repos.

  3. trissim commented on Oct 27, 2026

    @trissim
    ContributorAuthor
    • Draft pushes don't pay full CI. On 2026-10-27, comms_threads summarizes each sent message once #3536 was pushed about five times (review send-backs), and each push reran every check on the new head. The early-push rule exists so work never lives only locally, not so every push buys a full CI run. Heavy checks (debt-src, debt-tools, suites) run when a PR is marked ready and when an integration batch builds; draft pushes run only the cheap checks. Paired practice: the reviewing fork reads the diff in the worktree before the first push, so send-backs cost a commit, not a CI run.
  4. trissim commented on Oct 27, 2026

    @trissim
    ContributorAuthor
    • Deliver a PR's blocks to the threads working on it, not only to the commander. The heartbeat sees open requests no order links, and names who works on them #3547 names branch workers on the board, but the heartbeat packet still targets only the commander (CommanderUpdate.send → self.commander.name, task_attachments/commander_pings.py:287; per-commander loop at commander_heartbeat.py:119). Shape (commander, bus efe7a1500d5b): use the existing notification publication owner and keep per-recipient changed-state evidence there; don't parse board text for names; no second timer.
  5. trissim commented on Oct 27, 2026

    @trissim
    ContributorAuthor
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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions