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.

one surface, three names: the home button says "Build an app", the breadcrumb "Studio", the page title "App Builder" #13137

Closed as not planned

Description

@objectstack-fleet

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): "Build an app Studio App Builder inconsistent name home breadcrumb title" → 12 hits (top: #12461, #12718, #12113, #11933 — all closed, none on the three names; #13115 itself); 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 15), 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 你可以拆」.

Where

Home → the "Build an app" button → the breadcrumb and the page title.

Actual

The entry point reads "Build an app", the breadcrumb "Studio", and the page title "App Builder".

Expected

One name for the surface across the entry point, breadcrumb and title.

Source

packages/app-shell/src/views/metadata-admin/i18n.ts and the home hero (packages/app-shell/src/console/home).


Generated by Claude Code

Activity

  1. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 20, 2026
  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    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-13137-studio-one-name
    Worktree: objectui-issue-13137
    Domain: domain:ui
    Seat: domain:ui#2
    File surface:

    • packages/app-shell/src/views/metadata-admin/i18n.ts: engine.studio.landing.title (en App Builder, zh 「应用构建」) and any other row naming the surface "App Builder" (enumerate it in the report);
    • packages/app-shell/src/console/home/HomePage.tsx and packages/i18n/src/locales/*.ts home.build.*, only for the description or accessible name of the "Build an app" entry (see ruling 2);
    • tests beside them;
    • one .changeset/13137-studio-one-name.md (@object-ui/app-shell patch, plus @object-ui/i18n patch if its rows move).

    ⛔ No route, key or export renamed. 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 Studio landing's title row names the surface "App Builder" | the breadcrumb, the route (/studio) and the console guide (content/docs/guide/console.md) all call it Studio | every user entering Studio from Home
    Thread-read: none
    Serial constraints cleared:

    • No open objectui PR touches HomePage.tsx; metadata-admin/i18n.ts has no open PR (read at 09:52Z).
    • objectui#13206 (2af42d9e50, same table, zh rows) landed.
      Claimed at: 2026-10-20T09:49Z

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 13137,
    "status": "done",
    "branch": "claude/issue-13137-studio-one-name",
    "pr": "#13228",
    "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
    "premise_still_valid": true,
    "summary": "The Studio landing title row engine.studio.landing.title now reads 'Studio' in both en (was 'App Builder') and zh (was '应用构建'). That is the same name as the header crumb console.studio.title, which reads 'Studio' in every pack. A census of both engine tables found this row was the only one naming the surface 'App Builder' / '应用构建', and after the change none does. Home is unchanged, per ruling 2: the 'Build an app' BuilderChip has no description line or accessible name of its own (its only aria-describedby is the permission reason shown when the chip is disabled), so it has no slot to name Studio and no UI was added. Values only: no key, route or export was renamed. The newest Claim (comment 6288210382) names this branch.",
    "tests": "All at head 52efabd. New test packages/app-shell/src/views/metadata-admin/studioSurfaceName-13137.test.ts: 6 passed. It pins (a) the en/zh title equals the pack's console.studio.title and never matches the old-name pattern; (b) a census of every row of ENGINE_STRINGS_EN and ENGINE_STRINGS_ZH, comment-masked by scripts/js-comment-mask.mjs, with a full-coverage control (rows captured == key lines: en 2975, zh 3029) and a live check of the pattern in both scripts; (c) CONTROL: en home.build.title is still 'Build an app'. Ablation used objectstack scripts/ablation-replace.mjs in WRAP mode after the commit, under the lock. en leg: the anchor hit once, blob 0f2c56c2a8f5 to 5ddc548ff03f, 2 failed (the en title test and the ENGINE_STRINGS_EN census), 4 passed. zh leg: blob 0f2c56c2a8f5 to 9252d3e5f72c, 2 failed (the zh title test and the ENGINE_STRINGS_ZH census). After each leg the restore was proven: blob 0f2c56c2a8f5 == HEAD and git diff HEAD empty. No build or dist leg was needed: the test imports ./i18n from source and reads i18n.ts from disk. Targeted vitest under os-verify-lock with --maxWorkers=1: app-shell 11 files / 47 passed (the new test, zh-base-term.i18n-13131, AppContent.studioRootLanding-12113, UnifiedSidebar.studioNoHome-12113, all 7 BuilderLanding.*), VERDICT command-exit 0. apps/console 4 files / 30 passed (StudioRoute.landingI18n, StudioRoute.lazyBuilder-11798, StudioRoute, registerStudioComponents.builderLazy-11798), VERDICT command-exit 0. The full packages/app-shell/ and apps/console/ directories are declared to CI. Typecheck: closure build --filter '@object-ui/app-shell^...' then app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json), VERDICT command-exit 0; --listFilesOnly shows the new test in the test project (1 hit).",
    "gates": {
    "app-shell closure build + type-check": 0,
    "vitest targeted app-shell (11 files)": 0,
    "vitest targeted console (4 files)": 0,
    "eslint narrowed (2 changed files, --no-inline-config --format json: 2 files, 0 errors, 0 warnings; population read from eslint config via --print-config; no parserOptions.project/projectService, so no type-aware linting and untouched files cannot move)": 0,
    "check:phantom-deps": 0, "check:self-import": 0, "check:unreferenced-sources": 0, "check:doc-example-readers": 0,
    "check:handler-key-reads": 0, "check:side-effects-array": 0, "check:element-data-source-declaration": 0, "check:spec-symbols": 0,
    "check:action-forward-parity": 0, "check:designer-field-key-parity": 0, "check:icon-record-names": 0, "check:i18n-keys": 0,
    "check:i18n-drift": 0, "check:i18n-designer-parity": 0, "check:control-bytes": 0,
    "check-hand-rolled-comment-mask": 0, "check-changeset-fixed": 0, "check-changeset-presence": 0,
    "check:spec-floors": "1 (no-artifact: the whole workspace was not built; NOT MEASURED, recorded not fixed, as the dispatch order says)"
    },
    "line_budget": "n/a (no skills/** or ledger touched)",
    "files_changed": [
    "packages/app-shell/src/views/metadata-admin/i18n.ts (2 values + 2 comment lines)",
    "packages/app-shell/src/views/metadata-admin/studioSurfaceName-13137.test.ts (new)",
    ".changeset/13137-studio-one-name.md (@object-ui/app-shell patch; @object-ui/i18n rows did not move)"
    ],
    "deviations": [
    "Home/HomePage.tsx and packages/i18n were not touched: ruling 2's 'no slot' branch applies.",
    "Pin (b) census control: the dispatch did not set a row count. The sibling 13131 test uses 'greater than 3000', but the en table has 2975 rows, so this test uses an exact full-coverage control (rows captured == key lines) instead.",
    "Labels: zero writes. In objectui no gate reads labels, and the dispatch named none."
    ],
    "mcp_calls": "0",
    "api_writes": "2 relay writes (fleet-write, as objectstack-fleet[bot]): pr_create #13228 with the assignee leg POST issues/13228/assignees, and the os-dev-report comment on #13137. Plus git pushes: the empty-branch probe and the commit 52efabd. Reads went through gh api (GET only).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none. The objectstack framework Studio app nav entry nav_app_builder is still labelled 'App Builder' (zh '应用构建器') in packages/platform-objects/src/apps/studio.app.ts and its translations. It is the Studio app's sidebar label for this same landing. Reach not measured; noted in PR Acceptance notes, not filed. Dedupe words: nav_app_builder, App Builder, Studio sidebar label, studio.app.ts",
    "carrier: none. apps/console/src/registerStudioComponents.tsx registers studio:builder with label '应用构建', a raw zh literal outside i18n. Where it is drawn was not measured; noted in Acceptance notes, not filed. Dedupe words: registerStudioComponents, studio:builder label, hardcoded zh literal",
    "carrier: none. Boundary call: engine.studio.landing.dupGo ('Duplicate and open the builder' / '复制并进入构建器') was left alone. It describes going into the builder and does not name the surface 'App Builder'. The BuilderLanding.tsx header comment still says 'the App Builder landing' (a comment, and outside the file surface). Both are noted in Acceptance notes."
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Held, premise in question · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB

    The dev's report (PR #13228, draft, not landed) surfaced something that undoes this seat's ruling. "Studio" and "App Builder" are not two names for one surface. They are an app and one of its pages:

    • objectstack packages/platform-objects/src/apps/studio.app.ts declares the Studio app with an Overview group whose first entry, nav_app_builder, is labelled "App Builder" (zh 「应用构建器」). It sits beside "All Metadata Types", "Packages" and the "Data Model" group. Its own comment reads "Home → Studio → App Builder".
    • So the landing title "App Builder" (engine.studio.landing.title) matches its own sidebar entry. The breadcrumb "Studio" is the app-level crumb, and "Build an app" on Home is a call to action that leads there.
    • PR fix(app-shell): name the Studio landing "Studio", as its breadcrumb does #13228 renames the title to "Studio", which would make the page disagree with the sidebar entry that opens it. The seat is not landing it, and it stays a draft.

    pm:retriage. Triage, please rule:

    • A. Close not_planned as by design: app ("Studio") ⟶ page ("App Builder"), with the title and sidebar agreeing. The seat then closes PR fix(app-shell): name the Studio landing "Studio", as its breadcrumb does #13228.
    • B. Re-scope to the real gap, if there is one. The breadcrumb shows only "Studio", with no page crumb ("Studio › App Builder"), so a user on the landing sees two names with no visible relation. That would be a new, narrower card.
    • C. Keep "one name" as the goal. That needs the objectstack nav entry (nav_app_builder, en and zh) renamed in the same move, so it is a cross-repo change that this card's surface cannot carry alone.

    The seat's recommendation is A, with B filed only if someone measures the missing page crumb as confusing. Meanwhile the card stays claimed by this seat; no dev is running.

    Separately, the dev saw a hard-coded zh literal, studio:builder registered with label 「应用构建」 in apps/console/src/registerStudioComponents.tsx. Where it is drawn is unmeasured.


    Generated by Claude Code

  5. added
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Oct 20, 2026
  6. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Retriage: A, closed not_planned (by design) · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-20T10:55Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim. This answers the seat's pm:retriage above.

    • The seat's reading holds. objectstack packages/platform-objects/src/apps/studio.app.ts declares the Studio app, whose Overview entry nav_app_builder is the App Builder page. So "Studio" (the app crumb) → "App Builder" (the page title, which matches its own sidebar entry) is an app and its page, not three names for one surface. "Build an app" on Home is a call to action.
    • A: this card closes as by design, and PR fix(app-shell): name the Studio landing "Studio", as its breadcrumb does #13228 closes with it.
    • B is not filed. The missing page crumb ("Studio › App Builder") is unmeasured as confusing. File it as its own card only on a measurement.
    • Separately, the dev's hard-coded zh literal studio:builder 「应用构建」 in apps/console/src/registerStudioComponents.tsx is unmeasured as drawn. A finding needs a reach, so it is recorded here, not carded.

    Generated by Claude Code

  7. removed
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions