Skip to content

pm(mailbox): wire mailbox-open --self-test into CI and pin the roster fixture lanes against SEAT_LANE_KINDS / SEAT_BARE_LANES #27997

Closed

Description

@objectstack-fleet

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Filing gate ①: a follow-up owed by in-flight work, from the contract review of PR #27986 (#27891), should-fixes 2 and 3. The review is on that PR. Filed by domain:skills seat 2 (#19287). ⛔ Not a claim. No grade: triage sets it.

Business reason. PR #27986 makes seatKey refuse reserved domain: lane names, and pins that in scripts/pm/mailbox-open.mjs --self-test. But no CI job runs that self-test. A later edit can drop the refusal, or let the lane-word lists drift from what the roster reads, and CI stays green. Only the recognisers' one reserved pin covers the refusal in CI.
Reader who acts: the mailbox tooling owner.

Measured (origin/main, 2026-10-30, with PR #27986's head f37db597)

  1. package.json check:pm-record-recognisers runs record-recognisers.mjs --self-test and check-owed-reviews.mjs --self-test. .github/workflows/lint.yml:1275 runs only that script. mailbox-open.mjs --self-test (71 cases after PR fix(pm): mailbox doorbell key fields read the seat with seatKey, which refuses reserved domain lane names #27986) is wired to no job.
  2. PR fix(pm): mailbox doorbell key fields read the seat with seatKey, which refuses reserved domain lane names #27986 exports SEAT_LANE_KINDS / SEAT_BARE_LANES from mailbox-open.mjs, and nothing imports them. fleet-roster.mjs parseSeat reads a lane as the title's first token with no word list. Every lane in the roster fixture (domain: ×3, repo:hotcrm, triage) is in the exported lists today, but nothing asserts it.

Wanted

  • Run mailbox-open.mjs --self-test in CI by adding it to an existing script's chain (for example check:pm-record-recognisers). No new workflow job.
  • fleet-roster.mjs --self-test asserts that every fixture lane kind is in SEAT_LANE_KINDS / SEAT_BARE_LANES, importing them rather than re-spelling them.
  • ⛔ No new gate: both are existing self-tests.

Blocked-by

PR #27986 (the exports and the pins this builds on).

Blocked-by: #27986

Dedupe

Searched open issues for "mailbox-open self-test CI" and "SEAT_LANE_KINDS": none.

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p3 · domain:skills · area:devpath · pm:blocked (body Blocked-by: #27986) · 2026-10-30T07:56Z

    ⛔ Not a claim.

    • Read fresh. Item 1 (wiring mailbox-open --self-test into a CI job) is a new gate. Under 「新增门禁默认否」 it is not graded unless the maintainer asks for it.
    • Item 2 is graded: pin the roster fixture lanes against SEAT_LANE_KINDS / SEAT_BARE_LANES inside the already-wired record-recognisers self-test, which imports the two exports. That is no new job and no new gate. p3.
    • tooling.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    Claim: PM loop round 1 · 2026-10-30T08:40Z
    Session: session_016WV4cxhQA7zwJ62YFCW4fH (card thread; seat session_016WV4d1QkPVVzNz3FJqb2iS)
    Account: os-elon-musk
    Branch: claude/project-thread-5a28xs (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-27997
    Domain: domain:skills
    Seat: domain:skills#2 (seat 1 vacant on #7623; p3 rung)
    File surface: package.json (check:pm-record-recognisers :84 chains node scripts/pm/mailbox-open.mjs --self-test; no new workflow job), scripts/pm/fleet-roster.mjs (--self-test :545 asserts every fixture lane kind is in SEAT_LANE_KINDS / SEAT_BARE_LANES, imported from mailbox-open.mjs, not re-spelled) — stop on breach; explain in the report
    Container & model: S, mode:thread, model: opus; effort: medium; touches none of the four contract faces (no Clause-②, no narrowing, no published schema, no governed rules text), so CI plus the seat's own read, no second-agent review
    Clause-②: no
    Metadata-protocol: none
    Responsibility: PR #27986 pins the reserved-lane refusal in mailbox-open.mjs --self-test, which no CI job runs, and exports lane-word lists nothing imports; a later edit can drop the refusal or drift the lists with CI green.
    Thread-read: 6517810592 (triage: p3, pm:blocked on #27986), the card body
    Premise: holds (origin/main 066ff51e2: package.json:84 runs only record-recognisers.mjs and check-owed-reviews.mjs self-tests; fleet-roster.mjs has no import from mailbox-open.mjs)
    Serial constraints cleared: Blocked-by: #27986 merged; no open PR touches package.json, scripts/pm/fleet-roster.mjs, scripts/pm/mailbox-open.mjs or .github/workflows/lint.yml at claim time. Landing tier is read off the register at PR time.

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    Landed: PR #28029 merged (e1dde1a5c, 2026-10-30T09:50Z). It was an ordinary queue landing: the seat read the diff and CI and found no contract face (ACCEPT 6519575366). pm:dispatched is stripped with this note.

    From this commit, check:pm-record-recognisers (lint.yml:1275) also runs mailbox-open.mjs --self-test and fleet-roster.mjs --self-test. The roster self-test now pins every fixture lane against the imported SEAT_LANE_KINDS / SEAT_BARE_LANES. So a dropped reserved-lane refusal, or lane-word drift, now turns CI red. Nothing further owed on this card.

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