Skip to content

feat(adr-0045): hidden-app visibility gate + publish unhides materialized builds#1768

Merged
os-zhuang merged 1 commit into
mainfrom
feat-adr-0045-v1-materialization
Jun 12, 2026
Merged

feat(adr-0045): hidden-app visibility gate + publish unhides materialized builds#1768
os-zhuang merged 1 commit into
mainfrom
feat-adr-0045-v1-materialization

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

What

v1 framework slice of ADR-0045 (additive materialization with a visibility gate):

  1. filterAppForUser hidden-app gate (rest-server): apps with hidden: true are dropped from metadata responses for users without studio.access/setup.access. The launcher's client-side hidden filter is a listing courtesy — this is the enforced gate that makes an unpublished app externally unobservable.
  2. publish-drafts flips visibility (http-dispatcher): after promoting the package's drafts (and applying seeds), any hidden: true app bound to the package is re-saved with hidden: false. One publish verb serves both regimes — the caller (chat auto-publish, banner button, Home pending-drafts) never needs to know whether the package was draft-staged or materialized. Best-effort: flip failures surface as unhideError without failing the publish.

Tests

  • 4 new filterAppForUser cases (drop for non-builders, allow for studio/setup, visible apps untouched, requiredPermissions still compose) — rest.test.ts 101/101 ✅
  • 2 new publish-drafts cases (unhides exactly the hidden app with body intact + reports flip failure non-fatally) — http-dispatcher.test.ts 121/121 ✅

Next (separate PRs)

cloud: apply_blueprint lint-then-materialize cutover (stage → publishPackageDrafts in-turn, app body hidden:true). objectui: canvas → real app URL + unpublished banner.

🤖 Generated with Claude Code

…ized builds

v1 framework slice of ADR-0045 (additive materialization):
- rest-server filterAppForUser: hidden:true apps are dropped for users
  without studio.access/setup.access — the server-side visibility gate
  (the launcher's client filter is a listing courtesy, this is the law)
- publish-drafts: after promoting drafts (and seeds), unhide every hidden
  app bound to the package — ONE publish verb serves both the draft and
  the materialize regimes; callers never need to know how a package was
  built. Best-effort with explicit unhideError reporting.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 12, 2026 6:43am

Request Review

@os-zhuang
os-zhuang merged commit 6482fd5 into main Jun 12, 2026
10 of 11 checks passed
@os-zhuang
os-zhuang deleted the feat-adr-0045-v1-materialization branch June 12, 2026 06:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant