Skip to content

objectui: the Unpublished banner and per-app publish read _unpublished; the App Switcher keeps filtering on hidden (#4829 A1 objectui half) #6955

Description

@os-zhuang

Blocked-by: #4829

Part of #4829 (maintainer ruling A1). Filed by the domain:spec seat at ACCEPT time from PR #6942's measured mandatory-answer contract; routing label left to the triage seat (lands in objectstack-ai/objectui).

The contract, verbatim from the framework half

After PR #6942, app.hidden means navigation presentation only ("Hidden apps stay fully routable and permission-checked") and the ADR-0045 publish gate lives on the machine-managed _unpublished key.

Surface Before After
Unpublished banner app.hidden === true app._unpublished === true
Publish button POST /packages/:id/publish-drafts unchanged — the flip now clears _unpublished server-side
Direct per-app publish PUT /meta/app/{name} body {"hidden": false} PUT /meta/app/{name} body {"_unpublished": false}
App Switcher / launcher filters on hidden keeps filtering on hidden — which now means only what it says. ⛔ Must NOT filter on _unpublished: the server already withholds those apps

Wire fields unhiddenApps / unhideError in the publish-drafts response are deliberately unchanged by PR #6942 — renaming a contract the framework repo cannot verify would be the same class of silent break that card exists to fix. Rename them in lockstep with this card, or not at all; state which in the PR.

Sequencing

The framework half is an ADR PR reserved for maintainer hand-merge (AGENTS.md PD #14). Land this after it merges and after objectui's @objectstack/spec pin advances past that release — before the pin bump, _unpublished does not exist in objectui's types.

Note for whoever prices this: the account-app 404 that #4829 fixes is server-side and needs no objectui change; this card is only about the publish-state UI reading the right key.

Refs: #4829 (ruling chain), PR #6942 (framework half), #6954 (cloud half), ADR-0045.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions