Found while implementing #5418 (create-dialog OWD + pre-publish reporting). Filed unassigned, not fixed there — the fix needs a contract change to the deep-link plumbing, which is wider than that card's surface.
What ships in #5418
The pending-changes sheet now names a draft the publish door would refuse, as object/crmext_visit, with the rule's fix-it hint and the sentence "Fix it on the object under Settings → Record sharing, then publish again."
That is the wording half of #5418's suggestion 3. The suggestion's actual ask was stronger:
> sharingModel should be a link to 设置 → 记录共享模型
Why the link was not built there
packages/app-shell/src/views/studio-design/useSurfaceDeepLink.ts is the shared ?surface=<type>:<name> plumbing, and its capture half is deliberately mount-time only — the target is read once into a ref so later in-pillar selections do not re-trigger the restore:
const initialRef = React.useRef(parseSurfaceParam(searchParams.get(DESIGNER_SURFACE_PARAM)));
The sheet is opened from an already-mounted DataPillar, so writing ?surface=object:crmext_visit from it changes the URL and moves nothing. Making the link work needs one of:
- A — a live target channel alongside the mount-time capture (the pillar subscribes to a target, not just to its initial value). Cleanest, and it is the missing half the module's own doc comment describes; it changes a contract four pillars share.
- B — a callback prop threaded
StudioDesignSurface → DraftChangesPanel, with the Data pillar exposing "select this object and open its Settings tab". Narrower, but adds a second navigation mechanism next to the deep-link one. - C — leave it as prose. What ships today.
Also worth deciding in the same pass: the sheet is shared with the Home / draft-preview bar, where "the Studio object editor" may not be a reachable destination at all — so whichever route is chosen has to degrade to prose off-Studio.
Not urgent
With #5418's create dialog asking for the baseline, a new object no longer reaches this state; the block is now mostly for drafts authored before it, and for the other error-severity rules in the same family (security-owd-alias, security-external-wider-than-internal, security-controlled-by-parent-no-relation).
Found while implementing #5418 (create-dialog OWD + pre-publish reporting). Filed unassigned, not fixed there — the fix needs a contract change to the deep-link plumbing, which is wider than that card's surface.
What ships in #5418
The pending-changes sheet now names a draft the publish door would refuse, as
object/crmext_visit, with the rule's fix-it hint and the sentence "Fix it on the object under Settings → Record sharing, then publish again."That is the wording half of #5418's suggestion 3. The suggestion's actual ask was stronger:
>
sharingModelshould be a link to 设置 → 记录共享模型Why the link was not built there
packages/app-shell/src/views/studio-design/useSurfaceDeepLink.tsis the shared?surface=<type>:<name>plumbing, and its capture half is deliberately mount-time only — the target is read once into a ref so later in-pillar selections do not re-trigger the restore:The sheet is opened from an already-mounted
DataPillar, so writing?surface=object:crmext_visitfrom it changes the URL and moves nothing. Making the link work needs one of:StudioDesignSurface → DraftChangesPanel, with the Data pillar exposing "select this object and open its Settings tab". Narrower, but adds a second navigation mechanism next to the deep-link one.Also worth deciding in the same pass: the sheet is shared with the Home / draft-preview bar, where "the Studio object editor" may not be a reachable destination at all — so whichever route is chosen has to degrade to prose off-Studio.
Not urgent
With #5418's create dialog asking for the baseline, a new object no longer reaches this state; the block is now mostly for drafts authored before it, and for the other
error-severity rules in the same family (security-owd-alias,security-external-wider-than-internal,security-controlled-by-parent-no-relation).