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): the scope-less booted row is a marketplace / offline import, not a multi-package artifact's module (#16123)
* docs(runtime,metadata-protocol): the scope-less booted row is a marketplace / offline import, not a multi-package artifact's module
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARYe3yQTQCUFm5qPYNgKaJ
* chore(changeset): record the scope-less-row attribution correction for the next release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARYe3yQTQCUFm5qPYNgKaJ
* fix(docs): re-anchor the system-context census row 52 onto the line the elevation read moved to
Pure line rot from this PR's own comment expansion in
packages/runtime/src/domains/packages.ts: the shouldDenyAnonymous read moved
from :535 to :543, so row 52's anchor and the read no longer met. Written by
`node scripts/check-system-context-census.mjs --fix`; the anchor's number is
the only thing that changed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ARYe3yQTQCUFm5qPYNgKaJ
---------
Co-authored-by: Claude <noreply@anthropic.com>
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