Skip to content

CI: run the required checks on merge_group, so the merge queue on main can land PRs #171

Closed

Description

@objectstack-fleet

repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv

Filing category ③: a direct task following the maintainer's ruling, recorded on the seat post #160 (comment 6578710331). Verbatim:

  • 「非受管 PR 由席位落地」
  • 「我改了配置 Allow auto-merge」
  • 「合并队列已经开了」

Context (measured on main at 92a0a26)

The ruleset on main has:

  • merge_queue (merge method MERGE, check_response_timeout_minutes: 60);
  • required_status_checks: Lint & Type Check.

The workflows that produce the checks never run in the queue:

  • lint-typecheck.yml (job name Lint & Type Check) triggers on pull_request, push and workflow_dispatch, and not on merge_group.
  • ci.yml (job name Code Quality) triggers on pull_request and push, and not on merge_group.

So a queued PR waits for a required check that never reports. After 60 minutes the queue removes it, and nothing can merge.

Ask

  • Add merge_group: to the on: block of lint-typecheck.yml and ci.yml.
  • Keep every existing trigger and every job name unchanged. The required-check context must stay Lint & Type Check.
  • ⛔ Do not touch eas-build.yml, eas-update.yml or eas-submit.yml. Their push: main trigger is how a merge publishes, and it is out of scope.

Acceptance

  • Both workflows list merge_group among their triggers.
  • After this PR merges (through the queue), the next queued PR shows Lint & Type Check and Code Quality check-runs on its gh-readonly-queue/main/… merge-group ref and lands.

Who acts

The repo:mobile seat dispatches it. The diff touches the governed surface (.github/workflows/**), so the maintainer approves and merges this one PR.

Activity

  1. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv

    Claim: PM loop round 1
    Session: session_01QSeKYnW1Xf6HDSWz1eGAqv
    Account: os-justin
    Branch: claude/issue-171-merge-group-trigger
    Worktree: mobile-issue-171
    Domain: n/a — single-lane repo (repo:mobile)
    Seat: repo:mobile#1
    File surface: .github/workflows/ci.yml, .github/workflows/lint-typecheck.yml (stop on breach; explain in the report)
    Container & model: S mechanical, mode:subagent, model: default tier (opus) — governed surface, so the seat does not use the floor tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds. On main at 92a0a26, neither workflow lists merge_group. The ruleset has merge_queue and requires Lint & Type Check.
    Serial constraints cleared: none. No in-flight PR touches .github/workflows/**.

  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv
    os-dev-report

    {
      "issue": 171,
      "status": "done",
      "branch": "claude/issue-171-merge-group-trigger",
      "pr": "https://github.com/objectstack-ai/mobile/pull/172",
      "session": "session_01QSeKYnW1Xf6HDSWz1eGAqv",
      "premise_still_valid": true,
      "summary": "Added a bare `merge_group:` trigger to the `on:` block of .github/workflows/lint-typecheck.yml and .github/workflows/ci.yml (one line each, commit 1808854 on origin/main 92a0a26); every other trigger and both job names (`Lint & Type Check`, `Code Quality`) are unchanged and the three EAS workflows were not touched. Expression audit: the only expression in either file is `if: always()` on ci.yml's `Upload coverage` (true under merge_group); the only `pull_request` hits are trigger keys, not expressions; there is no job-level if, no github.head_ref and no github.event.pull_request read, so no fix was needed. Coverage upload works under merge_group: artifacts are per-run, so the fixed name cannot collide, and it needs only contents: read; it also cannot gate the queue, since the required check is in the other workflow. No changeset: the package is private, the previous CI-only change (3fa8b72) shipped without one, and the repo has no changeset check. Deviation: the commit carries `Co-Authored-By: Claude Opus 5.5`, written from the harness attribution reminder; the fleet rule is a model-free pair. Not rewritten, because a force-push is out of bounds; the PR body notes it and the seat decides. PR #172 is a draft opened as objectstack-fleet[bot] with no assignees and no labels.",
      "tests": "head 1808854, under os-verify-lock (slot mobile-issue-171): `npx tsc --noEmit` VERDICT command-exit 0; `npx eslint . --ext .ts,.tsx` VERDICT command-exit 0; `npx jest --ci --coverage --maxWorkers=2` VERDICT command-exit 0, `Test Suites: 33 passed, 33 total`, `Tests: 519 passed, 519 total`. No ablation: the diff is workflow config only.",
      "gates": "YAML parse with the node `yaml` package (`node -e \"require('yaml')\"` exit 0, yaml@2.9.0): lint-typecheck.yml on = merge_group,pull_request,push,workflow_dispatch, job `Lint & Type Check`; ci.yml on = merge_group,pull_request,push, job `Code Quality`; exit 0. Cross-checked with python3 yaml.safe_load, exit 0 on both. Control-byte grep: no hits. Exit codes are recorded in the scratchpad issue-171/exit-codes.txt. objectstack dispatch-gates was not applied, because mobile has no such script and its gates were hand-derived from the dispatch order. PR check-runs at 1808854: `Lint & Type Check` in_progress, `Code Quality` in_progress. NOT MEASURED: the merge_group run itself, because it only exists once the PR is queued (the card's acceptance step).",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 relay writes: pr_create via fleet-write dispatch (POST /repos/objectstack-ai/objectstack/dispatches, run 41462453006, which created objectstack-ai/mobile#172 with byte-identical read-back), and this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/mobile/issues/171/comments). Not REST: two git pushes (the empty-branch probe and the commit).",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": []
    }
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv

    ACCEPT → PR #172 (head 1808854). Ready for review; the maintainer is requested. This is a workflow change, so the maintainer merges it through the queue. After it lands, the seat lands #166 through the queue.

  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv

    Landed and accepted. #172 merged as 0cdce1b (maintainer, through the queue). Acceptance met. The next queued PR (#166) produced Lint & Type Check success and CI success check-runs on gh-readonly-queue/main/pr-166-…, and it landed. pm:dispatched removed.

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

Metadata

Metadata

Assignees

Labels

toolingFix 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