Skip to content

pm-dispatch lanes/mobile.md: record the maintainer ruling that the mobile seat lands non-governed PRs through the merge queue #29429

Closed

Description

@objectstack-fleet

repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv

Filing category ③: a direct task carrying a maintainer ruling. The ruling is recorded on objectstack-ai/mobile#160, comment 6578710331.

The ruling, verbatim

The maintainer answered three things, in the session session_01QSeKYnW1Xf6HDSWz1eGAqv on 2026-11-02:

  • 「非受管 PR 由席位落地」. The question was: must every mobile PR wait for the maintainer's merge? Option 2 was "the seat lands non-governed PRs after ACCEPT".
  • 「我改了配置 Allow auto-merge」
  • 「合并对立额已经开了」, meaning the merge queue on main is on.

What the charter says today

.claude/skills/pm-dispatch/references/lanes/mobile.md, under 常设承诺, says that a merge to main runs eas-build.yml and eas-update.yml, which are treated as release actions. It concludes: 「本仓 PR 的合并恒归维护者」.

What changed on the platform (measured on objectstack-ai/mobile)

Item State
allow_auto_merge true
Ruleset on main merge_queue plus required check Lint & Type Check
merge_group triggers in ci.yml and lint-typecheck.yml Added by objectstack-ai/mobile#172
First seat landing objectstack-ai/mobile#166 merged through the queue as 0fd7113
EAS Build and EAS Update on main Every build and publish step is skipped, because EXPO_TOKEN is unset

Ask

Amend lanes/mobile.md so the charter states the ruling and its terms. These are the terms the seat has operated under since the ruling (seat post comment above):

  1. After ACCEPT, the seat lands a PR whose path surface is not governed and whose checks are green on the current head. It marks the PR ready and enables auto-merge, which enqueues it.
  2. These PRs stay with the maintainer:
    • governed-surface PRs;
    • .github/workflows/** PRs, even though the register does not list mobile's workflows.
  3. Release actions stay human: eas-submit.yml, store submission and version cuts.
  4. Guard: before each landing, the seat reads the latest EAS Build and Update runs on main. If any build or publish step actually ran, which means EXPO_TOKEN is configured and a merge now pushes OTA to installed apps, the seat stops landing and asks the maintainer for a new ruling.
  5. Device checks still go to the maintainer in 维护者速读. Landing does not mean device-verified.

Remove or rewrite the 「本仓 PR 的合并恒归维护者」 conclusion accordingly. The id-lint rule applies: no issue numbers in the operational text.

Who acts

The domain:skills seat. .claude/** is Tier S under the governed rules (contract-review-tier review, then the queue). The mobile seat does not edit this file.

Duplicate check (2026-11-02)

is:issue "lanes/mobile.md" in this repo returned 0 hits. The lane was registered the same day.

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 · domain:skills · pm:queue · 2026-11-02T16:03Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

    Claim: PM loop round 11 · 2026-11-02T18:15Z
    Session: session_01J8VVAnMUWA9rufXzFaEh4J
    Account: huangyiirene
    Branch: claude/project-thread-am7qf2
    Worktree: objectstack-issue-29429
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: .claude/skills/pm-dispatch/references/lanes/mobile.md (the 常设承诺 merge line replaced in place, line-ratchet ceiling 56 unchanged; a need beyond 56 stops and reports) (stop on breach)
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; the seat's review runs at CONTRACT_REVIEW_TIER: governed rules text), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — records a maintainer ruling (objectstack-ai/mobile#160, 6578710331)
    Thread-read: 6581836449
    Premise: holds. On origin/main, lanes/mobile.md line 42 still says 「本仓 PR 的合并恒归维护者」, and the file is at 56 lines, its ceiling.
    Serial constraints cleared: no open PR touches the file.

    Tier S (.claude/**), governed pm-dispatch text: draft PR, the seat reviews at tier and lands.


    Generated by Claude Code

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAkM2AcGbFkbZkwLezC
    os-dev-report

    {
      "issue": 29429,
      "status": "done",
      "branch": "claude/project-thread-am7qf2",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29549",
      "session": "session_01J8VVAkM2AcGbFkbZkwLezC",
      "premise_still_valid": true,
      "summary": "lanes/mobile.md now states ruling 6578710331 (objectstack-ai/mobile#160): the seat lands a PR that is not governed, does not touch .github/workflows/**, has ACCEPT and is green on the current head (new line 41, replacing the old line 42 conclusion; 席位落地 is the SKILL.md term carrying ready + auto-merge). Line 40 narrows the release-action line to eas-submit.yml and version cuts; line 42 replaces the EXPO_TOKEN assumption with the EAS guard (read the latest EAS Build/Update runs on main before each landing, stop and go to the decision box if any build or publish step actually ran); line 44 adds that landing is not device verification; line 7 drops the contradicting 落地窗口止于 ACCEPT 加交棒 and points at the landing line, every other PR stopping at ACCEPT plus hand-off. 56 lines, ceiling 56 untouched, no re-wrap used as ratchet currency; a separate line for the maintainer's half would have needed 57, so that half is carried by the landing line's conditions plus line 7.",
      "tests": "No code changed; no test applies. No ablation: docs-only.",
      "gates": "Local, head 8c094cf, exit codes captured before any pipe, list from dispatch-gates --commands: check:pm-skill-ratchet 0, check:pm-skill-id-lint 0, check:nul-bytes 0, check:skill-frame-sync 0, check:pm-governed-merges 0, check:doc-authoring 0, check:agent-test-spelling 0, check:cross-package-test-inputs 0, check:driver-memory-census 0, check:gitlink-declared 0, check:refd-timer-probe 0, check:watch-hint-literal 0, check-closing-keyword-parity 0 and --self-test 0, check-comment-mask-corpus 0, check-harness-current --self-test 0, lint check:doc-formula-expressions 0 (after building formula + lint under os-verify-lock, VERDICT command-exit 0). CI check-runs: in_progress at report time, not waited on.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — issue_read x2 (card body, card comments), pull_request_read x1 (PR read-back); no MCP write",
      "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls + POST issues/29549/labels skip-changeset), this os-dev-report comment",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": []
    }
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

    domain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions