Skip to content

docs(adr): revise ADR-0048 — package-scoped identity over per-item collision detection#1809

Merged
xuyushun441-sys merged 1 commit into
mainfrom
docs/adr-0048-revision
Jun 13, 2026
Merged

docs(adr): revise ADR-0048 — package-scoped identity over per-item collision detection#1809
xuyushun441-sys merged 1 commit into
mainfrom
docs/adr-0048-revision

Conversation

@xuyushun441-sys

Copy link
Copy Markdown
Contributor

What

Revises ADR-0048 to re-frame cross-package metadata collisions for the app-marketplace era. Docs-only.

Why

The original ADR chose per-item collision detection at registration time — turn a silent shadow into a loud error. That guard shipped and stays. But for a marketplace it's the wrong terminal design: two independent vendors that both ship a bare-named page/home would be unable to coexist (the second install fails). A marketplace whose packages can't be installed together on common names isn't a marketplace.

Revised direction

  1. package id (reverse-domain com.acme.crm) is the global identity + routing/container key — vendor baked in, so two vendors' "crm" never collide; URL-safe; already the dependency-resolution identity.
  2. namespace stays the object prefix, enforced unique per-install at install time (refuse-on-conflict) — making explicit the constraint the table layer already enforces implicitly (duplicate CREATE TABLE crm_account fails loudly).
  3. Resolution is container-scoped (prefer-local, qualify-to-cross) → a cross-package clash is structurally impossible rather than detected after the fact.
  4. The shipped runtime guard is retained as a same-package authoring backstop.
  5. namespace rename-on-install is an explicit non-goal for v1 (deep rewrite of every object name / cross-ref / formula).

Net: one O(1)-per-package namespace install gate replaces the O(every page/dashboard/flow) per-item scan; object and UI metadata share one scope model with zero artifact renames.

Accuracy

  • [done] — runtime guard (MetadataCollisionError, collisionPolicy, registry.ts) + naming/namespace-prefix os-lint rule (already shipped) are labelled as such.
  • [proposed] — install-time namespace gate + container-scoped resolution + qualified cross-package references.
  • [deferred] — namespace rename-on-install.

No code changes — ADR document only.

🤖 Generated with Claude Code

…llision detection

Re-examine the cross-package metadata collision problem through the
app-marketplace install lens. Per-item collision detection (shipped) makes
two independent vendors that both ship a bare-named `page/home` unable to
coexist — wrong for a marketplace.

Revised direction:
- package id (reverse-domain) is the global identity + routing/container key
  (vendor baked in → two vendors' "crm" never collide; URL-safe)
- namespace stays the object prefix, enforced unique per-install at install
  time (refuse-on-conflict) — making explicit the constraint the table layer
  already enforces implicitly
- resolution is container-scoped (prefer-local, qualify-to-cross), so a
  cross-package clash is structurally impossible rather than detected
- the shipped runtime guard is retained as a same-package authoring backstop
- namespace rename-on-install is an explicit non-goal for v1

Docs-only. The runtime guard + os lint rule remain accurately labelled [done];
the install gate + container-scoped resolution are labelled [proposed].

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 13, 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 13, 2026 5:09am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation size/m labels Jun 13, 2026
@xuyushun441-sys
xuyushun441-sys merged commit cad0aff into main Jun 13, 2026
12 checks passed
@xuyushun441-sys
xuyushun441-sys deleted the docs/adr-0048-revision branch June 13, 2026 05:11
os-zhuang added a commit that referenced this pull request Jun 20, 2026
feat(plugin-gantt): locate icon + flash highlight + group node type (4-level tree) (#1809)

objectui@c125273f78b64713709bf94817e066e87ce399d6
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.

2 participants