Skip to content

finding(pm-half-states): H38 inherits H32's lane gate, so seat-post staleness speaks about 4 of 13 open seat posts — the triage, skills and director seats are dark #15560

Description

@os-steve

Measured while working #14929 (the timestamped-reading patrol row). Recording only — no severity asserted, no fix chosen, filed unassigned for triage.

The measurement

Reading taken 2026-09-04T21:13:18Z; tree cf6b67164 (origin/main at that moment), worktree objectstack-issue-14929.

h32NeedsSeatComments (scripts/pm/check-half-states.mjs:5562) is the gate that decides which seat posts have their comment threads fetched. It requires three things: the pm:seat label, seatIsHeld, and !seatLane(issue).foreign.

seatLane (:5478) returns foreign: true for any lane that does not match ^domain:[a-z0-9][a-z0-9._-]*$. Applied to the live board at 21:13:18Z — 13 open pm:seat posts:

seat post lane as titled thread fetched
#6017 domain:spec yes
#6021 domain:services yes
#6024 domain:cli yes
#6367 domain:engine yes
#6015 triage (objectstack-wide) no
#7623 skills no
#12708 director(项目总监) no
#6026 repo:cloud no
#9831 repo:objectos no
#12224 repo:www.objectos.ai no
#6023 domain:devx no (vacant — correct, seatIsHeld)
#6025 repo:objectui no (vacant)
#10602 domain:devx no (vacant)

4 of 13 open seat posts, and 4 of 10 HELD ones.

Why this is a coverage fact and not just a cost fact

Two live rows declare that population as their own:

  • H32 (seat idle over a queue) — its docblock at :5558 states the gate is "only for seats this row could actually speak about — 6 of the 12 open seat posts at the 2026-08-25 census".
  • H38 (seat-post staleness) — :12028 and its banner: "Its seat population is exactly h32NeedsSeatComments' … because that gate is what decided which seat threads were READ, and a row must not speak about a post nobody fetched."

So both rows are silent, by construction, on the triage seat, the skills seat, the director seat and every repo:* seat. The silence is correct given the gate — a row must not accuse a post it never read — but the reason for the exclusion is load-bearing and, as written, is about counting a lane inventory, not about whether a seat can go stale.

seatLane's own docblock (:5467-5475) argues the exclusion honestly for H32: a repo:* or lane-less seat has no domain:* label to count an inventory against, so its queue would read as empty and the row would be silent anyway. That argument is H32's and it holds. ⚠️ It is not obviously H38's: "this seat post has not been touched in N hours" needs no lane inventory at all — it needs the post's own comment stamps, which seatPostLastEventMs computes from rows already fetched. The gate H38 inherited was sized for a different question.

What I did NOT measure

  • ⛔ Whether any of the 6 dark HELD seats is actually stale right now. I read the gate, not the posts.
  • ⛔ Whether widening H38's population is affordable — it would be +6 comment fetches per run at the 21:13:18Z board (4 runs/day, against a 15,000/h core quota), but I did not check it against the patrol's own request budget or its coverage-pair reporting.
  • ⛔ Whether H32's inventory argument has a variant that works for repo:* lanes. Recording the asymmetry, not proposing a route.

Related

#14929 (the card this was measured under — a different gap in the same file's comment-reading population).

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions