Dedupe words: os-dev.md labels · actions/labeler sync-labels · setLabels replaces · 打标签是你的步骤 · size-labeler clause
Surfaced by the os-dev seat delivering objectui#9603, which declined to write labels and gave a measured reason; the readings below were re-taken at source by the dispatching domain:ui seat 3 on both repositories before filing. ⛔ Not graded, ⛔ not routed.
⚠️ .claude/agents/os-dev.md is a governed, protocol-semantic surface. This is filed for a maintainer-approved edit and ⛔ was not repaired seat-side. ⚠️ Related but not a duplicate: objectstack#19002 is about a PM seat overriding this clause in dispatch briefs — the wrong act against a clause assumed correct. This card is about the clause's own premise, for one sister repo.
The clause
.claude/agents/os-dev.md:301, verbatim:
本仓库:标签是真实机制,打标签是你的步骤、不是 CI 的,PR 一开出就打。
and its companion at :306:
size-labeler 的整组 PUT 会抹掉正确的加法写;收尾一律读回、清单进报告;标签没了就重挂。
What objectstack-ai/objectui actually runs — read on its origin/main
Every workflow in .github/workflows/ was scanned for a label write. Exactly one writes labels:
.github/workflows/labeler.yml
- triggers:
pull_request: types: [opened, synchronize, reopened]
- step:
uses: actions/labeler@v7 with sync-labels: true, configuration-path: .github/labeler.yml
- and the workflow's own comment states the mechanism: "The action applies the whole set in ONE
setLabels call"
⇒ in this repository CI does label, and it labels by REPLACEMENT, on every push to every open PR.
The two halves that do not hold here
- 「不是 CI 的」 is false for objectui. Labels arrive from CI on
opened and again on every synchronize. Measured live on PR objectui#9901, which this seat dispatched and to which the dev wrote zero labels: it carries package: types, tests — exactly what .github/labeler.yml derives from its paths.
- The
:306 remedy is defeated by the trigger, not just by the PUT. It prescribes reading back at the end and re-applying anything stripped. That survives a single whole-set write; it does not survive an action that re-runs setLabels on the next push, because the re-applied label is clobbered again and the seat is no longer looking. ⚠️ And the clause names size-labeler as the clobberer — objectui has no size-labeler; its clobberer is actions/labeler@v7, which the clause does not name.
Why this is worth the maintainer's edit rather than a seat's workaround
⭐ The dev's own conclusion is the point: it chose to write nothing and to read back instead, and the read-back showed the labels it would have written were already correct. ⇒ following the clause literally in this repo buys a write that is silently reverted, and the reported label list a reviewer reads may be a snapshot that no longer holds. A seat cannot fix that locally without contradicting a role-file clause — 无条件条款只住角色文件,冲突时它胜、错了修那里 — which is exactly why it is filed here.
⛔ Not measured, and named so its absence is not read as clean
Whether objectstack-ai/objectstack itself runs a whole-set labeler (the clause says 「本仓库」, and this seat read only objectui's workflows), and whether any OTHER sister repo the roster covers matches the clause as written. The claiming seat should measure per repository before rewriting a sentence that says 「本仓库」.
⛔ Not deduped by this seat — the filer attaches the words and triage runs them.
Generated by Claude Code
Dedupe words:
os-dev.md labels·actions/labeler sync-labels·setLabels replaces·打标签是你的步骤· size-labeler clauseSurfaced by the
os-devseat delivering objectui#9603, which declined to write labels and gave a measured reason; the readings below were re-taken at source by the dispatchingdomain:uiseat 3 on both repositories before filing. ⛔ Not graded, ⛔ not routed..claude/agents/os-dev.mdis a governed, protocol-semantic surface. This is filed for a maintainer-approved edit and ⛔ was not repaired seat-side.The clause
.claude/agents/os-dev.md:301, verbatim:and its companion at
:306:What
objectstack-ai/objectuiactually runs — read on itsorigin/mainEvery workflow in
.github/workflows/was scanned for a label write. Exactly one writes labels:.github/workflows/labeler.ymlpull_request: types: [opened, synchronize, reopened]uses: actions/labeler@v7withsync-labels: true,configuration-path: .github/labeler.ymlsetLabelscall"⇒ in this repository CI does label, and it labels by REPLACEMENT, on every push to every open PR.
The two halves that do not hold here
openedand again on everysynchronize. Measured live on PR objectui#9901, which this seat dispatched and to which the dev wrote zero labels: it carriespackage: types,tests— exactly what.github/labeler.ymlderives from its paths.:306remedy is defeated by the trigger, not just by the PUT. It prescribes reading back at the end and re-applying anything stripped. That survives a single whole-set write; it does not survive an action that re-runssetLabelson the next push, because the re-applied label is clobbered again and the seat is no longer looking.actions/labeler@v7, which the clause does not name.Why this is worth the maintainer's edit rather than a seat's workaround
⭐ The dev's own conclusion is the point: it chose to write nothing and to read back instead, and the read-back showed the labels it would have written were already correct. ⇒ following the clause literally in this repo buys a write that is silently reverted, and the reported label list a reviewer reads may be a snapshot that no longer holds. A seat cannot fix that locally without contradicting a role-file clause — 无条件条款只住角色文件,冲突时它胜、错了修那里 — which is exactly why it is filed here.
⛔ Not measured, and named so its absence is not read as clean
Whether
objectstack-ai/objectstackitself runs a whole-set labeler (the clause says 「本仓库」, and this seat read only objectui's workflows), and whether any OTHER sister repo the roster covers matches the clause as written. The claiming seat should measure per repository before rewriting a sentence that says 「本仓库」.⛔ Not deduped by this seat — the filer attaches the words and triage runs them.
Generated by Claude Code