i18n(metadata-admin): delete four dead ENGINE_STRINGS keys - #8687
Merged
Conversation
`engine.directory.allPackages`, `engine.directory.packageFilter`, `engine.list.allPackages` and `engine.list.packageFilter` occurred nowhere in the repository except their own two definition lines each — no `t()` call site, no template head, no test, no doc. Removed from both `ENGINE_STRINGS_EN` and `ENGINE_STRINGS_ZH`: eight lines, no other key touched. Re-measured on this tree before deleting, one command per key over `packages apps examples e2e content docs scripts`, plus a lit control on the same command shape (`engine.directory.quickFind`) which returned `DirectoryPage.tsx`, `StudioHomePage.tsx` and its own two definition lines. The control is what makes the four empty readings measurements rather than a grep that never reached the corpus. Both pages do have a package filter UI today, so the labels most likely outlived a rewrite of it — stated as probable history, not as a measured fact. No new pin: the keys had no readers, and a pin over a key nobody reads is the same defect as the key. The retirement instrument for the rest of the table is a separate, deliberately unstarted piece of work. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YBWFb5YgMU5dw8p2VKj16S
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
os-justin
marked this pull request as ready for review
September 8, 2026 22:30
os-justin
enabled auto-merge
September 8, 2026 22:30
This was referenced Sep 8, 2026
This was referenced Sep 9, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #8547
Eight lines.
engine.directory.allPackages,engine.directory.packageFilter,engine.list.allPackagesandengine.list.packageFilterare gone from bothENGINE_STRINGS_ENandENGINE_STRINGS_ZHinpackages/app-shell/src/views/metadata-admin/i18n.ts. No other key touched, no gate added, no pin added.The precondition is the whole job, and it is this PR's evidence
The card's readings were taken on
34c22ad39. They were re-taken here on this branch's base7cdd2b922, before anything was deleted — one command per key over the same population, plus a lit control on the same command shape.Every one of the four returns exactly its own two definition lines and nothing else — no
t()call site, no template head, no test, no doc.The lit control, same command shape, same population:
⇒ The probe fires on this corpus — two reader files plus its own two definition lines, exactly as the card predicts. That is what makes the four empty readings measurements rather than a grep that never reached the files. The single elision above is the JSX tail of one hit; the file, the line number and the
t()call are verbatim.Addresses were re-derived, not trusted. The card's line numbers happened not to have drifted on this base, but nothing here reads a line number: the deletion matches the two-space-indented key literal in the source and asserts it removed exactly 8 lines (4700 lines before, 4692 after).
engine.package.writableRequired, which sits between the twoengine.list.*deletions in theentable, is untouched — visible in the diff. (Addresses moving is not hypothetical: after the merges below, thezhcontrol hit is ati18n.ts:2123, not:2126.)Two supplementary sweeps, because a literal grep cannot see a composed key
Both report-only additions to the card's instrument, not replacements for it:
git grep -n 'allPackages'andgit grep -n 'packageFilter'. The only other hits are unrelated identifiers —useMetadata.ts'sallPackagesstate field,DirectoryPage.tsx'spackageFilterprop, one line ofcontent/docs/guide/metadata-diagnostics.md. None of them is an i18n key.t()call underviews/metadata-admin/. Theengine.directory.namespace has no dynamic construction at all; the onlyengine.list.one ist(`engine.list.source.${row.source}`), whose static head cannot reach either deleted name.The collision with PR #8675 — it landed mid-flight, and the greps were re-run after
mainmoved twice while this was in flight, and both times the branch was synced by merge (never rebase, never force-push):plugin-designer) — merged in at9f038346b. Five readings re-taken: four zeros, control firing.objectui#8057's server-refusal gate, armed on this same file) — landed as9073cf018after this PR was opened, and is merged in atbb7734689, the head everything below is measured on.The prediction held: different regions, clean merge. Against the pre-merge baseline the file now reads
+2 / -8— #8675's two new keys and my eight deletions, no conflict and no lost line. Both landed ranges were also checked directly for a new reader (git diff <range> | grepfor the four names): none.The five readings at
bb7734689, after the merges:The control still fires on the post-merge tree, so the four zeros are still measurements and not a grep that stopped reaching the corpus.
Why there is no new pin — stated rather than manufactured
These keys had no readers. A pin asserting their absence would be a second artefact over a name nobody asks for, which is the same defect as the key itself. The retirement instrument for the other 1489 keys is objectui#8388's deliverable and is deliberately not started here; the one existing table gate,
previews/__tests__/block-config-i18n.test.ts, is scoped toengine.inspector.pageBlock.*by its own header and is untouched by this diff.Changeset: empty frontmatter, and why that is the honest declaration
@object-ui/app-shellpublishes, andcheck-changeset-presence.mjscorrectly demands a declaration for any edit under itssrc/. The declaration is an empty-frontmatter changeset (the gate's own explicit exemption; theskip-changesetlabel is not a mechanism in this repo). Evidence for "releases nothing":t()is exported fromviews/metadata-admin/index.tsbut not from the package entrypackages/app-shell/src/index.ts, and the package'sexportsmap offers only.and./styles.css— so no consumer of the tarball can reach these keys. Nothing rendered changes, because nothing rendered them.Verification — every reading at
bb7734689, the final headpnpm exec vitest run packages/app-shell/src/views/metadata-admin/pnpm exec vitest run packages/i18n/pnpm exec turbo run type-check --filter=@object-ui/app-shelltsc --noEmit && tsc -p tsconfig.test.json)pnpm exec eslint packages/app-shell/src/views/metadata-admin/i18n.tspackages/i18n/is run because three of its tests read the designer table's source by path.Gate verdict lines, quoted from the gates themselves rather than from an exit code:
check:i18n-keys— exit 0: "Every in-scope call-site key resolves against the en pack (2976 keys) … and every dynamic key family either checks its members against a declared vocabulary or says in writing why it has none." (1152 call sites classifiedmodule-local table— this designer bundle is skipped by declaration, so the gate is blind to the deletion by construction; recorded, not claimed as coverage.)check:i18n-drift— exit 0: "Compared the ten locale packs at 9073cf0 (merge-base with origin/main) with the working tree: 0 en value(s) changed … No en value changed in this range." (This table is not one of the ten packs; the gate is likewise structurally blind to it.)check:control-bytes— exit 0: "check-control-bytes: OK (scanned 6880 tracked text file(s); skipped 85 binary)."check-changeset-presence.mjs— exit 0: "1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s) … Every one of them has an EMPTY frontmatter — declared as releasing nothing, which is the explicit exemption and a complete answer to this gate."check-changeset-no-major.mjs— exit 0: "No changeset declares amajorbump."Type-check is a real reading, not the unbuilt-tree precondition. It ran through turbo with the dependency closure built, so it is not the
TS2307-for-every-workspace-import failure the card warns about.check:doc-snippets/check:readme-exports/check:eager-closurewere not run and are recorded as NOT MEASURED; this diff deletes two entries from twoRecordliterals in one non-exported module, so there is no doc snippet, README export or eager-closure surface for it to move.Fences honoured
mainis 8 deletions and 0 insertions ini18n.ts, plus the changeset.🤖 Generated with Claude Code
https://claude.ai/code/session_01YBWFb5YgMU5dw8p2VKj16S
Generated by Claude Code