feat(apps): split platform apps into one-app packages (ADR-0048)#1813
Conversation
…neutral) ADR-0048 "one app per package": Studio becomes its own ObjectStack package (`com.objectstack.studio`, namespace `studio`) so `/apps/<packageId>` resolves unambiguously instead of being lost inside plugin-auth's multi-app manifest. This commit is intentionally boot-neutral: - New package `packages/apps/studio` with a thin `StudioAppPlugin` that registers the Studio manifest; STUDIO_APP is still imported from platform-objects (transitional) and the package is NOT yet wired into the dev/serve plugin set. - Adds `packages/apps/*` to the pnpm workspace globs and `@objectstack/studio` to the changeset fixed group. Boot path (dev-plugin/serve.ts) and plugin-auth's manifest are untouched, so `os dev`/`os serve` behaviour is unchanged. The boot-path switch (wire the new package, drop the app from plugin-auth, move the AppSchema in) lands separately so it can be verified against a live boot. Builds clean (tsup CJS/ESM/DTS). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…eutral) Mirrors @objectstack/studio: Setup becomes its own package (`com.objectstack.setup`, namespace `setup`) carrying SETUP_APP and its baseline SETUP_NAV_CONTRIBUTIONS. Boot-neutral (transitional import from platform-objects; not yet wired into dev/serve). Added to the changeset fixed group. Builds clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…p dead SPA (ADR-0048) Removes the deprecated standalone account-portal SPA (apps/account) and reclaims the @objectstack/account name for the console Account app as its own package (`com.objectstack.account`, namespace `account`). Boot-neutral skeleton (mirrors studio/setup): thin AccountAppPlugin, transitional import from platform-objects, not yet wired into dev/serve. CLI's vestigial workspace dep now resolves to the reclaimed package (no code imported the old SPA). Builds clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…op from plugin-auth (ADR-0048)⚠️ BOOT-CRITICAL — verify with a live `os dev` (and `os serve`) boot before merge. Completes the ADR-0048 app split: - plugin-auth's manifest no longer registers `apps: [SETUP_APP, STUDIO_APP, ACCOUNT_APP]` nor `navigationContributions: SETUP_NAV_CONTRIBUTIONS`; it keeps only the auth objects + their detail pages. - dev-plugin.ts and cli `serve.ts` now register the three new app packages (best-effort dynamic import, skipped if not installed) right after AuthPlugin, so each app publishes under its own package id (com.objectstack.{setup,studio, account}) and `/apps/<packageId>` resolves unambiguously. - plugin-dev + cli declare the three app packages as workspace deps. The AppSchemas still physically live in @objectstack/platform-objects/apps (the new packages import them); moving the definitions in is a later non-behavioral cleanup. Verified statically: all packages build, plugin-dev/cli typecheck clean, plugin-auth (114) + platform-objects (55) tests pass. NOT runtime-boot-verified. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…ge id (ADR-0048) Live `os dev` boot surfaced: `Dependency 'com.objectstack.plugin-auth' not found for plugin 'com.objectstack.setup'`. The kernel matches plugin `dependencies` by plugin NAME — AuthPlugin's name is `com.objectstack.auth`, while its package id is `com.objectstack.plugin-auth`. Point the class-level dependency at the plugin name (`com.objectstack.auth`); the manifest-level dependency stays the package id. Adds packages/cli/src/adr-0048-app-split.test.ts: boots a real ObjectQL engine, runs each app plugin's start(), asserts setup/studio/account register under their own package ids and coexist. VERIFIED end-to-end: `os dev` (app-showcase) boots clean and /api/v1/meta/app reports setup→com.objectstack.setup, studio→com.objectstack.studio, account→com.objectstack.account (previously all com.objectstack.plugin-auth). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
✅ Boot-verified end-to-end (no longer just static). 1. Live
(Previously all three were 2. Bug caught & fixed by the boot: the first boot failed with 3. Integration test ( 4. Static: all packages build (tsup CJS/ESM/DTS); |
Draft — the final commit is boot-critical and needs a live
os dev/os serveboot to verify before merge.Implements ADR-0048 "one app per package" for the platform's bundled apps:
plugin-authshipped three apps (setup/studio/account) under one package id, which made/apps/<packageId>ambiguous (the blocker that browser-verification surfaced). This splits them into their own one-app packages so package-id routing (option A, PR objectstack-ai/objectui#1693) can resume.Commits
@objectstack/studio(packages/apps/studio, nsstudio) — boot-neutral@objectstack/setup(packages/apps/setup, nssetup, carriesSETUP_NAV_CONTRIBUTIONS) — boot-neutral@objectstack/accountfor the console Account app (packages/apps/account, nsaccount); delete the deprecated standalone account-portal SPA (apps/account) — boot-neutralapps/navigationContributionsfromplugin-auth's manifest; register the three new packages indev-plugin.ts+serve.tsafter AuthPlugin; declare workspace deps.Conventions
packages/apps/*(added to pnpm workspace globs).apps/*(top-level) is for standalone SPAs and isn't reused.com.objectstack.{studio,setup,account}+ namespace; depends onplugin-authfor the objects it navigates.@objectstack/platform-objects/apps(new packages import them); moving the definitions in is a later non-behavioral cleanup.Verification
plugin-dev+clitypecheck clean;plugin-auth(114) +platform-objects(55) tests pass.os dev(andos serve) to confirm the platform boots and/apps/setup,/apps/studio,/apps/accounteach resolve. That's why this is a draft.Follow-ups
/apps/:packageId/docs/:name).*.app.tsdefinitions (+ studio/setup i18n) into the new packages and drop the transitional platform-objects dependency.🤖 Generated with Claude Code