|
5 | 5 | **Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md) (package as first-class citizen), [ADR-0005](./0005-metadata-customization-overlay.md) (artifact vs runtime overlay precedence), [ADR-0008](./0008-metadata-repository-and-change-log.md) (metadata repository, `MetaRef` identity), [ADR-0010](./0010-metadata-protection-model.md) (package provenance / `_packageId` stamping) |
6 | 6 | **Consumers**: `@objectstack/objectql` (`SchemaRegistry.registerItem`, `ObjectQL.registerApp`, install path), `@objectstack/console` / `objectui` (routing + metadata resolution), package authors, CLI/CI install path, the app marketplace registry. |
7 | 7 | **Surfaced by**: ADR-0046 review (doc naming) → generalised to all bare-named metadata → re-examined through the app-marketplace install lens. |
8 | | -**Addenda**: [2026-08-08 — publish-time / marketplace namespace exclusivity](#addendum-2026-08-08-publish-time--marketplace-namespace-exclusivity) (**Accepted** 2026-08-08 — maintainer ruling on #1825, [acceptance comment 5226411687](https://github.com/objectstack-ai/objectstack/issues/1825#issuecomment-5226411687), landed by PR #6671; additive to §3.2, supersedes nothing); [2026-11-06 — bare names resolved without a package hold one package](#addendum-2026-11-06-bare-names-resolved-without-a-package-hold-one-package--34-narrowed) (**Accepted**, ruling C on #30798, phase 1; narrows §3.4 for picklists, mappings, datasets, APIs, object-less actions, engine functions, flows, webhooks, connectors and email templates, supersedes nothing). |
| 8 | +**Addenda**: [2026-08-08 — publish-time / marketplace namespace exclusivity](#addendum-2026-08-08-publish-time--marketplace-namespace-exclusivity) (**Accepted** 2026-08-08 — maintainer ruling on #1825, [acceptance comment 5226411687](https://github.com/objectstack-ai/objectstack/issues/1825#issuecomment-5226411687), landed by PR #6671; additive to §3.2, supersedes nothing); [2026-11-06 — bare names resolved without a package hold one package](#addendum-2026-11-06-bare-names-resolved-without-a-package-hold-one-package--34-narrowed) (**Accepted**, ruling C on #30798, phase 1; narrows §3.4 for picklists, mappings, datasets, APIs, object-less actions, engine functions, flows, webhooks, connectors, email templates, agents and skills — phase 1 complete — supersedes nothing). |
9 | 9 |
|
10 | 10 | --- |
11 | 11 |
|
@@ -267,28 +267,27 @@ package — stays covered by the `naming/namespace-prefix` lint in `os lint`. |
267 | 267 | > [Addendum (2026-10-08)](#addendum-2026-10-08-the-security-catalog-holds-one-name-per-deployment--34-narrowed). |
268 | 268 |
|
269 | 269 | > **Narrowed (2026-11-06) — picklists, mappings, datasets, APIs, object-less |
270 | | -> actions, engine functions, flows, webhooks, connectors and email templates are |
271 | | -> out of §3.4.** Their consumers resolve the name with no package — a field's |
| 270 | +> actions, engine functions, flows, webhooks, connectors, email templates, agents |
| 271 | +> and skills are out of §3.4.** Their consumers resolve the name with no package — a field's |
272 | 272 | > `picklist`, an import's `mappingName`, a dashboard's `datasetName`, the |
273 | 273 | > endpoint matcher's one API per name, `/actions/global/NAME`, a flow `script` |
274 | 274 | > node's function, the automation engine's one armed flow per name, the |
275 | 275 | > dispatcher's one declared webhook per name, the connector picker's one |
276 | | -> connector per name, a send's `template` — so with two holders every caller is |
| 276 | +> connector per name, a send's `template`, `/meta/agent/NAME`, an MCP client's |
| 277 | +> skill prompt — so with two holders every caller is |
277 | 278 | > served one of them, chosen by registration order, measured on a booted |
278 | 279 | > two-package deployment (#30803). Once the cold boot has sealed the registry, a |
279 | 280 | > package whose picklist, mapping, dataset, API, object-less action, flow, |
280 | | -> webhook, connector or email template bears a name another installed package |
281 | | -> holds is refused at managed install and at package registration (a built-in's |
| 281 | +> webhook, connector, email template, agent or skill bears a name another |
| 282 | +> installed package holds is refused at managed install and at package registration (a built-in's |
282 | 283 | > name, at managed install), and a package whose handlers bring a function |
283 | 284 | > another package holds is refused at the hook binder's bind, each naming both |
284 | 285 | > holders and the rename. ⛔ The environment catalog is never a holder: an |
285 | 286 | > environment item under a package's name is the ADR-0005 overlay. ⛔ Nor is the |
286 | 287 | > email service's built-in template bundle: an app's same-named template |
287 | 288 | > overrides it by contract (ADR-0131 D6), so that package holds no template name |
288 | | -> and is refused none. The remaining types the measurement found resolving |
289 | | -> without a package context — `agent` and `skill` — are to follow in the series' |
290 | | -> last change. Every other type, an action bound to an object among them, keeps |
291 | | -> §3.4 as written. See |
| 289 | +> and is refused none. Every other type keeps §3.4 as written, among them a |
| 290 | +> `tool` and an action bound to an object. See |
292 | 291 | > [Addendum (2026-11-06)](#addendum-2026-11-06-bare-names-resolved-without-a-package-hold-one-package--34-narrowed). |
293 | 292 |
|
294 | 293 | ### 3.5 Namespace rename-on-install is deferred (non-goal) |
@@ -956,7 +955,7 @@ first phase. |
956 | 955 |
|
957 | 956 | > **Status of this addendum: Accepted** — it records phase 1 of a maintainer |
958 | 957 | > ruling. It **narrows §3.4 for more metadata types, one family per change (P1.2, |
959 | | -> P1.7, P1.8), and supersedes no other text**: §§1–6, the 2026-08-08 addendum and |
| 958 | +> P1.7, P1.8, P1.9 — the last), and supersedes no other text**: §§1–6, the 2026-08-08 addendum and |
960 | 959 | > the 2026-10-08 addendum stand verbatim. |
961 | 960 | > |
962 | 961 | > **Ruling this addendum records** — #30798, answered by the maintainer |
@@ -1063,14 +1062,14 @@ the doors never refuse. |
1063 | 1062 | - **No downgrade.** `OS_METADATA_COLLISION=warn` softens the §3.2 namespace gate |
1064 | 1063 | only. |
1065 | 1064 |
|
1066 | | -### P1.5 To follow |
| 1065 | +### P1.5 The series, complete |
1067 | 1066 |
|
1068 | | -The same measurement found `agent` and `skill` resolving without a package |
1069 | | -context too. They join P1.2's list in the series' last change under #30803, with |
1070 | | -their own pins, narrowing §3.4 the same way (the maintainer kept all of them in |
1071 | | -#30803 on 2026-11-06). `tool` and `rag_pipeline` share a reader with `agent` and |
1072 | | -were not measured. The request family that was listed here is P1.7; the flow |
1073 | | -family — `flow`, `webhook`, `connector` and `email_template` — is P1.8. |
| 1067 | +Phase 1 joined P1.2's list one family per change under #30803, each measured |
| 1068 | +first, as the maintainer ordered on 2026-11-06 (all of them kept in #30803): the |
| 1069 | +data family (P1.1), the request family (P1.7), the flow family (P1.8) and, last, |
| 1070 | +the AI family — `agent` and `skill` (P1.9). P1.9's change closes phase 1. `tool` |
| 1071 | +and `rag_pipeline` were never in the ruling's list; P1.9 records what was |
| 1072 | +measured of them. |
1074 | 1073 |
|
1075 | 1074 | ### P1.6 Where it is implemented |
1076 | 1075 |
|
@@ -1178,3 +1177,39 @@ and is not judged. |
1178 | 1177 | **The cold boot** reads the four with the registry's other holders, under |
1179 | 1178 | P1.3's switch: the flow precedence warning keeps naming both packages and arming |
1180 | 1179 | one, as before; the bare-name warning names every clash once with its rename. |
| 1180 | + |
| 1181 | +### P1.9 The AI family: `agent`, `skill` — the series' last |
| 1182 | + |
| 1183 | +Measured with P1.1's two packages, in both orders, plus a third package |
| 1184 | +installed after the boot (#30803, PR 4): |
| 1185 | + |
| 1186 | +- **`agent`** — `/meta/agent/NAME` serves the FIRST-registered package's |
| 1187 | + agent, silently. It is the one by-name read of an agent the open framework |
| 1188 | + serves: the kernel `metadata` service, which the MCP `agent_prompt` reads, |
| 1189 | + answers no package agent at all on the composed runtime (ADR-0063 §2: agents |
| 1190 | + are platform-owned), and the agent runtime that resolves an agent by name for |
| 1191 | + chat is the cloud's, not measured here. |
| 1192 | +- **`skill`** — an MCP client's `prompts/get` of a skill resolves the |
| 1193 | + FIRST-registered package's skill (`listSkillPrompts` keeps the first row per |
| 1194 | + name and drops the other), silently; `/meta/skill/NAME` serves the same one. |
| 1195 | + ADR-0063 §2 names the skill the third-party extension primitive, so this is |
| 1196 | + the family's live collision. |
| 1197 | + |
| 1198 | +A third package installed after the boot under either name installs (`200`) and |
| 1199 | +is shadowed. Neither type warns. |
| 1200 | + |
| 1201 | +**What is refused.** Both join P1.2's list: the same two doors, the same |
| 1202 | +holders, the same envelope and rename. Neither is bundled, and neither has an |
| 1203 | +overridable baseline or a built-in name. An agent and a skill are two types: one |
| 1204 | +package's agent and another's skill under one name never meet. |
| 1205 | + |
| 1206 | +**Not in the list.** A `tool` is not covered — the ruling's types do not name it. |
| 1207 | +Measured beside them: `/meta/tool/NAME` serves the first-registered package's |
| 1208 | +tool as well; the readers that resolve a tool by name are the cloud's. A |
| 1209 | +`rag_pipeline` cannot be declared through `defineStack` (the stack schema |
| 1210 | +refuses `ragPipelines`) and registered nothing in the measurement. Both are left |
| 1211 | +as §3.4 has them. |
| 1212 | + |
| 1213 | +**The cold boot** reads the two with the registry's other holders, under P1.3's |
| 1214 | +switch (`'warn'`). This is the series' closing change: phase 1's list is |
| 1215 | +complete, and phase 2 (#30804, #30805) and phase 3 (#30806) follow. |
0 commit comments