Skip to content

cloud: the AI materialization path stamps _unpublished: true instead of hidden: true (#4829 A1 cloud half) #6954

Description

@os-zhuang

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).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions