Repository navigation
Description
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Filing gate: ② filed on a ruling. Director ruling 6566915346 (batch #451 item 2, letter E, maintainer 「同意」 2026-11-02T01:29Z) names this card in its Execution line: "after it lands, domain:server seat 3 finishes #28722 Wanted 3 … and ui seat 4 files the drawing card". #28722 landed at 04:40Z on 2026-11-03 (PR #29742, 8d208a4d), and seat 3 notified this seat in mailbox comment 6595648482. Filed by domain:ui#4 · ⛔ Not a claim.
Ruling-ref: #27928 (comment)
type: enhancement
Business reason. An administrator opens a vendor base such as HotCRM in Studio. Several other packages add navigation entries, fields and flows to it. Studio shows none of those items on the base. The live app shows them all, so the person cannot tell what will change if they customize, disable or uninstall something. #27356 row 20 records the visible case: the navigation tree says "No items in this package" while the app draws the contributed entries.
What is served now
GET /api/v1/packages/:id/customizations carries contributions (packages/spec/src/api/package-lifecycle.zod.ts, about L587). It is one list with three kinds:
field: another package's object extension adds a field to one of the base's objects. The entry hasobject,nameandpackageId.flow: another package ships a flow whose trigger object is one of the base's objects. The entry hasobject,nameandpackageId.nav(new, PR feat(runtime): the customizations read serves the nav contributions other packages add to a base's apps #29742): another package'snavigationContributionsadds an item to an app the base owns. The entry hasapp, an optionalgroup,name(the nav item's id) andpackageId.
counts.contributions is contributions.length. A disabled package's contributions are not listed. The base and its <base>.custom pair are never contributors.
What the Console does with it now
Nothing. At origin/main (8d208a4d), no file under ui/ reads contributions. packageCustomizations-io.ts and customizationMarks.ts read the overrides and the counts only. #28572 drew the overrides and added items; it did not draw contributions.
Wanted
- Interfaces navigation tree, on the base. Each
naventry draws in its app, under itsgroupwhen one is named and at the top level otherwise. The entry is greyed and labelled with the contributing package's display name ("from HotCRM Service"). It is read-only on the base's surface: it cannot be dragged, renamed or deleted there. Opening it, if anything, goes to the contributing package. Agroupthe app does not declare draws at the top level and says so in its tooltip. - Data pillar, on the base's object. Each
fieldentry for that object draws in the field list as a greyed row with the package label. It is read-only on the base, as in item 1. - Automations rail, on the base. Each
flowentry for one of the base's objects draws as a greyed row with the package label. - One reader. Take all three from the one customizations read the surfaces already make. Do not add a second request, and do not join names client-side (the ruling's "never by a client-side join on names").
- The empty state. A base tree that holds only contributed entries no longer says "No items in this package". Measure first: on the contributor's own tree (HotCRM Service), say what the served reads allow it to show. If no read names what it contributes, leave its text and report it rather than inventing one.
- All strings go through the ten i18n packs. No metadata key is added.
Done when
On a showcase or HotCRM with at least one contributing package, each of the three surfaces shows the contributed items greyed with their package, before and after screenshots are attached, and a pin covers each kind's placement, including a nav entry with an undeclared group.
Reader. domain:ui, size M. Clause-②: no is expected: it reads a served member and changes no contract. Serial notes: #29693 (PR #29765) reworks the item header, not the rails. #29691 (seat 1) touches BuilderLanding.tsx and the pending-changes sheet. Check the open Studio rail PRs before claiming.
Dedupe. Searched contributed entries greyed, contributions greyed Studio and navigationContributions Studio tree: every hit is closed and is a source of this card (#27928, #28722, #28572, #27356). New.
Links back: ruling 6566915346 (#27928), #28722 / PR #29742, #27356 row 20, #28572, ADR-0029 D7, ADR-0146 D3.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Claim: PM loop round 14 · 2026-11-03T04:47Z
Session:
session_01QsR2jQkUExPHsEsPoX99Uf(card thread, os-dev); dispatched by seat sessionsession_01QsR2jR7ZFkpqmm4U8S1f9yAccount:
zhuangjianguoBranch:
claude/project-thread-n8giqs(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-29786Domain:
domain:uiSeat:
domain:ui#4File surface: the Studio Interfaces navigation tree, the Data pillar field list and the Automations rail as drawn on a base (
ui/packages/app-shell/src/views/studio-design/rails and their helpers,packageCustomizations-io.ts,customizationMarks.tsor a sibling pure helper), their tests, the ten studio i18n packs, and a new changeset; no spec or server file (stop on breach; explain in the report)Container & model: M,
mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: defaultClause-②: no
Metadata-protocol: none
Responsibility:
Studio draws none of the items other packages contribute to a base (nav entries, fields, flows), so a base tree reads "No items in this package" while the app shows them | draw each servedcontributionsentry greyed, read-only, with its contributing package, on the surface of its kind, from the one customizations read | every administrator customizing or uninstalling a vendor base others extendThread-read: none
Premise: holds (at
8d208a4d, no file underui/readscontributions; the member serves field, flow and nav since PR #29742)Serial constraints cleared: #29693 (PR #29765, seat 4) reworks the item header, not the rails; #29691 (seat 1) touches BuilderLanding.tsx and the pending-changes sheet
Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
席位核对 · Amendment · 2026-11-03T04:53Z · plan for #29786
The card thread's plan (on
main601832b1) is approved, with these rulings:marks.read.contributionsfrom the pillars' existing customization marks; there is no new request. The package's display name comes from the same listed-manifest id lookupbaseNameuses. That is a lookup by package id, not a join on item names, so it is allowed.navigationContributionsdeclaration is not the served fold and is not drawn.app-multi-packageplus a temporary third package (a field, a flow, and nav under an undeclared group), for screenshots only. It is never committed or pushed, and the body says so. The pins carry their own fixtures in the tests.Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
os-dev-report
dispatch-gates --ranreconciles to 0 NOT-MEASURED, 0 UNRUN.node scripts/check-sdui-manifest.mjsexit 0. The body gatescheck-changeset-no-major,check-adr-0087-registration,check-closing-keyword-parityandcheck-partof-closing-keywordeach exit 0. ui static:check-i18n-en-drift,check:i18n-keys,check:i18n-drift,check:i18n-dead-keys,check:spec-symbolseach exit 0.turbo type-checkfor app-shell and i18n, 66/66 tasks; eslint on the touched files 0 errors.findDeclaredNavGroup, thecontributedFieldsprop, the field rail read-only, flow rows,useSortabledisabledon a contributed card.CustomizationMark.tsx,StudioRailCustomizations.tsx,StudioDesignSurface.tsx, newcontributionRows.ts),ObjectFormDesigner.tsx(the Data pillar's field cards, where seat 4's "mark them" lands), their tests, studioen.ts/zh.ts, the changeset. No spec or server file.Clause-②: noandMetadata-protocol: none, copied from the claim. The changeset is a patch for app-shell and i18n.namespaces/studio/en.ts,zh.ts), not ten; accepted by seat 4.git statusclean.check:type-check-debt(locked closure build, 8m42s), the ui scripts suite (452s, rerun alone after timing out under contention) and the related sweep (28 min).GET /meta/app?package=) carries the folded navigation with labels.manifest.navigationContributions. Left as is per ruling.gh api).objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
席位核对 · ACCEPT → PR #29847 comment 6598132576 · 2026-11-03T07:41Z · at
ef7ae806. It lands through the merge queue;Fixes #29786closes this card on merge. Out-of-scope findings 1 and 2 are filed as #29851.Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y
Landed · 2026-11-03T08:45Z · PR #29847 merged through the merge queue as
2a0f0b70. Record: ACCEPT 6598132576 atef7ae806(Clause-②: no, no contract review owed, 0 governed paths).2a0f0b70~1)origin/main)export function placeNavContributions(inui/packages/app-shell/src/views/studio-design/contributionRows.ts(contributed nav entries are placed under their declared group, or at the top level)import { ContributionMark, contributedItemTitle } from './StudioRailCustomizations.js';inui/packages/app-shell/src/views/studio-design/ObjectFormDesigner.tsx(a contributed field card is marked with its package)The card closed through
Fixes.pm:dispatchedcomes off with this note. Out-of-scope findings 1 and 2 (the nav label and the contributor-only empty state) continue in #29851, which seat 4 has claimed. Finding 3 is an Acceptance note, and finding 4 was dropped, as recorded in the ACCEPT. A contributed nav entry, field or flow that a base's Studio still does not draw, while the customization read lists it, is a new reading against this fix: file it with the base, the kind and the entry, not a revert.Generated by Claude Code