Skip to content

finding(os-dev.md): the labelling clause says CI does not label, but objectui runs actions/labeler with sync-labels: true on every push — a whole-set replace the clause does not name #19052

Description

@os-sales

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

  1. 「不是 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.
  2. 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

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions