Skip to content
This repository was archived by the owner on Oct 26, 2026. It is now read-only.

Commit 85f1b9e

Browse files
committed
docs(app-shell): date the objectui#10746 changeset's reach sentence; say what the draft reads do now
The pending objectui#10746 changeset stated a reach limit this branch removes: a report whose PUBLISHED version was bound got its cleared keys back in the draft after the first draft save, through the host's draft-over-baseline merge. Its sentences are now scoped to that change and a dated note (objectui#10156 / objectui#10392 form) states what holds now: the clear survives the refresh after the save and publish; a report already saved joined with stale keys is still not repaired on load. Frontmatter unchanged. The objectui#10765 changeset names the reach limit it removes. Comment-only: the Data pillar's projection-baseline comment and three PackageOwdOverviewPanel comments (the OwdRow docblock, the list-load and the save) said the body was merged over the pending draft; they now say the draft is read as-is, else the layered baseline. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
1 parent 5f3b9c7 commit 85f1b9e

4 files changed

Lines changed: 28 additions & 13 deletions

File tree

‎.changeset/10746-joined-report-clears-binding.md‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,16 @@ unbound report's switch stays the one-key patch it always was. `runtimeFilter` a
2323
`drilldown` are kept: the joined branch reads both. Switching between two non-joined
2424
types keeps the binding; switching away from `joined` restores nothing — the author
2525
re-binds. `blocks` is never touched. The clear holds for the patch and for the save that
26-
follows it. The metadata-admin editor rebuilds its draft as the served draft spread over
27-
`layered.effective` (on load, after each save and after publish), and `effective` is the
28-
published layer, so a report whose PUBLISHED version was bound gets those keys back in the
29-
draft after the first draft save until it is published, and a report already saved `joined`
30-
with stale keys is not repaired on load. Both are the host's draft-over-baseline merge,
31-
objectui#10765.
26+
follows it. At this change the metadata-admin editor rebuilds its draft as the served draft
27+
spread over `layered.effective` (on load, after each save and after publish), and
28+
`effective` is the published layer, so a report whose PUBLISHED version was bound gets those
29+
keys back in the draft after the first draft save until it is published, and a report already
30+
saved `joined` with stale keys is not repaired on load. Both are the host's
31+
draft-over-baseline merge, objectui#10765.
32+
33+
⚠️ **Dated note, 2026-09-27 — that merge has since been removed — objectui#10765.** Later in
34+
this same release the metadata-admin editor takes a served draft as-is instead of spreading
35+
it over the published layer, so the clear holds across the refresh after the save and through
36+
publish. A report already saved `joined` with stale keys is still not repaired on load; the
37+
author deletes them from the JSON tab. The rest of this entry is kept as the reading of this
38+
change; the objectui#10765 entry states what the editors now do.

‎.changeset/10765-draft-merge-deletion.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@ The spread existed for a partial draft overlay that never reaches these editors:
1919
row raw, and every draft writer sends a whole document. So each site now takes the served draft
2020
as-is when there is one and falls back to `effective` (then `code`) only when no draft exists;
2121
the inherited `type` the spread was protecting is already inside the draft. `config.toDraft`
22-
still normalises whatever is taken, now on the post-publish refresh as well.
22+
still normalises whatever is taken, now on the post-publish refresh as well. This removes the
23+
reach limit the objectui#10746 entry states — a bound published report getting its cleared
24+
keys back after the first draft save; a report already saved `joined` with stale keys is still
25+
not repaired on load, and the author deletes them from the JSON tab.

‎packages/app-shell/src/views/studio-design/PackageOwdOverviewPanel.tsx‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ import { isExternalWider, deriveMasterObject } from './owd-sharing.js';
3939
import { toast } from 'sonner';
4040

4141

42-
/** A single object's loaded OWD baseline (already merged over any pending draft). */
42+
/**
43+
* A single object's loaded OWD values — read from its pending draft as-is when
44+
* one exists, else from its layered baseline (objectui#10765).
45+
*/
4346
interface OwdRow {
4447
name: string;
4548
label: string;
@@ -143,8 +146,9 @@ export function PackageOwdOverviewPanel({
143146

144147
// The list row carries `sharingModel` but not reliably `fields` (needed
145148
// for the master link), and never the pending-draft value — so read each
146-
// object's merged body (layered ∪ its draft), exactly as the per-object
147-
// Settings tab does, and derive every column from that one source.
149+
// object's body (its pending draft as-is, else its layered baseline),
150+
// exactly as the per-object Settings tab does, and derive every column
151+
// from that one source.
148152
const built = await Promise.all(
149153
names.map(async (name): Promise<OwdRow> => {
150154
const [layRaw, draftResp] = await Promise.all([
@@ -237,7 +241,7 @@ export function PackageOwdOverviewPanel({
237241
setSaveError(null);
238242
try {
239243
// Each changed row lands as that object's package-scoped DRAFT: read the
240-
// fresh merged body, apply just the OWD pair (unset → drop the key), and
244+
// fresh body (below), apply just the OWD pair (unset → drop the key), and
241245
// save. Identical to the per-object Settings write, N times — publish
242246
// then goes through the same package security-domain gate unchanged.
243247
for (const s of changed) {

‎packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2971,8 +2971,9 @@ export function DataPillar({
29712971
setHasDraft(!!draftBody);
29722972
setHasBaseline(!!(lay.effective ?? lay.code));
29732973
// The projection baseline: the object as the SERVER has it. `objDraft`
2974-
// below merges the draft on top, which is right for the editor and
2975-
// wrong for a `select`.
2974+
// above is the pending draft as-is when one exists, which is right for
2975+
// the editor and wrong for a `select`: a draft-only field is not a
2976+
// column the data API can answer yet (see `gridColumns`).
29762977
setPublishedFieldNames(new Set(readFields(baseline.fields).entries.map((e) => e.name)));
29772978
} catch (e) {
29782979
if (!cancelled) setError(formatMetadataError(e));

0 commit comments

Comments
 (0)