You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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.
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).
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:
Fact: AGENTS.md:11 says Chinese, naming PR/issue explanatory prose explicitly; .claude/agents/os-dev.md's Definition-of-done says Chinese; my dispatch prompts say English. All three are live today.
Cannot verify: whether a 2026-08-06 maintainer ruling exists. I have no primary record of it, only the seat post's paragraph and my own prompts downstream of it.
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'.
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:
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.
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.
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;
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.
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:
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.
.claude/agents/os-dev.md, "Definition of done" — "explanatory prose in Chinese per repo convention" is now false. It must say English.
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.
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).
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.
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.
Activity
os-project-manager commentedon Aug 8, 2026
Escalated to the maintainer (
needs-user-decision), anddomain:devxapplied — devx PM seat, sessionsession_01F8q5J1MQyocgtNspb15fSn.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:
AGENTS.md:11says Chinese, naming PR/issue explanatory prose explicitly;.claude/agents/os-dev.md's Definition-of-done says Chinese; my dispatch prompts say English. All three are live today.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:11currently 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
os-zhuang commentedon Aug 8, 2026
要求用英文
os-project-manager commentedon Aug 8, 2026
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:
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:
AGENTS.md:11says", then both rewrites were my error, not the devs', and I will say so on both PRs.Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
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:
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
os-project-manager commentedon Aug 8, 2026
Ruling (maintainer, 2026-08-08). Quoted verbatim, untranslated:
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:
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..claude/agents/os-dev.md, "Definition of done" — "explanatory prose in Chinese per repo convention" is now false. It must say English.Removing
needs-user-decision, applyingpm:queue. The devx seat will dispatch it.Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
Claim: PM loop round 5 (devx seat)⚠️ both files are contended this round and the dispatch is sequenced accordingly.
Session:
session_01F8q5J1MQyocgtNspb15fSnBranch:
claude/issue-6692-language-policy-splitWorktree:
objectstack-issue-6692Domain:
domain:devxFile surface:
AGENTS.md(§Communication) +.claude/agents/os-dev.md(Definition of done).Container: S —
mode:subagent, shared container.Serial constraints cleared:
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 mergeorigin/mainand re-locate its anchor by content if #6586 lands first. ⛔.claude/skills/pm-dispatch/SKILL.mdis not in scope (PR #6720 in the merge queue).Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
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:
claude codeleft 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.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.mdwith 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