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
docs(runtime,metadata-protocol): correct the `writable` verdict's illustration — the scope-less booted row is a marketplace / offline import, never a multi-package artifact's module (#14803)
7
+
8
+
Comment and prose only. No predicate, no assertion and no served shape changes;
9
+
every pin behind the `writable` verdict stays green as written.
10
+
11
+
The `writable` verdict shipped in 17.3.0 with a **false attribution** in its own
12
+
explanation, and this corrects it at every site that repeated it. The claim was
13
+
that the scope-less booted row `isWritablePackage` answers `false` for is *the
14
+
`type: module` sub-package a multi-package artifact carries*. It is not, and it
15
+
never was:
16
+
17
+
-`defineStack` parses every `packages[]` entry through `ManifestSchema`
18
+
(`spec/src/stack.zod.ts`, `ArtifactPackageEntrySchema`), whose `scope` is
19
+
`.default('project')` (`spec/src/kernel/manifest.zod.ts`), so **no** package of
20
+
a compiled artifact is ever scope-less — `dist/objectstack.json` and both
21
+
served rows carry `scope: "project"`.
22
+
- A genuinely scope-less row arises only where a manifest reaches the registry
23
+
**without** that parse, because `installPackage` stores a key-by-key copy that
24
+
applies no defaults: a marketplace install / offline file import
25
+
(`manifestService.register(rawBody)` to `ql.registerApp`) for the **booted,
26
+
read-only** half, and `POST /api/v1/packages` (`body.manifest || body` to
27
+
`installPackage`) for the **database base, writable** half.
28
+
29
+
Measured: `ManifestSchema.parse` of the `app-multi-package` orders body turns an
30
+
unauthored `scope` into `scope: "project"`, while `SchemaRegistry.installPackage`
31
+
of the same unparsed body yields a record with no `scope` key at all.
32
+
33
+
What stays, because it is true and load-bearing: a scope-less **booted** package
34
+
is read-only while a scope-less **database base** is writable, and only
35
+
`engine.manifests` tells them apart — which is why the server owns the verdict.
| 50 |`manage_metadata` bypassed on metadata writes | runtime, rest | Get: schema writes without the capability |`domains/meta.ts:471`, `:874`, `rest-server.ts:5231`, `:6657`, `:6905`, `:7336`, `:7529`|
162
162
| 51 | The shared metadata-write verdict itself returns `allowed`| metadata-core | Get: the one function all of row 50's doors consult answers yes before any capability is examined |`meta-write-capability.ts:134`|
163
-
| 52 | Anonymous-deny seam satisfied on the domain dispatchers and the package/federation routes | runtime, rest | Get: passes with no `userId`|`domains/actions.ts:421`, `domains/ai.ts:60`, `domains/automation.ts:989`, `domains/meta.ts:232`, `domains/security.ts:78`, `domains/packages.ts:535`, `external-datasource-routes.ts:302`, `package-routes.ts:97`|
163
+
| 52 | Anonymous-deny seam satisfied on the domain dispatchers and the package/federation routes | runtime, rest | Get: passes with no `userId`|`domains/actions.ts:421`, `domains/ai.ts:60`, `domains/automation.ts:989`, `domains/meta.ts:232`, `domains/security.ts:78`, `domains/packages.ts:543`, `external-datasource-routes.ts:302`, `package-routes.ts:97`|
164
164
| 53 | MCP principal check satisfied | runtime | Get: MCP surface reachable with no user |`domains/mcp.ts:61`|
0 commit comments