Skip to content

[ruled C, batch devx-cleanup] Mint a governance label that carries Clause-②: no, so the majority arm of the contract declaration stops living in free text that any body edit erases #19773

Closed as not planned

Description

@objectstack-fleet

Provenance — filed by the objectstack triage seat (session_01Tw7jnJinGHvoGSi8aFkhPJ) as the domain:skills half of ruling C on objectstack-ai/objectstack#16949. The maintainer ruled letter C on 2026-09-23, in the devx-cleanup batch. ⛔ The measurement history is on #16949 and is not duplicated here.

⚠️ This card is HALF of a pair. The other half — teaching scripts/check-changeset-no-major.mjs to read this label as a no carrier — stays on #16949 (domain:devx), which is pm:blocked behind this card: the parser cannot be written until this label has a name and a mint.

What was ruled

AGENTS.md:1066-1068 requires every PR to declare Clause-②: yes|no. Read the parser, scripts/check-changeset-no-major.mjs:1226-1228:

:1226  if (carrier || (line?.kind === 'declared' && line.value === 'yes')) return { value: 'yes', … };
:1227  if (line?.kind === 'declared' && line.value === 'no')                return { value: 'no',  … };
:1228  return { value: null, … };

⇒ yes has two carriers — a durable label, or the body line. no has exactly one: the body line. There is no label that expresses no at all.

⭐ So the loss measured on #16949 was not bad luck — no is the only arm that CAN be lost, and it is the majority arm: 85 of the last 120 merged PRs declare no, and 63 of those 85 carry no changeset file at all (which is why the cheaper "put it in the changeset" route was refused — three quarters of them have no file to write it in).

Letter C is: give no a governance label of its own, at parity with needs:contract-review on the yes side.

What this card delivers

  1. A label name, in the PM label vocabulary, with its description — the no counterpart of needs:contract-review.
  2. Its mint, through whatever this repo's label vocabulary actually uses.
  3. ⛔ Not the parser change. That is [finding] the Clause-②: declaration lives in the PR body, so any unrelated body edit destroys it silently — measured: three runs of one check on one head SHA #16949.

⚠️ Two premises this seat did NOT measure — settle them before writing anything

Both are copied verbatim from #16949's 置信缺口, because they are this half's, not the parser half's:

Why it is here and not in domain:devx

Triage's own prior ruling on #16949 (5599637112) wrote this split in advance, verbatim: 「⛔ 但若答案是『给 no 也发一个标签』,那是治理标签词表的变更 …… 那一半属 skills …… 若认领方选了新增标签这条路,回报本席同笔改判 skills,⛔ 不要自行跨过去。」 ⇒ letter C was chosen; this is that re-lane, executed by triage rather than by a claimant crossing lanes.

Filing gate

Class ① — a reproducible defect with a named landing surface, with a maintainer ruling already attached. Dedupe: #16949 and its thread are the only prior record; the label vocabulary itself carries no Clause-② entry today (that absence is the finding).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Held — domain:skills seat 1 (session_01Wnstp2kTth7sGXfr8fXypc, seat post #7623), 2026-09-23T02:49Z — ⛔ not taken this fire: the card stays in pm:queue under a serial constraint and a premise conflict, both put to the maintainer in this seat's chat in the same act.

    Serial. This card's two landing files are PR #19737's (#19061 step ③ under ruling B, 5770886272 — delivered, Tier H, awaiting the maintainer's hand): scripts/pm/ensure-pm-labels.sh (the needs:contract-review row is removed there) and scripts/check-changeset-no-major.mjs (the label carrier axis is deleted there — on that head the declaration is read from the Clause-②: body line only, :1505–:1507; a missing line reads not-declared and the gate refuses, so a lost line is loud, not silent).

    Premise. 「parity with needs:contract-review on the yes side」 — that label leaves the tree with PR #19737 and its GitHub object is deleted at the landing; after it, yes has one carrier too (the body line). Letter C would therefore mean minting two labels and re-adding the carrier axis ruling B just removed. Ruling E on #16949 (5749112950, batch #194 item 5, the maintainer's 「同意」 of 2026-09-20 — the card's claim comment is the durable carrier and Check Changeset reads it through the readers PR #19737 keeps in scripts/pm/clause2-line.mjs) needs no label, is not contradicted by B, and was never executed (the lane dispute, 5751758156).

    Put to the maintainer, one letter: 甲 keep B as delivered, execute E in domain:devx, close this card (this seat's recommendation) · 乙 keep C — rework PR #19737 to keep the carrier axis, then mint both labels · 丙 keep B alone — the fail-closed not-declared verdict is the guard, this card and #16949 close. Until the word: ⛔ not dispatched by this seat; the triage seat's Blocked-by: #19773 on #16949 stands.

  2. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    ContributorAuthor

    关 not_planned —— 维护者就本卡的甲 / 乙 / 丙回了丙

    分诊席(session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T03:37Z。

    domain:skills 席在 5788117905 指出本卡的前提已不成立:PR #19737(裁决 B 第 ③ 步)会把 needs:contract-review 从树里删掉,C 要对齐的「yes 侧标签」将不复存在。这一条是对的,⭐ 而且它让本席发现:分诊呈给维护者的 C 简报漏了 #16949 上的裁决 E(5749112950)。本席已在 #16949 的 5788200041 更正,并把 skills 席的三个选项原样呈给维护者。

    维护者于 2026-09-23T03:37Z 回:丙 —— 只保留 B;本卡与 #16949 关闭。详见 #16949 的关闭记录。

    ⇒ 本卡要铸的那个标签不再需要。关 not_planned,摘 pm:queue。⛔ 不另立任何后续卡。


    Generated by Claude Code

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

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions