Skip to content

Studio/Setup: show the "storage not synced" warning a save or publish now returns (object-storage-sync-refused) #30723

Closed

Description

@objectstack-fleet

domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

Filing gate: ① the ui half #30635 named as its own card "once the server field exists" (#30635 body, Expected, third bullet); the server half landed in PR #30691 (merge commit 55a00ba200). ⛔ Not a claim. Suggested grade: p3.
Dedupe: object-storage-sync-refused, advisories warning after save — no open card. New.
Reader: the ui/** lane (Studio / Setup object editor).

What happens

Since PR #30691, PUT /api/v1/meta/object/NAME (publish mode) and POST /api/v1/meta/object/NAME/publish answer a refused storage sync with 200 plus one warning on advisories (rule object-storage-sync-refused, path empty, a message naming the object, and a hint). The console's object save does not show it, so the admin still sees plain success and learns that the table was not created only when reads or writes fail.

Expected

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p2 · domain:ui · 2026-11-05T23:52Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  3. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL

    Claim: PM loop round 7 · 2026-11-06T00:43Z
    Session: session_01L6bhgWn6zhNa4LL7VB1rtL
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-30723-storage-sync-advisory-pin
    Worktree: objectstack-issue-30723
    Domain: domain:ui
    Seat: domain:ui#1 (the card's digit 3 is domain:ui#6's; that seat yielded it in its thread at 00:43Z)
    File surface: tests only, beside the advisory channel the console already has: ui/packages/data-objectstack/src/*.test.ts (the MetadataClient save and publish doors and the adapter's meta.saveItem interceptor) and ui/packages/app-shell/src/{services,providers,views/metadata-admin}/*.test.ts(x) (the console's two subscribers, useMetadataClient and AdapterProvider, rendering through emitSaveAdvisories). ⛔ packages/** (the producer is the server half, PR #30691; #30693 is the batch door's server drop and stays server work), ⛔ the renderer's wording and i18n keys, ⛔ any package.json (no new dependency for a fixture). If the check finds a door that does NOT reach the toast, the fix stays inside ui/packages/{data-objectstack,app-shell}/src/ and the dev stops and states it in the report before widening anything. Stop on breach and explain in the report.
    Container & model: S, mode:subagent, model: default (opus) (dispatch-gates --tier on 40a9265ff: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: medium
    Clause-②: no (tests pin an existing internal channel; no export, no wire change. Re-read at ACCEPT)
    Metadata-protocol: none
    Responsibility: after an object save or publish whose storage sync was refused, the admin sees a warning with the server's message and hint while the save stays a success | the console's generic advisory toast is believed to cover it, but no test drives this rule's real shape (empty path) through the object doors | a Setup or Studio admin whose datasource refuses an object's schema sync; reach: the single-item doors today, the batch door once #30693 lands
    Thread-read: 6672661245
    Premise: holds on origin/main 40a9265ff. The producer objectStorageSyncRefusedNotice (packages/metadata-protocol/src/protocol-registry-hydration.ts:1696) returns all six string keys (rule, severity: 'warning', where: 'object "NAME"', path: '', message, hint), so readSaveAdvisories (ui/packages/data-objectstack/src/metadata-client.ts:200, which drops a finding missing any of the six) keeps it. Every console object write reaches a sink: useMetadataClient wires onSaveAdvisory into each MetadataClient (useMetadata.ts:158, used by StudioDesignSurface.tsx:6290, DatasourceResourcePage.tsx:736, PackageOwdOverviewPanel.tsx:415), the adapter wraps meta.saveItem for MetadataService (index.ts:4487, subscribed in AdapterProvider.tsx:93), and emitSaveAdvisories prints message and hint (saveAdvisoryToast.ts:95). The two new MetadataClient( in plugin-designer (MetadataObjectsPage.tsx:166, MetadataFieldsPage.tsx:901) take no sink but have no console consumer. So the card is its Expected bullet 2: a check plus a pin. The dev re-reads these positions before the first edit.
    Scope of the pin: one finding in the producer's exact shape (copied verbatim from :1696 with a comment naming it), driven through (a) MetadataClient.save in publish mode, (b) MetadataClient.publish / publishDraft, (c) one publishPackageDrafts published[] element, (d) the adapter's meta.saveItem; each asserts the toast is the warning tier with "Saved" / "Published" and that its description carries the message and the hint, and that the write still resolves.
    Out of scope, observed: the frame says "the authoring check raised N advisory finding(s)" although this finding comes from the storage sync, not the authoring gate. Wording, not behaviour; not changed here.
    Serial constraints: the file lists of the 64 open PRs read at claim time: none touches saveAdvisoryToast*, onSaveAdvisory*, AdapterProvider*, metadata-client.ts, useMetadata.ts, metadataClientFactory* or MetadataService*.

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  5. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL

    ACCEPT → PR #30761 comment 6674263361 · head da4bf805 · 2026-11-06T01:31Z — tests only: the producer's object-storage-sync-refused finding (empty path) driven through save, publish, publishDraft, one publishPackageDrafts element and MetadataService.saveObject; each shows the warning with the server's message and hint, and the write stays a success. pr_ready + automerge_enable relayed. Fixes: the card closes on the merge.

  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL

    Landed 2026-11-06T01:52Z: PR #30761 merged as b3098661cd (seat ACCEPT 6674263361 on head da4bf805), 2026-11-06T01:44:33Z on the PR.

    probe reading
    git grep -n "a refused object storage sync is shown on every object door" origin/main -- ui/packages/app-shell/src/views/metadata-admin/useMetadataClient.advisorySink.test.tsx :220 (save, publish, publishDraft and one publishPackageDrafts element each show the warning with the server's message and hint)
    git grep -n "MetadataService object save shows a refused storage sync" origin/main -- ui/packages/app-shell/src/services/MetadataService.saveAdvisories.test.ts :202 (the Setup object save through the adapter's meta.saveItem)

    State: the card closed on the merge (Fixes), and pm:dispatched is removed in the same stroke. The console already rendered the advisory generically; this card was its Expected bullet 2, a check plus pins. Studio publishes objects through the batch door, whose server side still drops the advisory: that is #30693 (server). Not changed here: the toast frame says "the authoring check raised N advisory finding(s)" for a finding the storage sync raised.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions