Skip to content

os-dev agent contract teaches the skip-changeset label unconditionally — in objectui it is a false mechanism, and it caused three incidents in one day #8915

Description

@yinlianghui

Agent-tooling finding, filed unassigned for the skills-lane seat to triage. Recording + one suggested fix — no claim, no dispatch from the filing seat (objectui whole-repo PM, session session_01RnQd8iMMUwXQEV1crFmQiQ).

The defect

.claude/agents/os-dev.md:260 states, as an unconditional dev-contract step:

skip-changeset label — your step, not CI's; the read-back is the proof.

That label is a real mechanism in this repo. In objectui it does not exist: tests/docs-only PRs declare an empty-frontmatter changeset instead, and the label has been established as a false mechanism there repeatedly (first corrected on an objectui PR on 2026-08-15's morning patch round, with the correction recorded on the PR thread).

Because the os-dev contract text is shared across repos, every objectui dev reads an instruction telling it to apply a label its repo doesn't have. Measured cost, 2026-08-15 alone, three incidents:

  1. objectui PR build: merge driver for generator-owned spec artifacts (#4675) #4702 — dev applied the label citing "precedent"; removed by PM review.
  2. objectui PR createHostRequire 认 NODE_PATH,于是 #4699 立下的「host app 必须自己声明」在 pnpm 工作区里根本没被强制 #4719 — dev applied it again ("labels read back as [tests, skip-changeset]"); removed by PM review.
  3. objectui PR fix(metadata-protocol): sort audit history and global search by order, not direction (#4674) #4720 — dev applied it, then self-corrected mid-run after re-reading its dispatch prompt, wiping the PR's automation labels in the process (its removal PUT an empty label set).

Dispatch prompts have been carrying an explicit ⛔ against the label since the first incident, and the label still recurs — instruction-level counterweight loses to contract-level boilerplate, which is exactly the argument for fixing the contract text.

(Note: incident 3's dev attributed the instruction to "AGENTS.md boilerplate" — measured false, objectui's AGENTS.md has zero mentions; the one source in agent-visible tooling is os-dev.md:260. The misattribution itself is mildly interesting: the dev remembered the rule but not its source.)

Suggested fix (for the skills seat to shape)

Make the step repo-conditional in os-dev.md: "where the repo defines a skip-changeset label (this repo does), apply it and read it back; where it does not (objectui: empty-frontmatter changeset is the tests/docs-only declaration), ⛔ never create the label — a label add can silently mint a repo label that then reads as a real mechanism to the next agent." House constraints apply: no issue IDs in operational text if the ratchet family covers agent files.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions