From 3329301de627d0641656676cd12f40a4396cda2c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 6 Nov 2026 14:59:36 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs(adr):=20ADR-0048=20=C2=A75=20describes?= =?UTF-8?q?=20the=20namespace-prefix=20lint=20as=20it=20now=20ships?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The §5 bullet still said `naming/namespace-prefix` warns on seven types and only exempts the namespace-named app and `sys_` names. Under ruling C on #30798 it warns on every bare package-authored name in every manifest collection. The bullet now names what the rule leaves to other checks, what counts as carrying the namespace (including the `.` capability names, maintainer ruling 2026-11-06T11:08Z), the platform-requested `guest_portal` exemption (maintainer ruling 2026-11-06T14:57Z), and that the refusal is phase 3 (#30806). Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_016WV4cyadQ5Zhih2y1GNTQm --- .../0048-cross-package-metadata-collision.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/adr/0048-cross-package-metadata-collision.md b/docs/adr/0048-cross-package-metadata-collision.md index b8092eaf4dd..90380909421 100644 --- a/docs/adr/0048-cross-package-metadata-collision.md +++ b/docs/adr/0048-cross-package-metadata-collision.md @@ -333,9 +333,23 @@ alias is optional and out of scope for the phases below. Status legend: **[done]** shipped · **[proposed]** not yet built · **[deferred]** out of scope here. -- **[done]** Authoring lint: `naming/namespace-prefix` in `os lint` (warns on - non-prefixed `app`/`page`/`dashboard`/`flow`/`action`/`report`/`dataset`; - exempts the namespace-named app per ADR-0019 and `sys_` names; warning-only). +- **[done]** Authoring lint: `naming/namespace-prefix` in `os lint` warns on + every bare package-authored top-level name in every manifest collection, and + gives the rename as its `fix` (ruling C on #30798, #30804). It does not judge + objects (`defineStack` refuses those), views (named for their object), docs + (`docs/namespace-prefix`), extensions, translation bundles, fields, + `functions`, or an item that declares `overrides`. A name carries the + namespace when it is the namespace itself (the namespace-named app per + ADR-0019), starts with `_`, is a `.` capability name + (maintainer ruling 2026-11-06T11:08Z, recorded in + [#30804 comment 6683456244](https://github.com/objectstack-ai/objectstack/issues/30804#issuecomment-6683456244)), + or starts with `sys_`. The permission set `guest_portal` is exempt, because + the public form doors request it by that bare name (ADR-0138; maintainer + ruling 2026-11-06T14:57Z, recorded in + [#30804 comment 6687835712](https://github.com/objectstack-ai/objectstack/issues/30804#issuecomment-6687835712); + `PLATFORM_REQUESTED_BARE_NAMES`). The rule also reports a name + declared twice in one package. It is warning-only; the refusal is phase 3 + of the same ruling (#30806). - **[done] Phase 1 — install-time namespace gate.** `NamespaceConflictError` + the gate in `SchemaRegistry.installPackage` (refuses a package whose `manifest.namespace` is already owned by a different installed package; From 50f6f409f4ed9b161d90b8ad568cc014a1657c9c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 6 Nov 2026 16:00:20 +0000 Subject: [PATCH 2/2] =?UTF-8?q?docs(adr):=20the=20ADR-0048=20=C2=A75=20lin?= =?UTF-8?q?t=20bullet=20names=20where=20the=20duplicate=20finding=20and=20?= =?UTF-8?q?the=20namespace=20guard=20reach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The contract review on the bullet found it said the duplicate finding covers every collection, while it runs only for apps, pages, dashboards, flows, actions, reports and datasets. The bullet now says so, says a package with no `manifest.namespace` is not judged, and describes the dot clause as the dotted `.` shape rather than capabilities alone, which is what the predicate checks. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_016WV4cyadQ5Zhih2y1GNTQm --- .../0048-cross-package-metadata-collision.md | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/adr/0048-cross-package-metadata-collision.md b/docs/adr/0048-cross-package-metadata-collision.md index 90380909421..cd9edfef30a 100644 --- a/docs/adr/0048-cross-package-metadata-collision.md +++ b/docs/adr/0048-cross-package-metadata-collision.md @@ -334,22 +334,24 @@ Status legend: **[done]** shipped · **[proposed]** not yet built · **[deferred]** out of scope here. - **[done]** Authoring lint: `naming/namespace-prefix` in `os lint` warns on - every bare package-authored top-level name in every manifest collection, and - gives the rename as its `fix` (ruling C on #30798, #30804). It does not judge - objects (`defineStack` refuses those), views (named for their object), docs - (`docs/namespace-prefix`), extensions, translation bundles, fields, - `functions`, or an item that declares `overrides`. A name carries the + every bare package-authored top-level name in every manifest collection of a + package that declares `manifest.namespace` (a package without one is not + judged), and gives the rename as its `fix` (ruling C on #30798, #30804). It + does not judge objects (`defineStack` refuses those), views (named for their + object), docs (`docs/namespace-prefix`), extensions, translation bundles, + fields, `functions`, or an item that declares `overrides`. A name carries the namespace when it is the namespace itself (the namespace-named app per - ADR-0019), starts with `_`, is a `.` capability name - (maintainer ruling 2026-11-06T11:08Z, recorded in + ADR-0019), starts with `_`, is a dotted `.` name, the + capability shape (maintainer ruling 2026-11-06T11:08Z, recorded in [#30804 comment 6683456244](https://github.com/objectstack-ai/objectstack/issues/30804#issuecomment-6683456244)), or starts with `sys_`. The permission set `guest_portal` is exempt, because the public form doors request it by that bare name (ADR-0138; maintainer ruling 2026-11-06T14:57Z, recorded in [#30804 comment 6687835712](https://github.com/objectstack-ai/objectstack/issues/30804#issuecomment-6687835712); - `PLATFORM_REQUESTED_BARE_NAMES`). The rule also reports a name - declared twice in one package. It is warning-only; the refusal is phase 3 - of the same ruling (#30806). + `PLATFORM_REQUESTED_BARE_NAMES`). The rule also reports a name declared + twice in one package among its apps, pages, dashboards, flows, actions (per + `objectName`), reports and datasets. It is warning-only; the refusal is + phase 3 of the same ruling (#30806). - **[done] Phase 1 — install-time namespace gate.** `NamespaceConflictError` + the gate in `SchemaRegistry.installPackage` (refuses a package whose `manifest.namespace` is already owned by a different installed package;