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
console: /forms/NAME for a missing form renders a raw English "Form metadata not found" in a non-English session #27446
Filing gate: ① a product defect found by a QA run (off-clause probe, RUNNER rule 8).
Reproduction
Boot the showcase, sign in as admin, and set the user's language to zh-CN (avatar menu, or PATCH /api/v1/data/sys_user/ID {"locale":"zh-CN"}).
Open /_console/forms/no_such_form.
Expected: localized not-found copy, like the other console not-found states.
Actual: the page body renders the untranslated literal "Form metadata not found: view/no_such_form".
Mechanism
ui/apps/console/src/components/FormPage.tsx ~L1728 throws a hard-coded English string, and the error text is rendered verbatim (~L2687–2691). It never passes through the i18n layer.
QA-source: #27441 · i18n.surface-matrix · observed beside the clauses
Read fresh. /forms/NAME for a missing form renders a raw English "Form metadata not found" in a non-English session. From the 18.3.0 RC run ([sweep] v18.3.0 release test sweep #27377 §5); it is retested on the next wave.
Claim: PM loop round 1
Session: session_01Utp6CbDAucNyQ4UtzCJKyh
Account: os-bill
Branch: claude/project-thread-j9w213 (this seat thread's designated push branch for its in-seat subagent dev, the recorded platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-27446
Domain: domain:ui
Seat: domain:ui#4
File surface: ui/apps/console/src/components/FormPage.tsx (the missing-form throw ~L1737 and the error render), ui/packages/i18n/src/locales/* only if no existing key fits, tests beside, root .changeset/ (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: TIER_DEFAULT (dispatch-gates --tier on ecd944f5: no path-derived mandate), effort: medium
Clause-②: no — expected: the fix reuses an existing localized not-found key. If a new @object-ui/i18n key is needed, the dev reports it and the seat amends to yes (widening) and posts a TIER_DEFAULT declaration review.
Metadata-protocol: none
Responsibility: a missing /forms/NAME renders the shared localized not-found state in the session language, never the raw English throw; pinned by a test in a non-English session
Thread-read: 6491542295
Premise: holds
Serial constraints cleared: seat 1 PR #27578 (#27496, FormPage.tsx) merged; no open PR touches FormPage.tsx (read 21:1xZ)
Dispatched 2026-10-29T21:12Z to an in-seat subagent of the seat thread (S). ⛔ The subagent posts no claim and writes no assignee.
{
"issue": 27446,
"status": "done",
"branch": "claude/project-thread-j9w213",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27739",
"head_sha": "722dca524fccdd9884f34f2b15b2b8c2f51094ea",
"session": "session_01Utp6CbDAucNyQ4UtzCJKyh",
"premise_still_valid": true,
"clause_2": "no: no @object-ui/i18n key added and no pack value edited; the fix reuses console.notFound.title / .description / .back, present in all ten packs",
"summary": "Premise measured on main d93d9be5: loadInternalForm in ui/apps/console/src/components/FormPage.tsx threw 'Form metadata not found: view/NAME' for any non-OK /meta/view read and the page rendered it verbatim. A 404 now throws a module-private FormNotFoundError held in its own notFound state, and the page draws the console's shared not-found state (the RouteNotFound Empty layout, keys console.notFound.*) in the session language with a Go back button. Non-404 failures keep the error banner, now worded 'Could not load form metadata (STATUS): view/NAME'.",
"tests": "head 722dca52. New FormPage.notFound-27446.test.tsx: 3/3 passed (zh: 页面不存在 + 返回 and no Latin word on the page; en: Page not found / Go back; CONTROL: a 500 keeps the error banner). Ablation: FormPage.tsx restored to base d93d9be5, 3/3 failed; restored with git checkout HEAD, hash matched the HEAD blob. All FormPage* suites: pnpm --dir ui exec vitest run apps/console/src/components/FormPage -> Test Files 39 passed (39), Tests 366 passed (366). pnpm --filter @object-ui/console run type-check -> lock VERDICT command-exit 0 (tsconfig includes src, so tests are compiled). No test pinned the old text: a grep of ui/ for 'Form metadata not found' finds only the FormNotFoundError message.",
"gates": "local: 33 derived commands each recorded as COMMAND :: exit CODE, all exit 0, reconciled with dispatch-gates --ran: 33 derived, 33 run, 0 NOT-MEASURED, 0 UNRUN. That includes node scripts/check-sdui-manifest.mjs exit 0 and pnpm --dir ui exec vitest run scripts/ (169 passed, 2 skipped). pnpm check:type-check-debt timed out under my 280s per-gate wrapper (exit 124); I re-ran it without the wrapper and its VERDICT was command-exit 0 ('0 raw tsc error(s)'). Also run outside the derivation: pnpm check:changeset-fixed exit 0 and ui check:new-line-citations (0 new citations). CI on PR #27739 when this report was written: Governed Surface Queue Guard success; Lint/Type Check lanes, Check Changeset and Check PR Size in_progress.",
"line_budget": "+164 / -3 over 3 files (FormPage.tsx +61/-3, new test +92, changeset +14), under the 3000-line human-merge threshold",
"files_changed": [
"ui/apps/console/src/components/FormPage.tsx",
"ui/apps/console/src/components/FormPage.notFound-27446.test.tsx",
".changeset/27446-form-not-found-localized.md"
],
"deviations": [
"Narrowed test scope, as the seat asked: I ran only the console FormPage* suites, ui scripts/ and the console type-check, not the full app-shell or console vitest suites (over an hour each). The i18n tests were not run because no pack was touched. CI runs the rest.",
"The PR body carries the claude-projects-attribution HTML comment on line 2 because the dispatch order requires it verbatim. os-dev forbids HTML comments, with an exception for the harness attribution comment, and this is that comment.",
"I added trailers to the local merge commit (amended before its first push). Nothing was force-pushed."
],
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2: fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches op pr_create (PR #27739, read-back identical); post-stamped POST /repos/objectstack-ai/objectstack/issues/27446/comments (this report). git push is not a REST write.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none. Noted in the PR's Acceptance notes, not filed (read-only, not reproduced): the public /f/:slug loader loadPublicForm also renders an English 'Failed to load form (STATUS): ...' string verbatim. The other English throws in loadInternalForm (no object target; record link naming another object) are unchanged. Dedupe words: loadPublicForm, Failed to load form, public form i18n, raw English error"
]
}
Activity
objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 客户的语言 | none | P②
Triage: p3 ·
domain:ui·area:i18n· 2026-10-29T08:15Z⛔ Not a claim.
/forms/NAMEfor a missing form renders a raw English "Form metadata not found" in a non-English session. From the 18.3.0 RC run ([sweep] v18.3.0 release test sweep #27377 §5); it is retested on the next wave.bug,pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh
Claim: PM loop round 1
Session:
session_01Utp6CbDAucNyQ4UtzCJKyhAccount:
os-billBranch:
claude/project-thread-j9w213(this seat thread's designated push branch for its in-seat subagent dev, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-27446Domain:
domain:uiSeat:
domain:ui#4File surface:
ui/apps/console/src/components/FormPage.tsx(the missing-form throw ~L1737 and the error render),ui/packages/i18n/src/locales/*only if no existing key fits, tests beside, root.changeset/(stop on breach; explain in the report)Container & model:
S,mode:subagent,model: TIER_DEFAULT(dispatch-gates --tieronecd944f5: no path-derived mandate),effort: mediumClause-②: no — expected: the fix reuses an existing localized not-found key. If a new
@object-ui/i18nkey is needed, the dev reports it and the seat amends toyes (widening)and posts a TIER_DEFAULT declaration review.Metadata-protocol: none
Responsibility: a missing /forms/NAME renders the shared localized not-found state in the session language, never the raw English throw; pinned by a test in a non-English session
Thread-read: 6491542295
Premise: holds
Serial constraints cleared: seat 1 PR #27578 (#27496, FormPage.tsx) merged; no open PR touches FormPage.tsx (read 21:1xZ)
Dispatched 2026-10-29T21:12Z to an in-seat subagent of the seat thread (S). ⛔ The subagent posts no claim and writes no assignee.
Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh
os-dev-report
{ "issue": 27446, "status": "done", "branch": "claude/project-thread-j9w213", "pr": "https://github.com/objectstack-ai/objectstack/pull/27739", "head_sha": "722dca524fccdd9884f34f2b15b2b8c2f51094ea", "session": "session_01Utp6CbDAucNyQ4UtzCJKyh", "premise_still_valid": true, "clause_2": "no: no @object-ui/i18n key added and no pack value edited; the fix reuses console.notFound.title / .description / .back, present in all ten packs", "summary": "Premise measured on main d93d9be5: loadInternalForm in ui/apps/console/src/components/FormPage.tsx threw 'Form metadata not found: view/NAME' for any non-OK /meta/view read and the page rendered it verbatim. A 404 now throws a module-private FormNotFoundError held in its own notFound state, and the page draws the console's shared not-found state (the RouteNotFound Empty layout, keys console.notFound.*) in the session language with a Go back button. Non-404 failures keep the error banner, now worded 'Could not load form metadata (STATUS): view/NAME'.", "tests": "head 722dca52. New FormPage.notFound-27446.test.tsx: 3/3 passed (zh: 页面不存在 + 返回 and no Latin word on the page; en: Page not found / Go back; CONTROL: a 500 keeps the error banner). Ablation: FormPage.tsx restored to base d93d9be5, 3/3 failed; restored with git checkout HEAD, hash matched the HEAD blob. All FormPage* suites: pnpm --dir ui exec vitest run apps/console/src/components/FormPage -> Test Files 39 passed (39), Tests 366 passed (366). pnpm --filter @object-ui/console run type-check -> lock VERDICT command-exit 0 (tsconfig includes src, so tests are compiled). No test pinned the old text: a grep of ui/ for 'Form metadata not found' finds only the FormNotFoundError message.", "gates": "local: 33 derived commands each recorded as COMMAND :: exit CODE, all exit 0, reconciled with dispatch-gates --ran: 33 derived, 33 run, 0 NOT-MEASURED, 0 UNRUN. That includes node scripts/check-sdui-manifest.mjs exit 0 and pnpm --dir ui exec vitest run scripts/ (169 passed, 2 skipped). pnpm check:type-check-debt timed out under my 280s per-gate wrapper (exit 124); I re-ran it without the wrapper and its VERDICT was command-exit 0 ('0 raw tsc error(s)'). Also run outside the derivation: pnpm check:changeset-fixed exit 0 and ui check:new-line-citations (0 new citations). CI on PR #27739 when this report was written: Governed Surface Queue Guard success; Lint/Type Check lanes, Check Changeset and Check PR Size in_progress.", "line_budget": "+164 / -3 over 3 files (FormPage.tsx +61/-3, new test +92, changeset +14), under the 3000-line human-merge threshold", "files_changed": [ "ui/apps/console/src/components/FormPage.tsx", "ui/apps/console/src/components/FormPage.notFound-27446.test.tsx", ".changeset/27446-form-not-found-localized.md" ], "deviations": [ "Narrowed test scope, as the seat asked: I ran only the console FormPage* suites, ui scripts/ and the console type-check, not the full app-shell or console vitest suites (over an hour each). The i18n tests were not run because no pack was touched. CI runs the rest.", "The PR body carries the claude-projects-attribution HTML comment on line 2 because the dispatch order requires it verbatim. os-dev forbids HTML comments, with an exception for the harness attribution comment, and this is that comment.", "I added trailers to the local merge commit (amended before its first push). Nothing was force-pushed." ], "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2: fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches op pr_create (PR #27739, read-back identical); post-stamped POST /repos/objectstack-ai/objectstack/issues/27446/comments (this report). git push is not a REST write.", "open_questions": [], "out_of_scope_findings": [ "carrier: none. Noted in the PR's Acceptance notes, not filed (read-only, not reproduced): the public /f/:slug loader loadPublicForm also renders an English 'Failed to load form (STATUS): ...' string verbatim. The other English throws in loadInternalForm (no object target; record link naming another object) are unchanged. Dedupe words: loadPublicForm, Failed to load form, public form i18n, raw English error" ] }objectstack-fleet commentedon Oct 29, 2026
domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh
ACCEPT → PR #27739 comment 6509454672 · 2026-10-29T22:08Z
Generated by Claude Code