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.
Blocked-by: #4829
Part of #4829 (maintainer ruling A1). Filed by the
domain:specseat at ACCEPT time from PR #6942's measured mandatory-answer contract; routing label left to the triage seat (lands inobjectstack-ai/objectui).The contract, verbatim from the framework half
After PR #6942,
app.hiddenmeans navigation presentation only ("Hidden apps stay fully routable and permission-checked") and the ADR-0045 publish gate lives on the machine-managed_unpublishedkey.app.hidden === trueapp._unpublished === truePOST /packages/:id/publish-drafts_unpublishedserver-sidePUT /meta/app/{name}body{"hidden": false}PUT /meta/app/{name}body{"_unpublished": false}hiddenhidden— which now means only what it says. ⛔ Must NOT filter on_unpublished: the server already withholds those appsWire fields
unhiddenApps/unhideErrorin thepublish-draftsresponse 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/specpin advances past that release — before the pin bump,_unpublisheddoes 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.