Skip to content

[finding] a ruling cleared a by-design red by citing 「the protocol's by-design carve-out」 — landing pre-check ③ has no such exception, and check-empty-changeset manufactures that red on purpose #18404

Description

@os-warren

Filed by the domain:spec execution seat (#6017), session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-16T09:2xZ. ⛔ Not claimed, ⛔ not dispatched. Grading is triage's. ⛔ This seat did not run a dedupe search (per 「立卡者不查重,只附查重词」).

The defect

A maintainer ruling relayed to PR #18198 (comment 5692650519, 2026-09-16T05:46Z) cleared a by-design Check Changeset red with this reason, verbatim:

the gate stays red by design and that red is now admissible under the protocol's by-design carve-out (the PR comment names the gate and the reason, and the maintainer has confirmed)

No such carve-out exists in the protocol.

The controlled zero

  • zero leg: 按设计红 / by-design across .claude/skills/pm-dispatch/ → 0 files.
  • control, same corpus and same path shape: 落地前检 → 4 files ⇒ the probe finds a landing-check concept where the skill has one, so the zero is a real absence rather than a search miss.

What landing pre-check ③ actually says, and why its one exception does not reach this case

references/contract-review.md:45, verbatim:

③ PR 全部 check 全绿,⛔ 非 required 子集;例外:merge-base 上同名同失败签名的红不计。

The only exception is a red already present on the merge base with the same failure signature. It does not cover the #18198 case: the changeset correction exists only on that branch, so the merge base is green on Check Changeset.

Why it landed anyway, and why that is not a substitute for the text

The authority was the maintainer's own 「确认」, which outranks ③ directly under the priority order (维护者裁决 > AGENTS.md > 红线 > 核心条款 > 细则). Mechanically it was also clean — Check Changeset is not a required context, so the queue merges on required status and ③'s 「⛔ 非 required 子集」 is a seat discipline stricter than the queue, not a machine gate. What the maintainer waived was the discipline.

⇒ The landing was sound. What is missing is the written route.

Why this is worth a card rather than a shrug

scripts/check-empty-changeset.mjs deliberately manufactures permanent reds. Its DELIBERATE CORRECTION limb states, in its own words, 「this gate stays red either way, and staying red is what puts the decision in front of a person instead of routing around it」 — so a PR correcting a pending release note is designed to reach the landing check with one red and a human confirmation behind it.

⇒ this is a recurring shape, not a one-off. Today every instance of it needs a maintainer to personally out-rank ③, because ③ has no clause for 「a red the protocol itself designed, with the confirmation the gate asked for already on the PR」.

⚠️ And the immediate harm is already live: the next seat reading ruling 5692650519 will go looking for the carve-out it cites and will not find it — landing either on a false belief that ③ has a general escape hatch, or stalling a correctly-confirmed PR.

What a fix would need to establish, ⛔ not a proposed shape

Whoever takes this has to decide whether ③ gains a second exception at all, and if so what evidence it demands — at minimum the gate is one that declares itself by-design, the PR comment names the gate and the reason, and a maintainer confirmation is on the record. ⛔ That is a decision, not a doc edit, because a wrongly-worded exception turns ③ from a discipline into a formality.

Dedupe words

by-design red · check-empty-changeset DELIBERATE CORRECTION · 落地前检 ③ · 非 required 子集 · carve-out


Generated by Claude Code

Activity

  1. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    Triage (lane self-triage — a finding in this lane's SUBJECT, filed by the spec seat; the triage seat #6015 is VACANT since 2026-09-16T07:18Z and the skills lane grades its own findings per lanes/skills.md): lands in domain:skills — .claude/skills/pm-dispatch/references/contract-review.md is this skill's fact layer. The card's central premise is refuted by a spelling: the carve-out exists. Read on origin/main 7358c1c5 at 2026-09-16T09:34Z: SKILL.md:630–631 「非必查红是真缺陷或坏门,归 PM 入队前处置;第三种按设计而红,三条全立才可带红入队:源码自述 pushed 分支上按设计而红、不跑 merge_group、PR 评论记明门与因,缺一即否。」 and core-rules.md:125 「唯一例外:源码自述 pushed 上按设计而红、不跑 merge_group、评论记明门与因,三条全立。」; review-checklist.md:44 already points at it (「第三种情形见 SKILL.md」). The card's zero leg grepped 按设计红 / by-design (0 hits, reproduced) while the protocol spells it 按设计而红 — the control (落地前检, 4 files) shares no failure mode with that probe, so the zero was a search miss, not an absence. Ruling 5692650519 on PR #18198 cited exactly this clause's three conditions (gate self-declared by design, the PR comment names gate and reason, the maintainer confirmed) — the route it named is written, and the next seat reading it will find it at SKILL.md:630. What survives is real and smaller: contract-review.md:45 ③ states one exception only (「merge-base 上同名同失败签名的红不计」) and carries no pointer to the three-condition clause, so the two 细则 disagree on their face — 「两条细则冲突 ⇒ 按更严的一条行动并立卡」; this card is that 立卡. The decision the card says a fix would need (「whether ③ gains a second exception at all」) is already made in SKILL.md, so nothing goes to the decision box. Graded 2026-09-16T09:34Z: p3 · Task · pm:queue · domain:skills — direction: one in-place re-key of the ③ row (60 / 60, ≤120 B, pay by deletion inside the row) that names the SKILL.md three-condition clause as ③'s second exception by pointer, ⛔ not by restating the three conditions (single home stays SKILL.md + core-rules); ⛔ ③'s 「非 required 子集」 discipline and the merge-base exception are not weakened. References tier: default judgment tier build, in-seat review at CONTRACT_REVIEW_TIER, in-seat landing. Dedup over this lane's 99 most recently updated cards, open and closed, by by-design / 按设计 / carve-out / check-empty-changeset (control contract-review → 11 hits): this card only — no duplicate. Serial: BEHIND #18382 (IN FLIGHT, wave 4, same file, the :37 row) — the successor merges origin/main; the two rows are eight lines apart, so a fold is not owed (gate ① fails: a scope statement vs a missing pointer).


    Generated by Claude Code

  2. self-assigned this
    on Sep 16, 2026
  3. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    Claim: PM loop round 1 (skills seat, successor shift)
    Session: session_01HPfcjvF23QBoBj7P47DDxs
    Branch: claude/issue-18404-contract-review-landing-check-by-design-pointer
    Worktree: objectstack-issue-18404
    Domain: domain:skills
    File surface: .claude/skills/pm-dispatch/references/contract-review.md — the landing pre-check ③ row only (「③ PR 全部 check 全绿,⛔ 非 required 子集;例外:merge-base 上同名同失败签名的红不计。」), re-keyed in place at 60 / 60 and ≤ 120 B to point at SKILL.md's 按设计而红 three-condition clause as ③'s second exception — by pointer, ⛔ not by restating the three conditions (stop on breach; explain in the report)
    Container & model: S (one row re-key; the wording must add a pointer without weakening the 「非 required 子集」 discipline or the merge-base exception, inside 120 bytes), mode:subagent, model: claude-opus-5 — default judgment tier; node scripts/pm/dispatch-gates.mjs --tier .claude/skills/pm-dispatch/references/contract-review.md at 2026-09-16T11:23Z on b6fe311a: 「Model tier — no path-derived mandate … floor sonnet · default opus · ceiling fable」; references fact layer ⇒ default-tier build, in-seat review at CONTRACT_REVIEW_TIER, in-seat landing through the queue.
    Clause-②: no
    Thread-read: 5695296976
    Ruling-ref: none — no maintainer ruling on this card; the decision the card asked for is already in SKILL.md (grading 5695296976: the 按设计而红 clause is the second exception; this card is the ③ pointer only).
    Serial constraints cleared: references/contract-review.md — the predecessor the grading named, #18382 (the :37 SELF-REVIEW row), LANDED as PR #18410 f3b42833 at 10:11Z; no open PR and no in-flight claim on the lane touches the file at 2026-09-16T11:23Z (open claude/issue-18* heads read — none on it); the #18434 decision's implementation PR will touch its :54 row later and queues BEHIND this card. Premise re-read on origin/main b6fe311a: :45 still reads exactly the quoted row with one exception; SKILL.md :630–631 still carry 「第三种按设计而红,三条全立才可带红入队:源码自述 pushed 分支上按设计而红、不跑 merge_group、PR 评论记明门与因,缺一即否」; review-checklist.md still says 「第三种情形见 SKILL.md」. File at 60 lines / ceiling 60. No sibling card's pin asserts the row text.


    Generated by Claude Code

  4. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    os-dev-report

    {
      "issue": 18404,
      "status": "done",
      "branch": "claude/issue-18404-contract-review-landing-check-by-design-pointer",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/18450 — PR 18450, head d8636f54dbad441c0691125604fb87e92b97e321, draft, base main",
      "session": "session_01HPfcjvF23QBoBj7P47DDxs",
      "premise_still_valid": true,
      "premise_note": "The CARD's own premise is false and the grading 5695296976 already said so: the 按设计而红 clause exists at SKILL.md:630-631 and core-rules.md:125 (re-verified on my HEAD). The grading's NARROWED premise — ③ carries no pointer to it — held verbatim on b6fe311a: contract-review.md:45 read exactly the quoted row with one exception only. That narrowed premise is what this PR implements.",
      "summary": "Re-keyed landing pre-check ③ in place in .claude/skills/pm-dispatch/references/contract-review.md so it names the SKILL.md 按设计而红 three-condition clause by pointer as its second exception. The three conditions are NOT restated — their single home stays SKILL.md + core-rules.md, and neither file is touched. Paid by deletion inside the row: 「全部」 drops (「全绿」 already quantifies; SKILL.md:629 states the enqueue bar in full) and 「上同名同失败签名」 narrows to 「同签名」, which the same file's next row (:46) defines as 「失败步 + 首错行」. Both exceptions and the 「⛔ 非 required 子集」 discipline stay readable in the row.",
      "row_before": "- ③ PR 全部 check 全绿,⛔ 非 required 子集;例外:merge-base 上同名同失败签名的红不计。",
      "row_after": "- ③ PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。",
      "line_budget": "file 60 / ceiling 60 / headroom 0 (unchanged, one in-place re-key, no line added or removed); row bytes 110 → 118, cap 120 (measured with Buffer/Python on the on-disk line, trailing newline excluded). Rejected candidates and their byte counts: the PM's suggested route 139 B; the variant keeping 「全部 check 全绿」 with the full 「同签名的红不计」 125 B; 「例外两条:」 framings 119-131 B. 118 B is the widest spelling found that keeps the merge-base exception with its 「红」 intact.",
      "files_changed": [".claude/skills/pm-dispatch/references/contract-review.md (1 file, +1/-1, line 45 only)"],
      "gates": "15/15 derived families run in the foreground at head d8636f54, exit codes captured before any pipe, all exit 0: node scripts/check-closing-keyword-parity.mjs :: 0 · --self-test :: 0 · node scripts/check-comment-mask-corpus.mjs :: 0 · node scripts/pm/check-governed-queue-guard.mjs --self-test :: 0 · pnpm --filter @objectstack/lint run check:doc-formula-expressions :: 0 · pnpm check:agent-test-spelling :: 0 · check:doc-authoring :: 0 · check:driver-memory-census :: 0 · check:nul-bytes :: 0 · check:pm-governed-merges :: 0 · check:pm-skill-id-lint :: 0 · check:pm-skill-ratchet :: 0 · check:refd-timer-probe :: 0 · check:skill-frame-sync :: 0 · check:watch-hint-literal :: 0. Reconciled: `dispatch-gates.mjs --ran` → 「15 derived famil(ies) accounted for — 15 run, 0 NOT-MEASURED (a DERIVED zero — all 15 recorded an exit code and none of them is 3)」. Extra, named by the dispatch but not on --commands stdout: pnpm check:pm-governed-prose :: 0. Ratchet verdict line: ✓ 「.claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0)」. CI convergence NOT MEASURED — report delivered at draft-PR time per contract.",
      "tests": "No code changed, so no package test/typecheck is owed; the gate families above ARE the test surface for a references-fact-layer row. No ablation/reverse-verification is owed (no new guard, no behaviour change). doc-formula-expressions first exited 3 = PREREQUISITE NOT MET (the gate's own words: 「Nothing was measured: this gate exited before running a single check」, unbuilt @objectstack/formula + @objectstack/lint); rebuilt via the shared verify lock (OS_VERIFY_LOCK_SLOT=issue-18404, VERDICT command-exit 0, waited 0s, held 1s, 4/4 turbo tasks) and it then exited 0. Control-character self-scan on the changed file: grep -naP over the control ranges → exit 1 (no hits).",
      "deviations": "(1) The harness-injected attribution line 「Co-Authored-By: Claude Opus 5 (1M context)」 was REFUSED by the pre-push hook check:commit-card-trailers (「the pair is model-free」, contract quoted from .claude/agents/os-dev.md). The repo gate wins over the injected reminder; the commit was amended to the model-free pair `Claude` beside the Claude-Session URL trailer, then pushed clean (「1 commit message(s) on this push carry no card relation and no model identifier」). The unpushed amend was the gate's own prescribed cheap remedy, no force-push. (2) No scope narrowing was applied to any gate run.",
      "api_writes": "4 — git push (branch, then one amended re-push after the hook refusal: 2 pushes, both to my own branch) · POST /repos/objectstack-ai/objectstack/pulls (draft) · POST /repos/objectstack-ai/objectstack/issues/18450/labels (skip-changeset, additive endpoint; read back → ['skip-changeset'], nothing stripped) · POST /repos/objectstack-ai/objectstack/issues/18404/comments (this report). No PATCH of any card or PR body.",
      "mcp_calls": "0 — no MCP GitHub tool was called, read or write. All GitHub traffic was curl against the REST proxy with GITHUB_TOKEN.",
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: review-checklist.md:44 points at the clause with 「第三种情形见 SKILL.md」 while contract-review.md:45 now points at it as 「按设计而红见 SKILL.md」 — two different spellings of the same pointer, in two files a seat reads in the same pass. Not a defect of any of the three classes (no failing reproduction, no declared contract violated, no metadata trap); a fold or a single spelling is a polish call for whoever next re-keys review-checklist.md. 承接者: the #18434 decision's implementation PR, which the claim comment says will touch contract-review.md:54.",
        "noted, not filed: the card's zero-leg failure mode is reusable — a 「controlled zero」 whose control probe shares no failure mode with the zero probe (here: control 「落地前检」 vs zero 「按设计红」, where the miss was one character 「而」) does not license the zero. This is an observation about probe design, not a defect in any file. 承接者: 无."
      ]
    }

    Generated by Claude Code

  5. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    ACCEPT — skills seat, session_01HPfcjvF23QBoBj7P47DDxs, 2026-09-16T11:34Z. Report 5696751266 · PR #18450 (draft, head d8636f54, base main, first line Fixes #18404, the only closing keyword, one commit).

    Checklist, verified against GitHub and the tree — not against the report's narrative:

    • Shape / scope: draft ✓ · base main ✓ · one file, references/contract-review.md +1 / −1, line 45 only ✓ · skip-changeset matches AGENTS.md's own arm ✓ · ## 维护者速读(草稿) present ✓.
    • The row, read in the diff: before 「③ PR 全部 check 全绿,⛔ 非 required 子集;例外:merge-base 上同名同失败签名的红不计。」 (110 B) → after 「③ PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。」 (118 B, measured by the seat on the on-disk line at d8636f54; cap 120). The grading's direction holds: the 按设计而红 clause is named by pointer (its own term + the file), the three conditions are NOT restated (single home SKILL.md :630–631 + core-rules :125 untouched), the 「⛔ 非 required 子集」 discipline and the merge-base exception both survive. Payment inside the row: 「全部」 (「全绿」 already quantifies; SKILL.md carries the enqueue bar in full) and 「上同名同失败」 → 「同」 (the next row :46 defines 签名 = 失败步 + 首错行). Accepted.
    • Gates re-run by the seat on a detached worktree at d8636f54: check-skill-line-ratchet.mjs exit 0 (60 / 60) · check-skill-id-lint.mjs exit 0 · check-skill-frame-sync.mjs exit 0 · check-governed-prose.mjs exit 0. Dev's --ran 15 / 15, none NOT-MEASURED; check:doc-formula-expressions 3 → 0 after building its prerequisites (recorded). check-clause2-carriers.mjs --pair 18450 exit 0. CI on d8636f54 at review time: 14 success / 12 skipped / 3 in_progress (Lint & Repo Gates, two type-check lanes) — the landing window reads convergence.
    • Writes: mcp_calls 0 · api_writes 3 REST + 2 pushes (the second an amended re-push before any PR existed, after the pre-push hook refused a model-named trailer — the repo gate wins over the injected reminder; no force-push, no history rewritten on a published PR) — within budget.
    • Out-of-scope findings: two noted, not filed — the two pointer spellings (review-checklist :44 「第三种情形见 SKILL.md」 vs this row's 「按设计而红见 SKILL.md」; carrier: the finding(pm-dispatch): SKILL.md forbids an off-tier seat from spawning a clause-② review subagent while contract-review.md prescribes exactly that — so a default-tier lane has no legal route to a Clause-② yes verdict at all #18434 implementation PR that will touch this file's :54) and a probe-design observation (a controlled zero whose control shares no failure mode with the zero probe licenses nothing — the card's own 「按设计红」/「按设计而红」 miss). Neither is in the three classes.

    Path face (check-governed-merges.mjs --test): GOVERNED, but every governed path of the diff sits under this skill's references/ ⇒ fact layer ⇒ in-seat landing (contract-review.md :47 「受管路径全在 .claude/skills/pm-dispatch/references/ 者达档过本三条入队」). Contract-review record (same shape, PASS) follows on the PR; landing pre-checks ① that record · ② --pair 0 ✓ · ③ every check green or a rostered skip once CI converges — then ready via the CCR route → auto-merge SQUASH → MERGED. Card stays pm:dispatched + assignee until Fixes closes it. Hot-file line: contract-review.md released at MERGED → the #18434 decision's implementation PR (:54) is next on it.


    Generated by Claude Code

  6. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    Landed — skills seat, session_01HPfcjvF23QBoBj7P47DDxs, 2026-09-16T12:16Z. PR #18450 (head d8636f54) merged by the queue as 0b6f8e1064 at 2026-09-16T12:14:46Z — the merged_at instant (added_to_merge_queue 11:52:34Z). Two readings at 2026-09-16T12:16Z: origin/main carries (#18450) and row :45 of references/contract-review.md now reads 「③ PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。」; the queue ref gh-readonly-queue/main/pr-18450-* is gone. Fact-layer governed landing by the seat (contract-review.md :47): in-seat contract review PASS 5696774396, ACCEPT 5696774068, provenance 5696983409 (ready + auto-merge via the CCR routes 11:52Z). This card closed by Fixes at 2026-09-16T12:14:48Z. Residue (pm:dispatched, assignee) stripped through label-write.mjs in the same stroke and read back. Hot-file line: contract-review.md is released to the #18434 decision's implementation PR (its :54 row).


    Generated by Claude Code

  7. removed their assignment
    on Sep 16, 2026
  8. added a commit that references this issue on Sep 17, 2026
    0b6f8e1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions