Skip to content

finding(ci): FOUR places in the tree tell authors the four shard jobs are NOT required checks — all were true when written and are FALSE today, and acting on any one blocks every pull request in the repository #9502

Description

@os-try-charles

⚠️ STAND-IN TRIAGE, declared. Graded by the domain:devx @ objectui execution seat (session_013VGeMu3p6qEFWR6K6GGLaW, R58) under 〈多仓协调〉规则 4's stand-in clause; triage seat objectstack#6015 read 🔴 空缺 at 2026-09-14T12:00Z (updated_at 05:50:57Z). ⛔ I stop the moment it has a holder.

Surfaced by the objectui#9499 dev as to file, with its dedup words and its probe. Adopted and filed here.

The two sentences

file says
scripts/dependabot-merge-gate.mjs (header) the required set is "demonstrably not carrying the shards today"
content/docs/guide/ci-cd-pipeline.md it is "a repository-settings surface nothing here can read"

Both are false today — one command, with a firing control

GET /repos/objectstack-ai/objectui/rules/branches/main returns a required_status_checks rule containing exactly:

Lint · Type Check · Build & E2E ·
Test (shard 1/4) · Test (shard 2/4) · Test (shard 3/4) · Test (shard 4/4) ·
Build Docs · Changeset Declaration
strict_required_status_checks_policy: true

⇒ the four shard contexts are required, and the surface is readable — by an ordinary token, through a documented endpoint.

CONTROL, same command, same token, one argument changed: GET /rules/branches/zzz-no-such-branch-9499 returns 200 []. ⇒ the reader distinguishes "a branch with rules" from "a branch with none", so the non-empty answer is a reading and ⛔ not a default. Corroborated by a second endpoint, GET /rulesets/11776024 (enforcement: active, source_type: Repository).

⭐ Both were verified twice: by the objectui#9499 dev, and independently by this seat before filing.

⛔ Why this is dangerous rather than untidy

An author who trusts either sentence renames or re-shards the test jobs — exactly what objectui#9499's repair requires — and then:

  • every pull request in the repository blocks forever on four contexts that can never be produced again;
  • every merge-group build burns the merge queue's check_response_timeout_minutes: 60 and fails.

⛔ There is no ordering in which nothing blocks: the old and new context names can never both be satisfiable. And only the maintainer can edit the ruleset — this seat's token reads it but GET branches/main/protection answers 403 Resource not accessible by integration ⇒ the person who breaks it cannot unbreak it themselves.

⭐ Both sentences were TRUE when written — which is the actual defect class

The evidence behind them was objectui#4959: a merge landed while all four shards were in_progress, which is only possible if the shards were not required. ⇒ ⛔ nobody wrote a falsehood.

The ruleset's updated_at is 2026-08-24 — after that reading. The world changed and the prose did not.

⇒ this is AGENTS.md #9's exact shape: a fact derived once, written down, and never re-derived. ⭐ And it is the second instance this seat has filed today from the same class (objectui#9493 is the other) — which suggests the class, not the instances, is what deserves attention.

Suggested acceptance

  1. Both sentences either corrected or replaced by a pointer to the endpoint — ⭐ prefer the pointer. Restating an endpoint's answer in prose is what created this card; a sentence that says "read GET /rules/branches/main" cannot go stale.
  2. ⚠️ If a figure or a list is quoted anyway, it carries when and how it was derived, so the next reader can check it instead of trusting it.
  3. Do not "fix" this by changing the ruleset to match the prose. The ruleset is correct; the prose is wrong.
  4. Every zero carries a control proven able to return non-zero in the same command; name the population in words.

⚠️ Serial note: content/docs/guide/ci-cd-pipeline.md is pinned by scripts/__tests__/ci-cd-pipeline-doc.test.ts, and scripts/dependabot-merge-gate.mjs by scripts/__tests__/dependabot-merge-gate.test.ts. ⛔ Both will need to move with the prose. ⚠️ Whoever implements objectui#9499's fork will be editing these same two files — coordinate, or land this one first.

Blocks nothing, but is a precondition for safely executing objectui#9499.


⛔ CORRECTION — 2026-09-14T16:4xZ, by the seat that filed this card

⚠️ "Two places" is wrong. Measured on origin/main at 3adc50eec8: FOUR independent carriers, plus three quotations of them. I found this while verifying the file surface before dispatching the card, ⛔ not after shipping a fix — but the undercount was published and is corrected here rather than silently amended.

This is the card's own defect class, committed by the card. A count derived once, written down as authoritative, never re-derived. Recording it as such.

The population, re-derived, named in words

Every occurrence of either phrase in the tree, git grep -n -i over origin/main:

# file:line phrase kind
1 scripts/dependabot-merge-gate.mjs:57 not carrying the shards independent claim
2 content/docs/guide/ci-cd-pipeline.md:138 nothing here can read the current state of it either independent claim
3 content/docs/guide/ci-cd-pipeline.md:2789 repository-settings surface nothing here can read independent claim
4 .github/workflows/dependabot-auto-merge.yml:47 repository-SETTINGS surface nothing here can read or change independent claim ⭐ not in the original body
5 content/docs/guide/ci-cd-pipeline.md:2655 quotes #2 quotation
6–7 scripts/check-required-check-set.mjs:37,41 quote #2 and #4 quotation, inside an inventory docblock

CONTROL, same command, one argument changed: git grep -n -i "zzz-no-such-phrase-9502" origin/main returns 0 files. ⇒ the six non-zero readings are readings and ⛔ not a grep that matches everything.

⚠️ "carrying the shards" is 1 occurrence in 1 file — that half of the original body was right. The undercount is entirely on the "nothing here can read" half, which I reported as one file and is four.

⭐ The bigger correction: the repo ALREADY reads this surface

scripts/check-required-check-set.mjs exists on main and its own docblock opens:

the merge queue's required-check set is off-repo configuration, and this is the only thing in the tree that looks at it.

It takes a live read of ruleset 11776024, exits 2 when the reading could not be taken (⛔ never a pass) and 3 on breach, is wired as pnpm check:required-check-set (package.json:90), has a standing caller (.github/workflows/required-check-set-patrol.yml) and an ablation-driven test.

"nothing here can read the current state of it" is false twice over: the endpoint is readable, and a gate in this repository already reads it on a schedule.

⚠️ And the author of that gate knew. check-required-check-set.mjs:34–44 inventories the three carriers of the claim by name and closes:

The WRITE half of all three is still true and this file does not touch it.

⇒ ⛔ this is not an oversight to sweep up. A prior author drew a deliberate read/write line and left the read-half prose standing. Any repair must either honour that line or argue against it — ⛔ not delete the sentences as though nobody had considered them.

⛔ GOVERNED FORK — AGENTS.md:338, ⛔ NOT in this card's scope

check-required-check-set.mjs:42 names a third carrier the original body missed entirely:

origin/main:AGENTS.md:338
- ruleset 的具体配置(谁可绕过、required checks 清单)本文不写 —— 从仓内读不到,别照抄任何推断。

AGENTS.md is governed surface. ⇒ ⛔ it is out of scope for this card and for any dev dispatched on it, and it must not be edited in the same pull request.

⚠️ It is also not obviously false in the same way. Its parenthetical covers 谁可绕过 (bypass actors) alongside the required-checks list, and GET /rules/branches/main — the endpoint this card's reading used — does not carry bypass actors. So the AGENTS.md sentence may be partly true on a leg the other three do not have. ⛔ Ruling that is a separate, governed card, and this seat is ⛔ not ruling it here.

⇒ the honest state after this card lands is three carriers corrected and one governed carrier left standing, deliberately and in writing.


Generated by Claude Code

Activity

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

    ci/cddocumentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpriority:p2tooling

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions