@plurnk/plurnk-service 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/.env.defaults +6 -0
  2. package/SPEC.md +36 -19
  3. package/dist/core/ChannelWrite.d.ts +2 -1
  4. package/dist/core/ChannelWrite.d.ts.map +1 -1
  5. package/dist/core/ChannelWrite.js +2 -2
  6. package/dist/core/ChannelWrite.js.map +1 -1
  7. package/dist/core/ChannelWrite.sql +2 -1
  8. package/dist/core/Dispatcher.d.ts +8 -4
  9. package/dist/core/Dispatcher.d.ts.map +1 -1
  10. package/dist/core/Dispatcher.js +19 -7
  11. package/dist/core/Dispatcher.js.map +1 -1
  12. package/dist/core/Engine.d.ts +1 -0
  13. package/dist/core/Engine.d.ts.map +1 -1
  14. package/dist/core/Engine.js +111 -42
  15. package/dist/core/Engine.js.map +1 -1
  16. package/dist/core/Engine.sql +23 -12
  17. package/dist/core/Owner.d.ts +9 -0
  18. package/dist/core/Owner.d.ts.map +1 -0
  19. package/dist/core/Owner.js +49 -0
  20. package/dist/core/Owner.js.map +1 -0
  21. package/dist/core/PacketBuilder.d.ts.map +1 -1
  22. package/dist/core/PacketBuilder.js +51 -32
  23. package/dist/core/PacketBuilder.js.map +1 -1
  24. package/dist/core/PluginLoader.d.ts +2 -0
  25. package/dist/core/PluginLoader.d.ts.map +1 -1
  26. package/dist/core/PluginLoader.js +27 -1
  27. package/dist/core/PluginLoader.js.map +1 -1
  28. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  29. package/dist/core/ProviderInstantiate.js +21 -2
  30. package/dist/core/ProviderInstantiate.js.map +1 -1
  31. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  32. package/dist/core/SchemeRegistry.js +7 -7
  33. package/dist/core/SchemeRegistry.js.map +1 -1
  34. package/dist/core/caps/CapsResolve.d.ts.map +1 -1
  35. package/dist/core/caps/CapsResolve.js +2 -1
  36. package/dist/core/caps/CapsResolve.js.map +1 -1
  37. package/dist/core/fork.d.ts.map +1 -1
  38. package/dist/core/fork.js +5 -7
  39. package/dist/core/fork.js.map +1 -1
  40. package/dist/core/fork.sql +3 -3
  41. package/dist/core/git-membership.d.ts.map +1 -1
  42. package/dist/core/git-membership.js +6 -4
  43. package/dist/core/git-membership.js.map +1 -1
  44. package/dist/core/owner.sql +14 -0
  45. package/dist/core/packet-wire.d.ts.map +1 -1
  46. package/dist/core/packet-wire.js +7 -8
  47. package/dist/core/packet-wire.js.map +1 -1
  48. package/dist/core/plurnk-uri.d.ts +2 -2
  49. package/dist/core/plurnk-uri.d.ts.map +1 -1
  50. package/dist/core/plurnk-uri.js +12 -13
  51. package/dist/core/plurnk-uri.js.map +1 -1
  52. package/dist/core/zero-pin.d.ts +3 -0
  53. package/dist/core/zero-pin.d.ts.map +1 -0
  54. package/dist/core/zero-pin.js +16 -0
  55. package/dist/core/zero-pin.js.map +1 -0
  56. package/dist/digest/Digest.d.ts.map +1 -1
  57. package/dist/digest/Digest.js +6 -1
  58. package/dist/digest/Digest.js.map +1 -1
  59. package/dist/index.d.ts +1 -3
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -3
  62. package/dist/index.js.map +1 -1
  63. package/dist/schemes/Exec.d.ts +6 -0
  64. package/dist/schemes/Exec.d.ts.map +1 -1
  65. package/dist/schemes/Exec.js +33 -9
  66. package/dist/schemes/Exec.js.map +1 -1
  67. package/dist/schemes/ExecOutputScheme.d.ts.map +1 -1
  68. package/dist/schemes/ExecOutputScheme.js +15 -4
  69. package/dist/schemes/ExecOutputScheme.js.map +1 -1
  70. package/dist/schemes/File.d.ts.map +1 -1
  71. package/dist/schemes/File.js +4 -3
  72. package/dist/schemes/File.js.map +1 -1
  73. package/dist/schemes/Log.js +1 -1
  74. package/dist/schemes/Log.js.map +1 -1
  75. package/dist/schemes/Prompt.d.ts +13 -0
  76. package/dist/schemes/Prompt.d.ts.map +1 -0
  77. package/dist/schemes/Prompt.js +40 -0
  78. package/dist/schemes/Prompt.js.map +1 -0
  79. package/dist/schemes/Worker.d.ts +6 -4
  80. package/dist/schemes/Worker.d.ts.map +1 -1
  81. package/dist/schemes/Worker.js +116 -72
  82. package/dist/schemes/Worker.js.map +1 -1
  83. package/dist/schemes/_entry-crud.d.ts +3 -3
  84. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  85. package/dist/schemes/_entry-crud.js +11 -7
  86. package/dist/schemes/_entry-crud.js.map +1 -1
  87. package/dist/schemes/_entry-crud.sql +8 -20
  88. package/dist/schemes/_entry-find.d.ts +1 -1
  89. package/dist/schemes/_entry-find.d.ts.map +1 -1
  90. package/dist/schemes/_entry-find.js +12 -20
  91. package/dist/schemes/_entry-find.js.map +1 -1
  92. package/dist/schemes/_entry-find.sql +2 -24
  93. package/dist/schemes/_entry-manifest.d.ts +1 -1
  94. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  95. package/dist/schemes/_entry-manifest.js +11 -16
  96. package/dist/schemes/_entry-manifest.js.map +1 -1
  97. package/dist/schemes/_entry-ops.d.ts +3 -3
  98. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  99. package/dist/schemes/_entry-ops.js +24 -26
  100. package/dist/schemes/_entry-ops.js.map +1 -1
  101. package/dist/schemes/_entry-ops.sql +3 -14
  102. package/dist/schemes/_entry-send.d.ts +1 -1
  103. package/dist/schemes/_entry-send.d.ts.map +1 -1
  104. package/dist/schemes/_entry-send.js +5 -4
  105. package/dist/schemes/_entry-send.js.map +1 -1
  106. package/dist/server/Daemon.d.ts.map +1 -1
  107. package/dist/server/Daemon.js +52 -10
  108. package/dist/server/Daemon.js.map +1 -1
  109. package/dist/server/drain.sql +35 -5
  110. package/dist/server/envelope.d.ts +1 -1
  111. package/dist/server/envelope.d.ts.map +1 -1
  112. package/dist/server/envelope.js +15 -7
  113. package/dist/server/envelope.js.map +1 -1
  114. package/dist/server/envelope.sql +6 -0
  115. package/dist/server/exec-poll-backoff.d.ts +2 -0
  116. package/dist/server/exec-poll-backoff.d.ts.map +1 -0
  117. package/dist/server/exec-poll-backoff.js +6 -0
  118. package/dist/server/exec-poll-backoff.js.map +1 -0
  119. package/dist/server/loopDocs.js +2 -2
  120. package/dist/server/loopDocs.js.map +1 -1
  121. package/dist/server/seam-entry-read.sql +3 -2
  122. package/migrations/0000-00-00.01_schema.sql +19 -6
  123. package/package.json +19 -16
  124. package/dist/schemes/Known.d.ts +0 -17
  125. package/dist/schemes/Known.d.ts.map +0 -1
  126. package/dist/schemes/Known.js +0 -40
  127. package/dist/schemes/Known.js.map +0 -1
  128. package/dist/schemes/Plurnk.d.ts +0 -17
  129. package/dist/schemes/Plurnk.d.ts.map +0 -1
  130. package/dist/schemes/Plurnk.js +0 -46
  131. package/dist/schemes/Plurnk.js.map +0 -1
  132. package/dist/schemes/Unknown.d.ts +0 -17
  133. package/dist/schemes/Unknown.d.ts.map +0 -1
  134. package/dist/schemes/Unknown.js +0 -39
  135. package/dist/schemes/Unknown.js.map +0 -1
@@ -1,7 +1,9 @@
1
1
  import { DEFAULT_LOOP_FLAGS } from "../core/scheme-types.js";
2
2
  import EntryOps from "./_entry-ops.js";
3
3
  import EntryFind from "./_entry-find.js";
4
- import { foldAuthorityIntoPath } from "../core/plurnk-uri.js";
4
+ import EntryCrud from "./_entry-crud.js";
5
+ import EntrySend from "./_entry-send.js";
6
+ import Owner from "../core/Owner.js";
5
7
  // #379 (owner ruling) — a loop the ENGINE concluded (∅-collapse) or the CLIENT killed (cancel)
6
8
  // must not present its last words as a deliverable: run42's workers parked on nothing, the
7
9
  // collapse concluded them, and the parent COLLECTed 'Standing by for user input' as a status-200
@@ -14,145 +16,187 @@ export const markTerminal = (terminatedBy, message) => {
14
16
  return `[ cancelled from outside the worker ]${message === null ? "" : ` ${message}`}`;
15
17
  return message;
16
18
  };
17
- // worker:// — the worker scheme: inter-run CONTROL (irc=SEND; WORK=spawn, FORK=fork is Dispatcher.#handleWorkerControl)
18
- // AND worker-scoped STORAGE (§worker-scheme). The worker is always the AUTHORITY: worker://<name>/<path> is
19
- // entry <path> owned by run <name>; `worker://self` is the current run, empty authority is invalid.
20
- // Worker is excluded from #extractTarget's authority-fold (Engine) so the authority stays the worker
21
- // name, never folded.
22
- // - path present → storage: READ any worker's entry by address (cross-worker read ok); EDIT self
23
- // only (cross-worker write → 403 — a worker reads a sister's notes, never writes them).
24
- // - path absent → control on the run-as-actor: WORK spawns / FORK forks (Engine), SEND ircs, READ
25
- // collects the deliverable; EDIT on the bare entity is rejected (the entity is not an entry).
19
+ // worker:// — THE knowledgebase scheme (#527) plus inter-worker CONTROL (irc=SEND; WORK/FORK are
20
+ // Dispatcher.#handleWorkerControl). The authority names the OWNER ({§worker-authority-carving}):
21
+ // worker:///plan.md — the COMMONS, the shared blackboard, the encouraged default
22
+ // worker://~/draft.md — the calling worker's own private space
23
+ // worker://<name>/result.md — a named worker's space, ancestry-gated read (owner + ancestors)
24
+ // worker://plurnk/docs/x.md — the kernel's published surface, world-readable
25
+ // Writes are self-and-commons only ({§worker-write-scoping}): a named authority is read-only to
26
+ // the model, so nothing worker-authored can ever land under another principal — worker://plurnk/
27
+ // included, which is what makes the kernel's surface the trust boundary with no guard to forget.
28
+ // Path-absent forms are control on the worker-as-actor: READ collects the deliverable, SEND ircs;
29
+ // WORK spawns / FORK forks (Dispatcher); EDIT on the bare entity is rejected.
26
30
  export default class Worker {
27
31
  static manifest = {
28
32
  name: "worker",
29
33
  channels: { body: "text/markdown" },
30
34
  defaultChannel: "body",
31
35
  category: "data",
32
- scope: "worker",
33
- writableBy: ["model", "client"],
36
+ scope: "workspace",
37
+ writableBy: ["model", "client", "plurnk"], // the kernel authors worker://plurnk/ (docs); write-scoping still gates principals
34
38
  volatile: false,
35
39
  modelVisible: true,
36
- example: "<<EDIT(worker://self/todo.md):- [ ] investigate the timeout:EDIT",
40
+ example: "<<EDIT(worker:///plan.md):- [ ] investigate the timeout:EDIT",
37
41
  };
38
- // The worker name from a worker:// target's authority (hostname). "self" = the current run;
39
- // "" (empty authority) is invalid; null when the target isn't a worker:// url.
42
+ // The authority from a worker:// target — "" for the empty (commons) form; null when the
43
+ // target isn't a worker:// url at all.
40
44
  static #authority(target) {
41
45
  if (target === null || target.kind !== "url" || target.scheme !== "worker")
42
46
  return null;
43
47
  return target.hostname ?? "";
44
48
  }
45
- // The entry path within the worker — the target's pathname; "" / "/" mean no entry (the
46
- // run-as-actor / control form).
49
+ // The entry path within the space — the target's pathname; "" / "/" mean no entry (the
50
+ // worker-as-actor / control form).
47
51
  static #entryPath(target) {
48
52
  if (target === null || target.kind !== "url")
49
53
  return "";
50
54
  const p = target.pathname ?? "";
51
55
  return p === "/" ? "" : p;
52
56
  }
53
- // The acting worker's own name — for self-resolution and the cross-worker-write gate.
54
- static async #selfName(ctx) {
55
- const row = await ctx.db.worker_name_by_id.get({ worker_id: ctx.workerId });
56
- if (row === undefined)
57
- throw new Error("run: acting run has no name");
58
- return row.name;
57
+ // {§worker-authority-carving} — resolve the authority to the owning principal. Empty = the
58
+ // commons (writable — the blackboard default); `~` = the caller (writable — own space); the
59
+ // kernel's surface is world-READABLE; any other name is ancestry-gated read ({§worker-read-scope}:
60
+ // the reader is the owner or an ancestor — oversight flows down the tree). Unknown name or
61
+ // unpermitted reader → null → 404, no existence leak. Writability is the {§worker-write-scoping}
62
+ // law: only `~` and the commons take model writes; owner_id is engine-stamped, never model-set.
63
+ static async #resolveAuthority(authority, ctx) {
64
+ if (authority === "")
65
+ return { ownerId: await Owner.commonsId(ctx.db, ctx.workspaceId), writable: true };
66
+ if (authority === "~")
67
+ return { ownerId: ctx.workerId, writable: true };
68
+ const named = await ctx.db.worker_resolve_by_name.get({ workspace_id: ctx.workspaceId, name: authority });
69
+ if (named === undefined)
70
+ return null;
71
+ if (named.id === ctx.workerId)
72
+ return { ownerId: named.id, writable: true }; // naming yourself IS ~
73
+ if (authority === "plurnk")
74
+ return { ownerId: named.id, writable: false }; // the kernel's published surface
75
+ const permitted = await ctx.db.owner_is_ancestor_or_self.get({ owner_id: named.id, reader_id: ctx.workerId });
76
+ return permitted === undefined ? null : { ownerId: named.id, writable: false };
59
77
  }
60
- // Clone a statement with its target's authority (hostname) set to the resolved owner, so
61
- // the shared entry helper folds it into the storage path (/<owner>/<entry>).
62
- static #withOwner(statement, owner) {
78
+ // Hand the statement to the shared entry helpers authority-stripped: the owner rides the
79
+ // resolved owner_id, the storage pathname is the bare entry path — never authority-folded.
80
+ static #stripAuthority(statement) {
63
81
  const t = statement.target;
64
82
  if (t === null || t.kind !== "url")
65
83
  return statement;
66
- return { ...statement, target: { ...t, hostname: owner } };
84
+ return { ...statement, target: { ...t, hostname: null } };
67
85
  }
68
86
  async edit(statement, ctx) {
69
87
  const authority = Worker.#authority(statement.target);
70
88
  if (authority === null)
71
- return { status: 400, error: "worker:// requires a worker target" };
89
+ return { status: 400, entryId: null, channel: null, error: "worker:// requires a worker target" };
72
90
  const entryPath = Worker.#entryPath(statement.target);
73
- // The worker ENTITY (path-absent worker://<name>) is not EDITable — EDIT is file/entry only
74
- // (grammar 0.74.55): WORK(worker://<name>) spawns a worker; FORK(worker://<name>) forks a named branch.
91
+ // The worker ENTITY (path-absent worker://<name>) is not EDITable — EDIT is entry only
92
+ // (grammar 0.74.55): WORK(worker://<name>) spawns a worker; FORK(worker://<name>) forks a branch.
75
93
  if (entryPath === "")
76
- return { status: 400, error: "worker:// entity is not editable — WORK(worker://<name>) to spawn a worker, FORK(worker://<name>) to fork a branch" };
77
- // Storage: write a worker-scope entry. Self only — cross-worker write is denied (§worker-scheme).
78
- if (authority === "")
79
- return { status: 400, error: "worker:// requires a worker name or 'self' (worker://self/<path>)" };
80
- const self = await Worker.#selfName(ctx);
81
- const owner = authority === "self" ? self : authority;
82
- if (owner !== self)
83
- return { status: 403, error: "worker:// write is self-only — read a sister's notes, never write them" };
84
- return EntryOps.editWorkspaceEntry(Worker.#withOwner(statement, owner), ctx, Worker.manifest);
94
+ return { status: 400, entryId: null, channel: null, error: "worker:// entity is not editable — WORK(worker://<name>) to spawn a worker, FORK(worker://<name>) to fork a branch" };
95
+ const resolved = await Worker.#resolveAuthority(authority, ctx);
96
+ if (resolved === null)
97
+ return { status: 404, entryId: null, channel: null, error: `worker://${authority} not found` };
98
+ if (!resolved.writable)
99
+ return { status: 403, entryId: null, channel: null, error: "a named worker's space is read-only — write to worker:///... (the commons) or worker://~/... (your own)" };
100
+ return EntryOps.editWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
85
101
  }
86
- // KILL a worker-scope scratch ENTRY (path present). Self-only — deleting a sister's notes
87
- // is a cross-worker write, denied like EDIT (§worker-scheme). The path-ABSENT KILL form is run
88
- // cancellation, handled in Dispatcher.#handleKill (it routes only entry-path KILLs here).
89
- async deleteEntry(statement, ctx) {
102
+ // KILL an ENTRY (path present). Same write-scoping as EDIT: self + commons only. The
103
+ // path-ABSENT KILL form is worker cancellation, handled in Dispatcher.#handleKill.
104
+ async killEntry(statement, ctx) {
90
105
  const authority = Worker.#authority(statement.target);
91
106
  if (authority === null)
92
107
  return { status: 400, error: "worker:// requires a worker target" };
93
- if (authority === "")
94
- return { status: 400, error: "worker:// requires a worker name or 'self' (worker://self/<path>)" };
95
- const self = await Worker.#selfName(ctx);
96
- const owner = authority === "self" ? self : authority;
97
- if (owner !== self)
98
- return { status: 403, error: "worker:// kill is self-only — read a sister's notes, never delete them" };
99
- return EntryOps.deleteWorkspaceEntry(Worker.#withOwner(statement, owner), ctx, Worker.manifest);
108
+ const resolved = await Worker.#resolveAuthority(authority, ctx);
109
+ if (resolved === null)
110
+ return { status: 404, error: `worker://${authority} not found` };
111
+ if (!resolved.writable)
112
+ return { status: 403, error: "a named worker's space is read-only — KILL entries in worker:///... (the commons) or worker://~/... (your own)" };
113
+ return EntryOps.deleteWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
100
114
  }
101
115
  async read(statement, ctx) {
102
116
  const authority = Worker.#authority(statement.target);
103
117
  if (authority === null)
104
118
  return { status: 400, content: null, mimetype: null, channel: null };
105
- if (authority === "")
106
- return { status: 400, content: null, mimetype: null, channel: null }; // empty-authority worker:/// is invalid
107
119
  const entryPath = Worker.#entryPath(statement.target);
108
120
  // Path-absent READ(worker://<name>) COLLECTS the worker's deliverable (§worker-scheme-collect, pull side):
109
121
  // its latest loop's terminal message — the SEND[200] result, or an abandonment reason. A worker
110
122
  // still running hasn't delivered yet → 425 steers the model to park until it does (the
111
123
  // same deliverable the wake/collect-delta will push). The pull complements the push; neither is lost.
112
124
  if (entryPath === "") {
113
- const owner = authority === "self" ? await Worker.#selfName(ctx) : authority;
114
- const row = await ctx.db.worker_deliverable_by_name.get({ workspace_id: ctx.workspaceId, name: owner });
125
+ if (authority === "" || authority === "~")
126
+ return { status: 400, content: null, mimetype: null, channel: null }; // collect names a WORKER
127
+ const row = await ctx.db.worker_deliverable_by_name.get({ workspace_id: ctx.workspaceId, name: authority });
115
128
  if (row === undefined)
116
- return { status: 404, content: `worker://${owner} not found in this workspace`, mimetype: "text/markdown", channel: null };
129
+ return { status: 404, content: `worker://${authority} not found in this workspace`, mimetype: "text/markdown", channel: null };
117
130
  // §join-blocking-collect (#354) — a still-running worker is a BLOCKING JOIN: the READ
118
131
  // arms the join (awaitWorker), and the turn's bare SEND[102] parks until the worker delivers.
119
132
  // The model doesn't drive the park — the engine does (a blocking read() hiding the scheduler).
120
133
  if (!Worker.#TERMINAL_LOOP.has(row.status))
121
- return { status: 425, content: `[ worker '${owner}' is still running — parking this turn until it delivers its result ]`, mimetype: "text/markdown", channel: null, awaitWorker: owner };
122
- return { status: 200, content: markTerminal(row.terminated_by, row.terminal_message) ?? `[ worker '${owner}' concluded with no deliverable (status ${row.status}) ]`, mimetype: "text/markdown", channel: null };
134
+ return { status: 425, content: `[ worker '${authority}' is still running — parking this turn until it delivers its result ]`, mimetype: "text/markdown", channel: null, awaitWorker: authority };
135
+ return { status: 200, content: markTerminal(row.terminated_by, row.terminal_message) ?? `[ worker '${authority}' concluded with no deliverable (status ${row.status}) ]`, mimetype: "text/markdown", channel: null };
123
136
  }
124
- // Path-present: cross-worker scratch READ — resolve self, fold the owner into the storage path.
125
- const owner = authority === "self" ? await Worker.#selfName(ctx) : authority;
126
- return EntryOps.readWorkspaceEntry(Worker.#withOwner(statement, owner), ctx, Worker.manifest);
137
+ // Path-present: an entry read — commons / own / ancestry-gated named space.
138
+ const resolved = await Worker.#resolveAuthority(authority, ctx);
139
+ if (resolved === null)
140
+ return { status: 404, content: null, mimetype: null, channel: null };
141
+ return EntryOps.readWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
127
142
  }
128
143
  // Terminal loop statuses (§lifecycle-terms) — a loop here has DELIVERED; anything else is still running.
129
144
  static #TERMINAL_LOOP = new Set([200, 413, 429, 499, 500, 504, 508]);
130
- // §worker-scheme — FIND a worker's scratch. `worker://self/**` is self; `worker://<name>/**` a sister
131
- // (cross-worker READ is allowed, so cross-worker FIND is too). Resolve the owner and fold it into
132
- // the scope pathname (`/<owner>/<rest>`) so EntryFind draws from that worker's partition alone.
145
+ // FIND draws from the resolved principal's space alone: worker:///** the commons,
146
+ // worker://~/** your own, worker://<name>/** a named space (ancestry-gated like READ).
133
147
  async find(statement, ctx) {
148
+ // A regex-kind target (#pattern#flags) has no authority slot — it draws from the commons.
149
+ if (statement.target !== null && statement.target.kind === "regex") {
150
+ return EntryFind.findWorkspaceEntries(statement, ctx, Worker.manifest, await Owner.commonsId(ctx.db, ctx.workspaceId));
151
+ }
134
152
  const authority = Worker.#authority(statement.target);
135
153
  if (authority === null)
136
154
  return { status: 400, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
155
+ const resolved = await Worker.#resolveAuthority(authority, ctx);
156
+ if (resolved === null)
157
+ return { status: 404, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
158
+ const found = await EntryFind.findWorkspaceEntries(Worker.#stripAuthority(statement), ctx, Worker.manifest, resolved.ownerId);
159
+ // The catalog renders the empty-authority form; a non-empty queried authority re-applies —
160
+ // in results AND the serialized content the packet renders — so every path the model sees
161
+ // is the address it typed (worker://~/x, worker://beta/x).
137
162
  if (authority === "")
138
- return { status: 400, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
139
- const owner = authority === "self" ? await Worker.#selfName(ctx) : authority;
140
- const t = statement.target;
141
- const folded = t !== null && t.kind === "url"
142
- ? { ...statement, target: { ...t, hostname: null, pathname: foldAuthorityIntoPath(owner, t.pathname) } }
143
- : statement;
144
- return EntryFind.findWorkspaceEntries(folded, ctx, Worker.manifest);
163
+ return found;
164
+ const reface = (p) => p.replace(/^worker:\/\/\//, `worker://${authority}/`);
165
+ const results = found.results.map((r) => ({ ...r, path: reface(r.path) }));
166
+ const content = found.content === null ? null : found.content.replaceAll("worker:///", `worker://${authority}/`);
167
+ return { ...found, results, content };
168
+ }
169
+ // The entry-copy seam ({§worker-authority-carving}) — pathname-keyed, COMMONS-scoped: the
170
+ // dispatcher refuses a non-empty authority upstream, so these faces only ever see worker:///….
171
+ async readEntry(pathname, ctx) {
172
+ return EntryCrud.readEntry(pathname, ctx, Worker.manifest.name);
173
+ }
174
+ async writeEntry(pathname, entry, ctx) {
175
+ return EntryCrud.writeEntry(pathname, entry, ctx, Worker.manifest.name);
176
+ }
177
+ async deleteEntry(pathname, ctx) {
178
+ return EntryCrud.deleteEntry(pathname, ctx, Worker.manifest.name);
145
179
  }
146
180
  async send(statement, ctx) {
147
181
  const authority = Worker.#authority(statement.target);
148
182
  if (authority === null)
149
183
  return { status: 400, error: "worker:// irc requires a worker (worker://<name>)" };
184
+ // An ENTRY-path SEND is the entry-SEND law (410 deletes, 499 cancels, else 501) on the
185
+ // resolved principal; write-scoping holds — a named space takes no 410.
186
+ if (Worker.#entryPath(statement.target) !== "") {
187
+ const resolved = await Worker.#resolveAuthority(authority, ctx);
188
+ if (resolved === null)
189
+ return { status: 404, error: `worker://${authority} not found` };
190
+ if (!resolved.writable && statement.signal === 410)
191
+ return { status: 403, error: "a named worker's space is read-only" };
192
+ return EntrySend.sendToWorkspaceEntry(Worker.#stripAuthority(statement), ctx, Worker.manifest.name, resolved.ownerId);
193
+ }
150
194
  if (authority === "")
151
- return { status: 400, error: "worker:// irc requires a worker name or 'self' (worker://<name>)" };
195
+ return { status: 400, error: "worker:// irc requires a worker (worker://<name>)" };
152
196
  if (ctx.injectWorker === undefined)
153
197
  throw new Error("run.send: injectWorker capability absent");
154
198
  let workerId = ctx.workerId;
155
- if (authority !== "self") {
199
+ if (authority !== "~") {
156
200
  const row = await ctx.db.worker_resolve_by_name.get({ workspace_id: ctx.workspaceId, name: authority });
157
201
  if (row === undefined)
158
202
  return { status: 404, error: `worker://${authority} not found in this workspace` };
@@ -1 +1 @@
1
- {"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/schemes/Worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Worker.js","sourceRoot":"","sources":["../../src/schemes/Worker.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,8 @@ export interface DeleteEntryResult {
24
24
  attrs?: object;
25
25
  }
26
26
  export default class EntryCrud {
27
- static readEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null): Promise<ReadEntryResult>;
28
- static writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext, scheme: string | null): Promise<WriteEntryResult>;
29
- static deleteEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null): Promise<DeleteEntryResult>;
27
+ static readEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null, ownerId?: number): Promise<ReadEntryResult>;
28
+ static writeEntry(pathname: string, entry: EntryData, ctx: PlurnkSchemeContext, scheme: string | null, ownerId?: number): Promise<WriteEntryResult>;
29
+ static deleteEntry(pathname: string, ctx: PlurnkSchemeContext, scheme: string | null, ownerId?: number): Promise<DeleteEntryResult>;
30
30
  }
31
31
  //# sourceMappingURL=_entry-crud.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_entry-crud.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGtE,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACtF,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAIvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,OAAa,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAelH;IAED,OAAa,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2CtI;IAED,OAAa,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQtH;CACJ"}
1
+ {"version":3,"file":"_entry-crud.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGtE,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACtF,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAIvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,OAAa,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAgBpI;IAED,OAAa,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4CxJ;IAED,OAAa,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CASxI;CACJ"}
@@ -3,10 +3,12 @@
3
3
  // cross-scheme orchestration of COPY/MOVE/SEND[410].
4
4
  import EntrySemantic from "./_entry-semantic.js";
5
5
  import { contentHash } from "../core/content-hash.js";
6
+ import Owner from "../core/Owner.js";
6
7
  export default class EntryCrud {
7
- static async readEntry(pathname, ctx, scheme) {
8
+ static async readEntry(pathname, ctx, scheme, ownerId) {
8
9
  const { db, workspaceId } = ctx;
9
- const entry = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, scheme, pathname });
10
+ const owner_id = ownerId ?? await Owner.commonsId(db, workspaceId);
11
+ const entry = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
10
12
  if (entry === undefined)
11
13
  return { status: 404, entry: null };
12
14
  const channelRows = await db.crud_read_channels.all({ entry_id: entry.id });
@@ -18,15 +20,16 @@ export default class EntryCrud {
18
20
  const tags = tagRows.map((r) => r.tag);
19
21
  return { status: 200, entry: { channels, tags } };
20
22
  }
21
- static async writeEntry(pathname, entry, ctx, scheme) {
23
+ static async writeEntry(pathname, entry, ctx, scheme, ownerId) {
22
24
  const { db, workspaceId, tokenize } = ctx;
23
25
  if (tokenize === undefined)
24
26
  throw new Error("writeEntry: ctx.tokenize is required for token accounting");
25
- const existing = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, scheme, pathname });
27
+ const owner_id = ownerId ?? await Owner.commonsId(db, workspaceId);
28
+ const existing = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
26
29
  let entryId;
27
30
  let created;
28
31
  if (existing === undefined) {
29
- const row = await db.crud_insert_workspace_entry.get({ workspace_id: workspaceId, scheme, pathname });
32
+ const row = await db.crud_insert_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
30
33
  if (row === undefined)
31
34
  throw new Error("writeEntry: insert returned no row");
32
35
  entryId = row.id;
@@ -63,9 +66,10 @@ export default class EntryCrud {
63
66
  await EntrySemantic.indexFts(db, entryId, body.content);
64
67
  return { status: created ? 201 : 200, created, entryId };
65
68
  }
66
- static async deleteEntry(pathname, ctx, scheme) {
69
+ static async deleteEntry(pathname, ctx, scheme, ownerId) {
67
70
  const { db, workspaceId } = ctx;
68
- const existing = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, scheme, pathname });
71
+ const owner_id = ownerId ?? await Owner.commonsId(db, workspaceId);
72
+ const existing = await db.crud_find_workspace_entry.get({ workspace_id: workspaceId, owner_id, scheme, pathname });
69
73
  if (existing === undefined)
70
74
  return { status: 404 };
71
75
  await EntrySemantic.indexFts(db, existing.id, ""); // §semantic-fts-at-write — the keyword row dies with the entry
@@ -1 +1 @@
1
- {"version":3,"file":"_entry-crud.js","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_entry-crud.js","sourceRoot":"","sources":["../../src/schemes/_entry-crud.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  -- for bare/absolute paths; storage normalizes its rows to scheme=NULL
7
7
  -- (Engine.#extractTarget). SQL's `=` doesn't match NULL, so use `IS`.
8
8
  SELECT id FROM entries
9
- WHERE scope = 'workspace' AND workspace_id = $workspace_id AND scheme IS $scheme AND pathname = $pathname;
9
+ WHERE workspace_id = $workspace_id AND owner_id = $owner_id AND scheme IS $scheme AND pathname = $pathname;
10
10
 
11
11
  -- PREP: crud_read_channels
12
12
  SELECT name, content, mimetype FROM entry_channels WHERE entry_id = $entry_id;
@@ -15,20 +15,8 @@ SELECT name, content, mimetype FROM entry_channels WHERE entry_id = $entry_id;
15
15
  SELECT tag FROM entry_tags WHERE entry_id = $entry_id ORDER BY tag;
16
16
 
17
17
  -- PREP: crud_insert_workspace_entry
18
- INSERT INTO entries (scope, workspace_id, scheme, pathname)
19
- VALUES ('workspace', $workspace_id, $scheme, $pathname)
20
- RETURNING id;
21
-
22
- -- PREP: crud_find_worker_entry
23
- -- Run-scope twin of crud_find_workspace_entry (§worker-scheme). A worker entry is keyed
24
- -- (scope='worker', scheme='worker', pathname); the owning run rides the pathname's first
25
- -- segment (the folded worker:// authority), so there is no worker_id column.
26
- SELECT id FROM entries
27
- WHERE scope = 'worker' AND workspace_id = $workspace_id AND scheme IS $scheme AND pathname = $pathname;
28
-
29
- -- PREP: crud_insert_worker_entry
30
- INSERT INTO entries (scope, workspace_id, scheme, pathname)
31
- VALUES ('worker', $workspace_id, $scheme, $pathname)
18
+ INSERT INTO entries (workspace_id, owner_id, scheme, pathname)
19
+ VALUES ($workspace_id, $owner_id, $scheme, $pathname)
32
20
  RETURNING id;
33
21
 
34
22
  -- PREP: crud_register_workspace_member
@@ -37,9 +25,9 @@ RETURNING id;
37
25
  -- is the membership marker the File read-gate checks and FIND globs by path.
38
26
  -- Channel-less by design — disk stays the truth (D3). ON CONFLICT no-ops so
39
27
  -- re-resolving membership each turn never duplicates or churns rows.
40
- INSERT INTO entries (scope, workspace_id, scheme, pathname, membership_origin)
41
- VALUES ('workspace', $workspace_id, $scheme, $pathname, $membership_origin)
42
- ON CONFLICT (workspace_id, scheme, pathname) WHERE scope = 'workspace'
28
+ INSERT INTO entries (workspace_id, owner_id, scheme, pathname, membership_origin)
29
+ VALUES ($workspace_id, $owner_id, $scheme, $pathname, $membership_origin)
30
+ ON CONFLICT (workspace_id, owner_id, scheme, pathname)
43
31
  DO NOTHING
44
32
  RETURNING id;
45
33
 
@@ -48,7 +36,7 @@ RETURNING id;
48
36
  -- (mtime:size), read before materializing so an unchanged file short-circuits
49
37
  -- before any content read. Null-aware scheme (file members store scheme=NULL).
50
38
  SELECT id, synced_sig FROM entries
51
- WHERE scope = 'workspace' AND workspace_id = $workspace_id AND scheme IS $scheme AND pathname = $pathname;
39
+ WHERE workspace_id = $workspace_id AND owner_id = $owner_id AND scheme IS $scheme AND pathname = $pathname;
52
40
 
53
41
  -- PREP: crud_set_synced_sig
54
42
  -- Stamp the disk signature after a member materializes to disk truth; the next
@@ -85,7 +73,7 @@ DELETE FROM entries WHERE id = $entry_id;
85
73
  -- ((git ls-files ∪ add) − ignore) and un-registers the difference, so entries ==
86
74
  -- members. Model-created ('client') members are excluded — not git's to reclaim.
87
75
  SELECT id, pathname FROM entries
88
- WHERE scope = 'workspace' AND workspace_id = $workspace_id AND scheme IS NULL AND membership_origin IN ('git', 'constraint');
76
+ WHERE workspace_id = $workspace_id AND scheme IS NULL AND membership_origin IN ('git', 'constraint');
89
77
 
90
78
  -- PREP: crud_insert_workspace_constraint
91
79
  -- SPEC §membership constraint overlay — the client supersede. Idempotent per
@@ -28,6 +28,6 @@ export interface FindResult {
28
28
  }
29
29
  export default class EntryFind {
30
30
  #private;
31
- static findWorkspaceEntries(statement: FindStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest): Promise<FindResult>;
31
+ static findWorkspaceEntries(statement: FindStatement, ctx: PlurnkSchemeContext, manifest: SchemeManifest, explicitOwnerId?: number): Promise<FindResult>;
32
32
  }
33
33
  //# sourceMappingURL=_entry-find.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_entry-find.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAInF,OAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AASxE,MAAM,WAAW,KAAK;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE;AAEhH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;;IAmJ1B,OAAa,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA+CnI;CACJ"}
1
+ {"version":3,"file":"_entry-find.d.ts","sourceRoot":"","sources":["../../src/schemes/_entry-find.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAInF,OAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUxE,MAAM,WAAW,KAAK;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE;AAEhH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;;IA2I1B,OAAa,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA8C7J;CACJ"}
@@ -19,16 +19,9 @@ import Matcher from "../content/matcher.js";
19
19
  import { decodePathParens } from "../core/path-decode.js";
20
20
  import EntryGraph from "./_entry-graph.js";
21
21
  import EntryManifest from "./_entry-manifest.js";
22
+ import Owner from "../core/Owner.js";
22
23
  import EntrySemantic from "./_entry-semantic.js";
23
24
  export default class EntryFind {
24
- // §worker-scheme — the owner-prefix glob (`/<owner>/*`) for a worker-scope FIND, from the target
25
- // pathname Run.find already folded (`/<owner>/<rest>`). Bounds the catalog source to one worker's
26
- // scratch — the building worker's own (self) or a named sister's.
27
- static #workerOwnerPrefix(statement) {
28
- const path = statement.target?.kind === "url" ? statement.target.pathname : "";
29
- const owner = path.split("/").filter((s) => s.length > 0)[0];
30
- return owner === undefined ? "/*" : `/${owner}/*`;
31
- }
32
25
  static #scopePathnameOf(statement) {
33
26
  const path = statement.target;
34
27
  if (path === null)
@@ -82,7 +75,7 @@ export default class EntryFind {
82
75
  // daughter) and INCLUDES/EXCLUDES the entry — 200 keeps it, 204/415/203 drop it, 400
83
76
  // (malformed matcher) fails the whole op. Path-scoping stays in the (target). Returns the
84
77
  // matched pathnames plus `locations` — each content hit's source line(s), keyed by pathname.
85
- static async #matchPathnames(statement, ctx, manifest) {
78
+ static async #matchPathnames(statement, ctx, manifest, explicitOwnerId) {
86
79
  if (statement.target === null)
87
80
  return { status: 400, matches: [] };
88
81
  // Scope by the manifest's persisted entries.scheme (storedScheme; absent →
@@ -118,12 +111,12 @@ export default class EntryFind {
118
111
  const tags = Array.isArray(statement.signal) ? statement.signal : []; // tag filter, AND semantics — §find-tag-filter-and-semantics
119
112
  const tagsParam = tags.length > 0 ? JSON.stringify(tags) : "[]";
120
113
  const { db, workspaceId } = ctx;
121
- // Candidates are workspace-scoped — a FIND never reaches across workspaces. §find-scoped-isolation.
122
- // §worker-scheme — a worker-scope scheme (manifest.scope==='run', today worker://) draws from the worker
123
- // partition instead; the owner narrowing rides scopeGlob (Run.find folds `/<owner>/*` in).
124
- const candidatesQuery = manifest.scope === "worker" ? "find_worker_entry_candidates" : "find_workspace_entry_candidates";
125
- let candidates = await db[candidatesQuery].all({
114
+ // Candidates are workspace-scoped — a FIND never reaches across workspaces (§find-scoped-isolation)
115
+ // — and owner-keyed ({§entry-owner}): an owner-carved face passes its resolved owner; every
116
+ // other scheme draws from the commons.
117
+ let candidates = await db.find_workspace_entry_candidates.all({
126
118
  workspace_id: workspaceId,
119
+ owner_id: explicitOwnerId ?? await Owner.commonsId(db, workspaceId),
127
120
  scheme,
128
121
  channel: manifest.defaultChannel,
129
122
  scope_pathname: scopeGlob,
@@ -181,8 +174,8 @@ export default class EntryFind {
181
174
  // match order. A catalog row is exactly what the manifest catalogs (path + per-channel
182
175
  // {mimetype, tokens, lines}, tags, seconds) — FIND is the filtered, navigable slice of
183
176
  // that catalog, rendered as a JSON array (application/json). §find-result-catalog-rows
184
- static async findWorkspaceEntries(statement, ctx, manifest) {
185
- const match = await EntryFind.#matchPathnames(statement, ctx, manifest);
177
+ static async findWorkspaceEntries(statement, ctx, manifest, explicitOwnerId) {
178
+ const match = await EntryFind.#matchPathnames(statement, ctx, manifest, explicitOwnerId);
186
179
  if (match.status !== 200)
187
180
  return { status: match.status, content: null, mimetype: null, results: [], itemsTokenTotal: 0, pathnames: [], matches: [] };
188
181
  const scheme = manifest.storedScheme === undefined ? manifest.name : manifest.storedScheme;
@@ -190,10 +183,9 @@ export default class EntryFind {
190
183
  // the same EntryManifest.toPath the catalog uses (single source of truth). Match order is
191
184
  // preserved (rank for ~semantic); a match whose entry has no row (e.g. the self-excluded
192
185
  // manifest) drops out. Each match becomes ONE result item carrying its span (#286).
193
- // §worker-scheme — a worker-scope FIND aligns to the building worker's OWN worker-scope catalog rows
194
- // (the owner prefix the candidate scope already enforced), never the workspace filesystem.
195
- const workerOwnerPrefix = manifest.scope === "worker" ? EntryFind.#workerOwnerPrefix(statement) : undefined;
196
- const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme, workerOwnerPrefix)).map((r) => [r.path, r]));
186
+ // {§entry-owner} — the alignment draws from the SAME owner the candidates matched, so a
187
+ // match never pairs with a coordinate-twin sibling's catalog metadata.
188
+ const byPath = new Map((await EntryManifest.catalogRowsFor(ctx, scheme, explicitOwnerId ?? await Owner.commonsId(ctx.db, ctx.workspaceId))).map((r) => [r.path, r]));
197
189
  const results = [];
198
190
  const matches = [];
199
191
  const seenPath = new Set();