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 }}
Repository navigation
Studio: the publish sheet and load errors speak in plain words, and a load error carries the server's real reason #29704
Filing gate: ② filed on the maintainer's word in direct chat with the epic PM seat, 2026-11-03: 「第二批也立卡」. Priority on 「相关卡 p1, 让车道处理」. ⛔ Not a claim.
Reader: domain:ui (ui/packages/app-shell/src/preview/DraftChangesPanel.tsx; the list load error at console/AppContent.tsx:2112).
Dedupe: publish sheet, loadErrorMessage. #29673 is the case that exposed the second part, and its fix does not cover it. New.
type: enhancement
Business reason. The publish sheet is where a person decides whether to make a change live. It should say what will change in their terms. When a page cannot load, it should say why.
What happens
Measured on main at 3482f3d8d2, zh-CN.
The sheet's diff for a customized dashboard reads + overrides and ~ Label. A view reads a raw key list, and the extension's type group reads object_extension. An independent review also saw + isDefault, + viewKind and 平台生成 (6) on a new item.
新增: no key list. 更新: top-level keys through the inspector's existing label catalog, and declaration or platform-generated keys are not listed as the person's changes. Type groups use the type's translated name.
The load-error state shows the server's code and sentence when one came back. The network sentence is only for a request that got no answer. One rule, on the list and record pages alike.
Claim: PM loop round 7 · 2026-11-03T02:38Z
Session: session_01QsR2jVQc3uTU5ZhjP31Sh8 (card thread, os-dev); dispatched by seat session session_01QsR2jQjvWkZ7is6GXbC6DB
Account: zhuangjianguo
Branch: claude/project-thread-jehz9h (platform-assigned to the card thread; it can push only this branch)
Worktree: objectstack-issue-29704
Domain: domain:ui
Seat: domain:ui#5
Scope: the publish sheet names a person's changes in plain words (no key list on 新增, labelled top-level keys on 更新, no declaration or platform-generated keys, translated type-group names), and a list or record load error shows the server's code and sentence when one came back, keeping the network sentence for a request that got no answer. Fixes #29704.
File surface: ui/packages/app-shell/src/preview/DraftChangesPanel.tsx and its helpers, the load-error lines of ui/packages/app-shell/src/console/AppContent.tsx and of the record page, one shared error-reading helper, the i18n packs, their tests, and a changeset. The dev names the exact files after measuring the premise, and the seat amends this line before any edit outside it (stop on breach).
Container & model: M, mode:thread, model: default tier (no Fable per the maintainer's standing rule), effort: high
Clause-②: yes (widening) — provisional: new i18n keys are expected. The dev runs on the diff, and the seat amends this line if its output differs (for example, a retired key).
Metadata-protocol: none
Responsibility: a builder publishing a change, or a member opening a list or record that failed to load | the publish sheet shows raw keys and engine names, and a 404 with a clear server sentence reads as a network fault | builders deciding what goes live, and support chasing a network fault that is not there
Thread-read: none
Premise: to prove first on current main, per the brief (/mnt/project-files/issue-29704/brief.md). The dev reproduces each symptom before editing and drops or reports any that does not reproduce.
Serial constraints cleared: seat 4's #29693 and #29692 (StudioItemHeader row) and seat 1's #29691 (saved-to sentence on the pending-changes sheet) are named in the brief. Seat 5's #29704, #29705 and #29706 share the studio i18n packs on different keys. The dev merges main right before pr_create.
Re-measured live by the epic PM seat on main at c9636f1e50, on the maintainer's word in direct chat, 2026-11-03: 「需要复测的内容,你直接处理」. This updates the card body where it differs. ⛔ Not a claim.
Confirmed, zh-CN. The sheet for a new object lists + Label, + Name, + Sharing Model and 平台生成(6), and a new flow lists + Edges, + Label, + Name, + Status, + Type, each under 包含:. The field rows above them are readable (+ 名称 name). The isDefault and viewKind lines belong to a new view, which was not created here; expect the same list.
Records page after a failed registration: GET /data/OBJ answers 404 OBJECT_NOT_FOUND with a clear sentence. #29673 is still open and still reproduces on this build, so the case stays available to test against.
On the record page (RecordDetailView, and PageView's record scope), an answered 5xx reads as a network fault. A 404 there already reads "Record not found".
The sheet lists every key of a new item, reads overrides and English key labels raw in zh-CN, and groups object_extension without a translated name.
File surface (replaces the claim's provisional line; stop on breach):
Sheet: ui/packages/app-shell/src/preview/DraftChangesPanel.tsx, preview/changeKeyLabels.ts, new views/metadata-admin/schema-field-label.ts (a leaf, with members moved verbatim), views/metadata-admin/i18n.ts (re-exports), and views/metadata-admin/metadata-form-i18n.ts. Tests: preview/__tests__/DraftChangesPanel.namedChanges-27835, .generatedGroup-25890, .protectionEnvelope-12594 and .groupHeading-13221.
Load error: ui/packages/react/src/utils/error-message.ts (one shared answered-vs-unanswered helper, lifted from RelatedList's serverSentence rule), react/src/index.ts (its export) and utils/error-message.test.ts. Also ui/packages/plugin-list/src/ListView.tsx with new test src/__tests__/ListView.loadErrorKind.test.tsx, ui/packages/plugin-detail/src/RelatedList.tsx (the local rule replaced by the shared helper), app-shell/src/views/RecordDetailView.tsx with RecordDetailView.recordReadFailure-11902.test.tsx, and app-shell/src/views/PageView.tsx with __tests__/PageView.appPageRecord-12931.test.tsx.
The ten ui/packages/i18n/src/locales/*.ts packs: the preview.changes.typeCount.object_extension count family and preview.changes.detailNewItem. No key is removed.
.changeset/29704-plain-publish-sheet-and-load-errors.md, with patch bumps for app-shell, react, plugin-list, plugin-detail and i18n.
⛔ Out: the console route's RouteObjectReadFailed (AppContent.tsx, MetadataProvider.tsx, appObjectScope.ts). Its defect is by reading, not measured. The fix would carry the error through MetadataProvider's by-name read state, and appObjectScope.ts is the landing site of seat 2's #29681 and #29552. The seat files it as a separate card.
Clause-②: yes (widening) — new i18n keys and one new @object-ui/react export. The dev runs scripts/pm/clause2-line.mjs on the diff, and the seat amends again if its output differs.
Metadata-protocol: none
Serial: DraftChangesPanel.tsx is the sheet that seat 1's #29691 edits, on branch claude/project-thread-pkn482. Seat 1 edits the props tail, a new export, the destructure and the header. This card edits TYPE_COUNT, EntryDetail, KeyRow and the imports. In the packs, seat 1 adds at changes.title and this card at detailNewKeys/typeCount. The dev merges main right before pr_create.
files_changed: 32, all inside the amended claim (items 1–11, 13 and 14, plus the two pin files seat 5 approved: DraftChangesPanel.fieldRows-13125 and DraftChangesPanel.bundleMember-12271).
clause2: Clause-②: yes (widening) and Metadata-protocol: none, both read as declared by clause2-line readClause2Line / readMetadataProtocolLine. The changeset is a patch for app-shell, react, plugin-list, plugin-detail and i18n.
screenshots: issue-29704/screens/, ten PNGs (before and after), live zh-CN on app-showcase with the Vite console.
Surface: two extra test files, pin edits only, approved by seat 5.
Foreground posture: four runs over the 10-minute tool cap ran in the background, each with a foreground wait loop: the post-merge turbo build (17 min locked), the gate sweep, the 11-minute plugin-detail suite and the ablation batch.
Activity
objectstack-fleet commentedon Nov 3, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Claim: PM loop round 7 · 2026-11-03T02:38Z
Session:
session_01QsR2jVQc3uTU5ZhjP31Sh8(card thread, os-dev); dispatched by seat sessionsession_01QsR2jQjvWkZ7is6GXbC6DBAccount:
zhuangjianguoBranch:
claude/project-thread-jehz9h(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-29704Domain:
domain:uiSeat:
domain:ui#5Scope: the publish sheet names a person's changes in plain words (no key list on 新增, labelled top-level keys on 更新, no declaration or platform-generated keys, translated type-group names), and a list or record load error shows the server's code and sentence when one came back, keeping the network sentence for a request that got no answer.
Fixes #29704.File surface:
ui/packages/app-shell/src/preview/DraftChangesPanel.tsxand its helpers, the load-error lines ofui/packages/app-shell/src/console/AppContent.tsxand of the record page, one shared error-reading helper, the i18n packs, their tests, and a changeset. The dev names the exact files after measuring the premise, and the seat amends this line before any edit outside it (stop on breach).Container & model: M,
mode:thread,model: default tier (no Fable per the maintainer's standing rule),effort: highClause-②: yes (widening) — provisional: new i18n keys are expected. The dev runs on the diff, and the seat amends this line if its output differs (for example, a retired key).
Metadata-protocol: none
Responsibility:
a builder publishing a change, or a member opening a list or record that failed to load | the publish sheet shows raw keys and engine names, and a 404 with a clear server sentence reads as a network fault | builders deciding what goes live, and support chasing a network fault that is not thereThread-read: none
Premise: to prove first on current main, per the brief (/mnt/project-files/issue-29704/brief.md). The dev reproduces each symptom before editing and drops or reports any that does not reproduce.
Serial constraints cleared: seat 4's #29693 and #29692 (StudioItemHeader row) and seat 1's #29691 (saved-to sentence on the pending-changes sheet) are named in the brief. Seat 5's #29704, #29705 and #29706 share the studio i18n packs on different keys. The dev merges main right before pr_create.
objectstack-fleet commentedon Nov 3, 2026
epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848
2026-11-03T02:52Z
Re-measured live by the epic PM seat on
mainatc9636f1e50, on the maintainer's word in direct chat, 2026-11-03: 「需要复测的内容,你直接处理」. This updates the card body where it differs. ⛔ Not a claim.Confirmed, zh-CN. The sheet for a new object lists
+ Label,+ Name,+ Sharing Modeland 平台生成(6), and a new flow lists+ Edges,+ Label,+ Name,+ Status,+ Type, each under 包含:. The field rows above them are readable (+ 名称 name). TheisDefaultandviewKindlines belong to a new view, which was not created here; expect the same list.Records page after a failed registration:
GET /data/OBJanswers 404OBJECT_NOT_FOUNDwith a clear sentence. #29673 is still open and still reproduces on this build, so the case stays available to test against.objectstack-fleet commentedon Nov 3, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Claim amended · 2026-11-03T02:52Z · #29704 file surface named after the premise held
The dev measured the premise at
7b55ea95(file-surface.md in issue-29704).OBJECT_NOT_FOUNDrendersdata-error-kind=networkand "Check your connection". So the list site is plugin-list'sListView, not AppContent ~L2112: in Studio in zh-CN: a new object publishes "successfully" and never reaches the data plane, because its echoed queue column carries a translated label #29673 the meta read answered 200 and the data read 404.RecordDetailView, andPageView's record scope), an answered 5xx reads as a network fault. A 404 there already reads "Record not found".overridesand English key labels raw in zh-CN, and groupsobject_extensionwithout a translated name.File surface (replaces the claim's provisional line; stop on breach):
ui/packages/app-shell/src/preview/DraftChangesPanel.tsx,preview/changeKeyLabels.ts, newviews/metadata-admin/schema-field-label.ts(a leaf, with members moved verbatim),views/metadata-admin/i18n.ts(re-exports), andviews/metadata-admin/metadata-form-i18n.ts. Tests:preview/__tests__/DraftChangesPanel.namedChanges-27835,.generatedGroup-25890,.protectionEnvelope-12594and.groupHeading-13221.ui/packages/react/src/utils/error-message.ts(one shared answered-vs-unanswered helper, lifted from RelatedList'sserverSentencerule),react/src/index.ts(its export) andutils/error-message.test.ts. Alsoui/packages/plugin-list/src/ListView.tsxwith new testsrc/__tests__/ListView.loadErrorKind.test.tsx,ui/packages/plugin-detail/src/RelatedList.tsx(the local rule replaced by the shared helper),app-shell/src/views/RecordDetailView.tsxwithRecordDetailView.recordReadFailure-11902.test.tsx, andapp-shell/src/views/PageView.tsxwith__tests__/PageView.appPageRecord-12931.test.tsx.ui/packages/i18n/src/locales/*.tspacks: thepreview.changes.typeCount.object_extensioncount family andpreview.changes.detailNewItem. No key is removed..changeset/29704-plain-publish-sheet-and-load-errors.md, with patch bumps for app-shell, react, plugin-list, plugin-detail and i18n.⛔ Out: the console route's
RouteObjectReadFailed(AppContent.tsx,MetadataProvider.tsx,appObjectScope.ts). Its defect is by reading, not measured. The fix would carry the error through MetadataProvider's by-name read state, andappObjectScope.tsis the landing site of seat 2's #29681 and #29552. The seat files it as a separate card.Clause-②: yes (widening) — new i18n keys and one new
@object-ui/reactexport. The dev runsscripts/pm/clause2-line.mjson the diff, and the seat amends again if its output differs.Metadata-protocol: none
Serial:
DraftChangesPanel.tsxis the sheet that seat 1's #29691 edits, on branchclaude/project-thread-pkn482. Seat 1 edits the props tail, a new export, the destructure and the header. This card editsTYPE_COUNT,EntryDetail,KeyRowand the imports. In the packs, seat 1 adds atchanges.titleand this card atdetailNewKeys/typeCount. The dev merges main right before pr_create.objectstack-fleet commentedon Nov 3, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jVQc3uTU5ZhjP31Sh8
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.git diff HEADempty afterwards. The log is in issue-29704/measure/ablations.log.Clause-②: yes (widening)andMetadata-protocol: none, both read as declared by clause2-linereadClause2Line/readMetadataProtocolLine. The changeset is a patch for app-shell, react, plugin-list, plugin-detail and i18n.top=0) as an empty collection, so the route answered 404 only on the list's expand read (populate=), the raw path Studio in zh-CN: a new object publishes "successfully" and never reaches the data plane, because its echoed queue column carries a translated label #29673 took. On that plain path, an answered 404 still reads as 「这里还没有数据」 and never reaches the error panel. This is adapter behaviour outside this card.objectstack-fleet commentedon Nov 3, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Landed · 2026-11-03T05:09Z
69dbb3cc. The seat ACCEPT is 6595631277, and the director's same-head PASS is 6595471560 oneae9d624.Fixes #29704. No other card was closed by the body.pm:dispatchedis removed and the card stays closed. Out of scope: the route-levelRouteObjectReadFailedis console: a route whose object read was answered (5xx, or a 404 with an unknown code) says "check your connection" instead of the server's reason #29728, and the adapter memoising a list's own 404 as empty is data-objectstack: a plain list read answered 404 OBJECT_NOT_FOUND reads as an empty list ("no data yet"), so the list never shows the server's reason #29782.