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
spec/i18n: a report's label and description have no translation key — os i18n check reports 100 % with zero report keys while the console's Reports index shows every report in English under zh-CN #25788
Filing gate ① a defect with a named landing site (the sibling of #25652, which added the key for positions and permission sets). Batch-of: 2026-10-25 browser pass on @objectstack/* 18.1.0 (23 cards: hotcrm 10, objectui 10, objectstack 3). Filed by the maintainer's account (os-steve) from the HotCRM pass driven in session session_01AwpXhq2nFKU6J7GmbCEmZu; ⛔ not a claim. Grade and routing are triage's.
What is seen (HotCRM on @objectstack/* 18.1.0, zh-CN)
HotCRM → 报表 → 全部报表: all ten reports list with their authored English label and description ("Accounts by Industry and Type — Matrix report showing accounts by industry and type", "Opportunities by Stage — Summary of opportunities grouped by stage", …). The report page title does the same. 42-reports.png, 94-report-opps-by-stage.png.
The HotCRM navigation entries for the same reports are translated (「各阶段商机」 in the zh-CN pack), so the gap is the report item itself, not the app's packs.
pnpm exec objectstack i18n check in HotCRM: ✓ All 1691 translation keys covered across 4 locale(s) — no key for any of the ten reports' label or description is extracted, so an app author cannot translate them even if they want to.
reach: the public UI, measured once; os i18n check output, measured once on HotCRM maina7faf81.
Expected
os i18n extract emits a key for each report's label and description (the shape #25652 used for positions and permission sets), translateReport (or the meta serving path) applies the bundle, and the console's Reports index and report page read the translated label. HotCRM then fills the four packs (its half, filed after a released @objectstack/* carries this).
Claim: PM loop round 2
Session: session_01BUeRMD4VYCYUfzxTKcZFAF (the card thread; seat session session_01K2Tat8JEt4AhLASV4V4QWE posts this claim)
Account: marchtian
Branch: claude/project-thread-uzjpca
Worktree: objectstack-issue-25788
Domain: domain:spec
Seat: domain:spec#4 (seat post #18917)
File surface: packages/spec/src/system/translation.zod.ts + packages/cli/src/utils/i18n-extract.ts / i18n-coverage.ts + the runtime meta translation path + tests + changeset
Container & model: S–M, mode:thread, model: default tier (dispatch-gates --tier: "no path-derived mandate", floor sonnet · default opus · ceiling fable), effort: xhigh (p1)
Clause-②: yes
Metadata-protocol: added
Responsibility: n/a — not a defect card
Thread-read: 6397355491
Premise: holds (at main5f5f0b42: reports exists only in LEGACY_OBJECT_FIRST_KEYS; no reports group in the bundle (precedent 47af3dd for positions/permissions); no open PR names #25788)
Ruling-ref: none; triage first grade under 「协议新增 p1」
Serial constraints cleared: #25696/#25739 (seat 2, notify recipients describe) do not touch translation.zod.ts.
Order: /mnt/project-files/spec-seat/orders/25788.md with _common.md (project files). Batch of six on the project owner's order 「你应该并发6」 (2026-10-25). Independent full Fable review of the diff before the seat's contract review and ACCEPT.
fable-review · #25788 · independent full review of the os-dev diff (spec rule, 田騏 2026-10-25) · os-dev session_01BUeRMD4VYCYUfzxTKcZFAF
⛔ Not a claim, not an ACCEPT. An isolated Agent subagent (model fable, effort xhigh) reviewed the whole diff of branch claude/project-thread-uzjpca against its merge base with main, from the card, the order and the code, not from the dev's conclusions. Then it re-reviewed the fix delta.
Round 1, whole diff at 118a82da: APPROVE_WITH_NITS
"The diff is the precedent's shape (47af3dd) with two justified departures: reports had to leave LEGACY_OBJECT_FIRST_KEYS (name collision with the retired dialect key), and because a report is ADR-0126 Regime O (overlay-editable) the translator needs the ADR-0029 D9.2a packaged-base rule, which pulls in getPackagedReportBase (metadata-protocol) and the PACKAGED_BASE_ACCESSORS row (rest). Both are real requirements; omitting them would have let the catalog overwrite an org's re-authored report label, the exact #20680 defect."
#
Severity
Finding
Disposition
1
minor
objectui's consumer half is owed: SPEC_TRANSLATION_GROUPS lacks reports, and loadLanguage.test.tsx goes red at the next pin move
Filed as #25859 (④). The dev also found TranslationPreview.tsx's exhaustive CATEGORY_DEFS, which breaks app-shell type-check at the pin.
2
nit
stale "(object, dashboard, view)" comments in rest/src/meta-item-read-gate.ts
fixed, a79e5bc2
3
nit
no direct accessor test for getPackagedReportBase
added objectql/src/protocol-packaged-report-base.test.ts (5 cases, real SchemaRegistry), a79e5bc2
4
nit
changeset said "never used"; the code says "measured footprint was zero (#3778)"
fixed, a79e5bc2
5
nit
a joined report's blocks[].label is not on the face
out of scope (card asks for label/description), recorded in the os-dev report
What it checked and found correct:
the schema at all three doors, strictness, aliases and counts;
both readers of LEGACY_OBJECT_FIRST_KEYS;
the translator's lookup and packaged-base semantics;
the serving path (REST list and item, the runtime dispatcher; MCP, GraphQL and form routes have no sibling gap);
the CLI walk and coverage buckets; the lint universe via reports: 'concat';
tests and ablations, the liveness ledger, docs, example translations, the changeset bumps, the generated artifacts.
Round 2, delta a79e5bc2 and objectui#13543: APPROVE_WITH_NITS
#
Severity
Finding
Disposition
1
minor
objectui#13543 omits two test files the pin move also moves (adminPreviews.i18n-10862-s2.test.tsx, TranslationPreview.categories-11765.test.tsx)
after merge the scheduled Console Pin Gate reds on main until objectui#13543 lands and .objectui-sha moves; AGENTS.md Post-Task Checklist ④ ("ships together with the sibling fix and the pin bump") is written for removals, but an exhaustively typed addition breaks the pinned checkout the same way. The precedent #25701 merged first and fixed after (objectui#13478 → objectstack-ai/objectui#13485).
stated in the PR body as the seat's sequencing call
Delta checked and found correct: the comments, the changeset wording, and the new objectql test (the plain-key trap is real; both fallbacks exercised; 13/13 green with the dashboard sibling; check-engine-double-contract, check:objectql-double-limit, check-registry-log-declared and objectql check:test-typecheck OK).
ACCEPT → PR #25826 comment 6400446674 at head ac2bcb0ba728 · seat domain:spec#4 · 2026-10-25T16:54Z. Independent full review (6399284479) and contract review PASS (6400225090); CI green; not governed. Landing held for the owner's sequencing choice, because merging first turns main's scheduled Console Pin Gate red until objectui#13543 lands.
fable-review · #25788 · round 3, after the ui/ merge (spec rule, 田騏 2026-10-25) · os-dev session_01BUeRMD4VYCYUfzxTKcZFAF
⛔ Not a claim, not an ACCEPT. The same isolated Agent subagent (model fable) as rounds 1 and 2 (comment 6399284479) reviewed what changed after objectui moved into this repo as ui/ (#25825): the merge of main (bbb49e33f1), the port of the consumer half into ui/ (da49afeb6c) and the sdui record re-record (378f52336f, the PR head).
378f52336f's message credits the digest move to app-shell and i18n; ui/packages/app-shell is not one of the record's 27 registryPackages, so only ui/packages/i18n/src/utils/spec-translations.ts moved it
message only, no tree effect; left as is (rewriting it would force-push the branch). Recorded here.
What it checked and found correct:
The port (6 files, +17/−1), each read in full:
CATEGORY_DEFS gains reports (flat: false, nested like dashboards), which clears the TS1360 its satisfies Record<keyof TranslationDataSchema['shape'], …> raised without it;
en "Reports" and zh 「报表」 are in the only two engine packs;
SPEC_TRANSLATION_GROUPS gains reports; the only behaviour change is that isSpecTranslationData now recognises a payload carrying only reports;
ONE_ENTRY and the 10862-s2 key list gain the row, and 2/13 → 2/14 is the right arithmetic for 14 groups.
No other exhaustive copy in ui/. It searched the whole tree: those four sites are all of them, and no built-in locale pack has a reports namespace.
Its own test run: the 4 ui vitest files gave 82 passed.
The merge. On the files this PR touches, main moved only unrelated rule-explanations.ts constants, unrelated api-surface entries and .changeset/config.json. @object-ui/app-shell and @object-ui/i18n are now in the one fixed group, so minor on each is consistent.
The served path is unchanged. The ui files that read GET /meta/report (appReportIndex.ts, ReportView.tsx, AppHeader.tsx, useRecentItemLabel.ts and others) are byte-identical to the objectui 699156a checkout round 2 reviewed against.
The sdui re-record: the diff is exactly generatedAt and registrySourcesSha256. sdui.manifest.json is byte-identical (sha256 1f6e1ccb925a…, 106 components), and check-sdui-manifest exits 0 at the head.
The dev's local @object-ui/components d.ts failure is install state, not this diff.
ui/packages/components/ is unchanged from main, and main's green Type Check UI builds it.
The local cause was an unhoisted @types/react left by an incremental install from before the ui merge.
The dev hoisted it locally to run the generator; the commit carries no install change.
os-dev-report · addendum 1 · after the ui/ merge (#25825), PR #25826 head 378f52336f
Supersedes the head, gates, deviations, files and counts of comment 6400125402. Fields not repeated there are unchanged.
{
"card": 25788,
"pr": 25826,
"head": "378f52336f",
"previous_head": "ac2bcb0ba7",
"branch": "claude/project-thread-uzjpca",
"trigger": "objectui moved into this repo as ui/ (#25825); the owner asked whether the PR needs updating",
"commits_since_previous_head": [
"bbb49e33f1 merge origin/main (c475b45b56), clean, no conflicts",
"da49afeb6c feat(ui): the translation preview and the console loader know the reports group",
"378f52336f chore(sdui): re-record the registry source digest after the ui reports edit"
],
"gates": {
"dispatch_gates_derived": 135,
"derivation_identical_at": ["da49afeb6c", "378f52336f"],
"run": 135,
"exit_0": 135,
"not_measured": 0,
"unrun": 0,
"ran_reconciliation": "dispatch-gates --ran: 135 run, 0 NOT-MEASURED, 0 UNRUN",
"reruns": [
{
"command": "node scripts/check-sdui-manifest.mjs",
"first_exit": 1,
"first_at": "da49afeb6c",
"cause": "the ui/packages/i18n source edit moved the in-tree registry digest (also red in CI: Lint · repo & tooling gates on da49afeb6c)",
"remedy": "node scripts/gen-sdui-manifest-node.mjs; sdui.manifest.json byte-identical (sha256 1f6e1ccb925a, 106 components), record registrySourcesSha256 + generatedAt moved",
"final_exit": 0,
"final_at": "378f52336f"
}
],
"ui": {
"vitest": "91 files, 1424 passed, 13 skipped (TranslationPreview*, adminPreviews.i18n-10862-s2, packages/i18n/src, apps/console loadLanguage)",
"ablation": "ui/ half stashed: 19 failed in 2 files; app-shell tsc TS1360 at TranslationPreview.tsx:103; restored, git diff empty",
"gates_exit_0": ["check:i18n-keys", "check:i18n-drift", "check:i18n-designer-parity", "check:i18n-dead-keys", "check:spec-symbols", "check:icon-record-names"]
},
"fable_review": {
"rounds": 3,
"verdicts": ["APPROVE_WITH_NITS", "APPROVE_WITH_NITS", "APPROVE_WITH_NITS"],
"verdict_comment_ids": [6399284479, 6407105388],
"round_3_nits": ["378f52336f message credits app-shell as well as i18n for the digest move; app-shell is not a registry package (message only, left as is)"]
}
},
"line_budget": {
"changed_lines": 893,
"added": 842,
"deleted": 51,
"files": 35,
"delta_since_previous_head": "7 files, +19/-3 (6 ui files, 1 sdui record)",
"human_merge_threshold": 3000,
"verdict": "under"
},
"deviations": [
{
"what": "the objectui consumer half (child card objectui#13543, transferred to objectstack#25859) now ships in this PR under ui/",
"why": "after #25825 Type Check UI and Test UI compile ui/ against this tree's packages/spec, so the exhaustive copies (CATEGORY_DEFS, SPEC_TRANSLATION_GROUPS, two pinned tests) must move with the group or the PR is red",
"note_on_card": "objectstack#25859 comment 6406913991",
"closes_after_merge": "objectstack#25859 (no Fixes keyword: the claim gate requires a claim naming this branch)"
},
{
"what": "the earlier 'sequencing left to the seat' deviation is withdrawn",
"why": "Console Pin Gate and .objectui-sha are gone (#25745); there is no main-red window to sequence"
},
{
"what": "changeset gains '@object-ui/app-shell': minor and '@object-ui/i18n': minor",
"why": "both are members of the one fixed group; protocol 'added' takes >= minor on every moved package"
},
{
"what": "local environment only: @types/react and @types/react-dom hoisted by hand in node_modules/.pnpm/node_modules",
"why": "an incremental install from before the ui merge left them unhoisted, so @object-ui/components' declaration build failed locally on 3 third-party typings in untouched files; nothing committed; ui/packages/components unchanged from main, where Type Check UI builds it green"
}
],
"files_changed_since_previous_head": [
".changeset/25788-translation-reports.md",
"scripts/sdui-manifest.record.json",
"ui/packages/app-shell/src/views/metadata-admin/i18n.ts",
"ui/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.categories-11765.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/adminPreviews.i18n-10862-s2.test.tsx",
"ui/packages/i18n/src/utils/spec-translations.ts"
],
"mcp_calls": {
"total": 19,
"reads": [
"github pull_request_read x5 (get x1, get_check_runs x3, get_comments x1)",
"github issue_read x4 (get x2, get_comments x2)",
"github actions_list x3",
"github get_job_logs x2",
"github get_check_run x1",
"github search_issues x2",
"github search_pull_requests x1",
"github search_repositories x1"
],
"writes": 0,
"note": "session total, the 4 of the first report included"
},
"api_writes": {
"total_before_this_comment": 9,
"via": "fleet relay as objectstack-fleet[bot]",
"list": [
"issue_create objectui#13543",
"comment objectui#13543 6399274054",
"comment #25788 6399284479 (fable verdict, rounds 1-2)",
"pr_create #25826",
"comment #25788 6400125402 (os-dev-report)",
"comment objectui#13543: FAILED, relay run 40259353225 (the card had been transferred to objectstack#25859); not retried there",
"comment #25859 6406913991 (carried in #25826)",
"comment #25788 6407105388 (fable verdict, round 3)",
"issue_patch #25826 body (refresh after the ui merge, --ack-through=6400446674)"
]
},
"out_of_scope_findings": [
{
"what": "a joined report's blocks[].label has no translation key (unchanged; contract review 6400225090 ③.3 recommends a small follow-up card)",
"carrier": "the seat's to file",
"filed": false
}
]
}
Landed · seat domain:spec#4 · 2026-10-26T05:17Z. PR #25826 merged through the queue as merge commit dd5e3554f006, after seat ACCEPT 6407756541 and Regen-provenance 6408172621. This card closed completed by Fixes, and pm:dispatched is removed. The ui/ consumer half landed in the same PR, so #25859 is closed completed. A follow-up goes to the seat's clock-out brief: a joined report's blocks[].label has no translation key.
Activity
objectstack-fleet commentedon Oct 25, 2026
Triage: first grade —
enhancement·priority:p1·domain:spec·area:i18n·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-25T11:59Z⛔ Not a claim, ⛔ not a dispatch.
findingcomes off.reportsgroup inTranslationData(label,description), the sibling of spec/i18n: a translation bundle has no key for positions or permission sets, so their labels stay in the authoring language #25652's positions and permission sets, withos i18n checkcoverage.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim: PM loop round 2
Session:
session_01BUeRMD4VYCYUfzxTKcZFAF(the card thread; seat sessionsession_01K2Tat8JEt4AhLASV4V4QWEposts this claim)Account:
marchtianBranch:
claude/project-thread-uzjpcaWorktree:
objectstack-issue-25788Domain:
domain:specSeat:
domain:spec#4(seat post #18917)File surface:
packages/spec/src/system/translation.zod.ts+packages/cli/src/utils/i18n-extract.ts/i18n-coverage.ts+ the runtime meta translation path + tests + changesetContainer & model:
S–M,mode:thread,model: default tier (dispatch-gates --tier: "no path-derived mandate", floor sonnet · default opus · ceiling fable),effort: xhigh(p1)Clause-②: yes
Metadata-protocol: added
Responsibility:
n/a — not a defect cardThread-read: 6397355491
Premise: holds (at
main5f5f0b42:reportsexists only inLEGACY_OBJECT_FIRST_KEYS; noreportsgroup in the bundle (precedent 47af3dd for positions/permissions); no open PR names #25788)Ruling-ref: none; triage first grade under 「协议新增 p1」
Serial constraints cleared: #25696/#25739 (seat 2, notify recipients describe) do not touch translation.zod.ts.
Order:
/mnt/project-files/spec-seat/orders/25788.mdwith_common.md(project files). Batch of six on the project owner's order 「你应该并发6」 (2026-10-25). Independent full Fable review of the diff before the seat's contract review and ACCEPT.objectstack-fleet commentedon Oct 25, 2026
fable-review · #25788 · independent full review of the os-dev diff (spec rule, 田騏 2026-10-25) · os-dev
session_01BUeRMD4VYCYUfzxTKcZFAF⛔ Not a claim, not an ACCEPT. An isolated Agent subagent (model
fable, effort xhigh) reviewed the whole diff of branchclaude/project-thread-uzjpcaagainst its merge base withmain, from the card, the order and the code, not from the dev's conclusions. Then it re-reviewed the fix delta.Round 1, whole diff at
118a82da: APPROVE_WITH_NITS"The diff is the precedent's shape (47af3dd) with two justified departures:
reportshad to leaveLEGACY_OBJECT_FIRST_KEYS(name collision with the retired dialect key), and because a report is ADR-0126 Regime O (overlay-editable) the translator needs the ADR-0029 D9.2a packaged-base rule, which pulls ingetPackagedReportBase(metadata-protocol) and thePACKAGED_BASE_ACCESSORSrow (rest). Both are real requirements; omitting them would have let the catalog overwrite an org's re-authored report label, the exact #20680 defect."SPEC_TRANSLATION_GROUPSlacksreports, andloadLanguage.test.tsxgoes red at the next pin moveTranslationPreview.tsx's exhaustiveCATEGORY_DEFS, which breaks app-shell type-check at the pin.rest/src/meta-item-read-gate.tsa79e5bc2getPackagedReportBaseobjectql/src/protocol-packaged-report-base.test.ts(5 cases, realSchemaRegistry),a79e5bc2a79e5bc2blocks[].labelis not on the faceWhat it checked and found correct:
LEGACY_OBJECT_FIRST_KEYS;reports: 'concat';Round 2, delta
a79e5bc2and objectui#13543: APPROVE_WITH_NITSadminPreviews.i18n-10862-s2.test.tsx,TranslationPreview.categories-11765.test.tsx)Console Pin Gatereds onmainuntil objectui#13543 lands and.objectui-shamoves; AGENTS.md Post-Task Checklist ④ ("ships together with the sibling fix and the pin bump") is written for removals, but an exhaustively typed addition breaks the pinned checkout the same way. The precedent #25701 merged first and fixed after (objectui#13478 → objectstack-ai/objectui#13485).Delta checked and found correct: the comments, the changeset wording, and the new objectql test (the plain-key trap is real; both fallbacks exercised; 13/13 green with the dashboard sibling;
check-engine-double-contract,check:objectql-double-limit,check-registry-log-declaredand objectqlcheck:test-typecheckOK).Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
os-dev-report
{ "card": 25788, "pr": 25826, "head": "ac2bcb0ba7", "branch": "claude/project-thread-uzjpca", "gates": { "dispatch_gates_derived": 134, "run": 134, "exit_0": 134, "not_measured": 0, "unrun": 0, "ran_reconciliation": "dispatch-gates --ran: 134 run, 0 NOT-MEASURED, 0 UNRUN", "reruns": [ { "command": "node scripts/check-engine-split-ratio.mjs --days 90", "first_exit": 2, "cause": "shallow clone inside the 90-day window", "remedy": "git fetch --shallow-since=2026-07-20 origin main", "final_exit": 0 } ], "suites": { "spec_test": 21849, "spec_test_repo": 1269, "runtime_test": 7100, "runtime_test_repo": 947, "objectql_test": 8723, "metadata_protocol_test": 21490, "rest_test": 6737, "rest_test_repo": 280, "lint_test": 7302, "cli_unit": 4848 }, "typecheck_exit_0": [ "spec", "cli", "lint", "rest", "metadata-protocol", "runtime", "example-todo", "example-showcase" ], "i18n_coverage": { "result": "OK, 527 baselined, none new", "control": "one app-todo zh-CN key deleted -> 106 to 108, red" }, "ablations": [ { "removed": "report: translateReport,", "red": "spec i18n-report.test.ts 2/16" }, { "removed": "walkReports(config, out);", "red": "cli i18n-report-walk.test.ts 4/4" }, { "removed": "['report', 'getPackagedReportBase']", "red": "rest explicit-override 9 failed" } ], "fable_review": { "rounds": 2, "verdicts": [ "APPROVE_WITH_NITS", "APPROVE_WITH_NITS" ], "verdict_comment_id": 6399284479 } }, "line_budget": { "order_size": "S-M", "changed_lines": 871, "added": 823, "deleted": 48, "files": 29, "tests_added": 462, "generated_added": 34, "human_merge_threshold": 3000, "verdict": "under" }, "deviations": [ { "what": "packages/metadata-protocol (getPackagedReportBase) and packages/rest (PACKAGED_BASE_ACCESSORS row) beyond the precedent's spec/cli/lint", "why": "a report is overlay-editable (ADR-0126 Regime O); without the packaged base the catalog overwrites an org's re-authored label (ADR-0029 D9.2a, the #20680 class)", "inside_claim_surface": "runtime meta translation path" }, { "what": "reports removed from LEGACY_OBJECT_FIRST_KEYS and TRANSLATION_KEY_GUIDANCE", "why": "authored-translation-sync skips stored rows carrying a listed key; the legacy footprint was zero (#3778)", "pm_assumption": "measured and decided" }, { "what": "objectui needs a change after all (refutes the dev's first measurement)", "why": "TranslationPreview.tsx CATEGORY_DEFS is exhaustive over TranslationDataSchema.shape and SPEC_TRANSLATION_GROUPS is pinned by loadLanguage.test.tsx", "child_card": "objectstack-ai/objectui#13543", "addendum_comment": 6399274054 }, { "what": "sequencing left to the seat", "why": "scheduled Console Pin Gate reds on main after merge until objectui#13543 lands and .objectui-sha moves; precedent #25701 merged first (objectui#13478 -> objectstack-ai/objectui#13485)" } ], "files_changed": [ ".changeset/25788-translation-reports.md", "content/docs/protocol/kernel/i18n-standard.mdx", "content/docs/references/api/protocol.mdx", "content/docs/references/system/translation.mdx", "content/docs/ui/translations.mdx", "docs/audits/2026-07-unknown-key-strictness-ledger.counts/system.md", "examples/app-showcase/src/system/translations/index.ts", "examples/app-todo/src/translations/ja-JP.ts", "examples/app-todo/src/translations/zh-CN.ts", "packages/cli/src/utils/i18n-coverage.ts", "packages/cli/src/utils/i18n-extract.ts", "packages/cli/test/i18n-report-walk.test.ts", "packages/lint/src/rule-explanations.ts", "packages/lint/src/validate-translation-references.test.ts", "packages/lint/src/validate-translation-references.ts", "packages/metadata-protocol/src/protocol.ts", "packages/objectql/src/protocol-packaged-report-base.test.ts", "packages/rest/src/meta-dashboard-view-i18n-explicit-override.test.ts", "packages/rest/src/meta-item-read-gate.ts", "packages/runtime/src/domains/meta-list-projection-parity.test.ts", "packages/spec/api-surface/system.json", "packages/spec/authorable-surface/system.json", "packages/spec/export-origins/system.json", "packages/spec/liveness/state-counts/translation.md", "packages/spec/liveness/translation.json", "packages/spec/src/system/i18n-report.test.ts", "packages/spec/src/system/i18n-resolver.ts", "packages/spec/src/system/translation.zod.ts", "scripts/fixtures/i18n-walk-parity/every-group.stack.json" ], "mcp_calls": { "total": 4, "reads": [ "github search_pull_requests x1", "github search_issues x2", "github issue_read x1 (objectui#13478)" ], "writes": 0, "note": "plus claude-code-remote subscribe_pr_activity for #25826 (not GitHub content)" }, "api_writes": { "total_before_this_comment": 4, "via": "fleet relay as objectstack-fleet[bot]", "list": [ "issue_create objectui#13543", "comment objectui#13543 6399274054", "comment #25788 6399284479 (fable verdict)", "pr_create #25826" ] }, "out_of_scope_findings": [ { "what": "a joined report's blocks[].label (ui/report.zod.ts, I18nLabelSchema) has no translation key; showcase_task_overview shows a translated heading over authored block labels", "carrier": "none; card asks for label/description only", "filed": false }, { "what": "check:liveness red at the original base on translation/flows.screens (engine.ts pointer rot after #25734)", "carrier": "fixed on main by #25796 before this PR; green at head", "filed": false } ] }Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
ACCEPT → PR #25826 comment 6400446674 at head
ac2bcb0ba728· seatdomain:spec#4· 2026-10-25T16:54Z. Independent full review (6399284479) and contract review PASS (6400225090); CI green; not governed. Landing held for the owner's sequencing choice, because merging first turns main's scheduled Console Pin Gate red until objectui#13543 lands.objectstack-fleet commentedon Oct 26, 2026
fable-review · #25788 · round 3, after the ui/ merge (spec rule, 田騏 2026-10-25) · os-dev
session_01BUeRMD4VYCYUfzxTKcZFAF⛔ Not a claim, not an ACCEPT. The same isolated Agent subagent (model
fable) as rounds 1 and 2 (comment 6399284479) reviewed what changed after objectui moved into this repo asui/(#25825): the merge ofmain(bbb49e33f1), the port of the consumer half intoui/(da49afeb6c) and the sdui record re-record (378f52336f, the PR head).Round 3,
ac2bcb0ba7..378f52336f: APPROVE_WITH_NITS378f52336f's message credits the digest move to app-shell and i18n;ui/packages/app-shellis not one of the record's 27registryPackages, so onlyui/packages/i18n/src/utils/spec-translations.tsmoved itWhat it checked and found correct:
CATEGORY_DEFSgainsreports(flat: false, nested likedashboards), which clears the TS1360 itssatisfies Record<keyof TranslationDataSchema['shape'], …>raised without it;SPEC_TRANSLATION_GROUPSgainsreports; the only behaviour change is thatisSpecTranslationDatanow recognises a payload carrying onlyreports;ONE_ENTRYand the10862-s2key list gain the row, and2/13→2/14is the right arithmetic for 14 groups.ui/. It searched the whole tree: those four sites are all of them, and no built-in locale pack has areportsnamespace.mainmoved only unrelatedrule-explanations.tsconstants, unrelated api-surface entries and.changeset/config.json.@object-ui/app-shelland@object-ui/i18nare now in the one fixed group, sominoron each is consistent.GET /meta/report(appReportIndex.ts,ReportView.tsx,AppHeader.tsx,useRecentItemLabel.tsand others) are byte-identical to the objectui699156acheckout round 2 reviewed against.Console Pin Gatered after merge) is moot:.objectui-shais gone (release(ui-merge): one release lane for both scopes — @object-ui joins the fixed group, @objectstack/console builds from ui/apps/console, the objectui pin is deleted (#25711) #25745), andType Check UInow compilesui/against this PR's spec.generatedAtandregistrySourcesSha256.sdui.manifest.jsonis byte-identical (sha2561f6e1ccb925a…, 106 components), andcheck-sdui-manifestexits 0 at the head.@object-ui/componentsd.ts failure is install state, not this diff.ui/packages/components/is unchanged frommain, and main's greenType Check UIbuilds it.@types/reactleft by an incremental install from before the ui merge.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
os-dev-report · addendum 1 · after the
ui/merge (#25825), PR #25826 head378f52336fSupersedes the head, gates, deviations, files and counts of comment 6400125402. Fields not repeated there are unchanged.
{ "card": 25788, "pr": 25826, "head": "378f52336f", "previous_head": "ac2bcb0ba7", "branch": "claude/project-thread-uzjpca", "trigger": "objectui moved into this repo as ui/ (#25825); the owner asked whether the PR needs updating", "commits_since_previous_head": [ "bbb49e33f1 merge origin/main (c475b45b56), clean, no conflicts", "da49afeb6c feat(ui): the translation preview and the console loader know the reports group", "378f52336f chore(sdui): re-record the registry source digest after the ui reports edit" ], "gates": { "dispatch_gates_derived": 135, "derivation_identical_at": ["da49afeb6c", "378f52336f"], "run": 135, "exit_0": 135, "not_measured": 0, "unrun": 0, "ran_reconciliation": "dispatch-gates --ran: 135 run, 0 NOT-MEASURED, 0 UNRUN", "reruns": [ { "command": "node scripts/check-sdui-manifest.mjs", "first_exit": 1, "first_at": "da49afeb6c", "cause": "the ui/packages/i18n source edit moved the in-tree registry digest (also red in CI: Lint · repo & tooling gates on da49afeb6c)", "remedy": "node scripts/gen-sdui-manifest-node.mjs; sdui.manifest.json byte-identical (sha256 1f6e1ccb925a, 106 components), record registrySourcesSha256 + generatedAt moved", "final_exit": 0, "final_at": "378f52336f" } ], "ui": { "vitest": "91 files, 1424 passed, 13 skipped (TranslationPreview*, adminPreviews.i18n-10862-s2, packages/i18n/src, apps/console loadLanguage)", "ablation": "ui/ half stashed: 19 failed in 2 files; app-shell tsc TS1360 at TranslationPreview.tsx:103; restored, git diff empty", "gates_exit_0": ["check:i18n-keys", "check:i18n-drift", "check:i18n-designer-parity", "check:i18n-dead-keys", "check:spec-symbols", "check:icon-record-names"] }, "fable_review": { "rounds": 3, "verdicts": ["APPROVE_WITH_NITS", "APPROVE_WITH_NITS", "APPROVE_WITH_NITS"], "verdict_comment_ids": [6399284479, 6407105388], "round_3_nits": ["378f52336f message credits app-shell as well as i18n for the digest move; app-shell is not a registry package (message only, left as is)"] } }, "line_budget": { "changed_lines": 893, "added": 842, "deleted": 51, "files": 35, "delta_since_previous_head": "7 files, +19/-3 (6 ui files, 1 sdui record)", "human_merge_threshold": 3000, "verdict": "under" }, "deviations": [ { "what": "the objectui consumer half (child card objectui#13543, transferred to objectstack#25859) now ships in this PR under ui/", "why": "after #25825 Type Check UI and Test UI compile ui/ against this tree's packages/spec, so the exhaustive copies (CATEGORY_DEFS, SPEC_TRANSLATION_GROUPS, two pinned tests) must move with the group or the PR is red", "note_on_card": "objectstack#25859 comment 6406913991", "closes_after_merge": "objectstack#25859 (no Fixes keyword: the claim gate requires a claim naming this branch)" }, { "what": "the earlier 'sequencing left to the seat' deviation is withdrawn", "why": "Console Pin Gate and .objectui-sha are gone (#25745); there is no main-red window to sequence" }, { "what": "changeset gains '@object-ui/app-shell': minor and '@object-ui/i18n': minor", "why": "both are members of the one fixed group; protocol 'added' takes >= minor on every moved package" }, { "what": "local environment only: @types/react and @types/react-dom hoisted by hand in node_modules/.pnpm/node_modules", "why": "an incremental install from before the ui merge left them unhoisted, so @object-ui/components' declaration build failed locally on 3 third-party typings in untouched files; nothing committed; ui/packages/components unchanged from main, where Type Check UI builds it green" } ], "files_changed_since_previous_head": [ ".changeset/25788-translation-reports.md", "scripts/sdui-manifest.record.json", "ui/packages/app-shell/src/views/metadata-admin/i18n.ts", "ui/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.categories-11765.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/adminPreviews.i18n-10862-s2.test.tsx", "ui/packages/i18n/src/utils/spec-translations.ts" ], "mcp_calls": { "total": 19, "reads": [ "github pull_request_read x5 (get x1, get_check_runs x3, get_comments x1)", "github issue_read x4 (get x2, get_comments x2)", "github actions_list x3", "github get_job_logs x2", "github get_check_run x1", "github search_issues x2", "github search_pull_requests x1", "github search_repositories x1" ], "writes": 0, "note": "session total, the 4 of the first report included" }, "api_writes": { "total_before_this_comment": 9, "via": "fleet relay as objectstack-fleet[bot]", "list": [ "issue_create objectui#13543", "comment objectui#13543 6399274054", "comment #25788 6399284479 (fable verdict, rounds 1-2)", "pr_create #25826", "comment #25788 6400125402 (os-dev-report)", "comment objectui#13543: FAILED, relay run 40259353225 (the card had been transferred to objectstack#25859); not retried there", "comment #25859 6406913991 (carried in #25826)", "comment #25788 6407105388 (fable verdict, round 3)", "issue_patch #25826 body (refresh after the ui merge, --ack-through=6400446674)" ] }, "out_of_scope_findings": [ { "what": "a joined report's blocks[].label has no translation key (unchanged; contract review 6400225090 ③.3 recommends a small follow-up card)", "carrier": "the seat's to file", "filed": false } ] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Landed · seat
domain:spec#4· 2026-10-26T05:17Z. PR #25826 merged through the queue as merge commitdd5e3554f006, after seat ACCEPT6407756541and Regen-provenance6408172621. This card closedcompletedbyFixes, andpm:dispatchedis removed. Theui/consumer half landed in the same PR, so #25859 is closedcompleted. A follow-up goes to the seat's clock-out brief: a joined report'sblocks[].labelhas no translation key.