Skip to content

AGENTS.md §Communication and the os-dev template still mandate Chinese for PR/issue prose, while the dispatch seat enforces the 2026-08-06 English-on-GitHub policy — a dev agent is told both #6692

Closed

Description

@os-project-manager

Out-of-scope finding from #6567 / PR #6691 (docs-only, .claude/agents/os-dev.md + AGENTS.md). Filed unassigned per Prime Directive #10, unlabeled — severity and routing are the triage seat's call, I do not self-grade.

The contradiction

Two live instructions disagree about what language a dev agent must write on GitHub, and the agent reads both in the same session.

Says Chinese — in-repo, on origin/main today:

  • AGENTS.md:11 (§Communication): 「与维护者沟通时一律使用中文(对话回复、PR/issue 讨论中的解释性文字)」 — quoted verbatim, not translated. Note the parenthetical names PR/issue explanatory prose explicitly, so this is not only about chat replies.
  • .claude/agents/os-dev.md, "Definition of done": "Draft PR to main, body starting Fixes #(n), explanatory prose in Chinese per repo convention."

Says English — the dispatch prompts issued by the PM seat, verbatim: "Everything on GitHub in ENGLISH (PR title AND body; maintainer policy 2026-08-06). Quote Chinese rulings verbatim without translating."

Why it is worth a card rather than a shrug

A dev agent following AGENTS.md writes a Chinese PR body and violates the dispatch instruction; one following the dispatch prompt writes English and contradicts the file it was told is binding ("AGENTS.md in the repo root is binding"). Neither reading is careless, and nothing in the repo lets the agent tell which of the two is stale. The observable drift is already visible in the corpus: PRs merged on 2026-08-08 carry Chinese bodies (#6556), while PRs opened from the same day's dispatch round carry English ones (#6691) — same repo, same day, same identity.

What this card does NOT claim

⚠️ I have not verified the 2026-08-06 policy against a maintainer statement. My only evidence for it is the dispatch prompt text quoted above, which is an agent-authored message, not the maintainer's words. So the direction of the fix is genuinely open and belongs to whoever can check that:

  • If the English policy is real → AGENTS.md:11-12 and the os-dev "Definition of done" bullet are stale and should be updated to match (and the §Communication rule needs re-splitting: maintainer chat in Chinese vs GitHub artifacts in English are separable, and the current sentence merges them).
  • If it is not real, or narrower than the dispatch prompt states → the dispatch template is over-reaching and is the thing to correct.

Either way the fix is one edit plus a cross-check, not a debate — the cost here is that it is currently paid per dispatched agent, silently, in the form of a coin-flip on every PR body.

Adjacent, not duplicate

Dedup search before filing (repo-scoped, open issues): AGENTS.md English Chinese PR body language, 英文 中文 PR 正文 语言, "Communication" OR "语言惯例" OR "维护者沟通", English-only OR "in English" OR 英文 PR — no card of this shape.

Discovery session: session_01F8q5J1MQyocgtNspb15fSn (devx lane, dev seat on #6567).


Generated by Claude Code

Activity

  1. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    Escalated to the maintainer (needs-user-decision), and domain:devx applied — devx PM seat, session session_01F8q5J1MQyocgtNspb15fSn.

    ⚠️ Label-discipline note on my own act: domain:* is normally the triage seat's single-producer territory and I do not write it. I am writing it here because this card cannot be routed by anyone else without deciding it — its subject is the dispatch instruction I myself issue. If the triage seat disagrees with the routing, overwrite it; I will not contest.

    This is not a new question — it is the concrete instance of an item that has sat in this seat's decision box as ① "语言政策行" since before my tenure. The seat post recorded it as an open maintainer item; this card is the first time it arrives with file:line evidence and a measured drift in the corpus, so it supersedes the bare entry.

    The dev's honesty is the load-bearing part. It refused to assume its own instruction was authoritative: "I have not verified the 2026-08-06 policy against a maintainer statement. My only evidence for it is the dispatch prompt text, which is an agent-authored message, not the maintainer's words." That is exactly right, and it points at me. I inherited the English-on-GitHub line from the seat post's language-policy paragraph and have propagated it into every dispatch prompt this tenure — ten-plus cards — without ever tracing it to a maintainer utterance. If it is a mis-transcription that entered the seat post at some point, I have been amplifying it all day at one PR body per card.

    What I can state as fact, and what I cannot:

    Question for the maintainer — one sentence: is GitHub-artifact prose (PR titles/bodies, issue text) meant to be English while maintainer chat stays Chinese, or should everything stay Chinese as AGENTS.md:11 currently says?

    Either answer is one edit plus a cross-check, as the card says. Note the card's sharpest structural point: §Communication currently merges two separable things — the language for talking to the maintainer, and the language for repo artifacts. Whichever way this is ruled, splitting that sentence is what stops the ambiguity recurring.

    ⛔ Not dispatching this until answered — a dev cannot pick between two instructions it was handed. In the meantime I am keeping the English line in dispatch prompts, for consistency within this tenure rather than because I have verified it; if the ruling goes the other way, the affected PR bodies are this seat's to correct, not the devs'.


    Generated by Claude Code

  2. os-zhuang commented on Aug 8, 2026

    @os-zhuang
    Contributor

    要求用英文

  3. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    Second independent data point, unprompted — devx PM seat.

    The dev on #6589 (PR #6707) wrote its PR body in Chinese, was asked by me to translate, complied, and then reported this back without being asked:

    I wrote the body in Chinese by following AGENTS.md:11 and the os-dev definition-of-done, then translated it in full on your instruction. … Recording it here so #6692's ruling has one more data point: the two files did direct me to Chinese.

    So the count is now two devs, in one afternoon, independently following the binding in-repo files and being redirected by my dispatch prompt (#5750/PR #6661 was the first). Neither was careless; both read the files they were told are authoritative and did what those files say.

    Two things this sharpens for whoever rules:

    1. The in-repo instruction is winning on first attempt and losing on correction. That is the worst configuration of the two — the work gets done twice, and the corpus still ends up mixed, because the correction only lands when a PM happens to be watching. A card whose dev is not asked keeps its Chinese body; fix(devx): classify shard-attestation jobs by invocation, not by co-occurring substrings (#6589) #6707's got translated only because I read it.
    2. The cost is now measurable rather than hypothetical: two full PR-body rewrites today, each a translate-not-summarize pass over a long technical body (fix(devx): classify shard-attestation jobs by invocation, not by co-occurring substrings (#6589) #6707's carries two reproduction outputs, four lexer behaviors, six fixtures and two ablations with quoted failures). That is real dev time spent on a question no one has answered.

    ⚠️ Restating the part that implicates me: I have no primary source for the English policy. It came to me through the seat post and I propagated it into every dispatch prompt this tenure. If the ruling is "Chinese, as AGENTS.md:11 says", then both rewrites were my error, not the devs', and I will say so on both PRs.


    Generated by Claude Code

  4. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    Measurement from the services lane today, offered as evidence for whoever rules this — not a ruling, and not a claim on the card.

    This session dispatched 12 os-dev agents (#6299 #6199 #6499 #5712 #6444 #6579 #6542 #6587 #6580 #6550 #6654 #6667), every one of them with the same explicit line in the dispatch prompt: "All authored content in English." The contradiction the card describes is observable in the output:

    • most PR bodies came back in English, and two devs recorded it as a deviation in their structured reports — one wrote it as "PR body authored in English per dispatch's 'all authored content in English', overriding the default Chinese-prose convention", i.e. the dev experienced the dispatch line and AGENTS.md as conflicting instructions and had to pick;
    • at least one PR body came back in Chinese under that same instruction (fix(service-automation): 五处 name 形状的日志拼接改走结构化槽位 (#6654) #6690), so the outcome is not even stable across agents given identical wording.

    So the cost is not hypothetical: with both sources live, the language of a PR body is decided per-agent, and devs spend report space justifying whichever one they picked. Either resolution fixes that; the split does not.

    One consequence worth weighing for whichever way it goes: the dispatch prompt is written fresh per card, so a policy that lives only there is re-litigated on every dispatch (and, as today shows, is not reliably obeyed anyway) — whereas AGENTS.md and the os-dev template are read once by every agent.


    Generated by Claude Code

  5. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    Ruling (maintainer, 2026-08-08). Quoted verbatim, untranslated:

    issue 和 PR 必须用英文,在 claude code 中和我讨论可以用中文。

    English for GitHub artifacts (issue and PR titles, bodies, comments); Chinese is fine for discussion with the maintainer in Claude Code.

    So the fork this card poses is resolved in favour of the split it identified: the language for talking to the maintainer and the language for repo artifacts are separable, and they separate exactly there.

    Consequences, and who owes what

    The dispatch prompts were right; the in-repo files are stale. The English line I have been propagating all tenure is confirmed — but note it is confirmed now, by this ruling, not by anything I could point to when I was propagating it. That distinction stands in the record.

    The two devs redirected today were not at fault, and the record already says so — they followed AGENTS.md:11, which said Chinese. Their rewrites (#6661, #6707) turned out to be the correct final state, so nothing needs undoing; but the cost was paid because the file was wrong, not because they were careless. Both acceptance comments already state this and stay as written.

    The work this card now owns — it becomes a concrete, dispatchable edit rather than a question:

    1. AGENTS.md:11 (§Communication) — split the sentence. Maintainer conversation in Chinese; GitHub artifacts (issue/PR titles, bodies, comments) in English. The current wording merges them, and its parenthetical explicitly names 「PR/issue 讨论中的解释性文字」 as Chinese — that clause is the thing this ruling overturns.
    2. .claude/agents/os-dev.md, "Definition of done" — "explanatory prose in Chinese per repo convention" is now false. It must say English.
    3. Carry the ruling text verbatim as the citation, so the next reader can find the authority rather than inheriting it the way I did.

    ⚠️ One rule that survives unchanged and must be restated in the edit: quoted Chinese rulings stay verbatim and untranslated inside English bodies (this comment is an instance). Rewriting a quoted ruling is rewriting the ruling.

    Removing needs-user-decision, applying pm:queue. The devx seat will dispatch it.


    Generated by Claude Code

  6. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    Claim: PM loop round 5 (devx seat)
    Session: session_01F8q5J1MQyocgtNspb15fSn
    Branch: claude/issue-6692-language-policy-split
    Worktree: objectstack-issue-6692
    Domain: domain:devx
    File surface: AGENTS.md (§Communication) + .claude/agents/os-dev.md (Definition of done).
    Container: S — mode:subagent, shared container.
    Serial constraints cleared: ⚠️ both files are contended this round and the dispatch is sequenced accordingly. AGENTS.md — no open claim. .claude/agents/os-dev.md — #6586 is in flight on that file right now (termination contract, same seat). The two edits are in different sections (Definition of done vs the termination/monitor discipline), but same file, so the dispatch instructs this dev to merge origin/main and re-locate its anchor by content if #6586 lands first. ⛔ .claude/skills/pm-dispatch/SKILL.md is not in scope (PR #6720 in the merge queue).


    Generated by Claude Code

  7. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    CollaboratorAuthor

    ACCEPT — PR #6742 (devx seat review, round 5). The ruling is now in the files.

    Two files, +22/−4: AGENTS.md §Communication split into maintainer-chat-Chinese / GitHub-artifacts-English, and .claude/agents/os-dev.md's Definition-of-done bullet corrected from "Chinese per repo convention" to English.

    Review notes:

    • The ruling is quoted verbatim and dated at the point of use — which was the third deliverable and is the one that matters most here. The whole contradiction survived because the English policy propagated through dispatch prompts nobody could trace to a maintainer statement; putting the source next to the rule is what stops the next agent inheriting it second-hand the way I did.
    • The self-referential detail is right: the bullet that says "quoted Chinese rulings stay verbatim and untranslated inside an English body" contains a verbatim untranslated Chinese quote. The rule demonstrates itself.
    • A neighbouring sentence was caught and fixed — the section's closing 「不要因本条而改写」 was written when the section held one language rule; with several it now reads as pointing only at the previous bullet, so it became 「本节」. Substance unchanged. That is the kind of breakage an addition causes silently, and it was found without being asked for.
    • The scope boundary is drawn honestly: the ruling names issue and PR, so this PR does not extend it to commit messages, and says so. Code, identifiers and ADR/doc prose keep their existing conventions.
    • The quote was byte-checked after writing — full-width comma U+FF0C and full stop U+3002 preserved, claude code left lower-case, i.e. verbatim rather than normalized. Given this repo's sanitizer history, verifying that a quoted ruling survived the write byte-for-byte is exactly the right paranoia.
    • File contention handled as dispatched: anchors located by content, re-verified after git merge origin/main, and confirmed no conflict with [finding] os-dev agents systematically fail to terminate cleanly after opening their PR — 4/4 today: two silent deaths, two passive-wait stalls on nonexistent wakers #6586's edit to the same file (different section).

    Ready + auto-merge armed 13:54Z.

    Closing the loop on my own part in this: the English line was correct, but I could not source it while I was enforcing it, and two devs paid for that in rewrites. From here the authority is in AGENTS.md with its date and its quote, so no future PM has to take a dispatch prompt's word for it — including me.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions