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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Report page goes blank (React error #31) when a report's label or description is the spec's inline locale map (I18nLabel { zh-CN, en }) #13470
Category: ① defect with reach — every app that gives a report an inline-locale label/description (the only way to translate a report: the translation bundle has no reports group) gets a blank report page for every viewer.
Who acts: objectui maintainer seat (app-shell ReportView).
Dedupe: searched objectui + objectstack for "report label locale map React error 31 / I18nLabel report crash" — 0 hits on reports; 22 hits in the same family (closed: objectui#13380 public form, objectui#11158 Studio nav rail, objectui#10847 dashboard designer widget title, objectui#10993 form submitText). ReportView was not covered by any of them.
Repro
@objectstack/spec / runtime 18.0.0, console from the same release.
Report metadata (valid under ReportSchema, whose label is string | I18nLabel):
defineReport({name: 'srm_delivery_scorecard',label: {'zh-CN': '供应商交付与质量(按期间)',en: 'Supplier Delivery and Quality by Period'},description: {'zh-CN': '…',en: '…'},type: 'summary',dataset: 'srm_delivery_metrics',rows: ['period','supplier'],values: ['line_count','otd_rate'],})
Open /_console/apps/<app>/report/srm_delivery_scorecard as any user.
Actual
Whole page is blank; console: Minified React error #31 … object with keys {zh-CN, en}.
Expected
The label and description resolve to the viewer's locale, like object/field labels do.
Where
packages/app-shell/src/views/ReportView.tsx renders {previewReport.title || previewReport.label || 'Report Viewer'} and {previewReport.description} raw (still so on main). The report lists (全部报表, nav) may need the same resolution.
Downstream
objectstack-ai/hotsrm works around it by using a plain Chinese label (English lost for this report) until this is fixed.
Filed from Claude session session_01E7UNrUkwEKDrg7BXnKF5LU (hotsrm v0.4 browser acceptance).
Route:ReportView.tsx resolves label / description through the same locale resolution the objectui#13380 family used. Pin it with a report whose label is { 'zh-CN', en }.
Claim: PM loop round 1 · 2026-10-25T00:23Z
Session: session_01EsHaC5nYMcJgk2Nr6fbVdG (the card session that works this card; claim written by the domain:ui seat 4 session session_01XWGTsmqrtrt1Zqh1ioWqsT)
Account: os-elon-musk
Branch: claude/project-thread-j5a2c7 (platform-assigned at spawn; the card session can push only this branch)
Worktree: objectui-issue-13470
Domain: domain:ui
Seat: domain:ui#4
File surface: packages/app-shell/src/views/ReportView.tsx and the report list / nav surfaces that print a report label or description, their tests, .changeset/13470-*.md (stop on breach; explain in the report)
Container & model: M, p1, mode:thread, model: default tier (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate), effort: xhigh
Clause-②: no
Metadata-protocol: none
Responsibility: objectui's ReportView prints the spec's string | I18nLabel label and description raw | the locale resolution the objectui#13380 family already uses | every viewer of a report whose label or description is an inline locale map; objectstack-ai/hotsrm works around it today
Thread-read: 6387018532
Premise: holds — ReportView.tsx:405-407 on objectui maincd70b78 still renders previewReport.title || previewReport.label and previewReport.description raw
Serial constraints cleared: none — seat 1's in-flight objectui#13442, #13449, #13450 declare no path under packages/app-shell/src/views/**
Writes: all PR, comment and label writes go only through objectstack's relay (scripts/pm/fleet-write); never write with GitHub MCP.
Clause-② reason: the console starts rendering a shape the spec already declares (ReportSchema.label is string | I18nLabel); no objectui accept set or export widens.
Ruling section: no maintainer ruling on this card; triage's route (6387018532) is a suggestion, verify it.
{
"issue": 13470,
"status": "done",
"branch": "claude/project-thread-j5a2c7",
"pr": "https://github.com/objectstack-ai/objectui/pull/13487",
"session": "session_01EsHaC5nYMcJgk2Nr6fbVdG",
"premise_still_valid": true,
"summary": "Premise held on main cd70b78: ReportView drew the report's string-or-I18nLabel label and description raw, and so did the AppHeader report crumb (via reportLabel's untouched fallback), so an inline locale map blanked the report page with React #31; a whole-report drill titled its drawer [object Object]. All four sites now resolve the map in the viewer's language with metadataText (the reader useAppReportEntries already uses for the report index and the palette's app-report rows, which were checked and needed no change). One changeset, @object-ui/app-shell patch, carrying Clause-② no / Metadata-protocol none.",
"tests": "At head 899902d. New pins ReportView.inlineLocaleLabel-13470 + AppHeader.reportCrumbInlineLocale-13470 (real components, real I18nProvider, en and zh-CN legs, plain-string control): Test Files 2 passed (2), Tests 12 passed (12). Every test file importing ReportView / AppHeader / AppReportIndexView / appReportIndex (39 files): Test Files 39 passed (39), Tests 323 passed (323). Ablation per site on the committed fix, restored via git checkout HEAD with git diff HEAD empty after each: heading reverted 6 failed/6 passed (React #31, object with keys {zh-CN, en}); description reverted 6 failed/6 passed (same); drill title reverted 2 failed/10 passed (drawer reads [object Object]); crumb reverted 2 failed/10 passed (React #31). Whole packages/app-shell suite at --maxWorkers=2 printed nothing for 60 min and was stopped: NOT MEASURED locally, family left to CI's sharded pnpm test; narrowing and its blind spot declared in the PR body.",
"gates": "Local, at 899902d: turbo run type-check --filter=@object-ui/app-shell --concurrency=2 :: exit 0 (30/30 tasks); eslint on the 4 touched files :: exit 0 (0 errors, 44 pre-existing warnings, none on a changed line); node scripts/check-changeset-presence.mjs :: exit 0; pnpm check:new-line-citations :: exit 0 (0 new); node scripts/check-changeset-no-major.mjs :: exit 0. objectui has no dispatch-gates.mjs, so there is no --ran reconciliation; the list was derived by hand from package.json. CI check-runs on PR #13487 had just started at report time: NOT MEASURED, the seat reads them at ACCEPT.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "5 — mcp__github__issue_read x4 (get, get_comments x3), mcp__github__pull_request_read x1 (get, PR 13391 for the sibling shape); no write tool",
"api_writes": "3 — relay fleet-write: pr_create (objectui PR 13487, draft forced, assignee os-elon-musk; read-back identical 6323 bytes), pr_request_reviewers (PR 13487, os-elon-musk), comment (this report on objectui issue 13470); plus 2 git push to the branch (not REST)",
"open_questions": [],
"out_of_scope_findings": [
"class: a · reach: AppHeader mounted at /apps/srm/page/welcome (this PR's crumb harness, real useObjectLabel) with that page's label set to { 'zh-CN', en } throws Objects are not valid as a React child (found: object with keys {zh-CN, en}) — a page whose label is an inline locale map blanks its route · evidence: AppHeader's page branch hands pageDef.label to pageLabel as its fallback, PageSchema.label is I18nLabel; probe not committed · dedupe words: page label locale map React error 31, AppHeader page routeTitle I18nLabel, page inline locale label blank",
"carrier: none — DatasetReportRenderer resolveText (joined-report block heading) reads only a map's default entry, so a block label { 'zh-CN', en } shows the block name; read-only code reading, not measured · noted in Acceptance notes, not filed",
"carrier: none — ReportView still reads an undeclared root title before label (ReportSchema declares no title; the dashboard twin retired under ADR-0049) · noted in Acceptance notes, not filed"
]
}
PR #13487 merged at 2026-10-25T02:08Z, merge commit 23e912e40684dd5c8943889712adac6b47fd899d. The card closed completed through Fixes; pm:dispatched comes off in this stroke. The page-route twin is filed as objectui#13488. objectui merges publish nothing (the changesets release is a human act).
Activity
objectstack-fleet commentedon Oct 24, 2026
Triage: first grade —
bug·priority:p1·domain:ui·area:reports·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-24T17:00Z⛔ Not a claim, ⛔ not a dispatch.
ReportSchemadocument blanks the whole report page for every viewer (React Task: Refactor Monorepo to Support Lazy-Loaded Plugins #31). An inline locale map is the only way to translate a report today.ReportView.tsxresolveslabel/descriptionthrough the same locale resolution the objectui#13380 family used. Pin it with a report whose label is{ 'zh-CN', en }.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim: PM loop round 1 · 2026-10-25T00:23Z
Session:
session_01EsHaC5nYMcJgk2Nr6fbVdG(the card session that works this card; claim written by thedomain:uiseat 4 sessionsession_01XWGTsmqrtrt1Zqh1ioWqsT)Account:
os-elon-muskBranch:
claude/project-thread-j5a2c7(platform-assigned at spawn; the card session can push only this branch)Worktree:
objectui-issue-13470Domain:
domain:uiSeat:
domain:ui#4File surface:
packages/app-shell/src/views/ReportView.tsxand the report list / nav surfaces that print a reportlabelordescription, their tests,.changeset/13470-*.md(stop on breach; explain in the report)Container & model:
M, p1,mode:thread,model: default tier (dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate),effort: xhighClause-②: no
Metadata-protocol: none
Responsibility:
objectui's ReportView prints the spec's string | I18nLabel label and description raw | the locale resolution the objectui#13380 family already uses | every viewer of a report whose label or description is an inline locale map; objectstack-ai/hotsrm works around it todayThread-read: 6387018532
Premise: holds —
ReportView.tsx:405-407on objectuimaincd70b78still renderspreviewReport.title || previewReport.labelandpreviewReport.descriptionrawSerial constraints cleared: none — seat 1's in-flight objectui#13442, #13449, #13450 declare no path under
packages/app-shell/src/views/**Writes: all PR, comment and label writes go only through objectstack's relay (
scripts/pm/fleet-write); never write with GitHub MCP.ReportSchema.labelisstring | I18nLabel); no objectui accept set or export widens.6387018532) is a suggestion, verify it.objectstack-fleet commentedon Oct 25, 2026
os-dev-report
{ "issue": 13470, "status": "done", "branch": "claude/project-thread-j5a2c7", "pr": "https://github.com/objectstack-ai/objectui/pull/13487", "session": "session_01EsHaC5nYMcJgk2Nr6fbVdG", "premise_still_valid": true, "summary": "Premise held on main cd70b78: ReportView drew the report's string-or-I18nLabel label and description raw, and so did the AppHeader report crumb (via reportLabel's untouched fallback), so an inline locale map blanked the report page with React #31; a whole-report drill titled its drawer [object Object]. All four sites now resolve the map in the viewer's language with metadataText (the reader useAppReportEntries already uses for the report index and the palette's app-report rows, which were checked and needed no change). One changeset, @object-ui/app-shell patch, carrying Clause-② no / Metadata-protocol none.", "tests": "At head 899902d. New pins ReportView.inlineLocaleLabel-13470 + AppHeader.reportCrumbInlineLocale-13470 (real components, real I18nProvider, en and zh-CN legs, plain-string control): Test Files 2 passed (2), Tests 12 passed (12). Every test file importing ReportView / AppHeader / AppReportIndexView / appReportIndex (39 files): Test Files 39 passed (39), Tests 323 passed (323). Ablation per site on the committed fix, restored via git checkout HEAD with git diff HEAD empty after each: heading reverted 6 failed/6 passed (React #31, object with keys {zh-CN, en}); description reverted 6 failed/6 passed (same); drill title reverted 2 failed/10 passed (drawer reads [object Object]); crumb reverted 2 failed/10 passed (React #31). Whole packages/app-shell suite at --maxWorkers=2 printed nothing for 60 min and was stopped: NOT MEASURED locally, family left to CI's sharded pnpm test; narrowing and its blind spot declared in the PR body.", "gates": "Local, at 899902d: turbo run type-check --filter=@object-ui/app-shell --concurrency=2 :: exit 0 (30/30 tasks); eslint on the 4 touched files :: exit 0 (0 errors, 44 pre-existing warnings, none on a changed line); node scripts/check-changeset-presence.mjs :: exit 0; pnpm check:new-line-citations :: exit 0 (0 new); node scripts/check-changeset-no-major.mjs :: exit 0. objectui has no dispatch-gates.mjs, so there is no --ran reconciliation; the list was derived by hand from package.json. CI check-runs on PR #13487 had just started at report time: NOT MEASURED, the seat reads them at ACCEPT.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "5 — mcp__github__issue_read x4 (get, get_comments x3), mcp__github__pull_request_read x1 (get, PR 13391 for the sibling shape); no write tool", "api_writes": "3 — relay fleet-write: pr_create (objectui PR 13487, draft forced, assignee os-elon-musk; read-back identical 6323 bytes), pr_request_reviewers (PR 13487, os-elon-musk), comment (this report on objectui issue 13470); plus 2 git push to the branch (not REST)", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: AppHeader mounted at /apps/srm/page/welcome (this PR's crumb harness, real useObjectLabel) with that page's label set to { 'zh-CN', en } throws Objects are not valid as a React child (found: object with keys {zh-CN, en}) — a page whose label is an inline locale map blanks its route · evidence: AppHeader's page branch hands pageDef.label to pageLabel as its fallback, PageSchema.label is I18nLabel; probe not committed · dedupe words: page label locale map React error 31, AppHeader page routeTitle I18nLabel, page inline locale label blank", "carrier: none — DatasetReportRenderer resolveText (joined-report block heading) reads only a map's default entry, so a block label { 'zh-CN', en } shows the block name; read-only code reading, not measured · noted in Acceptance notes, not filed", "carrier: none — ReportView still reads an undeclared root title before label (ReportSchema declares no title; the dashboard twin retired under ADR-0049) · noted in Acceptance notes, not filed" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
ACCEPT → PR #13487 comment 6392158345 ·
domain:ui#4· 2026-10-25T01:52Z. Landing under the maintainer's standing word.objectstack-fleet commentedon Oct 25, 2026
Landed ·
domain:ui#4· 2026-10-25T02:13ZPR #13487 merged at 2026-10-25T02:08Z, merge commit
23e912e40684dd5c8943889712adac6b47fd899d. The card closedcompletedthroughFixes;pm:dispatchedcomes off in this stroke. The page-route twin is filed as objectui#13488. objectui merges publish nothing (the changesets release is a human act).Generated by Claude Code
fix(app-shell): resolve a report's inline locale label and descriptio…