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.
zh-CN: the Studio home button reads "新建软件包(可写 base)" — "base" left untranslated #13131
Filing gate: ① a user-visible UX defect with a named landing point and a reproduction (pm:queue class).
Reader: the objectui lane owning packages/app-shell/src/views/metadata-admin/i18n.ts — the fix PR there.
Dedupe (open AND closed, semantic search on objectstack-ai/objectui): "zh-CN untranslated Studio home new package writable base" → 8 hits (top: #10900, #12688, #5801, #2264, #3979 — all closed, none on this string); none covers this item.
reach: measured in the console UX walkthrough — stock showcase with --seed-admin, framework objectstack-ai/objectstack@54159fd742e5, console pin objectui@12dc7b47c340 (dist stamp equal to the pin), Chromium at 1440x900; re-checked against objectui main source at df943a2 when found and ed28057 when split (the cited files are unchanged between the two).
type: Bug
Split out of #13115 (item 10), which folded fifteen independent defects into one card under the per-fire filing quota, which the maintainer has since ruled does not bind a concentrated test run such as a walkthrough. Split by the 18.0 QA wave dispatch session session_01CfRDy7SuTfUqaTu2AEH2Hi, on the maintainer's instruction there, verbatim: 「#13115 你可以拆」.
Claim: PM loop round 16 (priority:p3)
Session: session_01XVp19E1MYUTFM3dnkwz8gB
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-13131-zh-pkg-new-base
Worktree: objectui-issue-13131
Domain: domain:ui
Seat: domain:ui#2
File surface:
packages/app-shell/src/views/metadata-admin/i18n.ts: zh engine.studio.pkg.new only, plus any other zh row in that table that leaves the same word "base" untranslated in the same sense (enumerate it in the report);
one test beside the table's existing locale pins;
one .changeset/13131-zh-pkg-new-base.md (@object-ui/app-shellpatch).
⛔ No en row changes, no new key. Stop on breach; explain in the report.
Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate)
Clause-②: no (copy only)
Responsibility: the zh row carries an English word | the zh table already translates the term elsewhere | every zh-CN Studio user on the home screen
Thread-read: none
Serial constraints cleared:
objectui#13195 (objectui#13127, another seat, ready) edits other rows of the same i18n.ts. Different lines; whichever lands second merges main.
objectui#13190 (objectui#13126, 7e62822253, same table) landed.
Claimed at: 2026-10-20T09:08Z
os-dev-report
{
"issue": 13131,
"status": "done",
"branch": "claude/issue-13131-zh-pkg-new-base",
"pr": "#13206",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Premise held on origin/main 3cec090: zh engine.studio.pkg.new read '新建软件包(可写 base)'. The zh table already renders a writable base (package) as 基座 (engine.package.writableRequired, engine.packages.detail.duplicated/adoptConfirm/adopted), so per ruling 1 the row now reads '新建软件包(可写基座)'. The sweep (case-insensitive \bbase\b over the zh portion of i18n.ts) found exactly one more row in the same sense, engine.studio.landing.dupTitle '(类似 duplicate base)', now '(类似「复制基座」)'. No en row changed, no key added; a census test plus a patch changeset for @object-ui/app-shell. Card assignee left untouched (baozhoutao); PR assignee baozhoutao read back.",
"files_changed": [
"packages/app-shell/src/views/metadata-admin/i18n.ts (2 zh rows: engine.studio.pkg.new, engine.studio.landing.dupTitle)",
"packages/app-shell/src/views/metadata-admin/zh-base-term.i18n-13131.test.ts (new)",
".changeset/13131-zh-pkg-new-base.md (new, @object-ui/app-shell patch)"
],
"tests": "All at HEAD 270afc1. vitest from repo root, --maxWorkers=1, under os-verify-lock: new test + artifact-locked-banner.i18n.test.ts + studio-locale.i18n.test.tsx -> 'Test Files 3 passed (3) / Tests 10 passed (10)', VERDICT command-exit 0; families naming the changed keys BuilderLanding.duplicateIdRule-11855.test.tsx + BuilderLanding.readonlyRoutes-11808.test.tsx -> 'Test Files 2 passed (2) / Tests 15 passed (15)', VERDICT command-exit 0. Full packages/app-shell/ directory declared to CI. Pins: (a) zh pkg.new no /\bbase\b/i and contains 基座; (b) census over every ENGINE_STRINGS_ZH value read from comment-masked source (scripts/js-comment-mask.mjs), regex /\bbase\b/i on values only, exclusions = keys, comments, identifiers like baseObject; positive control >3000 rows and includes engine.studio.pkg.new; (c) en pkg.new === 'New package (writable base)'. Ablation via objectstack scripts/ablation-replace.mjs restoring old zh row: anchor 1->0, blob ea90fd3092->ec639b7f7b, run 'Tests 2 failed | 1 passed (3)' with (a) and (b) red ('expected [ engine.studio.pkg.new ] to deeply equal []') and (c) green; restore: blob after restore == HEAD blob ea90fd309248, git diff HEAD empty (no dist leg: the test imports ./i18n source directly).",
"gates": {
"build closure pnpm --filter '@object-ui/app-shell^...' build": 0,
"pnpm --filter @object-ui/app-shell type-check (tsconfig.test.json includes src/**/*.test.ts)": 0,
"vitest targeted (2 runs)": "0, 0",
"lint narrowed: eslint --no-inline-config --format json on the 2 changed TS files": "0 — 2 files, 0 errors, 0 warnings; population: both resolve via eslint.config.js (--print-config ok); invariance: no type-aware parserOptions in eslint.config.js",
"check:phantom-deps/self-import/unreferenced-sources/doc-example-readers/handler-key-reads/side-effects-array/element-data-source-declaration/spec-symbols/action-forward-parity/designer-field-key-parity/icon-record-names/i18n-keys/i18n-drift/i18n-designer-parity/control-bytes": "all 0",
"check-hand-rolled-comment-mask.mjs": 0,
"check-changeset-fixed.mjs": 0,
"check-changeset-presence.mjs": 0,
"check:spec-floors": "1 — NOT MEASURED: no-artifact (needs whole-workspace build), expected on main per order, not caused by this diff"
},
"line_budget": "i18n.ts +2/-2; new test 60 lines; changeset 5 lines",
"deviations": [
"The first edits (the two i18n rows, the test and the changeset) were written before AGENTS.md was read; it was read right after, and nothing in it changed the edits (the u-flag/\p{L} i18n regex rule does not apply: the census targets an ASCII Latin word, where \b is the correct boundary, as the PR body states).",
"Labels: the order named none and objectui has no gate that reads them -> zero label writes."
],
"mcp_calls": "0",
"api_writes": "2 relay strokes (objectstack-fleet[bot]) — pr_create (POST /repos/objectstack-ai/objectui/pulls, draft, + POST .../issues/13206/assignees [baozhoutao]); this os-dev-report comment (POST /repos//issues/13131/comments). Plus 2 git pushes (empty branch probe, fix commit).",
"open_questions": [],
"out_of_scope_findings": []
}
Clause-②: no. Copy only; no export, key or en row moves. No contract review is owed, and the seat read the report.
Seat review: the zh table already renders a writable base package as 基座 (engine.package.writableRequired, engine.packages.detail.duplicated / adoptConfirm / adopted). Ruling 1 reuses it: engine.studio.pkg.new reads 「新建软件包(可写基座)」. The ruling-2 sweep found one more row with the same meaning, engine.studio.landing.dupTitle, now 「(类似「复制基座」)」. Identifiers such as baseObject and the keys are untouched.
Pins: (a) the zh row carries no Latin base and contains 基座. (b) A census over every zh value, read with comments masked, finds no \bbase\b; its positive control spans more than 3000 rows. (c) CONTROL: the en row is unchanged. The ablation turned (a) and (b) red with (c) green, and the restore was proven by blob. The BuilderLanding families that read these keys are green.
Changeset: @object-ui/app-shellpatch.
CI: all 36 check-runs completed on the head, 33 passed and 3 skipped.
Path fork: no governed path. Seat landing.
Findings: none.
Next: ready + auto-merge; landing is verified by content on main.
Verified by content: 2 of the 3 files the PR changes have the same blob at 2af42d9e50 as at the accepted head 270afc12b3. i18n.ts also carries changes that landed first; there the PR's own hunks are identical in the merge. The merge message carries no model identifier.
Landed: zh Studio home reads 「新建软件包(可写基座)」, and engine.studio.landing.dupTitle reads 「(类似「复制基座」)」. Both use the term the zh table already uses. A census pin keeps a bare base out of zh values.
Activity
objectstack-fleet commentedon Oct 20, 2026
Claim: PM loop round 16 (
priority:p3)Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-13131-zh-pkg-new-baseWorktree:
objectui-issue-13131Domain:
domain:uiSeat:
domain:ui#2File surface:
packages/app-shell/src/views/metadata-admin/i18n.ts: zhengine.studio.pkg.newonly, plus any other zh row in that table that leaves the same word "base" untranslated in the same sense (enumerate it in the report);.changeset/13131-zh-pkg-new-base.md(@object-ui/app-shellpatch).⛔ No en row changes, no new key. Stop on breach; explain in the report.
Container & model:
S,mode:subagent,model: opus(default tier; no path-derived mandate)Clause-②: no (copy only)
Responsibility: the zh row carries an English word | the zh table already translates the term elsewhere | every zh-CN Studio user on the home screen
Thread-read: none
Serial constraints cleared:
i18n.ts. Different lines; whichever lands second mergesmain.7e62822253, same table) landed.Claimed at: 2026-10-20T09:08Z
Generated by Claude Code
fix(app-shell): translate "base" in zh Studio home package button (#1…
objectstack-fleet commentedon Oct 20, 2026
os-dev-report
{
"issue": 13131,
"status": "done",
"branch": "claude/issue-13131-zh-pkg-new-base",
"pr": "#13206",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Premise held on origin/main 3cec090: zh engine.studio.pkg.new read '新建软件包(可写 base)'. The zh table already renders a writable base (package) as 基座 (engine.package.writableRequired, engine.packages.detail.duplicated/adoptConfirm/adopted), so per ruling 1 the row now reads '新建软件包(可写基座)'. The sweep (case-insensitive \bbase\b over the zh portion of i18n.ts) found exactly one more row in the same sense, engine.studio.landing.dupTitle '(类似 duplicate base)', now '(类似「复制基座」)'. No en row changed, no key added; a census test plus a patch changeset for @object-ui/app-shell. Card assignee left untouched (baozhoutao); PR assignee baozhoutao read back.",
"files_changed": [
"packages/app-shell/src/views/metadata-admin/i18n.ts (2 zh rows: engine.studio.pkg.new, engine.studio.landing.dupTitle)",
"packages/app-shell/src/views/metadata-admin/zh-base-term.i18n-13131.test.ts (new)",
".changeset/13131-zh-pkg-new-base.md (new, @object-ui/app-shell patch)"
],
"tests": "All at HEAD 270afc1. vitest from repo root, --maxWorkers=1, under os-verify-lock: new test + artifact-locked-banner.i18n.test.ts + studio-locale.i18n.test.tsx -> 'Test Files 3 passed (3) / Tests 10 passed (10)', VERDICT command-exit 0; families naming the changed keys BuilderLanding.duplicateIdRule-11855.test.tsx + BuilderLanding.readonlyRoutes-11808.test.tsx -> 'Test Files 2 passed (2) / Tests 15 passed (15)', VERDICT command-exit 0. Full packages/app-shell/ directory declared to CI. Pins: (a) zh pkg.new no /\bbase\b/i and contains 基座; (b) census over every ENGINE_STRINGS_ZH value read from comment-masked source (scripts/js-comment-mask.mjs), regex /\bbase\b/i on values only, exclusions = keys, comments, identifiers like baseObject; positive control >3000 rows and includes engine.studio.pkg.new; (c) en pkg.new === 'New package (writable base)'. Ablation via objectstack scripts/ablation-replace.mjs restoring old zh row: anchor 1->0, blob ea90fd3092->ec639b7f7b, run 'Tests 2 failed | 1 passed (3)' with (a) and (b) red ('expected [ engine.studio.pkg.new ] to deeply equal []') and (c) green; restore: blob after restore == HEAD blob ea90fd309248, git diff HEAD empty (no dist leg: the test imports ./i18n source directly).",
"gates": {
"build closure pnpm --filter '@object-ui/app-shell^...' build": 0,
"pnpm --filter @object-ui/app-shell type-check (tsconfig.test.json includes src/**/*.test.ts)": 0,
"vitest targeted (2 runs)": "0, 0",
"lint narrowed: eslint --no-inline-config --format json on the 2 changed TS files": "0 — 2 files, 0 errors, 0 warnings; population: both resolve via eslint.config.js (--print-config ok); invariance: no type-aware parserOptions in eslint.config.js",
"check:phantom-deps/self-import/unreferenced-sources/doc-example-readers/handler-key-reads/side-effects-array/element-data-source-declaration/spec-symbols/action-forward-parity/designer-field-key-parity/icon-record-names/i18n-keys/i18n-drift/i18n-designer-parity/control-bytes": "all 0",
"check-hand-rolled-comment-mask.mjs": 0,
"check-changeset-fixed.mjs": 0,
"check-changeset-presence.mjs": 0,
"check:spec-floors": "1 — NOT MEASURED: no-artifact (needs whole-workspace build), expected on main per order, not caused by this diff"
},
"line_budget": "i18n.ts +2/-2; new test 60 lines; changeset 5 lines",
"deviations": [
"The first edits (the two i18n rows, the test and the changeset) were written before AGENTS.md was read; it was read right after, and nothing in it changed the edits (the u-flag/\p{L} i18n regex rule does not apply: the census targets an ASCII Latin word, where \b is the correct boundary, as the PR body states).",
"Labels: the order named none and objectui has no gate that reads them -> zero label writes."
],
"mcp_calls": "0",
"api_writes": "2 relay strokes (objectstack-fleet[bot]) — pr_create (POST /repos/objectstack-ai/objectui/pulls, draft, + POST .../issues/13206/assignees [baozhoutao]); this os-dev-report comment (POST /repos//issues/13131/comments). Plus 2 git pushes (empty branch probe, fix commit).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
ACCEPT — PR #13206 @
270afc12b3f6e98b147996be0e2a21ecf5d12d0e·domain:uiseat 2 (session_01XVp19E1MYUTFM3dnkwz8gB)engine.package.writableRequired,engine.packages.detail.duplicated/adoptConfirm/adopted). Ruling 1 reuses it:engine.studio.pkg.newreads 「新建软件包(可写基座)」. The ruling-2 sweep found one more row with the same meaning,engine.studio.landing.dupTitle, now 「(类似「复制基座」)」. Identifiers such asbaseObjectand the keys are untouched.baseand contains 基座. (b) A census over every zh value, read with comments masked, finds no\bbase\b; its positive control spans more than 3000 rows. (c) CONTROL: the en row is unchanged. The ablation turned (a) and (b) red with (c) green, and the restore was proven by blob. TheBuilderLandingfamilies that read these keys are green.@object-ui/app-shellpatch.Next: ready + auto-merge; landing is verified by content on
main.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Landed ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gBmain2af42d9e50.2af42d9e50as at the accepted head270afc12b3.i18n.tsalso carries changes that landed first; there the PR's own hunks are identical in the merge. The merge message carries no model identifier.engine.studio.landing.dupTitlereads 「(类似「复制基座」)」. Both use the term the zh table already uses. A census pin keeps a barebaseout of zh values.pm:dispatchedis removed.Generated by Claude Code
fix(app-shell): translate "base" in the zh Studio home new-package bu…