Skip to content

ci(required-contexts): register Dogfood Regression Gate as a required context again - #31133

Merged
os-zhuang merged 4 commits into
mainfrom
claude/issue-30461-dogfood-required-row
Nov 7, 2026
Merged

os-zhuang merged 4 commits into
mainfrom
claude/issue-30461-dogfood-required-row

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Requested by 田騏 · project thread
Part of #30461

Clause-②: no
Metadata-protocol: none

Tier H (AGENTS.md, .github/workflows/ci.yml; .claude/** rides along). Draft until an approval from GOVERNED_APPROVERS. This is step 3 of ruling 6669982756: the REQUIRED_CONTEXTS row merges first, then the maintainer adds Dogfood Regression Gate to the main ruleset the same day. #30461 stays open until that ruleset edit, so this PR does not close it.

维护者速读

  • 改了什么:把 Dogfood Regression Gate(ci.yml 的 dogfood-gate)重新登记为必过检查:注册表加一行,必过名单从 10 个变 11 个,AGENTS.md、seat 读数表和说明文档同步改,旧墓碑注释改成一行"已回归"的历史。不改任何 CI 任务、条件或超时。
  • 为什么改:裁决 6669982756(A,分两步)。24 小时读数已过阈值(6707277208):373 次队列构建,flake 0 次,中位时长降 1.6 分钟,两次拦下的都是真回归。
  • 风险与回滚:本 PR 只改注册表和说明文字,合入本身不改变队列行为;你在 ruleset 加上这一项后,dogfood 红才会把队列条目弹出。回滚:从 ruleset 删掉这一项,再 revert 本 PR。合入到你改 ruleset 之间,必过集巡检(Live required-set sweep)会出一条"方向 A"警告,不阻塞、不通知任何人。
  • 先看:scripts/check-required-contexts.mjs 新增的注册行和改写的墓碑注释;AGENTS.md 第 507–512 行的名单。
  • 两分钟验证:node scripts/check-required-contexts.mjs,应看到 11 required context name(s) 和 ci.yml:dogfood-gate → 'Dogfood Regression Gate'。
  • 需要你做的:批准本 PR;合入当天在 Settings → Rulesets → main 的必过检查里加上 Dogfood Regression Gate。

What changes

Not changed, because the row does not make them false:

  • scripts/check-aggregator-roster.mjs: REQUIRED_AGGREGATORS already lists ci.yml/dogfood-gate, and its header already counts five required-context aggregators.
  • fleet-patrols.yml, governed-surface-guard.yml, pr-body-guards.yml and lint.yml's REQUIRED_CONTEXTS cross-reference.
  • The dated readings in cross-repo-issue-closer.yml, publish-smoke.yml and docs/audits/gate-census-2026-09.md.

Tests

  • node scripts/check-required-contexts.mjs --self-test: 190 assertions pass, including the three new fixtures. Each fixture asserts its own anchor matched, so a no-op mutation would fail.
  • node scripts/check-required-contexts.mjs: 11 pinned, ci.yml:dogfood-gate → 'Dogfood Regression Gate'.

Acceptance notes

  • The window between this merge and the ruleset edit. The required-set sweep (fleet-patrols.yml job Live required-set sweep) will report Dogfood Regression Gate in direction A: registered here, not yet live. That covers this PR's own Fleet Patrols run (it triggers on scripts/check-required-contexts.mjs) and any scheduled sweep (04:23 / 16:23 UTC) before the edit. Direction A exits 0. The job stays green and adds one ::warning:: annotation. It writes no issue, label or comment and pages nobody. The reading is the sitting's reminder, and it clears once the ruleset carries the context. No fix is proposed.
  • Until the ruleset edit, a dogfood red still does not eject a queue entry. AGENTS.md and the docs already describe the state after the edit, as the Test UI and Live E2E UI rows did.
  • The fuse in ruling 6669982756 step 4 is unchanged: three or more flake ejections in one day allow reverting ci(dogfood): the three Dogfood Regression Gate shards run on merge_group #30639, which takes the gate back to zero expected credentials without a ruleset change.
  • review-checklist.md:49 had been stale since ci(dogfood): the three Dogfood Regression Gate shards run on merge_group #30639, and round 2 (bacd70b11e) rewrote it. It now reads as the state after the ruleset edit, the same convention as AGENTS.md.

Verification

Head: bacd70b11e (round 2 added the review-checklist.md line, and the same 82 gates were re-derived and rerun, all exit 0). origin/main was merged once before opening (already up to date at 5f00374492). main at af3451b08b touches none of the six files, and merge-tree is clean.

The touched gate and its self-test
node scripts/check-required-contexts.mjs              :: exit 0 · 11 required context name(s) pinned across 3 workflow(s); ci.yml:dogfood-gate → 'Dogfood Regression Gate'
node scripts/check-required-contexts.mjs --self-test  :: exit 0 · 190 assertions
node scripts/check-aggregator-roster.mjs              :: exit 0
dispatch-gates derived families: 82 derived, 82 run, 0 NOT-MEASURED

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.list → exit 0: 82 derived, 82 run, 0 NOT-MEASURED (a derived zero). On a first pass, five families read exit 3 (PREREQUISITE NOT MET: no built packages/* dist): check:doc-formula-expressions, check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure and check:sourcemap-no-sources-content. After pnpm turbo run build --filter='./packages/**' under os-verify-lock (VERDICT command-exit 0), the whole list was run again on this head and all 82 exited 0. check:pm-dispatch-gates: 1954 fast-tier cases pass.

node scripts/check-adr-links.mjs :: exit 0
node scripts/check-adr-links.mjs --self-test :: exit 0
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/check-declaration-mirrors.mjs :: exit 0
node scripts/check-declaration-mirrors.mjs --self-test :: exit 0
node scripts/check-dts-emitted.mjs --self-test :: exit 0
node scripts/check-platform-checklist-watchdog.mjs :: exit 0
node scripts/check-platform-checklist-watchdog.mjs --self-test :: exit 0
node scripts/check-release-section-coverage.mjs :: exit 0
node scripts/check-release-section-coverage.mjs --strict :: exit 0
node scripts/check-self-test-wired.mjs :: exit 0
node scripts/check-self-test-wired.mjs --self-test :: exit 0
node scripts/check-self-test-workflow-commands.mjs :: exit 0
node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0
node scripts/check-step-collectors.mjs :: exit 0
node scripts/check-step-collectors.mjs --self-test :: exit 0
node scripts/check-whole-set-label-write.mjs :: exit 0
node scripts/check-whole-set-label-write.mjs --self-test :: exit 0
node scripts/ci/assert-turbo-remote-cache.mjs --self-test :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
node scripts/ci/prune-turbo-cache.mjs --self-test :: exit 0
node scripts/ci/scheduled-full-run.mjs --self-test :: exit 0
node scripts/docs-audit/check-drift-comment.mjs :: exit 0
node scripts/pm/bare-root-worklist.mjs --self-test :: exit 0
node scripts/pm/board-snapshot.mjs --self-test :: exit 0
node scripts/pm/check-governed-queue-guard.mjs --self-test :: exit 0
node scripts/pm/check-harness-current.mjs --self-test :: exit 0
node scripts/pm/ci-failure.mjs --self-test :: exit 0
node scripts/render-release-coverage-anchor.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:aggregator-roster :: exit 0
pnpm check:bash32-floor :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:cli-command-ids :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:declared-population-live :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:docs-audit-scope :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:dts-closure :: exit 0
pnpm check:dual-build-cjs-loads :: exit 0
pnpm check:entry-guard :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:lean-entry-closure :: exit 0
pnpm check:node-version :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:parse-guard :: exit 0
pnpm check:platform-checklist :: exit 0
pnpm check:pm-close-cards :: exit 0
pnpm check:pm-dispatch-gates :: exit 0
pnpm check:pm-expected-skips :: exit 0
pnpm check:pm-fleet-write-dispatch :: exit 0
pnpm check:pm-fleet-write-execute :: exit 0
pnpm check:pm-fleet-write-validate :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-governed-prose :: exit 0
pnpm check:pm-half-states :: exit 0
pnpm check:pm-issue-transfer :: exit 0
pnpm check:pm-post-stamped :: exit 0
pnpm check:pm-record-recognisers :: exit 0
pnpm check:pm-skill-id-lint :: exit 0
pnpm check:pm-skill-ratchet :: exit 0
pnpm check:pnpm-acquisition :: exit 0
pnpm check:pnpm-filter-targets :: exit 0
pnpm check:pnpm-flag-spellings :: exit 0
pnpm check:ratchet-remedy-authority :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:required-contexts :: exit 0
pnpm check:scripts-symbol-anchors :: exit 0
pnpm check:shard-attestation :: exit 0
pnpm check:skill-frame-sync :: exit 0
pnpm check:sourcemap-no-sources-content :: exit 0
pnpm check:stall-guard-budget :: exit 0
pnpm check:stall-guard-headroom :: exit 0
pnpm check:type-check-coverage :: exit 0
pnpm check:type-check-debt :: exit 0
pnpm check:watch-hint-literal :: exit 0
pnpm check:workflow-status-functions :: exit 0
pnpm check:workflow-step-name-quoting :: exit 0

Not run locally: ui/scripts/__tests__. It is not derived, the ci.yml edits are comments only, and grep finds no pin on the edited text. The repo-wide pnpm lint is CI's.


Session: session_017ihL2ebbZkr2QAEG1x7UC8

🤖 Generated with Claude Code

@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 7, 2026
@github-actions github-actions Bot added size/m ci/cd documentation Improvements or additions to documentation labels Nov 7, 2026
…e, not on the PR

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ihL2ebbZkr2QAEG1x7UC8
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: bacd70b11edca0e9124a1eeaedf39bb060d43eca
Local-runs: none
Scope: .claude/skills/pm-dispatch/references/platform-readings.md, .claude/skills/pm-dispatch/references/review-checklist.md, AGENTS.md, .github/workflows/ci.yml, scripts/check-required-contexts.mjs + docs/agents/multi-agent-discipline.md, .github/workflows/fleet-patrols.yml, scripts/check-aggregator-roster.mjs, scripts/ci-shard-matrix.mjs, scripts/check-shard-attestation.mjs

Inputs: card #30461 (body; rulings 6663883327 and 6669982756; landed note 6671431307; 24h reading 6707277208; round-2 claim 6707739409; dev reports 6707728600 and 6707962476), PR #31133 body and files, git diff origin/main...refs/review/pr-31133 (3 commits, 6 files, +81/−50), the cited code at origin/main af3451b08b, the Actions API read-only, and the 63 check-runs on this head (all completed; none in progress).

① Derived judgments

The row (ci.yml / dogfood-gate / Dogfood Regression Gate). Same five-field shape as the Test UI precedent 833e4a8972: authorized names the ruling (6669982756, letter A in two steps), the maintainer's word and time (「同意」 2026-11-05T21:25Z, as the ruling record states), the reading that met the threshold (6707277208, (b) = 0), and the #9325 two-step order (row first, ruleset the same day). The names are the ones the check-run publishes: ci.yml job dogfood-gate has name: Dogfood Regression Gate, no strategy.matrix, no job-level continue-on-error (the continue-on-error: true is on the download step, which the judge does not read), if: always(), and ci.yml carries both pull_request: (unfiltered) and merge_group:. Read live on both events: this head's pull_request run published Dogfood Regression Gate = success with both legs skipped ("expected attestations: 0" for each, job 128421476546); merge_group run 42300425921 (2026-11-06T21:53Z) published the shards (1/3), (2/3), (3/3) = success, Dogfood Verify CLI = skipped, and the aggregate log reads "attested 3 / 3 declared shard(s)" with the verify leg "satisfied (skipped by the filter — #4928; expected attestations: 0)". carries says what is true: the (k/3) matrix is counted through the aggregate by check:shard-attestation (--leg "dogfood/3:…"), and dogfood-verify is skipped by its own if: (github.event_name != 'pull_request' && github.event_name != 'merge_group'), not by the filter job, whose core output is 'true' on merge_group; no step count is embedded (assertion 10). Self-test fixtures: the rename fixture's anchor name: Dogfood Regression Gate\n matches exactly one line of ci.yml (2776; the shard line 2408 continues with (), the mutation is asserted non-no-op by fixture(), and judge (3) yields ci.yml: job 'dogfood-gate' is named "Dogfood Regression Gate (aggregate)", but branch protection requires the context 'Dogfood Regression Gate', which carries both substrings the assertion wants. The collision fixture replaces name: Dogfood Regression Gate (${{ matrix.shard }}/3) (shardTotal reads shard: [1, 2, 3]) with the bare name and judge (9) yields ci.yml: job 'dogfood' is named 'Dogfood Regression Gate', which is the required context published by ci.yml:dogfood-gate; the coexistence control pins the real suffixed name. Both fire on the live specimen; Lint & Repo Gates (which runs --self-test then the pin, package.json line 170) is success on this head.

The tombstone and the counts. The #22998 tombstone now covers Temporal Conformance (live PG + MySQL) alone and its substance holds against origin/main: temporal-conformance's if: still denies both per-PR events, the context is out of the live set (the 2026-11-07T04:26Z scheduled sweep on main, job 128300549763, printed "the live required set and REQUIRED_CONTEXTS agree in both directions"), and it stays prose, not a RETIRED_CONTEXT_NAMES row, for the reason given. The dogfood history is kept in the Returned: line (dropped by #22998, shards on merge_group by 6663883327, row re-enrolled by 6669982756). Whole-set lists and counts all moved together: REQUIRED_CONTEXTS 10→11; both statesTheSet mustName arrays (AGENTS.md, platform-readings.md) gain the literal; the two history comments read 10→11 / the eleven; AGENTS.md says eleven three times with the list; platform-readings.md says 十一个 with the list re-wrapped inside the same three lines; multi-agent-discipline.md says eleven, drops "advisory only" and says the context is in the required set again; the self-test's ruleset-snapshot comment now names Temporal alone as the unpinned reading, and its assertions are shape-derived, so the added row changes nothing there. Grep of the head tree outside docs/adr, CHANGELOGs, docs/audits and release pages: no "ten contexts" / "those ten" / 十个 statement of the set remains; the only other "Dogfood is outside the required set" prose was the ci.yml THE TWO SPEEDS and dogfood-gate comments, both rewritten. check-aggregator-roster.mjs already lists ci.yml/dogfood-gate (five aggregators), and the dated readings in cross-repo-issue-closer.yml (2026-08-18 ruleset read) and publish-smoke.yml are past-tense records, rightly untouched.

The sweep window (merge → ruleset edit). fleet-patrols.yml has no push trigger; its Live required-set sweep runs on the 23 4,16 * * * cron, on workflow_dispatch, and on a pull_request whose paths include scripts/check-required-contexts.mjs. In that window it reads direction A for exactly one row (Dogfood Regression Gate, registered here, not live), exits 0 (EXIT_SWEPT), publishes the report to the step summary, and raises one ::warning:: annotation; permissions: contents: read, it writes no issue, label or comment, and its name is not a required context. Observed on this very head: fleet-patrols run 42378577295, job 128421183911 concluded success with that warning. check:required-contexts in lint.yml is the pin (self-test + job-name pin) and never reads the ruleset, so it is green on PR, queue and push; --verify-required-set is in no package.json script (the self-test asserts it). Queue behaviour is unchanged until the ruleset edit: a dogfood red on a queue build is visible but does not eject. Nothing goes red and nobody is paged; the PR body's Acceptance notes say exactly this.

The skill line. review-checklist.md:49 now reads 「dogfood 门禁不跑于 PR、跑于队列,全绿 PR 照样被队列弹出」: not on PR (the dogfood job's if: denies pull_request), yes in the queue (merge_group left the deny list by #30639), and the ejection is the ruled end state that the same-day ruleset edit makes real, the convention AGENTS.md followed for Test UI and Live E2E UI before their ruleset entries. Line 50 (grep packages/qa/dogfood/test for cases that read the side effect right after the answer, bounded wait in the same PR) still follows from 49 as the pre-enqueue step. Ceilings hold: the file is 76 lines against its ceiling of 76 (check-skill-line-ratchet.mjs line 1216), line 49 is 118 bytes, widest line 120; platform-readings.md is 458 against 458 (line 1160), widest 120. check:pm-skill-ratchet runs inside Lint & Repo Gates, success.

The landing. skip-changeset is on the PR and right: nothing a released package ships moves (a root script, workflow comments, AGENTS.md, docs/agents, .claude prose); Check Changeset = skipped. The body carries line-initial Clause-②: no and Metadata-protocol: none, and Part of #30461 (no Fixes), correct because the card closes only after the maintainer's ruleset edit. The ci.yml hunks are comments only (every changed line begins with #, verified mechanically; no job, if:, timeout-minutes or step moved). main has moved to af3451b08b (b5696b4967 is an ancestor): none of the six files changed on main since the base 5f00374492, git merge-tree is clean, so no derived verdict changes. Check-runs on bacd70b11e: 63, all completed; the eleven registry contexts (Lint & Repo Gates, TypeScript Type Check, Test Core, Build Core, Governed Surface Queue Guard, Lint UI, Build & E2E UI, Type Check UI, Test UI, Live E2E UI, Dogfood Regression Gate) all success; Live required-set sweep success (with the direction-A warning); PR-body guards success.

Findings.

  • should-fix — the PR body no longer matches the tree after round 2 (bacd70b11e folded review-checklist.md:49 in): "What changes" lists five files and omits review-checklist.md; "Acceptance notes" still says that line is out of scope and "this row does not change it"; "Verification" names head 1ae183d398. Judged on the tree, the diff is right; the body should say so before the maintainer reads it.
  • should-fix — the rewritten tombstone keeps "until then --verify-required-set reports it in direction B … which is the sitting's own reminder" in the present tense for Temporal, but that window has closed: the 2026-11-07T04:26Z sweep on main agrees in both directions, so Temporal no longer reads as unpinned. One clause, past tense ("reported it in direction B until the maintainer's settings half landed"), would stop the tombstone describing a reading that no longer occurs. Pre-existing on main, but the PR rewrote the sentence.
  • observation, no fix owed — the Returned: line of the tombstone is one 190-byte comment line in a block wrapped at 80; ESLint passed, cosmetic only.

② Semver level

none. No package's files[] ships any touched path (scripts/check-required-contexts.mjs is a root script; the rest is workflow comments, AGENTS.md, docs/agents, .claude prose). skip-changeset is the correct declaration, not a patch changeset.

③ Boundary flags

  • Tier H governed surfaces: AGENTS.md, .github/workflows/ci.yml (comments only). Tier S: .claude/skills/pm-dispatch/references/platform-readings.md, review-checklist.md. One Tier H path makes the whole PR Tier H: landing needs an authorized APPROVED review from GOVERNED_APPROVERS and the owning seat or the maintainer's hand; this record is the Tier S half and the independent review the round-2 claim owes, not that approval.
  • The settings half is outside the tree and maintainer-only: adding Dogfood Regression Gate to the main ruleset the same day the row merges (ruling 6669982756 step 3). Until then the context is registered but advisory, and the sweep says so in direction A.
  • No packages/spec schema, no ADR, no published spec touched; no metadata-protocol change.
  • The fuse in ruling step 4 (three or more flake ejections in one day allow reverting ci(dogfood): the three Dogfood Regression Gate shards run on merge_group #30639) is untouched by this PR and remains the lane's.

④ Design judgment

scripts/check-required-contexts.mjs against the code it cites: the row's three names are the literals ci.yml publishes, both legs behave as carries says on both events, and the two new fixtures are the same reverse-verification the registry's other aggregates carry (Test Core, Test UI), anchored to live text and asserted non-no-op, so a rename or a shard collision on this context reddens Lint & Repo Gates instead of detaching the gate silently, which is the defect the file exists for. The tombstone rewrite keeps the history and takes nothing true away. AGENTS.md and platform-readings.md against the ruling: both statesTheSet surfaces name the registry exactly, so the next enrolment cannot land without following the sentence; the count words were hand-followed as the design records they must be. review-checklist.md:49 against the spec it teaches on main (the dogfood job's if: and the merge-queue rule): it now teaches the seat the right place to expect the dogfood verdict (the queue build, not the PR) and the right pre-enqueue act (line 50). ci.yml comments against the row: the prose that the row made false is the prose that changed, and nothing executable moved. Held.

Implemented-by: claude/issue-30461-dogfood-required-row
Reviewed-by: session_017ihL2ebbZkr2QAEG1x7UC8

VERDICT: PASS

@objectstack-fleet

objectstack-fleet Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor Author

domain:devx#2 · marchtian · session_017ihL2ebbZkr2QAEG1x7UC8

维护者速读

  • 改了什么:把 Dogfood Regression Gate 重新登记为必需检查。注册表加一行,必需名单从 10 个变 11 个,AGENTS.md、技能和文档同步改。不改任何 CI 任务、条件或超时。
  • 为什么改:裁决 6669982756 的第 3 步。24 小时读数(6707277208)达标:队列构建 373 次,偶发失败 0 次,中位耗时降了 1.6 分钟,两次拦截都是真回归。
  • 风险与回滚:合并本身不改变队列行为,你在规则集里加上这项检查后,dogfood 红才会把队列条目弹出。回滚:从规则集删掉这项,再 revert 本 PR。合并到改规则集之间,巡检会出一条不提醒任何人的警告。
  • 先看:scripts/check-required-contexts.mjs 里新增的登记行和改写的墓碑注释,以及 AGENTS.md 里的必需名单。
  • 两分钟验证:运行 node scripts/check-required-contexts.mjs,应看到 11 required context name(s) 和 ci.yml:dogfood-gate → 'Dogfood Regression Gate'。
  • 需要你做的:批准本 PR(Fable 合同复审 PASS 6708094819,Head-sha bacd70b11e);合并当天在 Settings → Rulesets → main 的必需检查里加上 Dogfood Regression Gate。

席位意见:建议批准。改动只限登记行和说明文字,复审无必须修改项,检查全绿;唯一要你动手的是合并后改规则集。

席位核对 — ACCEPT · domain:devx#2 · Head-sha bacd70b11edca0e9124a1eeaedf39bb060d43eca · 2026-11-07T14:20Z

  • Shape: 6 files, +81/−50, read from the diff and not the report.
  • Why now: step 3 of ruling 6669982756. The 24-hour reading (6707277208) met the threshold: 0 flakes, no environmental failure, queue median −1.6 min.
  • Review: the complete Fable contract review PASSed on this head (6708094819) with no must-fix. Both should-fixes are handled:
    • S1 (the PR body no longer matched the tree after round 2): the seat patched the body, adding the review-checklist.md line, retiring the stale out-of-scope note and updating the head. The relay read-back was identical.
    • S2 (one tombstone clause for Temporal Conformance still reads in the present tense, though the 04:26Z sweep on main already agrees in both directions): cosmetic and pre-existing. Not taken here, to avoid moving the head.
  • Gates:
    • Head checks: 56 success and 11 skipped, none red. All eleven registry contexts are success.
    • check-expected-skips: OK, all 11 skips are in main's roster (exit 0).
    • check-governed-merges: GOVERNED, .github/workflows/** ×1 plus AGENTS.md. Landing tier H. 131 changed lines, which is ≤ 3000.
    • The dev's dispatch-gates --commands: 82 derived, 82 run, all exit 0, on this head.
    • main (af3451b08b) touches none of the six files, and merge-tree is clean.
  • Out of scope: Skills-docs: n/a, Clause-②: no, Metadata-protocol: none, skip-changeset (nothing published).
  • Landing: Tier H. Part of #30461 (not Fixes). Ready, reviewers os-zhuang and hotlong, pm:awaiting-merge (corrected from needs-user-decision, which feat(pm): pm:awaiting-merge — a PR awaiting the maintainer's review and merge no longer shares needs-user-decision with decision cards #30445 keeps for decision cards only). The seat lands it after an authorized APPROVED review. The same day, the maintainer adds Dogfood Regression Gate to main's ruleset. Between the merge and that edit, the required-set sweep shows one non-paging direction-A warning.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 7, 2026 14:21
@objectstack-fleet objectstack-fleet Bot added the needs-user-decision Blocked on a maintainer decision — do not dispatch; decision cards only, never on a PR label Nov 7, 2026
@os-zhuang
os-zhuang added this pull request to the merge queue Nov 7, 2026
@objectstack-fleet objectstack-fleet Bot added pm:awaiting-merge PR only: landing waits on the maintainer's own review and merge (SKILL.md 复核 ②); never on an issue and removed needs-user-decision Blocked on a maintainer decision — do not dispatch; decision cards only, never on a PR labels Nov 7, 2026
Merged via the queue into main with commit e062399 Nov 7, 2026
81 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-30461-dogfood-required-row branch November 7, 2026 14:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd documentation Improvements or additions to documentation pm:awaiting-merge PR only: landing waits on the maintainer's own review and merge (SKILL.md 复核 ②); never on an issue size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants