Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Delete the dead configPanel.* (~16 keys) and renderer.* (~13 keys) i18n namespaces across the ten packs #4746

Closed

Description

@yinlianghui

Part of #4730 — the second mechanically-safe carve-out of its CONFIRMED tier, following #4742 (workflow.* + publicForm.demo.*, landed as PR #4743). The umbrella stays open for console.objectView.* (maintainer decision pending) and the partially-live namespaces (search, table, report, form, appDesigner — key-level trims, not whole-namespace).

PM spot-check (2026-08-15, origin/main post-PR #4743)

Both namespaces pass the #4658 / PR #4731 evidence standard at the whole-namespace level:

  1. configPanel.* (16 keys: save/discard/close/layout/columns/gap/rowHeight/data/refreshInterval/appearance/title/showDescription/theme/configuration/general/advanced) — a dashboard-widget config-panel vocabulary. Zero t() call sites repo-wide; no component named *ConfigPanel* exists anywhere in packages/*/src — the panel this vocabulary was written for either never landed or was replaced.
  2. renderer.* (13 keys: noPageSchema/noFormSchema/noDashboardSchema/pageRendering/dashboardRendering/formRenderingMode/formRenderingFor/createRecord/editRecord/page/dashboard/save/cancel) — SchemaRenderer placeholder/status vocabulary. Zero t() call sites, and the English strings have no hardcoded twin anywhere either (grep "No page schema provided" etc. → zero hits outside packs) — unlike workflow.*, the messages themselves are gone from the product, which is the stronger form of dead.

Umbrella measurement agrees: configPanel 16 CONFIRMED / 0 NEEDS-REVIEW, renderer 13 CONFIRMED / 0 NEEDS-REVIEW.

Deliverables

  • Re-run node scripts/check-i18n-dead-keys.mjs at your tree first (numbers may have drifted); verify every key in both namespaces is CONFIRMED-tier; if any key has gained a reader, exclude it and say so.
  • Delete both namespaces from all ten packs; post-deletion the dead-keys report lists neither; check-i18n-call-site-keys stays green; check-i18n-en-drift abstains.
  • Check the i18n test fixtures (ellipsis-glyph-3878, untranslated-identity-4376, and any other key-pinning fixture) for mentions — handle per the Delete the two spot-verified dead i18n namespaces: workflow.* (54 keys) and publicForm.demo.* (36 keys) across the ten packs #4742 precedent: a fixture pinning those specific keys gets its rows deleted with reasoning; the ellipsis census note explains count drops.
  • Check both i18n baseline JSONs (i18n-en-drift-baseline.json, i18n-call-site-key-baseline.json) name no key in either namespace.
  • Changeset: @object-ui/i18n patch stating counts and that no reader exists.

Out of scope

console.objectView.*, the partially-live namespaces (search has 7 live call sites in SearchResultsPage.tsx; table/report/form have NEEDS-REVIEW entries), red-ifying the script.

PR discipline

PR body line 1: Part of #4730 — no closing keyword; line 2: Fixes #<this issue> as the sole closing keyword.

Activity

  1. self-assigned this
    on Aug 15, 2026
  2. yinlianghui commented on Aug 15, 2026

    @yinlianghui
    ContributorAuthor
    {
      "issue": 4746,
      "branch": "claude/issue-4746-dead-namespaces-round-two",
      "pr_number": 4747,
      "head_sha": "f525dda2263019f07a02e919fbd011688bebd49c",
      "status": "done",
      "premise_still_valid": true,
      "summary": "Deleted configPanel.* (16 keys) and renderer.* (13 keys) from all ten locale packs (330 deletions, 33 lines per pack) plus a @object-ui/i18n patch changeset. Re-measured first: both namespaces were 16/16 and 13/13 CONFIRMED with zero NEEDS-REVIEW at this tree, so no key was excluded. Post-deletion the dead-keys report drops exactly 29 keys (2839 to 2810 pack keys, 294 to 265 CONFIRMED, NEEDS-REVIEW unchanged at 238) with no other key entering or leaving either tier.",
      "mechanism_assumptions_checked": [
        "Re-measure before edit: dead-keys report at this tree scored configPanel 16 CONFIRMED / 0 NR and renderer 13 CONFIRMED / 0 NR, matching the card. No key had gained a reader; nothing excluded.",
        "Zero t()/tt() call sites for both namespaces across packages, apps, examples, e2e, scripts, docs, and zero object-path access (.configPanel / .renderer) in any src tree.",
        "Zero textual footprint: fixed-string grep of all 29 keys repo-wide returns NOTHING outside packages/i18n/src/locales/ (cleaner than the #4742 round, which had four fixture mentions).",
        "renderer.* hardcoded-twin check: 'No page schema provided', 'No form schema provided', 'No dashboard schema provided', 'Page rendering', 'Dashboard rendering', 'Form rendering in' and the templated 'for record {' each return zero hits outside the packs; packages/react/src/SchemaRenderer.tsx imports no translation hook.",
        "FALSIFIED sub-claim (see deviations): the card's 'no *ConfigPanel* component exists anywhere in packages/*/src' is wrong — four exist. Replaced with a sharper check: the two panels whose wording matches configPanel.* (plugin-dashboard WidgetConfigPanel.tsx, DashboardConfigPanel.tsx) import no translation hook and hardcode English; the two that do use i18n read other namespaces (ViewConfigPanel -> console.objectView.*, ReportConfigPanel -> common.* + report.editor.*). The deletion premise is unaffected.",
        "Key-pinning fixtures: ellipsis-glyph-3878 CONVERGED_KEYS (33 entries) and untranslated-identity-4376 LEGITIMATE_IDENTITIES contain none of the 29 keys, and no other file in packages/i18n/src pins them. Nothing to delete, no census note needed.",
        "Both baselines clean: scripts/i18n-en-drift-baseline.json and scripts/i18n-call-site-key-baseline.json name no key in either namespace (grep count 0 in both).",
        "Reverse verification (fixture-guard form inapplicable, no fixture changed): with the fix committed, de.ts alone restored to origin/main. Predicted red; observed red — 'de defines no key that en lacks' / 'de has 29 key(s) absent from en'. Restored from the branch; git diff --stat HEAD empty; suite re-run green from the restored state.",
        "Deletion script asserted the closing line of each block was exactly '  },' and that each block held 16/13 keys, no comments, no nesting, in all ten packs — uniform 18 + 15 lines removed per pack."
      ],
      "gates": {
        "check-i18n-dead-keys": "exit 0 — neither namespace appears; 2810 pack keys, 503 candidates, 265 CONFIRMED, 238 NEEDS-REVIEW",
        "check-i18n-call-site-keys": "exit 0 — every in-scope call-site key resolves against the en pack (2810 keys)",
        "check-i18n-en-drift": "exit 0 — abstains: 0 en values changed (0 added, 29 removed, those are all-locales-key-parity's)",
        "vitest packages/i18n/": "45 files, 804 tests passed (all-locales-key-parity included)",
        "pack-consumer sweep outside packages/i18n": "18 files, 252 tests passed — the builtInLocales importers (app-shell RecordFormPage/chrome/organizations, plugin-grid ImportWizard parity, console AcceptInvitationRoute) plus the three check-i18n script tests",
        "type-check (@object-ui/i18n)": "exit 0",
        "lint (@object-ui/i18n)": "0 errors, 35 pre-existing warnings — none in src/locales/",
        "check-changeset-presence": "exit 0 — 10 source files changed, 1 changeset",
        "check-changeset-fixed / check-changeset-no-major": "exit 0 / exit 0",
        "check-control-bytes": "exit 0 — 4263 tracked text files",
        "other repo gates (7)": "check-action-forward-parity, check-doc-links, check-lint-coverage, check-phantom-dependencies, check-skills-paths, check-spec-symbol-derivation, check-type-check-coverage — all exit 0 (none implicated by a locale-pack deletion; run as insurance since this repo has no dispatch-gates helper)",
        "CI on PR #4747": "in_progress at report time — reported at draft-PR time per contract; mergeable_state was 'unstable' (checks still running), not a red result"
      },
      "deviations": [
        "The issue's supporting claim 'no component named *ConfigPanel* exists anywhere in packages/*/src' is false at this tree — ViewConfigPanel.tsx, ReportConfigPanel.tsx (app-shell), WidgetConfigPanel.tsx, DashboardConfigPanel.tsx (plugin-dashboard) all exist. The conclusion survives on the stronger evidence recorded in the PR body; the card's sentence should not be re-used verbatim in the umbrella.",
        "Deliverable 3 (fixture rows) resolved to a verified no-op: no fixture pins any of the 29 keys, so no rows were deleted and no census note was written. The prescribed fixture-guard reverse verification was therefore inapplicable; a pack-omission ablation against all-locales-key-parity was run instead, which is the guard that actually protects this change.",
        "No skip-changeset label applied (per dispatch instruction; a changeset is present and check-changeset-presence is green).",
        "Commit trailer is 'Co-authored-by: Claude <noreply@anthropic.com>' — matching the #4743 precedent commit and the 'no model identifier' instruction; the harness's default model-named trailer and session line were omitted from the commit. The session-URL attribution footer is on the PR body as required."
      ],
      "followups_filed": [
        "filed as #4748 (unassigned, unlabeled): plugin-dashboard WidgetConfigPanel/DashboardConfigPanel hardcode ~61 English labels and import no translation hook, so the dashboard config sidebar stays English in every locale — the surface the deleted configPanel.* vocabulary was written for. Searched first: #4024 and #1713 are the same class but closed and about other files; no open issue covers these two. States explicitly that the deletion neither creates nor deepens the gap."
      ]
    }

    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions