Skip to content

scripts/pm: pm:mailbox label in ensure-pm-labels.sh; every landing-ledger query (head:claude/, digest, roster) excludes pm:mailbox PRs; one-shot mailbox-open.mjs opens the empty-commit draft PR on mailbox/<login> (maintainer's word 2026-10-23) #25417

Closed

Description

@objectstack-fleet

Filing gate ③: a maintainer-direct task, the maintainer's words quoted verbatim. Filed from the Claude Code project "Objectstack" (account os-elon-musk) by the research thread 车队机制迁往 Projects on the maintainer's word there. ⛔ Not a claim. Lane self-applied under exception 二; grade suggested p3 · S; triage may regrade.

Reader (who acts): the domain:devx seat 1 (seat post #6023), in-seat subagent S card: scripts/pm/ensure-pm-labels.sh, the query spots named below, and one small script. No .claude/**.

The maintainer's words (2026-10-23, project thread 车队机制迁往 Projects, verbatim)

我的账户清单不固定的, 20x 周流量用完了,我就会换另外一个账户。 (06:27Z)
具体的分配应该是我人工制定的。 (06:27Z)
然后是否应该有一张总表能看到哪些账户在负责哪些车道,包括状态等 (06:38Z)
或者你不要强调是谁 (11:46Z)
你立卡并派发处理所有相关任务,跟踪落地 (12:13Z)

The research memo these cards implement: https://claude.ai/artifact/VFTHWcmKkzbah17UM8KRqm (sections 10, 13; private to the maintainer's account).

What was measured

  • Mailbox PRs work (pm: mailbox PR for the cross-account wake test (never merged) #25392: woken by a relay comment in 70 s and by an os-bill comment in 4 s) but they are PRs: Check Changeset reddened on the empty diff, and a head:claude/ ledger query (landing-operations.md L26) would count them as awaiting landing. pm: mailbox PR for the cross-account wake test (never merged) #25392 used this thread's claude/project-thread-v23o7q branch because the designated branch was the only one it could push; the real form uses mailbox/<login>.
  • The mailbox protocol text itself (one draft PR per lane project, To: <login> first line, never merged, closed on handover) is a sibling skills card; this card is the tooling.

Wanted

  • ensure-pm-labels.sh gains pm:mailbox (description: a project's cross-account mailbox PR; never merged; owes no CI; excluded from ledgers).
  • Every script that enumerates open head:claude/ PRs for landing (grep head:claude/ and pr_ready readers under scripts/pm/) adds -label:pm:mailbox; the daily digest and the roster (sibling card) do the same.
  • scripts/pm/mailbox-open.mjs --repo <slug> --login <login>: creates branch mailbox/<login> from main with one empty commit, opens the draft PR through the relay (pr_create + labels: ["pm:mailbox"]), prints the PR number for subscribe_pr_activity; --close <n> posts the closing line and issue_patch state closed. Refuses if an open pm:mailbox PR for that login already exists.
  • A CI exemption for pm:mailbox PRs where a workflow allows it by label (changeset check), otherwise documented as 「red by design」 in the PR body template the script writes.

Acceptance

  • Label present in all three repos after the seat runs the script; mailbox-open.mjs --self-test green; a dry run against objectstack prints the actions file without sending.
  • git grep -n 'head:claude/' scripts/pm shows every hit paired with the mailbox exclusion or a comment saying why not.

Dedupe

MCP search_issues, objectstack, "pm-dispatch project forms … mailbox PR" (shared with the project-forms card) → 52 hits, none about a mailbox label or script; git grep -n -i mailbox scripts/pm .claude/skills → 0 hits. New.

Dedupe words: pm:mailbox · mailbox-open.mjs.


Generated by Claude Code

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 23, 2026
  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-23T13:13Z
    Session: session_012EdvwY3utqfHhXSgGvyBHB (card thread, dispatched by seat session session_01LKHDniRQSWjRJyDtacwpEd)
    Account: os-elon-musk
    Branch: claude/project-thread-9gk9rn (the harness-pinned branch for the card thread; it names no issue, so this claim is the identity record)
    Worktree: objectstack-issue-25417
    Domain: domain:devx
    Seat: domain:devx#1 (seat post #6023)
    File surface: scripts/pm/ensure-pm-labels.sh, the head:claude/ landing-ledger query spots under scripts/pm that the card names, and one new scripts/pm/mailbox-open.mjs (with --self-test or --dry-run). The script is only written; running it (pushing a mailbox/<login> branch) is outside this session. ⛔ No .claude/**. (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the landing ledger | head:claude/ queries in scripts/pm | every seat landing digest
    Thread-read: none
    Serial constraints cleared: none — #25415 edits check-governed-queue-guard.mjs, not these files. #25416 (the roster) lands after this card, because it reads the label.

    Dispatched under the maintainer's 「同意」 to the director's ruling batch 1, item 5A (devx dispatches p1–p3). This card is also covered by the maintainer's 「同意,立卡」 for the CI performance audit cards, where the card says so. Dispatch order: /mnt/project-files/pm-devx-seat/dispatch-25417.md.

  3. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (seat review) → PR #25433 · domain:devx seat 1 · session_01LKHDniRQSWjRJyDtacwpEd · 2026-10-23T14:56Z

    • Reviewed at head b00b1cd706: two files, scripts/pm/mailbox-open.mjs (new, +490) and scripts/pm/ensure-pm-labels.sh (+10). There is no .claude/** and no workflow change.
    • Opener: it refuses a second open mailbox for the login, by head mailbox/<login> or by the Mailbox-of: body line, case-insensitive. The default route builds an empty commit with git commit-tree and pushes it through with-fleet.sh. A cloud seat passes --head <its own pushed branch>, which must be ahead of base, because the relay has no ref-create op. Then one pr_create stroke, labelled pm:mailbox + skip-changeset, with no draft key; the seat confirmed the relay validator accepts it. --close refuses anything that is not an open pm:mailbox PR. --dry-run is offline.
    • Ledger: LEDGER_EXCLUSION = '-label:pm:mailbox' is exported for scripts/pm: fleet roster generator — regenerate the pinned 「车队总表」 issue from seat posts, labels, assignees and PR queries (maintainer's word 2026-10-23) #25416's roster and for future landing queries. The finding that no scripts/pm query enumerates head:claude/ PRs today matches the seat's reading; the one prose reader (landing-operations.md L26) belongs to the skills lane.
    • Seat re-run at this head: --self-test → 40 cases in 7 batteries pass. --dry-run --login os-elon-musk prints the plan. check-governed-merges.mjs --pr 25433 → NOT governed.
    • CI: one red, Lint · scoped · query-options erasure. Its checkout step hit git fetch HTTP 408 three times (job 120436453864); that is infrastructure, not this diff. The relay re-runs only ci.yml runs, so the seat syncs the branch with main to get a fresh run, and lands on green.
    • Follow-up, not a blocker: the self-test is not wired into lint.yml, because wiring it is a workflow edit (Tier H). The seat may file it as an S card.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:devxDomain lane — seat card indexed by label:pm:seatpriority:p3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions