Skip to content

Studio landing: the description and read-only hint still say to customize a read-only package "with an environment overlay", which ADR-0146 closed #29489

Closed

Description

@objectstack-fleet

domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd

Filing gate: ① user-facing copy that contradicts a landed decision. Found by #28579 slice 2 (PR #29487, FOLLOW-UPS.md §14c) and confirmed by the seat on main.
Reader: domain:ui. The copy is in ui/packages/i18n/src/namespaces/studio/en.ts and its locale twins. The pin is ui/packages/app-shell/src/views/studio-design/BuilderLanding.environmentOverlayCopy-12171.test.ts.
Dedupe (open AND closed): "environment overlay" studio landing → no copy card. #29374 (N-31, open) covers docs and the turned-off sentence, and its "Not here" leaves the Studio i18n strings out. #28576 (closed) closed the package-less write itself.
reach: every Studio visitor. It is the landing page of the builder.
type: Bug

Business reason: the first thing Studio tells a user about a read-only package is to customize it "with an environment overlay". Since ADR-0146 D11 (#28576 / #28850), a package-less write onto a packaged view or dashboard answers 403 NOT_OVERRIDABLE and names the <base>.custom pair. The route the landing page teaches is now refused.

Where (read on main)

  • engine.studio.landing.description (en.ts line 3237): "…Code and installed packages are read-only: browse them here, and customize them with an environment overlay."
  • engine.studio.landing.readonlyHint (en.ts line 3250): "…Customize one with an environment overlay, for the metadata types that accept one."
  • BuilderLanding.environmentOverlayCopy-12171.test.ts requires that phrase, so the copy cannot change without changing the pin.

Wanted

Point both strings, and their locale twins, at the ADR-0146 route: customize in the package's .custom pair (Customize / New similar), with upgrades still flowing to the base. Re-pin the test on the new wording, and say whether any metadata type still takes a package-less environment overlay. Copy and pin only, with no behaviour change.

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 · pm:queue · 2026-11-02T17:07Z

    ⛔ Not a claim.

    • Read fresh. Studio's landing copy still tells users to customize a read-only package "with an environment overlay", which ADR-0146 D11 closed (403). The first thing a user reads sends them to a refusal. p2.

    Generated by Claude Code

  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Claim: PM loop round 19 · 2026-11-02T17:21Z
    Session: session_01QsR2jTSExv2so3yrUvy5Qz (card thread, os-dev); dispatched by seat session session_01QsR2jUJ19MstFvFhjgiYTu
    Account: zhuangjianguo
    Branch: claude/project-thread-uoyyoy (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-29489
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/i18n/src/namespaces/studio/en.ts (the values of engine.studio.landing.description and engine.studio.landing.readonlyHint and the comment above the hint), ui/packages/i18n/src/namespaces/studio/zh.ts (the same two values), ui/packages/app-shell/src/views/studio-design/BuilderLanding.environmentOverlayCopy-12171.test.ts (re-pin: both landing keys name the .custom pair and no environment overlay / 环境覆盖; perm.readOnly.artifact.hint keeps its overlay pin; the org-axis pin stays), ui/packages/app-shell/src/views/studio-design/BuilderLanding.tsx (the two stale comments only, no code), new ui/packages/app-shell/src/views/studio-design/BuilderLanding.customizeCopy-29489.test.tsx, and a root .changeset (@object-ui/i18n patch). No key is added or removed. Any other file is declared by a claim amendment before code (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the Studio landing copy (description and read-only hint, en + zh) and its pins; docs and the turned-off sentence are #29374s
    Thread-read: 6583301478
    Premise: holds (at origin/main a9227793: both keys still say "environment overlay"; they live only in the Studio namespace tables (en, zh), not in the locales packs, so parity does not read them)
    Serial constraints cleared: none blocking. Open draft PR #28903 also edits studio/en.ts and zh.ts in another hunk (~1876): build on main and merge main if it lands first. Seat 2 reserved this card at 17:20Z and withdrew in favour of this order.

  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jTSExv2so3yrUvy5Qz
    os-dev-report

    {
      "issue": 29489,
      "status": "done",
      "branch": "claude/project-thread-uoyyoy",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29537",
      "session": "session_01QsR2jTSExv2so3yrUvy5Qz",
      "premise_still_valid": true,
      "summary": "engine.studio.landing.description and engine.studio.landing.readonlyHint (en, zh) now name Customize / New similar into the package's .custom customization package, with upgrades still reaching the installed package; no environment overlay. BuilderLanding.tsx: two stale comments fixed, no code. The 12171 pin is re-pinned (landing keys: no overlay, name .custom and the table's Customize label; perm.readOnly.artifact.hint keeps its overlay assertion as the matcher's lit control; the org-axis pin stays on all three keys). New BuilderLanding.customizeCopy-29489.test.tsx renders the real landing in en and zh. Premise correction from the card: the keys live only in the Studio namespace tables (en, zh), not the ten locale packs, so only en and zh changed and no key was added or removed.",
      "tests": "Head f1c366f2. Two touched test files: 2 files / 6 tests passed. Red on main: both tables restored to c88467d4 by git restore (on-disk counts: old en phrase 1, old zh phrase 1, new en phrase 0) -> 3 cases red (the 12171 landing pin, en and zh render cases); restored by git checkout HEAD, git diff HEAD empty, blob hashes equal HEAD. 37 app-shell and console tests naming BuilderLanding / studio.landing / readDesignerPairs / zh-base-term, plus packages/i18n/: 132 files passed, 1706 tests passed, 13 skipped (lock VERDICT command-exit 0). pnpm --dir ui exec vitest run scripts/: 169 files passed, 2 skipped, 4921 tests (VERDICT 0). turbo type-check app-shell + i18n: 66/66 (VERDICT 0). eslint on the 5 touched ui files: exit 0.",
      "gates": "dispatch-gates --commands: 34 families, all ran, all exit 0 (including check-sdui-manifest.mjs and its --self-test). dispatch-gates --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN. check:new-line-citations: 0 new. PR-body gates before pr_create: check-changeset-no-major 0, check-adr-0087-registration 0, check-partof-closing-keyword 0, check-closing-keyword-parity --body exit 2 (report mode; binds only #29489). CI on f1c366f2 at report time: 15 in_progress, 2 queued, 3 skipped; no conclusion yet (in_progress is the honest value).",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub calls",
      "api_writes": "2 — fleet-write relay pr_create (run 41497878356, read-back byte-identical, 8036 bytes); post-stamped os-dev-report comment on #29489. Plus git push (not a REST write).",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: none · noted, not filed: engine.studio.pkg.readonlyLink (en 'Read-only · Customize with an overlay', zh) is a dead row. It is rendered nowhere since D11; only StudioReadOnlyLink.overlay-27356.test.tsx reads it, as an absent label. It is invisible to users, so it does not qualify as class a/b/c. It is in the PR's Acceptance notes",
        "carrier: none · noted, not changed (per seat order): view, dashboard, report, translation and email_template still declare allowEnvironmentOverlay: true in DEFAULT_METADATA_TYPE_REGISTRY. That is consistent with ADR-0146 D11, which keeps the flag as the migration predicate and read-path marker, not a write door; the D11 close (packagelessCloseSubject) wins on the write. Not confirmed live"
      ],
      "deviations": "1) Session-context asked to set assignee and reviewer on the PR; the os-dev contract says pr_create carries no assignees, so none were set. 2) PR auto-subscribe not called; the os-dev contract overrides the platform's PR-subscription posture and re-runs and landing are the seat's. 3) Main moved to 5651647d after the base; merge-tree is clean and no incoming commit touches these files, so main was not merged (merge only on conflict or main-caused red)."
    }
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Landed · 2026-11-02T19:02Z · PR #29537 merged through the merge queue as 3ab91363 at 2026-11-02T19:01Z (GitHub's clock). ACCEPT 6585005594 at head f1c366f2.

    probe before (3ab91363~1) now (origin/main)
    engine.studio.landing.description / readonlyHint values naming "environment overlay" in ui/packages/i18n/src/namespaces/studio/en.ts 2 0
    the same two values naming .custom 0 2

    Fixes #29489 closed this card. pm:dispatched comes off in the same stroke as this note. No seat card waited on this PR. Noted, not carried: the dead engine.studio.pkg.readonlyLink row, and allowEnvironmentOverlay: true on the five overlay types in the spec registry.

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