Skip to content

docs(adr): ADR-0075 — configurable, opt-out-able post-login landing#2367

Closed
os-zhuang wants to merge 2 commits into
mainfrom
docs/adr-0075-post-login-landing
Closed

docs(adr): ADR-0075 — configurable, opt-out-able post-login landing#2367
os-zhuang wants to merge 2 commits into
mainfrom
docs/adr-0075-post-login-landing

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Design proposal — for review (docs only)

Makes the post-login landing a metadata-declared, opt-out-able capability instead of a hardcode.

Problem

The console hardcodes where users land after sign-in: CloudAwareRootRedirect carries a literal PREFERRED_APPS = ['cloud_control'] (→ /apps/cloud_control, else the /home launcher). A deployment can neither opt out of the outer /home (e.g. our cloud service doesn't want it) nor land somewhere custom without forking the SPA. App isDefault is a badge that doesn't route.

Key framing (from review)

The landing is a product-definition decision made at build/dev time by whoever builds a product on the framework (declared in metadata/source) — not a runtime, per-tenant, admin-UI preference.

Proposal (metadata-native, near-zero new schema)

Resolve from existing app metadata:

  • Wire isDefault into root routing — land in the isDefault app; its existing homePageId selects the landing page inside it. "Custom home" = your app + its homePageId (an ADR-0065 page). No settings namespace, no page:<name> top-level concept.
  • Fallback (nobody declares isDefault): single visible app → it; else today's /home launcher (unchanged).
  • Replace CloudAwareRootRedirect's hardcode with a generic LandingResolver. Cloud already has cloud_control isDefault: true, so behavior is preserved and the hardcode is deleted.
  • An env var stays only as a secondary ops escape hatch; metadata is the source of truth.

Explicitly NOT doing

No console.default_landing Settings-Manifest namespace, no per-tenant sys_setting, no Settings UI, no per-tenant runtime landing. (An earlier draft proposed the Settings route — dropped per review.)

Back-compat

No isDefault app → unchanged /home. Cloud → unchanged (still lands on cloud_control), minus the hardcode. Likely no framework spec change beyond documenting isDefault's routing semantics; the work concentrates in objectui.

Seeking design sign-off before implementing.

🤖 Generated with Claude Code

The console hardcodes the post-login landing (CloudAwareRootRedirect's literal
PREFERRED_APPS=['cloud_control'] → /apps/cloud_control, else /home launcher), so
a deployment can neither opt out of the outer /home nor customize it without
forking the SPA, and app `isDefault` is a badge that doesn't route.

Propose resolving the landing from a `console.default_landing` setting reusing
ADR-0007's SettingsService order (env override → tenant → user → manifest
default), values auto | home | app:<name> | page:<name>; wire isDefault into the
`auto` resolver; replace CloudAwareRootRedirect with a LandingResolver and demote
cloud to a consumer. Back-compat: default `auto` equals today's multi-app /home.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 27, 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 27, 2026 1:25pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation size/m labels Jun 27, 2026
… Settings UI

Per review: the post-login landing is a product-definition decision the
developer/ISV makes in metadata/source at build time, not a runtime per-tenant
admin preference. Drop the Settings-Manifest namespace + sys_setting story.
Resolve from existing app metadata instead: wire `isDefault` into root routing
(land in the default app; its existing `homePageId` selects the page), with a
single-app/`/home` fallback and an optional deploy-time env override as a
secondary ops escape hatch. Concentrates the change in objectui (one resolver
replacing the PREFERRED_APPS hardcode); likely no framework spec change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@os-zhuang

Copy link
Copy Markdown
Contributor Author

Closing without merging — per review, this change is too small to warrant a standalone ADR. It reuses existing app metadata (isDefault + homePageId), the only real change being a generic landing resolver in objectui replacing the PREFERRED_APPS=['cloud_control'] hardcode. The one durable note (isDefault gains routing semantics — a back-compat contract change — and why it's metadata-declared rather than a Settings UI) will live in the implementation PR description + changeset + a code comment. Superseded by the forthcoming objectui implementation PR.

@os-zhuang os-zhuang closed this Jun 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant