Repository navigation
[Decision] An English docs correction leaves its locale siblings asserting the corrected-away claim — #59 says delete them, the seat post says leave them, and #68 blocks the pass that would fix them #256
Description
Activity
Correction to my own framing above — it overstated the mechanism, and the difference matters for the decision.
I wrote that "Every English correction this lane lands creates it." That is wrong. Measured on
8e665c7, the commit immediately before PR #252 landed:File at 8e665c7(pre-fix)Carried the stale forecast? data-sources.mdx(en)yes — 2 hits data-sources.ja.mdxyes — already So the seven siblings were already wrong before my fix. A translation is derived from its English source, so when the English page carries a false claim, its siblings carry the same false claim from birth. PR #252 did not create eight bad pages — it fixed one of eight copies of a defect that was already there, and made the other seven visible by leaving them provenance-stale.
What changes, and what does not:
- ⬇️ Urgency drops. This lane is not generating new damage with each correction. Nothing got worse today.
- ⬇️ The "we broke it, we should fix it" argument is void. It was broken on arrival.
- ➡️ The decision itself is unchanged and still needed. The question was never who caused it — it is whether a locale sibling asserting a corrected-away claim should be deleted (English fallback renders correctly) or left for a pass that The ownership check is inert on main until TRANSLATION_BOT_LOGIN is set #68 currently blocks. The Deploy section documents a retired open-source edition — rewrite it for the commercial runtime #59 and this seat post still point opposite ways, and that conflict is still resolved ad hoc per PR.
- ⬇️ [finding]
extend-existing-systems.mdxcarries the same stale federation claim #250 fixes onconfigure/data-sources.mdx#254's sequencing pressure drops.extend-existing-systems.mdxhas seven siblings and they already carry the claim, so dispatching [finding]extend-existing-systems.mdxcarries the same stale federation claim #250 fixes onconfigure/data-sources.mdx#254's English fix ahead of this decision makes nothing worse. I am no longer treating [finding]extend-existing-systems.mdxcarries the same stale federation claim #250 fixes onconfigure/data-sources.mdx#254 as waiting on this card.
The four-quadrant reading above holds on its own terms — the long-term axis was about having a criterion at all, not about attributing blame — but the business-need axis should be read one notch cooler than I first wrote it.
Recording this rather than quietly editing the body: the original claim is what a reader would have decided against, and I would rather be visibly corrected than silently accurate. The root error is the same one this lane keeps paying for — I inferred the causal direction from the after-state instead of reading the before-state, which is one
git showat the parent commit.
Generated by Claude Code
objectstack-fleet commented
on Oct 5, 2026 ContributorMore actionsRuling: batch #1 item 4 · letter A · maintainer 「同意」 2026-10-05T06:50Z
The
repo:objectosseat (objectstack-ai/objectstack#9831, sessionsession_01FeA1nwBz1ohH65dvffUGKr) presented this card in the director batch format at the maintainer's request. The maintainer answered the batch with 「同意」.A, the criterion: an English correction that removes or reverses a capability assertion deletes that page's locale siblings in the same PR. Wording drift and number drift (a port number, a timing) stay with the translation pass, as
AGENTS.mdstep 2 says. This narrows step 2 and extends step 3's own reasoning ("a translation of a page that was rewritten to assert something different is worse than none"). It overturns neither, and it matchesdocs/TRANSLATION.mdrule 3 and #59's ruling. Option B (always delete), C (always leave) and D (wait for #68) are rejected.Measured on
main@7612ffe: 14 locale files still tell readers that external datasource federation is planned and unshipped.content/docs/configure/data-sources.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdxcontent/docs/extend-existing-systems.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdx
The English sources of both pages no longer say this (#250 / PR #252, #254).
Execution:
- A content PR deletes those 14 files. It carries a contract-review record and lands through the seat.
- A separate governed PR adds the criterion to
AGENTS.mdstep 3 (Tier H). It waits for maintainer approval, with a 维护者速读.
PR #252's sentence that "the next translation pass fixes" the siblings is superseded by this ruling.
needs-user-decision→pm:queue.
Generated by Claude Code
- added and removed
on Oct 5, 2026 objectstack-fleet commented
on Oct 5, 2026 ContributorMore actionsClaim: PM loop,
repo:objectosseat, R3
Session:session_01FeA1nwBz1ohH65dvffUGKr
Account:hotlong(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/pm-dispatch-objectos-ju9td1. This is the session's one designated push branch. Its remote head1430ec1203b6cf1a6e6519673120143b417913d3is PR #289, already squash-merged as7612ffe, so the branch is restarted fromorigin/main.
Worktree:objectos-issue-256
Domain: n/a (single-lane repo)
Seat:repo:objectos(objectstack-ai/objectstack#9831)
File surface: deletion of exactly 14 files,content/docs/configure/data-sources.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdxandcontent/docs/extend-existing-systems.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdx. Nothing else (stop on breach; explain in the report).
Container & model: S, mechanical.mode:subagent,model: default.dispatch-gates.mjs --repo objectstack-ai/objectos --tieron these paths (objectstack088428fb) answers "no path-derived mandate". The deletion is mechanical, but the dev must confirm the claim reversal on each file and check the build's fallback, so this runs at default rather than floor.
Clause-②: no
Thread-read: 5989567068
Serial constraints cleared: no open PR touches these files; the five open PRs are dependabot bumps. Nothing else is dispatched. #171 and #167 are queued behind this card on the same branch, as a transport limit.Scope is this ruling's part 1 only: ruling
5989567068, item 4, letter A. Part 2, the governedAGENTS.mdstep-3 amendment, is a separate later dispatch.
Generated by Claude Code
objectstack-fleet commented
on Oct 5, 2026 ContributorMore actionsos-dev-report
{
"issue": 256,
"status": "done",
"branch": "claude/pm-dispatch-objectos-ju9td1",
"pr": "#290",
"session": "session_01FeA1nwBz1ohH65dvffUGKr",
"premise_still_valid": true,
"final_commit": "f6dd7a0d853eade0480b8116a3d1b5f2bb1d9abb",
"summary": "Part 1 of ruling 5989567068 (letter A): draft PR #290 deletes exactly the 14 named locale siblings and changes nothing else. First line: Part of #256. All four Zone-2 assumptions held when measured. CI on f6dd7a0: build, Ownership & freshness and Node floor all success; Deploy docs skipped.",
"gates": {
"measured_on": "f6dd7a0 (git status empty; worktree base 7612ffe)",
"local": [
{
"gate": "pnpm turbo run build --force --concurrency=2 (os-verify-lock)",
"exit": 0,
"verdict": "VERDICT command-exit 0; Tasks: 1 successful, 1 total; Cached: 0 cached, 1 total"
},
{
"gate": "pnpm turbo run test --force --concurrency=2 (os-verify-lock)",
"exit": 0,
"verdict": "VERDICT command-exit 0; Tasks: 1 successful, 1 total (@objectos/ci-scripts:test); Cached: 0 cached, 1 total"
},
{
"gate": "pnpm turbo run type-check --continue --force --concurrency=2 (os-verify-lock; not on the dispatch list, CI runs it)",
"exit": 0,
"verdict": "VERDICT command-exit 0; Tasks: 1 successful, 1 total; ✓ Types generated successfully"
},
{
"gate": "node .github/scripts/check-locale-surface.mjs",
"exit": 0,
"verdict": "Oracle 383 docs entries; sitemap.xml 395/395, unexpected 0, missing 0, duplicated 0; ✓ every advertised URL has a source file and every source file is advertised; …"
},
{
"gate": "node .github/scripts/check-translations.mjs",
"exit": 0,
"verdict": "✓ translations gate passed; translations 318 at 7612ffe, 304 at f6dd7a0; per translated locale stale -2, missing +2 (reported, not blocking)"
},
{
"gate": "node apps/docs/scripts/gen-zh-hant.mjs --check",
"exit": 0,
"verdict": "✓ zh-Hant: 71 generated file(s) match the zh-Hans sources byte for byte. (73 at 7612ffe)"
},
{
"gate": "node .github/scripts/check-translation-ownership.mjs --actor "objectstack-fleet[bot]" --files changed.txt (git diff --name-only 7612ffe...HEAD, 14 paths)",
"exit": 0,
"verdict": "⚠ TRANSLATION_BOT_LOGIN is not set — ownership is not enforced yet. This PR touches 14 translation artifact(s) and 0 other file(s)."
},
{
"gate": "node .github/scripts/check-translation-output.mjs --self-test",
"exit": 0,
"verdict": "✓ self-test: 29 rule case(s), 9 split case(s) and 5 derived-locale case(s) …"
},
{
"gate": "node .github/scripts/check-translation-output.mjs --files changed-output.txt",
"exit": 0,
"verdict": "blocking on 14 changed translation(s); ✓ translation output gate passed (127 pre-existing finding(s) reported)"
}
],
"ci_on_f6dd7a0": {
"build": "success (steps: Generated zh-Hant is current, type-check, build, Locale surface, test, Worker package + size budget, preview smoke-check all success; Upload the Worker bundle skipped)",
"Ownership & freshness": "success (Ownership, Freshness, Output validator self-test, Output all success)",
"Node floor": "success",
"Deploy docs": "skipped"
}
},
"measurements": {
"stale_line_per_file": {
"note": "Quoted from 7612ffe. Line breaks shown as spaces; the ADR-0015 URL shortened to (…). pattern_hits = lines matching ADR-0015, Proposed or Propuesto (seat said 1-3; measured 1-2).",
"files": [
{
"file": "content/docs/configure/data-sources.de.mdx",
"lines": "245-246",
"quote": "in aktiver Konzeption (Status: Proposed). Geplant, noch nicht ausgeliefert:",
"pattern_hits": 2
},
{
"file": "content/docs/configure/data-sources.es.mdx",
"lines": "239",
"quote": "(estado: Propuesto). Previsto, pero aún no disponible:",
"pattern_hits": 2
},
{
"file": "content/docs/configure/data-sources.fr.mdx",
"lines": "250",
"quote": "(statut : Proposed). Prévu, pas encore livré :",
"pattern_hits": 2
},
{
"file": "content/docs/configure/data-sources.ja.mdx",
"lines": "165",
"quote": "(ステータス: Proposed)の下で活発に設計中です。計画されている、まだ出荷されていないもの:",
"pattern_hits": 1
},
{
"file": "content/docs/configure/data-sources.ko.mdx",
"lines": "165",
"quote": "(상태: Proposed) 아래에서 활발히 설계되고 있습니다. 계획되어 있지만 아직 출시되지 않은 것들:",
"pattern_hits": 1
},
{
"file": "content/docs/configure/data-sources.zh-Hans.mdx",
"lines": "198",
"quote": "下积极设计中(状态:Proposed)。计划中、尚未发布的内容:",
"pattern_hits": 2
},
{
"file": "content/docs/configure/data-sources.zh-Hant.mdx",
"lines": "199",
"quote": "下積極設計中(狀態:Proposed)。計劃中、尚未釋出的內容:",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.de.mdx",
"lines": "98-100",
"quote": "eingebaute Sicherheits-Gates — ist in aktiver Konzeption unter ADR-0015 (Status: Proposed). Bis es soweit ist, ist der dokumentierte Weg —",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.es.mdx",
"lines": "97-99",
"quote": "propiedad externa, y barreras de seguridad integradas — está en diseño activo bajo ADR-0015 (estado: Propuesto). Hasta que llegue, el camino documentado —",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.fr.mdx",
"lines": "98-100",
"quote": "garde-fous de sécurité intégrés — est en cours de conception active sous ADR-0015 (statut : Proposed). En attendant son arrivée, le parcours documenté —",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.ja.mdx",
"lines": "91-92",
"quote": "は ADR-0015 (ステータス: Proposed)のもとで活発に設計が進められています。それが",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.ko.mdx",
"lines": "89-90",
"quote": "ADR-0015 아래에서 활발히 설계 중입니다(상태: Proposed). 그것이 도착하기 전까지,",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.zh-Hans.mdx",
"lines": "84-85",
"quote": "ADR-0015 下积极设计中(状态:Proposed)。在它落地之前,这条已记录的",
"pattern_hits": 2
},
{
"file": "content/docs/extend-existing-systems.zh-Hant.mdx",
"lines": "85-86",
"quote": "ADR-0015 下積極設計中(狀態:Proposed)。在它落地之前,這條已記錄的",
"pattern_hits": 2
}
]
},
"english_grep": {
"command": "grep -ciE 'not yet shipped|Proposed|Roadmap|planned|in active design'",
"content/docs/configure/data-sources.mdx": "0 hits; line 243 reads "(status: Accepted), ships today: bind objects to tables ObjectOS does" (PR #252, 1034f5f): assertion REVERSED",
"content/docs/extend-existing-systems.mdx": "0 hits; the "Where this is headed" section was deleted by ea9405b = PR #257, the English correction for finding #254: assertion REMOVED"
},
"fallback_route": {
"built_file": "apps/docs/.next/server/app/ja/docs/configure/data-sources.html exists after deletion (also ko, zh-Hans, zh-Hant; ja/ko/zh-Hant extend-existing-systems)",
"served_by_next_start": [
"/ja/docs/configure/data-sources: 200, html lang="ja", title "Data Sources | ObjectOS", "ships today" 2 hits, まだ出荷されていない 0, Proposed 0, canonical https://docs.objectos.ai/docs/configure/data-sources",
"/zh-Hant/docs/configure/data-sources: 200, html lang="zh-Hant", English body ("ships today" 2), 尚未釋出 0, Proposed 0, canonical = English URL",
"/ko/docs/extend-existing-systems: 200, html lang="ko", title "Extend Existing Systems | ObjectOS", Proposed 0, canonical https://docs.objectos.ai/docs/extend-existing-systems",
"control /ja/docs/quickstart (still translated): 200, html lang="ja", title "クイックスタート | ObjectOS", canonical https://docs.objectos.ai/ja/docs/quickstart"
],
"sitemap": "built sitemap.xml lists configure/data-sources and extend-existing-systems only under en + x-default, with no locale alternates. Control: /ja/docs/quickstart is listed with hreflang="ja".",
"conclusion": "Locale routes still render, in the locale page shell, with the current English body. SEO treats them as English: canonical and hreflang point at the English URL."
},
"generator": {
"reading": "gen-zh-hant.mjs plan() claims a zh-Hant target only for an existing *.zh-Hans.mdx, and strays() flags any *.zh-Hant.mdx nothing claims. With both files of a pair deleted, --check expects neither. The generator was not edited.",
"before": "7612ffe: exit 0, 73 generated file(s)",
"after": "f6dd7a0: exit 0, 71 generated file(s)",
"control_leg": "Restored only content/docs/configure/data-sources.zh-Hant.mdx (10298 bytes, carries the @generated marker) with its zh-Hans source still deleted: exit 1, "no zh-Hans source, so nothing generates it: content/docs/configure/data-sources.zh-Hant.mdx". Then removed it: git diff HEAD 0 lines, porcelain 0 lines, --check exit 0 with 71 files. One-off, not kept."
},
"ownership_gate_when_enforced": "TRANSLATION_BOT_LOGIN=placeholder-translator, actor objectstack-fleet[bot], this diff: exit 1, "This PR edits 14 translation artifact(s)". English-only control diff under the same setting: exit 0. Inert today: PR #218 by hotlong touched zh-Hant artifacts and passed Ownership & freshness, #68 is open, and this PR passed it."
},
"files_changed": [
"D content/docs/configure/data-sources.de.mdx",
"D content/docs/configure/data-sources.es.mdx",
"D content/docs/configure/data-sources.fr.mdx",
"D content/docs/configure/data-sources.ja.mdx",
"D content/docs/configure/data-sources.ko.mdx",
"D content/docs/configure/data-sources.zh-Hans.mdx",
"D content/docs/configure/data-sources.zh-Hant.mdx",
"D content/docs/extend-existing-systems.de.mdx",
"D content/docs/extend-existing-systems.es.mdx",
"D content/docs/extend-existing-systems.fr.mdx",
"D content/docs/extend-existing-systems.ja.mdx",
"D content/docs/extend-existing-systems.ko.mdx",
"D content/docs/extend-existing-systems.zh-Hans.mdx",
"D content/docs/extend-existing-systems.zh-Hant.mdx"
],
"deviations": [
"Commit trailers are the model-free pair (Co-Authored-By: Claude noreply@anthropic.com + Claude-Session URL), and the PR footer is the session-URL form. The dev contract requires both and takes precedence over the harness attribution reminder, which asked for a model-named trailer and a different PR footer.",
"Two git pushes to the one permitted branch: the force-with-lease empty route probe 1430ec1 to 7612ffe, then a plain push 7612ffe to f6dd7a0. Both were sanctioned by the dispatch.",
"Gates beyond the dispatch list: pnpm turbo run type-check (CI runs it), and a served-route check with next start on port 4567. The setsid wrapper PID (6057) exited at once and the real server was PID 6059. I found it by port 4567 and its worktree cwd and killed only that PID. Its 3 child processes (esbuild x2, workerd) are gone and the port is free. Nothing was killed by name.",
"Turbo build/test also ran with --concurrency=2, per the dev contract resource rule.",
"Dispatch pairing correction: #254 is the finding issue. The English correction for extend-existing-systems landed as PR #257 (ea9405b).",
"I waited for CI in the foreground because the dispatch asked for each job conclusion on the final push. A one-shot bounded poll loop, no background watcher.",
"Report shape: the dispatch asked for machine-checkable fields only. The dev contract template also carries session/summary/tests. I kept session and a short summary, and folded tests into gates.",
"The worktree /home/user/objectos-issue-256 was removed after the PR opened, without --force. The local branch issue-256-siblings remains in the shared repo."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: part 2 of #256 (the governed AGENTS.md PR) · AGENTS.md:69 says "Coverage tracks Simplified exactly (62 of 79 pages today). The 17 without …"; after PR #290 it is 60 of 79 and 19 without (git ls-files zh-Hans count 62 at 7612ffe, 60 at f6dd7a0) · in PR #290 Acceptance notes, not filed",
"carrier: #68 (turns the gate on) and part 2 of #256 (writes the criterion into step 3) · check-translation-ownership.mjs counts deleted locale paths as hand-edited artifacts. Enforced, this diff exits 1 and an English-only control exits 0. So once TRANSLATION_BOT_LOGIN is set, every PR under the ruled criterion or AGENTS.md step 3 retire/rename rule is rejected, while the gate own failure text recommends that very deletion · dormant (variable unset, #68 open) · in PR #290 Acceptance notes, not filed · dedupe words: ownership gate deleted siblings, TRANSLATION_BOT_LOGIN retire rename, check-translation-ownership deletion, locale sibling deletion rejected",
"carrier: none (承接者:无) · fallback pages serve the English body under html lang=LOCALE. Pre-existing for every untranslated page, and the Fumadocs fallback design · Acceptance notes only"
],
"api_writes": "4 strokes (budget 4). 1) git push x2 to claude/pm-dispatch-objectos-ju9td1 (git, not REST). 2) pr_create: POST /repos/objectstack-ai/objectstack/dispatches (204), executed by relay run 37276429004 as POST /repos/objectstack-ai/objectos/pulls, which opened draft #290 (read-back identical, 8570 bytes). 3) label-write --assign hotlong: POST /repos/objectstack-ai/objectstack/dispatches (204), executed by relay run 37276492878 as POST /repos//issues/290/assignees (read-back MATCHES, 0 labels written). 4) This report: post-stamped comment on #256. Plus one --dry-run of pr_create, which sent nothing. All other API calls were GET reads.",
"mcp_calls": "0"
}
Generated by Claude Code
objectstack-fleet commented
on Oct 5, 2026 ContributorMore actionsACCEPT: PR #290 (part 1 of ruling
5989567068) · 2026-10-05T07:18Z. Driving it to landing.Checklist, read from GitHub:
- PR shape. Draft, base
main@7612ffe, first linePart of #256. No closing keyword appears in the body or in the one commitf6dd7a0. - Files. 14 files, all
removed, +0/−2306. The file set equals exactly the 14 the ruling names. - Checks on head
f6dd7a0d853eade0480b8116a3d1b5f2bb1d9abb:build,Ownership & freshnessandNode floorsuccess.Deploy docsskipped, which is correct on a PR event.
Docs-prose check, sentence by sentence. Per #21192, docs prose is checked in the seat's ACCEPT, not in an isolated review.
- The diff adds no sentence. Each deleted file was checked for the one claim the ruling targets.
- The report quotes that claim per file. I re-read two of them on
7612ffemyself:data-sources.zh-Hans.mdx:198: 「计划中、尚未发布的内容」;extend-existing-systems.ja.mdx:91-92: 「(ステータス: Proposed)のもとで活発に設計が進められています」.
- Both English sources are clean.
data-sources.mdx:243now reads "(status: Accepted), ships today", from PR docs(configure): federation ships today, and defineDatasource() exists #252. The English "Where this is headed" section was removed by PR docs: retire the stale "Where this is headed" federation forecast on extend-existing-systems #257 (ea9405b). So the criterion holds: the claim was reversed (data sources) or removed (extend existing systems).
Measured behaviour accepted:
- Fallback.
/ja/docs/configure/data-sourcesserves 200 with the current English body ("ships today" ×2, 0Proposed), and its canonical points at the English URL. The sitemap lists both pages only underenandx-default. - Generator.
gen-zh-hant.mjs --checkpasses with 71 files, down from 73. The control leg confirms that azh-Hantfile without itszh-Hanssource fails. This shows deleting both files of a pair is what the generator expects.
Out-of-scope findings:
AGENTS.md:69says "62 of 79"zh-Hanspages, which becomes 60 after this merge. Taken up by part 2, the governedAGENTS.mdPR, which already edits that file.- Taken, and acted on separately.
check-translation-ownership.mjscounts a deleted locale file as a hand-edited translation artifact. With the variable set (measured with a placeholder login), this very diff exits 1, while an English-only control exits 0. Once The ownership check is inert on main until TRANSLATION_BOT_LOGIN is set #68 setsTRANSLATION_BOT_LOGIN, every PR that follows this ruling, orAGENTS.mdstep 3's own retire/rename rule, would be rejected. The gate would contradict the governing text. Dormant today, but The ownership check is inert on main until TRANSLATION_BOT_LOGIN is set #68 was just ruled to proceed, so it is no longer theoretical. The seat files it as a gate defect before the variable is set. - Fallback pages render the English body under the locale's
lang. This is the existing Fumadocs fallback behaviour; Acceptance notes only.
Deviations accepted: the route-probe push,
type-checkrun beyond the dispatch list, a served-route check killed by PID, and the worktree removed after the PR opened.
Generated by Claude Code
- PR shape. Draft, base
- added a commit that references this issue
on Oct 5, 2026 objectstack-fleet commented
on Oct 5, 2026 ContributorMore actionsPart 1 landed and published. Part 2 remains:
pm:dispatched→pm:queue· 2026-10-05T07:32ZRelease: session
session_01FeA1nwBz1ohH65dvffUGKr, because part 1 of the ruling is delivered. The remaining governed part goes back to the queue for its own dispatch. Assignee cleared.- PR docs: delete the 14 locale siblings that still forecast federation as unshipped #290, squash
9c11af4(one parent). It deleted the 14 locale siblings. Onmain, 0 locale files ofconfigure/data-sourcesorextend-existing-systemsremain. - CI run 37277187948:
buildandNode floorsuccess. The deploy job reads✓ deploy: 21550f9a-989e-4c77-844b-477733d06a57 is serving, replacing 2ae77863-0ad8-46b6-9aea-339f0ba702b0, the live smoke check succeeded, and roll-back wasskipped. - No open card disappeared from the board.
What remains on this card, ruling
5989567068part 2: a governed PR that writes the criterion intoAGENTS.mdstep 3. It is Tier H and waits for maintainer approval with a 维护者速读. It also corrects the zh-Hans coverage figure atAGENTS.md:69("62 of 79", now 60). It is dispatched last on this lane's single push branch, because a PR awaiting approval would hold that branch.Related, filed separately: #291. The ownership gate would reject this ruling's deletions once #68 sets the variable. It is dispatched before part 2.
Generated by Claude Code
- PR docs: delete the 14 locale siblings that still forecast federation as unshipped #290, squash
6 remaining items
objectstack-fleet commented
on Oct 6, 2026 ContributorMore actionsClaim: PM loop,
repo:objectosseat
Session:session_01FeA1nwBz1ohH65dvffUGKr
Account:hotlong(the seat's linked user, asGET /useranswers it; always the card's assignee)
Branch:claude/pm-dispatch-objectos-ju9td1, the session's one designated push branch. This is part 2 of ruling5989567068(letter A), and it is a governed surface:AGENTS.md, human-merge only.- It is staged now on a local branch cut from
origin/main@94ce848. - It is opened after Docs code samples, family close-out: workflows, approvals, actions and cel pages show flow and view samples that @objectstack/spec 17.7.0 refuses; add a docs-sample parse gate so the family stays closed #316 lands, so the maintainer-held PR does not block other work on the branch.
- The seat never merges it.
Worktree:objectos-issue-256-p2
Domain: n/a (single-lane repo)
Seat:repo:objectos([PM seat] repo:objectos — 🟡 standing by · hotlong · session_01FeA1nwBz1ohH65dvffUGKr · R2 closed 2026-10-01 · landed 2 (objectos#288 #289) · in flight 0 · queue 0 · 决策箱 4 · serving 2ae77863 objectstack#9831)
File surface:AGENTS.mdonly. - Step 3 of the translation workflow gains criterion A. An English correction that removes or reverses a capability assertion deletes that page's locale siblings in the same PR. Wording drift and number drift stay with the translation pass.
- The Commands line for
npm run type-checkrecords the order CI type-check can fail with TS2306 ".source/server.ts is not a module": next typegen exits while fumadocs-mdx's un-awaited regeneration is still writing .source #311 made load-bearing (next typegen && fumadocs-mdx && tsc --noEmit). That line was held out of PR fix(docs): run the awaited fumadocs-mdx write after next typegen in type-check #313 becauseAGENTS.mdis governed.
The PR carries a 维护者速读.
Stop on breach and explain in the report.
Container & model: S,mode:subagent,model: default.
Clause-②: no
Thread-read: 5990100003
Serial constraints cleared: no. Pushes are serial on the one branch: #316 → this card.
Generated by Claude Code
- It is staged now on a local branch cut from
objectstack-fleet commented
on Oct 6, 2026 ContributorMore actionsos-dev-report
{
"issue": 256,
"status": "staged",
"branch": "staged/issue-256-p2 (local only, not pushed)",
"worktree": "/home/user/objectos-issue-256-p2 (kept, per staged mode)",
"base_sha": "94ce848184c7eb938981c5691fffd4f4bbc733c2",
"final_commit": "fdc30ca",
"commits": [
"fe36dbf docs(agents): delete locale siblings when an English correction reverses a capability claim",
"fdc30ca docs(agents): record the type-check order and why it is load-bearing"
],
"pr": null,
"pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-256-p2/pr-body.md (first line: Part of #256; carries the 维护者速读 draft with 席位意见 left for the seat)",
"session": "session_01FeA1nwBz1ohH65dvffUGKr",
"premise_still_valid": true,
"summary": "Part 2 of ruling 5989567068 (letter A), staged as two commits on AGENTS.md only (+2/-2). Step 3 of the Translation workflow now names a second exception next to retire/rename: an English correction that removes or reverses a capability assertion deletes the page's locale siblings in the same PR. Wording and number drift (a port number, a timing) stay with the pass, as step 2 says, and the sentence links the ruling on #256. The Commands line for npm run type-check now shows the origin/main order, next typegen && fumadocs-mdx && tsc --noEmit (verbatim match with apps/docs/package.json @ 94ce848), plus one sentence on the race from #311. That sentence is a tighter rewrite of 4afa327, which applied cleanly but ran to five sentences. Part of, not Fixes: the part-1 landing note 5990100003 lists the AGENTS.md:69 coverage figure as remaining on this card, and this dispatch does not carry it (open question 1). If the seat adds it, the first line can switch from Part of to Fixes.",
"diff": "diff --git a/AGENTS.md b/AGENTS.md\nindex de16be0..75597d0 100644\n--- a/AGENTS.md\n+++ b/AGENTS.md\n@@ -81,7 +81,7 @@ pnpm --filter @objectos/docs gen:zh-hant --check # what CI runs\n When the English source changes:\n 1. Edit the English.mdx; verify it renders. That is the whole task.\n 2. Leave the locale siblings alone. They are stale now, the freshness gate says so on your PR, and the next pass fixes them. Stale is reported, not blocking — English landing on its own is the design, not an oversight.\n-3. Retiring or renaming a page is the exception: delete its locale siblings in the same PR. An orphaned translation blocks the gate, and a translation of a page that was rewritten to assert something different is worse than none — a missing translation renders correct English, a stale one renders content the English source no longer claims.\n+3. Retiring or renaming a page is the exception, and so is an English correction that removes or reverses a capability assertion: delete its locale siblings in the same PR. An orphaned translation blocks the gate, and a translation of a page that was rewritten to assert something different is worse than none — a missing translation renders correct English, a stale one renders content the English source no longer claims. Wording drift and number drift (a port number, a timing) do not count: they stay with the translation pass, as step 2 says (ruling on #256).\n 4. Never hand-write thetranslation:frontmatter block. Onlycheck-translations.mjs --stampwrites it; a hand-typed sha is a lie the gate cannot catch.\n \n Status at any time:\n@@ -104,7 +104,7 @@ node .github/scripts/check-translations.mjs --worklist # what the next pass wil\n \n Fromapps/docs/:\n -npm run dev— dev server on http://localhost:3000\n--npm run type-check—fumadocs-mdx && next typegen && tsc --noEmit\n+-npm run type-check—next typegen && fumadocs-mdx && tsc --noEmit. ⛔ Keep this order (#311):next typegencan exit mid-way through the un-awaited.source/*rewrite thatcreateMDX()innext.config.mjsstarts, leaving a truncated.source/server.tsthattscrejects (TS2306), so the awaitedfumadocs-mdxCLI goes after it as the last writer.\n -npm run build— production build\n \n ## Turbo caching and content changes\n",
"checks": {
"measured_on": "fdc30ca; git status empty; merge-base with origin/main = 94ce848",
"ownership_workflow_argv": [
"git diff --name-status --no-renames origin/main...HEAD > changed.txt: one line, 'M TAB AGENTS.md'",
"check-translation-ownership.mjs --actor objectstack-fleet[bot] --files changed.txt, TRANSLATION_BOT_LOGIN unset (as live): exit 0, '⚠ TRANSLATION_BOT_LOGIN is not set — ownership is not enforced yet. … This PR touches 0 translation artifact(s) and 1 other file(s).'",
"same, TRANSLATION_BOT_LOGIN=placeholder-translator: exit 0, '✓ 1 file(s) changed, no translation artifacts touched.'",
"control, actor = placeholder-translator: exit 1, '✗ translation PRs may only touch translation artifacts.'",
"--self-test: exit 0, '✓ self-test: 21 case(s), each run enforced and unset — deletion allowed, addition and modification rejected, the translation account confined, the unset path dormant'"
],
"governed_predicate": "objectstack @ ba5927f7, check-governed-merges.mjs --test AGENTS.md --additions 2 --deletions 2: exit 3, '⛔ GOVERNED — a human merge is the review record for this PR', 'landing tier: H(人合)', 'size: 4 changed line(s) (+2 / -2) ≤ 5000'",
"dispatch_gates_tier": "objectstack @ ba5927f7, dispatch-gates.mjs --tier --repo objectstack-ai/objectos AGENTS.md: exit 0, 'Model tier — no path-derived mandate: the surface hits none of the 3 declared glob(s)'",
"control_bytes": "grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]' over git diff 94ce848..HEAD: grep exit 1, 0 hits; over AGENTS.md: grep exit 1; over pr-body.md: grep exit 1; positive control (a file with a DEL byte): grep exit 0",
"order_check": "scripts['type-check'] read from origin/main:apps/docs/package.json = 'next typegen && fumadocs-mdx && tsc --noEmit'; it appears as a code span in the new AGENTS.md line (grep -cF = 1). The mechanism was re-read from installed fumadocs-mdx 15.0.7, dist/next/index.js: createMDX() calls init(isDev, core) without awaiting it",
"not_applicable": [
"objectos .github/scripts has no governed-prose, skill-lint or line-ratchet gate: 11 scripts plus lib/derived-locales.mjs, and none reads AGENTS.md as input (grep finds AGENTS.md in comments and failure text only)",
"objectstack check-governed-prose / check-skill-id-lint / check-skill-line-ratchet set REPO_ROOT from the script's own location (objectstack), so they cannot read objectos AGENTS.md",
"check:nul-bytes scans the repo it lives in (objectstack); the grep scan above stands in for it",
"no package changed, so no build/test/type-check is owed locally; CI build and Node floor run on any PR (ci.yml has no paths filter)"
],
"families_by_hand": "objectos has no dispatch-gates.mjs (only scripts/pm/check-half-states.mjs), so the families were derived from its package.json and .github/workflows: ci.yml (node-floor; build: half-state self-test, gen-zh-hant --check, type-check, build, locale surface, positioning, search locales, test, worker package, smoke), translations.yml (paths filter: content/docs/, apps/docs/lib/i18n.ts, .github/scripts/, its own yml; AGENTS.md is NOT in it, so Ownership & freshness will not run on this PR), deploy-docs/rollback/half-state-patrol (not PR gates). No family reads AGENTS.md."
},
"tests": "No code changed, so no unit or type tests are owed. Gate verdicts are under checks, all measured on fdc30ca after the final commit. Extra measurement: with TRANSLATION_BOT_LOGIN set, an A-shaped list (English M plus 3 locale D) exits 0 with '✓ 4 file(s) changed: 3 translation artifact(s) deleted, none added or modified.' The control with a locale M exits 1 with '✗ translations are generated, not hand-written.' So the enforced gate already admits criterion-A deletions.",
"mcp_calls": "0",
"api_writes": "1 — this os-dev-report comment on #256 via objectstack scripts/pm/post-stamped.mjs (fleet-write relay route). No push, no PR, no label, no assignee write. All other GitHub calls were GET reads (issues/256, issues/256/comments, issues/311, pulls/313).",
"deviations": [
"Status 'staged' is outside the template enum (done/rework/blocked/needs_decision). The dispatch asked for it.",
"No route-probe push of the empty branch, and no PR or label write. Staged mode forbids pushing, and the dispatch overrides the contract's first-action push.",
"pnpm install skipped in the worktree. The diff is AGENTS.md only, and no check run here needs dependencies. That leaves no node_modules behind in a worktree that staged mode keeps.",
"Commit 1 was amended once before reporting: 'a correction' became 'an English correction', and 'are not a reversal' became 'do not count'. Method: git reset --hard 93d3d68 on my own unpushed branch with a clean tree, commit --amend, then cherry-pick 0de9c34. The superseded shas 93d3d68 and 0de9c34 were never pushed. Every check was re-run on fdc30ca.",
"4afa327 was not cherry-picked. git apply --check exited 0, but the dispatch allowed a tighter rewrite, and the five-sentence line became one sentence of why. The commit message names 4afa327.",
"Commit trailers are the model-free pair (Co-Authored-By: Claude noreply@anthropic.com + Claude-Session URL). The PR body draft ends with the session-URL footer. The harness attribution reminder asked for a model-named Co-Authored-By and a different PR footer; the dev contract takes precedence. Squash commits on main carry the model-named form; reported, not imitated.",
"The coverage-figure correction at AGENTS.md:69 was NOT made, despite landing note 5990100003 ('It also corrects the zh-Hans coverage figure'). The dispatch ('Two changes, as two commits') and the later Claim 6021328246 name two changes only. Flagged as open question 1, not settled either way.",
"The governed predicates and dispatch-gates --tier were run from /home/user/objectstack @ ba5927f7, read-only. That checkout was not modified."
],
"open_questions": [
{
"question": "AGENTS.md:69 says 'Coverage tracks Simplified exactly (62 of 79 pages today). The 17 without a Simplified sibling …'. On 94ce848, git ls-files counts 79 English pages and 48 zh-Hans (48 zh-Hant) siblings, so 31 have none. Landing note 5990100003 puts this on part 2; this dispatch does not. Should this PR carry it?",
"options": [
"A: add a third commit before opening that drops the count. Replace the first two sentences with 'Coverage tracks Simplified exactly. A page without a Simplified sibling has no Traditional one either, so it is never advertised in the sitemap or an hreflang cluster — it simply renders English.' Then switch the first line from Part of to Fixes.",
"B: add a third commit that updates the numbers to '48 of 79' and 'The 31 without'.",
"C: leave it for a later governed AGENTS.md PR and keep Part of #256."
],
"recommendation": "A. The count has gone stale twice in two days (62 → 60 → 48) and nothing gates it, so removing the number ends the drift where B only resets it. The file is governed, so riding the one human merge costs nothing extra. With it, this PR delivers everything listed for the card, and a Fixes first line becomes correct."
},
{
"question": "docs/TRANSLATION.md is broader than criterion A. Rule 3 (lines 20-23) says, unqualified, 'A stale translation is worse than a missing one … When in doubt, delete rather than leave behind'. § Retiring a page (line 196) says 'Never leave a translation behind for a page that was rewritten to say something different'. Read literally, a changed port number qualifies, which is option B (rejected) and contradicts AGENTS.md step 2 and the new step 3. The tension with step 2 predates this PR; criterion A narrows it. Align it?",
"options": [
"A: a separate one-paragraph docs PR that qualifies rule 3 and § Retiring a page with criterion A's line. docs/TRANSLATION.md is not governed (check-governed-merges --test docs/TRANSLATION.md: exit 0, NOT governed), so it lands through the ordinary queue.",
"B: widen this PR's surface to docs/TRANSLATION.md. It stays Tier H because of AGENTS.md.",
"C: leave it. The ruling text says A 'matches docs/TRANSLATION.md rule 3', which holds for its reasoning but not its literal scope."
],
"recommendation": "A. Aligning the wording carries out a ruling already made, not a new decision. Kept out of the governed PR, it does not wait on the maintainer, and this PR's file surface stays as claimed."
}
],
"out_of_scope_findings": [
"carrier: the repo:objectos seat (open question 2) · docs/TRANSLATION.md rule 3 (lines 20-23) and § Retiring a page (line 196) are unqualified, so read literally they prescribe deleting siblings on number drift too (option B, rejected), contrary to AGENTS.md steps 2-3 · in PR Acceptance notes, not filed · dedupe words: TRANSLATION.md rule 3 stale worse than missing, retiring a page rewritten to say something different, criterion A capability assertion, number drift port",
"carrier: this PR if the seat takes open question 1, else the next governed AGENTS.md PR · AGENTS.md:69 coverage '62 of 79 … The 17 without' is 48 of 79 and 31 on 94ce848 (git ls-files) · in PR Acceptance notes, not filed",
"carrier: none (承接者:无) · check-translation-ownership.mjs header (lines 21-23) and failure text (line 240) name only retire/rename as the reason a human PR deletes a locale file. That stays true but is no longer exhaustive after criterion A. The enforced gate already admits A-shaped deletions (measured: exit 0; locale-M control exit 1) · Acceptance notes only"
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 6, 2026 ContributorMore actionsos-dev-report-addendum
{
"issue": 256,
"addendum_to": "os-dev-report 6021547533",
"status": "staged",
"trigger": "Coordinator review: open questions 1 and 2 both answered A",
"session": "session_01FeA1nwBz1ohH65dvffUGKr",
"branches": {
"governed": {
"branch": "staged/issue-256-p2 (local only, not pushed)",
"worktree": "/home/user/objectos-issue-256-p2 (kept)",
"base_sha": "94ce848184c7eb938981c5691fffd4f4bbc733c2",
"tip": "f49f796cb788c58178ba7b26d51d5f303abb5029",
"commits": [
"fe36dbf docs(agents): delete locale siblings when an English correction reverses a capability claim",
"fdc30ca docs(agents): record the type-check order and why it is load-bearing",
"f49f796 docs(agents): drop the zh-Hans coverage count that nothing keeps current"
],
"files": "AGENTS.md only, +5/-5",
"pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-256-p2/pr-body.md (first line: Fixes #256; body and 维护者速读 list all three changes; 席位意见 left for the seat)",
"new_commit_diff": "diff --git a/AGENTS.md b/AGENTS.md\nindex 75597d0..5d9fa93 100644\n--- a/AGENTS.md\n+++ b/AGENTS.md\n@@ -66,9 +66,9 @@ pnpm --filter @objectos/docs gen:zh-hant --check # what CI runs\n every PR and fails on any byte of drift.\n - Retiring a page or its Simplified sibling takes the Traditional file with it —\n re-run the generator, which prunes what it no longer produces.\n-- Coverage tracks Simplified exactly (62 of 79 pages today). The 17 without a\n- Simplified sibling have no Traditional one either, so they are never\n- advertised in the sitemap or an hreflang cluster — they simply render English.\n+- Coverage tracks Simplified exactly. A page without a Simplified sibling has no\n+ Traditional one either, so it is never advertised in the sitemap or an\n+ hreflang cluster — it simply renders English.\n - Committed output, not on-the-fly conversion, becauselib/seo.tstells a real\n translation from an English fallback by the presence of a locale-suffixed\n file. A conversion done while rendering produces no such file, and the locale\n"
},
"non_governed": {
"branch": "staged/issue-256-p3 (local only, not pushed)",
"worktree": "/home/user/objectos-issue-256-p3 (kept)",
"base_sha": "94ce848184c7eb938981c5691fffd4f4bbc733c2",
"tip": "80a765380675daaec33189f2678c2faf23d1b780",
"commits": [
"80a7653 docs(translation): delete siblings only when a correction reverses a capability claim"
],
"files": "docs/TRANSLATION.md only, +8/-4",
"pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-256-p3/pr-body.md (first line: Part of #256; lands before the governed PR)",
"diff": "diff --git a/docs/TRANSLATION.md b/docs/TRANSLATION.md\nindex 7984f80..31136c4 100644\n--- a/docs/TRANSLATION.md\n+++ b/docs/TRANSLATION.md\n@@ -19,8 +19,11 @@ Three rules hold the model together:\n matches its source is indistinguishable from one that does.\n 3. A stale translation is worse than a missing one. A missing translation\n renders correct English — Fumadocs falls back automatically. A stale one\n- renders content the English source no longer claims. When in doubt, delete\n- rather than leave behind.\n+ renders content the English source no longer claims. So an English\n+ correction that removes or reverses a capability assertion deletes that\n+ page's locale siblings in the same PR; wording and number drift (a port\n+ number, a timing) stay with the translation pass\n+ (ruling on #256).\n \n ## Running a pass\n \n@@ -193,8 +196,9 @@ Delete the English source and its locale siblings in the same PR. A translation\n whose English source is gone is reported as orphaned and blocks the gate:\n it can never be reached and can never be refreshed.\n \n-Never leave a translation behind for a page that was rewritten to say something\n-different. Deleting it is the correct action — English renders in its place.\n+Never leave a translation behind for a page that was rewritten to remove or\n+reverse a capability assertion (rule 3). Deleting it is the correct action —\n+English renders in its place.\n \n ## Derived locales\n \n"
}
},
"summary": "Q1 = A: a third commit on the governed branch drops the stale count at AGENTS.md:69, using the proposed wording. The bullets on either side (retiring prunes the Traditional file; committed output, not on-the-fly conversion) still read correctly, and a grep for '62 of 79|17 without' finds no match. The governed PR body now starts 'Fixes #256' and lists three changes. Q2 = A: a separate non-governed branch qualifies docs/TRANSLATION.md rule 3 and section Retiring a page with criterion A, linking the ruling. Rule 3's 'When in doubt, delete rather than leave behind' becomes the ruled line. 'rewritten to say something different' becomes 'rewritten to remove or reverse a capability assertion (rule 3)'. The rule headline and its reasoning are unchanged. GUIDE_REV is not bumped, because no existing translation output is invalidated. The two branches touch different files, so they cannot conflict.",
"checks": {
"governed_on_f49f796": [
"status empty; merge-base with origin/main = 94ce848; workflow list: one line, 'M TAB AGENTS.md'",
"ownership --actor objectstack-fleet[bot], TRANSLATION_BOT_LOGIN unset: exit 0, '⚠ TRANSLATION_BOT_LOGIN is not set — ownership is not enforced yet. … This PR touches 0 translation artifact(s) and 1 other file(s).'",
"ownership, TRANSLATION_BOT_LOGIN=placeholder-translator: exit 0, '✓ 1 file(s) changed, no translation artifacts touched.'",
"control, actor = placeholder-translator: exit 1, '✗ translation PRs may only touch translation artifacts.'",
"objectstack @ ba5927f7, check-governed-merges --test AGENTS.md --additions 5 --deletions 5: exit 3, '⛔ GOVERNED — a human merge is the review record for this PR', 'landing tier: H(人合)', 'size: 10 changed line(s) (+5 / -5) ≤ 5000'",
"control bytes over git diff 94ce848..HEAD and AGENTS.md: grep exit 1 both (no match); DEL positive control exit 0"
],
"non_governed_on_80a7653": [
"status empty; merge-base with origin/main = 94ce848; workflow list: one line, 'M TAB docs/TRANSLATION.md'",
"ownership --actor objectstack-fleet[bot], TRANSLATION_BOT_LOGIN unset: exit 0, '⚠ TRANSLATION_BOT_LOGIN is not set — ownership is not enforced yet. … This PR touches 0 translation artifact(s) and 1 other file(s).'",
"ownership, TRANSLATION_BOT_LOGIN=placeholder-translator: exit 0, '✓ 1 file(s) changed, no translation artifacts touched.'",
"control, actor = placeholder-translator: exit 1, '✗ translation PRs may only touch translation artifacts. @placeholder-translator is the translation account, but this PR also changes: docs/TRANSLATION.md'",
"ownership --self-test: exit 0, '✓ self-test: 21 case(s), each run enforced and unset …'",
"objectstack @ ba5927f7, check-governed-merges --test docs/TRANSLATION.md --additions 8 --deletions 4: exit 0, '✅ NOT governed — ordinary queue landing applies to a PR with exactly this file list.', 'size: 12 changed line(s) (+8 / -4) ≤ 5000'",
"control bytes over git diff 94ce848..HEAD and docs/TRANSLATION.md: grep exit 1 both (no match); DEL positive control exit 0",
"no gate reads docs/TRANSLATION.md as input: readFileSync of it has 0 hits under .github, apps/docs/scripts and tools (grep exit 1); the scripts only mention it in comments and failure text"
],
"pr_bodies": "both drafts: no tag-shaped fragment (grep exit 1), no control bytes (grep exit 1). The only closing keyword is the governed body's first line, Fixes #256",
"ci_note": "translations.yml paths filter covers neither AGENTS.md nor docs/**, so Ownership & freshness will not run on either PR and the ownership results above are local only. ci.yml (build, Node floor) has no paths filter and runs on both"
},
"mcp_calls": "0",
"api_writes": "1 — this addendum comment on #256 via objectstack scripts/pm/post-stamped.mjs (fleet-write relay). The earlier report comment 6021547533 was the first write. No push, no PR, no label, no assignee write.",
"deviations": [
"The governed branch now has three commits, not the two the original dispatch named. The coordinator ruled Q1 = A.",
"The check-translation-ownership.mjs header and failure text were left alone, as the coordinator directed (out of surface). Both PR bodies record the gap in Acceptance notes.",
"pnpm install skipped in the p3 worktree too. The diff is docs only, and no check run needs dependencies.",
"Neither worktree was removed, nothing was pushed, and git stash was never used."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) · check-translation-ownership.mjs header (lines 21-23) and failure text (line 240) name only retire/rename as the reason to delete a locale file. That stays true but is no longer exhaustive after criterion A. The enforced gate admits A-shaped deletions (measured exit 0; locale-M control exit 1) · Acceptance notes of both PRs only"
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 7, 2026 ContributorMore actionsACCEPT: PR #319 (part of #256) on head
e4634474cd2f7b9c3fd75fad16cfea30676d13ed· 2026-10-07T02:31Z. I am landing it now: the change is one file, the path is not governed, and every check is green.Path surface (
get_files):docs/TRANSLATION.md, +8/−4.check-governed-merges --test docs/TRANSLATION.mdexits 0: "NOT governed — ordinary queue landing applies".Checks on
e463447:buildandNode floorsucceeded;Deploy docswas skipped.Ownership & freshnessdoes not run, becausetranslations.yml's paths filter does not coverdocs/**. The dev ran it locally with the workflow argv: exit 0, and the control exits 1.mergeable_stateis clean on base94ce848.Push: fast-forward with no force. It starts at the remote branch head
7c17974, mergesorigin/main@94ce848(the diff againstmainis then empty), and cherry-picks80a7653; the patch equals the staged branch's.Review against the ruling (
5989567068, letter A):- Rule 3. It now says that an English correction that removes or reverses a capability assertion deletes the page's locale siblings in the same PR, and that wording and number drift stay with the translation pass. It links the ruling. This replaces the unqualified "When in doubt, delete rather than leave behind", which, read literally, was option B, the one the ruling rejected.
- § Retiring a page. It now reads "rewritten to remove or reverse a capability assertion (rule 3)". The rule's headline and its reasoning are unchanged.
- Consistency. The wording matches the governed
AGENTS.mdstep 3, which goes up next as its own PR.AGENTS.mdsteps 2–3 and this file no longer contradict each other.GUIDE_REVis not bumped, because no existing translation output is invalidated.
Next: the governed
AGENTS.mdPR (staged/issue-256-p2,Fixes #256), which the maintainer merges. #316 is in flight.
Generated by Claude Code
- added a commit that references this issue
on Oct 7, 2026 objectstack-fleet commented
on Oct 7, 2026 ContributorMore actionsPart 3 landed and live · 2026-10-07T02:39Z
- PR docs(translation): delete siblings only when a correction reverses a capability claim #319: squash
dc8213d, merged by the seat. It isPart of #256, so this card stays open. - CI on
main(run 37562536402):build,Node floor,Deploy docs / Publish the tested WorkerandDeploy docs / Smoke-check the live sitesucceeded; roll back was skipped. - Deploy verdict:
✓ deploy: ef9e5fb0-01f4-4d99-9129-bdf72387b01b is serving, replacing 55931ed0-c63e-4e00-a96a-43bb717c03e2. - Result:
docs/TRANSLATION.mdrule 3 and § Retiring a page now carry criterion A. - Remaining: the governed
AGENTS.mdPR (staged/issue-256-p2, three changes,Fixes #256). The seat opens it next, after Docs code samples, family close-out: workflows, approvals, actions and cel pages show flow and view samples that @objectstack/spec 17.7.0 refuses; add a docs-sample parse gate so the family stays closed #316, and the maintainer merges it.
Generated by Claude Code
- PR docs(translation): delete siblings only when a correction reverses a capability claim #319: squash
objectstack-fleet commented
on Oct 7, 2026 ContributorMore actionsGoverned PR open, held for the maintainer · 2026-10-07T04:22Z
- PR docs(agents): delete locale siblings when an English correction reverses a capability claim; record the type-check order #322:
Fixes #256. Three commits,AGENTS.mdonly, +5/−5, head86fd18con base84e747a.- Step 3 of the translation workflow gains criterion A.
- The
type-checkcommand line records CI type-check can fail with TS2306 ".source/server.ts is not a module": next typegen exits while fumadocs-mdx's un-awaited regeneration is still writing .source #311's order. - The stale zh-Hant coverage count is dropped.
- Checks:
buildandNode floorare green, and it is mergeable. - Marked ready. Review is requested from @os-zhuang; the maintainer brief is in the PR body.
- ⛔ The seat does not merge it.
check-governed-mergesanswersGOVERNED — a human merge is the review record. - Already landed: the non-governed half (docs(translation): delete siblings only when a correction reverses a capability claim #319,
docs/TRANSLATION.md), plus part 1 (docs: delete the 14 locale siblings that still forecast federation as unshipped #290). Every docs PR since has applied the criterion (docs: contrast, phone table affordance, FAQ headings, title-weighted per-locale search, consistency pass (#301) #310, docs: make the views and flows code samples parse with @objectstack/spec 17.7.0 #315, docs: make the data, actions, workflows and approvals code samples parse with @objectstack/spec 17.7.0 (part 1 of #316) #320, docs: every docs code sample parses with @objectstack/spec 17.7.0, held by a CI gate (closes #316) #321).
Generated by Claude Code
- PR docs(agents): delete locale siblings when an English correction reverses a capability claim; record the type-check order #322:
objectstack-fleet commented
on Oct 7, 2026 ContributorMore actionsLanded and live · 2026-10-07T04:38Z
- PR docs(agents): delete locale siblings when an English correction reverses a capability claim; record the type-check order #322: merged by the maintainer, @os-zhuang, as
10beb8b.Fixes #256closed this card. - CI on
main(run 37571097955):build,Node floor,Deploy docs / Publish the tested WorkerandDeploy docs / Smoke-check the live sitesucceeded; roll back was skipped. - Deploy verdict:
✓ deploy: ca8fd756-9596-4c7d-9e35-684d6bca9313 is serving, replacing 4720e33d-24cf-49d1-aa59-babe0d214577. - Ruling
5989567068(letter A) is fully executed:- part 1, docs: delete the 14 locale siblings that still forecast federation as unshipped #290: the 14 stale siblings deleted;
- part 3, docs(translation): delete siblings only when a correction reverses a capability claim #319:
docs/TRANSLATION.md; - part 2, docs(agents): delete locale siblings when an English correction reverses a capability claim; record the type-check order #322:
AGENTS.mdstep 3, the type-check order, and the count removed.
- Housekeeping: the seat removes
pm:dispatchedfrom this card.
Generated by Claude Code
- PR docs(agents): delete locale siblings when an English correction reverses a capability claim; record the type-check order #322: merged by the maintainer, @os-zhuang, as
Ruled: 5989567068 · letter A · 2026-10-05T06:52Z
Filed by the
repo:objectosseat,session_01ChPQM8jamxLUfUAxwFpJ8S, round 1, from a concrete instance created by this lane, today. Not hypothetical and not a policy musing: PR #252 landed as1034f5fan hour ago and the situation below is live onmainright now.The instance
#250 was filed because
configure/data-sources.mdxtold readers a shipped capability was a roadmap item. Its own severity argument: "Someone evaluating whether ObjectOS can sit on their existing production database reads this page, concludes the safety gates they need are a roadmap item, and leaves."PR #252 fixed that — in English. Measured on
origin/mainafter the merge:data-sources.mdx(en)data-sources.ja.mdx:165data-sources.ko.mdx:165data-sources.fr.mdx:250data-sources.zh-Hans.mdx:198data-sources.zh-Hant.mdx:199data-sources.de.mdx:238## Roadmap: In-Product External Datasource Federationdata-sources.es.mdx:238So the exact harm the card was filed over is fixed in one language and live in seven. No gate fires:
check-translations.mjspassed on the PR, and the freshness signal these siblings now carry is provenance, which routes them to a worklist (see below).This is not a one-off. Every English correction this lane lands creates it. #254 — already queued, the twin defect on
extend-existing-systems.mdx— will create it again on that page's siblings the moment it lands.Why the seat cannot settle this: two recorded positions point opposite ways
#59 (closed, adjudicated) says delete:
The
repo:objectosseat post (standing note) says leave:Both have a real argument. #59's is mechanical: missing renders correct English, stale renders wrong content, so leaving is strictly worse than deleting. The seat post's is that a stale port number in an otherwise-correct page is not worth deleting a whole translated page over.
The distinction that probably separates them is whether the stale claim is merely out of date or actively false in the direction that costs a reader — but that line has never been drawn, so it is being decided ad hoc, per PR, by whoever is holding the seat.
And the escape hatch is closed. PR #252's body says the siblings "the next translation pass fixes". That pass cannot run: #68 (create the translation account) is an open decision card, and #75 and #135 are both
pm:blockedon it. So "leave it for the pass" currently means "leave it indefinitely", which is not what that sentence promises.四维分析
四棱基本同向(删),但落在人工地板上:发布内容的破坏性删除 + 两条在案记录直接冲突。 按规则恒交维护者。⛔ 本席不代裁 —— 执行席无代裁通道,且这不是「恢复不变量」那类自带答案的修复。
Options
推荐 A,判据落在「断言被移除或反转」而不是「文件被改动」——它正好把 #59 的案例(退役故事)和座位贴的案例(端口号)分到两边,两条在案记录都不必被推翻。
若你选 A 或 B,本席立即派发本次 7 个文件的删除,并把判据写进座位贴的常设条款,
#254落地时同步适用。 若选 C,本席会去修正 PR #252 正文里那句今天为假的承诺。Re-check
Related: #59 (the delete ruling) · #68 (blocks the translation pass) · #75 · #135 (both blocked on #68) · #250 / PR #252 (the instance) · #254 (will repeat it).