You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* chore: bump objectui to 893e5302174c
feat(ADR-0046): package documentation portal + nav entry (#1686)
objectui@893e5302174c7cbf75a7bed9e8e6dcb935273363
* feat(objectql): ADR-0048 Phase 1+2 — namespace install gate + prefer-local resolution
Phase 1 — install-time namespace gate. `SchemaRegistry.installPackage` refuses
a package whose `manifest.namespace` is already owned by a DIFFERENT installed
package (new `NamespaceConflictError`), making explicit and early the constraint
the object/table layer already enforces implicitly (a duplicate
`CREATE TABLE <ns>_<obj>` fails at the DB). Same-package reinstall and shareable
platform namespaces (base/system/sys) are exempt; OS_METADATA_COLLISION=warn
downgrades to a warning.
Phase 2 — prefer-local (container-scoped) resolution. `getItem(type, name, ns?)`
resolves a bare name to the item owned by `ns`'s package before any
cross-package fallback, preserving ADR-0005 overlay precedence and remaining
backward compatible (param optional). `getApp` resolves prefer-local against its
own name (app.name ≡ namespace in v1). The per-item collision guard now narrows
to the cases prefer-local CANNOT disambiguate (shared/missing namespace), so two
DIFFERENT-namespace packages legitimately coexist on the same bare name — the
marketplace coexistence the revised ADR-0048 targets. Every existing collision
test still passes (namespace-less fixtures remain a hard error).
Tests: registry-namespace-install-gate.test.ts (7), registry-prefer-local-
resolution.test.ts (7). Full objectql suite green (600).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(objectql): pivot ADR-0048 to option A — package-id-scoped resolution
Per the sharpened ADR-0048 decision: the URL/route key is the package id (A),
not the namespace. Migration cost is symmetric between A and B (both change one
thing), so A wins on the dimensions that matter for an open marketplace —
coordination-free global uniqueness, a single identity coordinate, no
land-grab, and a self-describing URL.
Backend:
- getItem(type, name, currentPackageId?) prefers `${currentPackageId}:${name}`
directly (was namespace→owner indirection). ADR-0005 overlay precedence and
backward compatibility unchanged.
- getApp(name, currentPackageId?) resolves prefer-local by package id.
- Retire the per-item CROSS-package throw: package ids are globally unique, so
package-scoped resolution always disambiguates two distinct packages — what
the old guard flagged is now the supported coexistence case. Remove the now-
dead MetadataCollisionError, findOtherPackageOwner, isPreferLocalDisambiguable,
isRealPackage, SYS_METADATA_OWNER. collisionPolicy now governs only the Phase
1 namespace gate.
Tests: rewrite *-cross-package-collision.test.ts from "throws" to "coexists +
package-scoped resolves"; prefer-local test keys on package id. Full objectql
suite green (598).
ADR: §3.3 package-scoped (package-id) resolution; §3.4 cross-package throw
retired; §3.6 transparent package-id URL + optional per-tenant namespace alias;
phasing marks Phase 1 + Phase 2 backend/frontend done, package-id routing as the
remaining frontend step.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: re-trigger checks for the option-A pivot commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0 commit comments