Blocked-by: #4829
Part of #4829 (maintainer ruling A1, 2026-08-04 + v17 window re-ruling 2026-08-07). 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/cloud).
The contract, verbatim from the framework half
The ADR-0045 publish gate no longer reads app.hidden — it reads the machine-managed _unpublished key declared on AppSchema in PR #6942.
What the cloud side must do (service-ai-studio, blueprint tools — the additive-materialization write point):
- Stamp
_unpublished: true on the built app wherever it stamps hidden: true today.
- Stop writing
hidden — after the framework half lands, writing it only affects App Switcher placement and gates nothing.
- Nothing else in
apply_blueprint's envelope changes.
Who writes/clears/reads, in one line: written by the cloud AI materialization path (this card), cleared by POST /packages/:id/publish-drafts (framework, PR #6942), read by filterAppForUser (framework, PR #6942). No author, no UI, ever writes it.
Sequencing
The framework half is an ADR PR reserved for maintainer hand-merge (AGENTS.md PD #14). Until it lands, cloud keeps writing hidden and the current behavior is unchanged; after it lands, a materialized app that still carries only hidden: true becomes visible to normal users while still unpublished — so this card should follow the framework merge closely rather than drift.
Stored rows written the old way are handled by the framework's ADR-0087 D2 conversion app-hidden-to-unpublished (stored population only — retiredFromLoadPath: true), so this card is about the writer, not about existing data.
Refs: #4829 (ruling chain), PR #6942 (framework half incl. the naming rationale for the _ prefix), ADR-0045, ADR-0010 (the _-prefix machine-managed precedent).
Blocked-by: #4829
Part of #4829 (maintainer ruling A1, 2026-08-04 + v17 window re-ruling 2026-08-07). 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/cloud).The contract, verbatim from the framework half
The ADR-0045 publish gate no longer reads
app.hidden— it reads the machine-managed_unpublishedkey declared onAppSchemain PR #6942.What the cloud side must do (
service-ai-studio, blueprint tools — the additive-materialization write point):_unpublished: trueon the built app wherever it stampshidden: truetoday.hidden— after the framework half lands, writing it only affects App Switcher placement and gates nothing.apply_blueprint's envelope changes.Who writes/clears/reads, in one line: written by the cloud AI materialization path (this card), cleared by
POST /packages/:id/publish-drafts(framework, PR #6942), read byfilterAppForUser(framework, PR #6942). No author, no UI, ever writes it.Sequencing
The framework half is an ADR PR reserved for maintainer hand-merge (AGENTS.md PD #14). Until it lands, cloud keeps writing
hiddenand the current behavior is unchanged; after it lands, a materialized app that still carries onlyhidden: truebecomes visible to normal users while still unpublished — so this card should follow the framework merge closely rather than drift.Stored rows written the old way are handled by the framework's ADR-0087 D2 conversion
app-hidden-to-unpublished(stored population only —retiredFromLoadPath: true), so this card is about the writer, not about existing data.Refs: #4829 (ruling chain), PR #6942 (framework half incl. the naming rationale for the
_prefix), ADR-0045, ADR-0010 (the_-prefix machine-managed precedent).