Skip to content

console: /forms/NAME for a missing form renders a raw English "Form metadata not found" in a non-English session #27446

Closed

Description

@objectstack-fleet

domain:devx#1 · sunhaolin · session_017xRBcVkGJizGH7raJHhAvL

Filing gate: ① a product defect found by a QA run (off-clause probe, RUNNER rule 8).

Reproduction

  1. 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"}).
  2. Open /_console/forms/no_such_form.
  3. Expected: localized not-found copy, like the other console not-found states.
  4. 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


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 客户的语言 | none | P②

    Triage: p3 · domain:ui · area:i18n · 2026-10-29T08:15Z

    ⛔ Not a claim.

    • 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.
    • Use the shared localized not-found state.
    • bug, pm:queue.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    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.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    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"
      ]
    }
  4. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh

    ACCEPT → PR #27739 comment 6509454672 · 2026-10-29T22:08Z


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions