@plurnk/plurnk-service 3.1.0 → 3.3.0

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 (226) hide show
  1. package/.env.defaults +24 -19
  2. package/INSTALL.md +20 -1
  3. package/SPEC.md +448 -121
  4. package/dist/build-info.json +1 -1
  5. package/dist/completions/_plurnk-service +1 -1
  6. package/dist/completions/plurnk-service.bash +1 -1
  7. package/dist/completions/plurnk-service.fish +1 -0
  8. package/dist/content/path-mimetype.d.ts.map +1 -1
  9. package/dist/content/path-mimetype.js +2 -8
  10. package/dist/content/path-mimetype.js.map +1 -1
  11. package/dist/core/AdmittedTurnExecutor.d.ts.map +1 -1
  12. package/dist/core/AdmittedTurnExecutor.js +22 -10
  13. package/dist/core/AdmittedTurnExecutor.js.map +1 -1
  14. package/dist/core/BudgetReadout.d.ts +1 -3
  15. package/dist/core/BudgetReadout.d.ts.map +1 -1
  16. package/dist/core/BudgetReadout.js +43 -46
  17. package/dist/core/BudgetReadout.js.map +1 -1
  18. package/dist/{schemes/_derivation-use.d.ts → core/ContentUse.d.ts} +3 -3
  19. package/dist/core/ContentUse.d.ts.map +1 -0
  20. package/dist/{schemes/_derivation-use.js → core/ContentUse.js} +8 -7
  21. package/dist/core/ContentUse.js.map +1 -0
  22. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  23. package/dist/core/CoreSchemeServices.js +1 -0
  24. package/dist/core/CoreSchemeServices.js.map +1 -1
  25. package/dist/core/DataStatementRunner.d.ts.map +1 -1
  26. package/dist/core/DataStatementRunner.js +8 -20
  27. package/dist/core/DataStatementRunner.js.map +1 -1
  28. package/dist/core/Dispatcher.d.ts +9 -1
  29. package/dist/core/Dispatcher.d.ts.map +1 -1
  30. package/dist/core/Dispatcher.js +151 -76
  31. package/dist/core/Dispatcher.js.map +1 -1
  32. package/dist/core/EditMutations.js +1 -1
  33. package/dist/core/EditMutations.js.map +1 -1
  34. package/dist/core/Engine.d.ts +1 -1
  35. package/dist/core/Engine.d.ts.map +1 -1
  36. package/dist/core/Engine.js +3 -3
  37. package/dist/core/Engine.js.map +1 -1
  38. package/dist/core/FileAddress.d.ts +12 -0
  39. package/dist/core/FileAddress.d.ts.map +1 -0
  40. package/dist/core/FileAddress.js +73 -0
  41. package/dist/core/FileAddress.js.map +1 -0
  42. package/dist/core/FilePublication.d.ts +15 -0
  43. package/dist/core/FilePublication.d.ts.map +1 -0
  44. package/dist/core/FilePublication.js +143 -0
  45. package/dist/core/FilePublication.js.map +1 -0
  46. package/dist/core/FileSnapshot.d.ts +26 -0
  47. package/dist/core/FileSnapshot.d.ts.map +1 -0
  48. package/dist/core/FileSnapshot.js +179 -0
  49. package/dist/core/FileSnapshot.js.map +1 -0
  50. package/dist/core/KillHandler.d.ts.map +1 -1
  51. package/dist/core/KillHandler.js +2 -1
  52. package/dist/core/KillHandler.js.map +1 -1
  53. package/dist/core/LoopLifecycle.sql +3 -2
  54. package/dist/core/MembershipMaterialization.d.ts.map +1 -1
  55. package/dist/core/MembershipMaterialization.js +87 -143
  56. package/dist/core/MembershipMaterialization.js.map +1 -1
  57. package/dist/core/MutationEffects.d.ts +2 -1
  58. package/dist/core/MutationEffects.d.ts.map +1 -1
  59. package/dist/core/MutationEffects.js +14 -1
  60. package/dist/core/MutationEffects.js.map +1 -1
  61. package/dist/core/PacketBuilder.d.ts.map +1 -1
  62. package/dist/core/PacketBuilder.js +16 -13
  63. package/dist/core/PacketBuilder.js.map +1 -1
  64. package/dist/core/PacketBuilder.sql +22 -0
  65. package/dist/core/PathGlob.d.ts +6 -0
  66. package/dist/core/PathGlob.d.ts.map +1 -0
  67. package/dist/core/PathGlob.js +24 -0
  68. package/dist/core/PathGlob.js.map +1 -0
  69. package/dist/core/ProposalLifecycle.d.ts +3 -1
  70. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  71. package/dist/core/ProposalLifecycle.js +46 -33
  72. package/dist/core/ProposalLifecycle.js.map +1 -1
  73. package/dist/core/ProposalLifecycle.sql +4 -0
  74. package/dist/core/ResourceBindings.d.ts.map +1 -1
  75. package/dist/core/ResourceBindings.js +4 -3
  76. package/dist/core/ResourceBindings.js.map +1 -1
  77. package/dist/core/ResourceSelector.d.ts +1 -2
  78. package/dist/core/ResourceSelector.d.ts.map +1 -1
  79. package/dist/core/ResourceSelector.js +30 -9
  80. package/dist/core/ResourceSelector.js.map +1 -1
  81. package/dist/core/ResourceTransfers.d.ts +1 -1
  82. package/dist/core/ResourceTransfers.d.ts.map +1 -1
  83. package/dist/core/ResourceTransfers.js +26 -11
  84. package/dist/core/ResourceTransfers.js.map +1 -1
  85. package/dist/core/TurnDispositionHandler.d.ts +1 -1
  86. package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
  87. package/dist/core/TurnDispositionHandler.js +5 -3
  88. package/dist/core/TurnDispositionHandler.js.map +1 -1
  89. package/dist/core/TurnRunner.d.ts.map +1 -1
  90. package/dist/core/TurnRunner.js +6 -4
  91. package/dist/core/TurnRunner.js.map +1 -1
  92. package/dist/core/WorkerControlHandler.d.ts.map +1 -1
  93. package/dist/core/WorkerControlHandler.js +38 -2
  94. package/dist/core/WorkerControlHandler.js.map +1 -1
  95. package/dist/core/caps/SchemeCtxImpl.d.ts +2 -0
  96. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  97. package/dist/core/caps/SchemeCtxImpl.js +7 -0
  98. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  99. package/dist/core/fork.sql +2 -2
  100. package/dist/core/git-membership.d.ts +1 -0
  101. package/dist/core/git-membership.d.ts.map +1 -1
  102. package/dist/core/git-membership.js +9 -11
  103. package/dist/core/git-membership.js.map +1 -1
  104. package/dist/core/glob_match.js +3 -3
  105. package/dist/core/glob_match.js.map +1 -1
  106. package/dist/core/mutation-types.d.ts +4 -0
  107. package/dist/core/mutation-types.d.ts.map +1 -1
  108. package/dist/core/namespace.d.ts +4 -1
  109. package/dist/core/namespace.d.ts.map +1 -1
  110. package/dist/core/namespace.js +14 -3
  111. package/dist/core/namespace.js.map +1 -1
  112. package/dist/core/packet-wire.d.ts +1 -1
  113. package/dist/core/packet-wire.d.ts.map +1 -1
  114. package/dist/core/packet-wire.js +17 -11
  115. package/dist/core/packet-wire.js.map +1 -1
  116. package/dist/core/plurnk-uri.d.ts +4 -3
  117. package/dist/core/plurnk-uri.d.ts.map +1 -1
  118. package/dist/core/plurnk-uri.js +24 -12
  119. package/dist/core/plurnk-uri.js.map +1 -1
  120. package/dist/core/scheme-types.d.ts +2 -0
  121. package/dist/core/scheme-types.d.ts.map +1 -1
  122. package/dist/core/sqlite-synchronous.d.ts +2 -0
  123. package/dist/core/sqlite-synchronous.d.ts.map +1 -0
  124. package/dist/core/sqlite-synchronous.js +4 -0
  125. package/dist/core/sqlite-synchronous.js.map +1 -0
  126. package/dist/evidence/EvidenceReader.d.ts.map +1 -1
  127. package/dist/evidence/EvidenceReader.js +8 -1
  128. package/dist/evidence/EvidenceReader.js.map +1 -1
  129. package/dist/evidence/digest.sql +6 -1
  130. package/dist/man/plurnk-service.1 +35 -24
  131. package/dist/schemes/Env.d.ts +1 -1
  132. package/dist/schemes/Env.d.ts.map +1 -1
  133. package/dist/schemes/Env.js +2 -2
  134. package/dist/schemes/Env.js.map +1 -1
  135. package/dist/schemes/Exec.d.ts.map +1 -1
  136. package/dist/schemes/Exec.js +5 -1
  137. package/dist/schemes/Exec.js.map +1 -1
  138. package/dist/schemes/ExecutionInput.d.ts +2 -1
  139. package/dist/schemes/ExecutionInput.d.ts.map +1 -1
  140. package/dist/schemes/ExecutionInput.js +44 -6
  141. package/dist/schemes/ExecutionInput.js.map +1 -1
  142. package/dist/schemes/File.d.ts +1 -0
  143. package/dist/schemes/File.d.ts.map +1 -1
  144. package/dist/schemes/File.js +246 -269
  145. package/dist/schemes/File.js.map +1 -1
  146. package/dist/schemes/Log.d.ts.map +1 -1
  147. package/dist/schemes/Log.js +68 -8
  148. package/dist/schemes/Log.js.map +1 -1
  149. package/dist/schemes/Log.sql +24 -1
  150. package/dist/schemes/Worker.js +1 -1
  151. package/dist/schemes/Worker.js.map +1 -1
  152. package/dist/schemes/_entry-crud.d.ts +2 -0
  153. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  154. package/dist/schemes/_entry-crud.js +8 -5
  155. package/dist/schemes/_entry-crud.js.map +1 -1
  156. package/dist/schemes/_entry-crud.sql +15 -15
  157. package/dist/schemes/_entry-find.d.ts +1 -0
  158. package/dist/schemes/_entry-find.d.ts.map +1 -1
  159. package/dist/schemes/_entry-find.js +15 -10
  160. package/dist/schemes/_entry-find.js.map +1 -1
  161. package/dist/schemes/_entry-manifest.d.ts +2 -2
  162. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  163. package/dist/schemes/_entry-manifest.js +7 -5
  164. package/dist/schemes/_entry-manifest.js.map +1 -1
  165. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  166. package/dist/schemes/_entry-ops.js +9 -7
  167. package/dist/schemes/_entry-ops.js.map +1 -1
  168. package/dist/schemes/_path-scope.d.ts.map +1 -1
  169. package/dist/schemes/_path-scope.js +12 -4
  170. package/dist/schemes/_path-scope.js.map +1 -1
  171. package/dist/schemes/_search-index.js +3 -3
  172. package/dist/schemes/_search-index.js.map +1 -1
  173. package/dist/schemes/exec-env.d.ts.map +1 -1
  174. package/dist/schemes/exec-env.js +7 -22
  175. package/dist/schemes/exec-env.js.map +1 -1
  176. package/dist/server/Daemon.d.ts +7 -1
  177. package/dist/server/Daemon.d.ts.map +1 -1
  178. package/dist/server/Daemon.js +90 -69
  179. package/dist/server/Daemon.js.map +1 -1
  180. package/dist/server/DrainSupervisor.d.ts +3 -3
  181. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  182. package/dist/server/DrainSupervisor.js +46 -5
  183. package/dist/server/DrainSupervisor.js.map +1 -1
  184. package/dist/server/EnvFunctionality.d.ts.map +1 -1
  185. package/dist/server/EnvFunctionality.js +19 -11
  186. package/dist/server/EnvFunctionality.js.map +1 -1
  187. package/dist/server/Functionality.d.ts.map +1 -1
  188. package/dist/server/Functionality.js +89 -45
  189. package/dist/server/Functionality.js.map +1 -1
  190. package/dist/server/FunctionalityManager.d.ts +2 -5
  191. package/dist/server/FunctionalityManager.d.ts.map +1 -1
  192. package/dist/server/FunctionalityManager.js +10 -6
  193. package/dist/server/FunctionalityManager.js.map +1 -1
  194. package/dist/server/MembersFunctionality.d.ts +7 -8
  195. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  196. package/dist/server/MembersFunctionality.js +94 -62
  197. package/dist/server/MembersFunctionality.js.map +1 -1
  198. package/dist/server/MessageAbandonment.d.ts +7 -0
  199. package/dist/server/MessageAbandonment.d.ts.map +1 -0
  200. package/dist/server/MessageAbandonment.js +57 -0
  201. package/dist/server/MessageAbandonment.js.map +1 -0
  202. package/dist/server/Retention.d.ts.map +1 -1
  203. package/dist/server/Retention.js +5 -5
  204. package/dist/server/Retention.js.map +1 -1
  205. package/dist/server/Retention.sql +49 -23
  206. package/dist/server/Rollback.d.ts +29 -0
  207. package/dist/server/Rollback.d.ts.map +1 -0
  208. package/dist/server/Rollback.js +111 -0
  209. package/dist/server/Rollback.js.map +1 -0
  210. package/dist/server/drain.sql +9 -0
  211. package/dist/server/lifecycle-recovery.sql +4 -1
  212. package/dist/service.d.ts.map +1 -1
  213. package/dist/service.js +4 -0
  214. package/dist/service.js.map +1 -1
  215. package/docs/copy-move.md +3 -0
  216. package/docs/env.md +12 -6
  217. package/docs/members.md +30 -10
  218. package/migrations/023_file_revisions.sql +54 -0
  219. package/migrations/024_proposal_decisions.sql +34 -0
  220. package/migrations/025_response_retention.sql +30 -0
  221. package/migrations/026_message_obligations.sql +32 -0
  222. package/migrations/027_members_identity.sql +20 -0
  223. package/migrations/028_mutation_patch.sql +20 -0
  224. package/package.json +35 -34
  225. package/dist/schemes/_derivation-use.d.ts.map +0 -1
  226. package/dist/schemes/_derivation-use.js.map +0 -1
@@ -1,38 +1,63 @@
1
1
  // {§members-functionality} — file membership as one workspace Functionality family. The model, the
2
- // client, and the operator learn one surface (list | discover | add | enable | disable | remove)
2
+ // client, and the operator learn one surface ({§functionality-coordinator})
3
3
  // for what the model may see, exactly as they do for skills and MCP servers. A definition is one
4
- // gitignore-style glob and `!glob` excludes; definitions are workspace desired state and the
5
- // membership overlay is their projection ({§members-projection}) — the one truth every worker sees
6
- // ({§membership-baseline}). A model's `add` is admitted against the service ceiling
7
- // `PLURNK_SERVICE_MEMBERS_MODEL_SCOPE` (none < root < namespace) narrowed by the workspace.
4
+ // shell-path glob, `!glob` excludes, and the glob is the definition's identity
5
+ // ({§functionality-addressing}): `add` names globs; enable, disable and remove name one. Definitions
6
+ // are workspace desired state and the membership overlay is their projection ({§members-projection})
7
+ // — the one truth every worker sees ({§membership-baseline}). A model's `add` is admitted against
8
+ // the service ceiling `PLURNK_SERVICE_MEMBERS_MODEL_SCOPE` (none < root < namespace) narrowed by the
9
+ // workspace.
8
10
  import { stat } from "node:fs/promises";
9
- import { matchesGlob, resolve } from "node:path";
10
- import { Validator } from "@plurnk/plurnk-contracts";
11
+ import { resolve } from "node:path";
12
+ import { PathSyntax } from "@plurnk/plurnk-contracts";
11
13
  import { ConfigurationError, Knob, ResourceEnvironment } from "@plurnk/plurnk-meta";
12
14
  import FileCreationPolicy from "../core/file-creation-policy.js";
13
15
  import GitMembership from "../core/git-membership.js";
14
16
  import Results, { OperationFailureError } from "../core/results.js";
15
17
  import WorkspaceSettings from "../core/workspace-settings.js";
18
+ import PathGlob from "../core/PathGlob.js";
16
19
  import Paths from "../Paths.js";
17
20
  const MEMBERS_FAMILY = "members";
18
21
  const MEMBERS_OWNER = "@plurnk/plurnk-core/members";
19
22
  const PREFIX = "PLURNK_MEMBERS_";
20
23
  const SCOPE_KEY = "PLURNK_SERVICE_MEMBERS_MODEL_SCOPE";
24
+ // The operator's environment alias ({§members-configuration}); a definition's own name is its glob.
21
25
  const ALIAS = /^[a-z][a-z0-9-]*$/u;
22
- const PATTERN_CHARACTERS = /[*?[\]{}]/u;
26
+ // {§functionality-addressing} — the glob is the alias: one line, no surrounding whitespace.
27
+ const GLOB = /^\S(?:[^\n]*\S)?$/u;
23
28
  const sampleSize = () => Knob.integer("PLURNK_SERVICE_MEMBERS_SAMPLE", 0);
24
- // The exact definition one `add` accepts. Provenance is the coordinator's truth, never the
25
- // caller's claim: `admit` overwrites whatever arrived in the definition.
29
+ const GLOB_DESCRIPTION = "A shell-path glob relative to the project root (`docs/**`, `*.md`, `../shared/*.json`). A leading `!` excludes matching members; an exclusion wins over every inclusion.";
30
+ // {§functionality-addressing} — what `add` takes: the globs, each one definition.
31
+ const ADD = Object.freeze({
32
+ type: "object",
33
+ additionalProperties: false,
34
+ required: ["files"],
35
+ properties: {
36
+ files: {
37
+ type: "array",
38
+ minItems: 1,
39
+ items: { type: "string", minLength: 1, description: GLOB_DESCRIPTION },
40
+ description: "The globs to add; each is one definition.",
41
+ },
42
+ },
43
+ });
44
+ // What enable, disable and remove take: one definition's glob, as `list` shows it.
45
+ const SELECT = Object.freeze({
46
+ type: "object",
47
+ additionalProperties: false,
48
+ required: ["file"],
49
+ properties: {
50
+ file: { type: "string", minLength: 1, description: "The glob of one definition, as `list` shows it." },
51
+ },
52
+ });
53
+ // The exact definition the coordinator persists. Provenance is the coordinator's truth, never the
54
+ // caller's claim: `admit` stamps it from the caller.
26
55
  const DEFINITION = Object.freeze({
27
56
  type: "object",
28
57
  additionalProperties: false,
29
58
  required: ["glob"],
30
59
  properties: {
31
- glob: {
32
- type: "string",
33
- minLength: 1,
34
- description: "A gitignore-style pattern relative to the project root (`docs/**`, `*.md`, `../shared/*.json`). A leading `!` excludes matching members; an exclusion wins over every inclusion.",
35
- },
60
+ glob: { type: "string", minLength: 1, description: GLOB_DESCRIPTION },
36
61
  provenance: {
37
62
  type: "object",
38
63
  readOnly: true,
@@ -47,23 +72,23 @@ const DEFINITION = Object.freeze({
47
72
  const refuse = (code, status, detail, extensions = {}) => new OperationFailureError(Results.failure("members:functionality", code, status, detail, {}, { family: MEMBERS_FAMILY, retryable: false, ...extensions }));
48
73
  const isExclusion = (glob) => glob.startsWith("!");
49
74
  const patternOf = (glob) => (isExclusion(glob) ? glob.slice(1) : glob);
50
- // A glob as an alias suggestion: `docs/**` → `docs`, `!**/tokenizer.json` → `no-tokenizer-json`.
51
- export const aliasOf = (glob) => {
52
- const folded = patternOf(glob).toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "").slice(0, 48);
53
- const base = ALIAS.test(folded) ? folded : `p-${folded}`.replace(/-+$/u, "");
54
- return isExclusion(glob) ? `no-${base}` : base;
55
- };
56
- // {§members-configuration}
75
+ // {§members-configuration} — each `PLURNK_MEMBERS_<alias>=<glob>` is one service definition named by
76
+ // its glob; the environment key is its provenance. Two keys naming one glob fail by name.
57
77
  export const serviceMembers = (environ = process.env) => {
58
78
  const environment = new ResourceEnvironment(PREFIX, { controls: [], settings: [] }, environ);
79
+ const declared = new Map();
59
80
  return [...environment.definitions].map(([alias, { key, value }]) => {
60
81
  const glob = value.trim();
61
82
  if (!ALIAS.test(alias))
62
83
  throw new ConfigurationError(key, `${key} names an invalid members alias '${alias}'.`);
63
84
  if (patternOf(glob).length === 0)
64
85
  throw new ConfigurationError(key, `${key} names no pattern.`);
86
+ const earlier = declared.get(glob);
87
+ if (earlier !== undefined)
88
+ throw new ConfigurationError(key, `${key} repeats the definition '${glob}' of ${earlier}.`);
89
+ declared.set(glob, key);
65
90
  return {
66
- alias,
91
+ alias: glob,
67
92
  definition: { glob, provenance: { kind: "service-configuration" } },
68
93
  enabled: environment.enabled(alias),
69
94
  provenance: { kind: "environment", source: key },
@@ -87,26 +112,29 @@ const resolutionOf = (definition, overlay) => {
87
112
  if (overlay === null)
88
113
  return { effect, pattern, matched: 0, files: [], ignored: 0 };
89
114
  if (effect === "exclude") {
90
- const files = overlay.excluded.filter((path) => matchesGlob(path, pattern));
115
+ const files = overlay.excluded.filter((path) => PathGlob.matches(path, pattern));
91
116
  return { effect, pattern, matched: files.length, files: files.slice(0, sampleSize()), ignored: 0 };
92
117
  }
93
118
  const members = new Set(overlay.members);
94
119
  const files = (overlay.scans.get(pattern) ?? []).filter((path) => members.has(path));
95
- const ignored = overlay.masked.filter((path) => matchesGlob(path, pattern)).length;
120
+ const ignored = overlay.masked.filter((path) => PathGlob.matches(path, pattern)).length;
96
121
  return { effect, pattern, matched: files.length, files: files.slice(0, sampleSize()), ignored };
97
122
  };
123
+ // {§members-projection} — a definition's document is named by its glob, percent-encoded as one path
124
+ // segment: RFC 3986 unreserved characters and parentheses stay literal, everything else is `%XX`.
125
+ export const documentName = (glob) => encodeURIComponent(glob).replace(/[!'*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
98
126
  // {§members-projection} — each enabled definition is one generated document under
99
127
  // `worker:///_plurnk/members/`, surveyed at turn 0 like every family's enabled definitions:
100
128
  // what the glob is, whose it is, and what it resolved to.
101
- const membersDocument = (alias, definition, resolution) => {
129
+ const membersDocument = (definition, resolution) => {
102
130
  const noun = resolution.effect === "exclude" ? "member" : "file";
103
131
  const ignored = resolution.ignored > 0 ? ` (${count(resolution.ignored, "match")} ignored)` : "";
104
132
  const kind = definition.provenance?.kind ?? "client-action";
105
133
  const listed = resolution.files.map((file) => `\`${file}\``).join(", ") + (resolution.matched > resolution.files.length ? ", …" : "");
106
134
  return {
107
- pathname: `/members/${alias}.md`,
135
+ pathname: `/members/${documentName(definition.glob)}.md`,
108
136
  content: [
109
- `# ${alias}`,
137
+ `# \`${definition.glob}\``,
110
138
  "",
111
139
  "## Summary",
112
140
  "",
@@ -114,7 +142,7 @@ const membersDocument = (alias, definition, resolution) => {
114
142
  "",
115
143
  "| Field | Value |",
116
144
  "| --- | --- |",
117
- `| definition | \`${JSON.stringify({ glob: definition.glob })}\` |`,
145
+ `| glob | \`${definition.glob}\` |`,
118
146
  `| origin | ${kind === "service-configuration" ? "service" : "workspace"} |`,
119
147
  `| provenance | ${kind} |`,
120
148
  ...(resolution.files.length === 0 ? [] : ["", `${resolution.effect === "exclude" ? "Excluded" : "Included"}: ${listed}`]),
@@ -137,7 +165,13 @@ export default class MembersFunctionality {
137
165
  namespaceOwner = MEMBERS_OWNER;
138
166
  summary = "Manage file membership";
139
167
  definitionSchema = DEFINITION;
140
- example = { alias: "docs", definition: { glob: "docs/**" } };
168
+ aliasPattern = GLOB;
169
+ addressing = {
170
+ add: ADD,
171
+ select: SELECT,
172
+ alias: (input) => input.file.trim(),
173
+ };
174
+ example = { files: ["docs/**"] };
141
175
  docsDir = Paths.packageRoot;
142
176
  discovery = {
143
177
  inputs: ["query"],
@@ -168,15 +202,15 @@ export default class MembersFunctionality {
168
202
  if (overlay === null) {
169
203
  throw refuse("headless", 409, "The workspace has no project root, so there are no file members.", { recovery: "Open the workspace on a project root." });
170
204
  }
171
- return [isExclusion(glob) || PATTERN_CHARACTERS.test(glob)
205
+ return [isExclusion(glob) || PathSyntax.hasGlob(glob)
172
206
  ? await this.#preview(glob, overlay, identity.workspaceId)
173
207
  : await this.#verdict(glob, overlay, identity.workspaceId)];
174
208
  }
175
209
  async #preview(glob, overlay, workspaceId) {
176
210
  const pattern = patternOf(glob);
177
- const candidate = { alias: aliasOf(glob), definition: { glob }, provenance: { kind: "preview", source: glob } };
211
+ const candidate = { alias: glob, definition: { glob }, provenance: { kind: "preview", source: glob } };
178
212
  if (isExclusion(glob)) {
179
- const excluded = overlay.members.filter((path) => matchesGlob(path, pattern));
213
+ const excluded = overlay.members.filter((path) => PathGlob.matches(path, pattern));
180
214
  return { ...candidate, summary: `would exclude ${count(excluded.length, "member")}${sample(excluded)}` };
181
215
  }
182
216
  const matched = await GitMembership.scanPattern(overlay.root, pattern, undefined);
@@ -189,7 +223,7 @@ export default class MembersFunctionality {
189
223
  };
190
224
  }
191
225
  async #verdict(key, overlay, workspaceId) {
192
- const candidate = { alias: aliasOf(key), definition: { glob: key } };
226
+ const candidate = { alias: key, definition: { glob: key } };
193
227
  if (!(await isFile(resolve(overlay.root, key)))) {
194
228
  return { ...candidate, provenance: { kind: "absent", source: key }, summary: "absent — no such file under the project root" };
195
229
  }
@@ -200,7 +234,7 @@ export default class MembersFunctionality {
200
234
  : definition !== undefined ? `included by \`${definition}\`` : "a creation record: plurnk wrote it";
201
235
  return { ...candidate, provenance: { kind: "member", source: key }, summary: `member — ${via}` };
202
236
  }
203
- const exclusion = overlay.excludeGlobs.find((pattern) => matchesGlob(key, pattern));
237
+ const exclusion = overlay.excludeGlobs.find((pattern) => PathGlob.matches(key, pattern));
204
238
  if (exclusion !== undefined) {
205
239
  return { ...candidate, provenance: { kind: "excluded", source: key }, summary: `not a member — excluded by \`!${exclusion}\`` };
206
240
  }
@@ -213,26 +247,23 @@ export default class MembersFunctionality {
213
247
  }
214
248
  return { ...candidate, provenance: { kind: "candidate", source: key }, summary: "not a member — untracked; add this definition to include it" };
215
249
  }
250
+ // {§functionality-addressing} — every glob the body names is admitted, or none is: a bare `!`
251
+ // or a glob past the model's scope refuses the whole add. The same glob twice is one definition.
216
252
  async admit(input, identity, caller = "action") {
217
- const { alias, definition } = input;
218
- const validation = Validator.validateJsonSchemaInstance(DEFINITION, definition);
219
- if (!validation.valid) {
220
- throw refuse("definition-invalid", 400, "A members definition is { glob }: a gitignore-style pattern, `!glob` to exclude.", {
221
- errors: validation.errors,
222
- recovery: "Supply { \"alias\": \"<name>\", \"definition\": { \"glob\": \"<pattern>\" } }.",
223
- });
224
- }
225
- const glob = definition.glob.trim();
226
- const pattern = patternOf(glob);
227
- if (pattern.length === 0) {
228
- throw refuse("definition-invalid", 400, "A members glob names a pattern; `!` alone excludes nothing.", {
229
- recovery: "Supply a pattern such as `docs/**` or `!**/*.lock`.",
230
- });
231
- }
232
- if (caller === "operation") {
233
- const settings = await WorkspaceSettings.read(this.#db, identity.workspaceId);
234
- const scope = FileCreationPolicy.effective(modelScope(this.#env), settings.membersModelScope);
235
- if (!FileCreationPolicy.admits(scope, outsideRoot(pattern))) {
253
+ const { files } = input;
254
+ const scope = caller === "operation"
255
+ ? FileCreationPolicy.effective(modelScope(this.#env), (await WorkspaceSettings.read(this.#db, identity.workspaceId)).membersModelScope)
256
+ : null;
257
+ const admitted = new Map();
258
+ for (const raw of files) {
259
+ const glob = raw.trim();
260
+ const pattern = patternOf(glob);
261
+ if (pattern.length === 0) {
262
+ throw refuse("definition-invalid", 400, `'${raw}' names no pattern; \`!\` alone excludes nothing.`, {
263
+ recovery: "Name a pattern such as `docs/**` or `!**/*.lock`.",
264
+ });
265
+ }
266
+ if (scope !== null && !FileCreationPolicy.admits(scope, outsideRoot(pattern))) {
236
267
  throw refuse("model-scope", 403, scope === "none"
237
268
  ? "The model may not change membership here: the members scope is none."
238
269
  : `The effective members scope '${scope}' does not admit '${glob}'.`, {
@@ -241,14 +272,15 @@ export default class MembersFunctionality {
241
272
  recovery: "`git add` the file so git tracks it, or ask the operator to add it (/members add) or raise PLURNK_SERVICE_MEMBERS_MODEL_SCOPE.",
242
273
  });
243
274
  }
275
+ admitted.set(glob, {
276
+ alias: glob,
277
+ definition: {
278
+ glob,
279
+ provenance: { kind: caller === "operation" ? "model-proposal" : "client-action" },
280
+ },
281
+ });
244
282
  }
245
- return {
246
- alias: typeof alias === "string" && alias.length > 0 ? alias : aliasOf(glob),
247
- definition: {
248
- glob,
249
- provenance: { kind: caller === "operation" ? "model-proposal" : "client-action" },
250
- },
251
- };
283
+ return [...admitted.values()];
252
284
  }
253
285
  // {§members-projection} — project this workspace's enabled definitions:
254
286
  // inclusions union, an exclusion wins in resolution, and a
@@ -263,7 +295,7 @@ export default class MembersFunctionality {
263
295
  for (const [alias, { definition }] of enabled) {
264
296
  const resolution = resolutionOf(definition, overlay);
265
297
  outcomes.set(alias, { state: "active", detail: resolution });
266
- documents.push(membersDocument(alias, definition, resolution));
298
+ documents.push(membersDocument(definition, resolution));
267
299
  }
268
300
  return {
269
301
  documents,
@@ -1 +1 @@
1
- {"version":3,"file":"MembersFunctionality.js","sourceRoot":"","sources":["../../src/server/MembersFunctionality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MembersFunctionality.js","sourceRoot":"","sources":["../../src/server/MembersFunctionality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Db } from "../core/Db.ts";
2
+ import type Engine from "../core/Engine.ts";
3
+ export default class MessageAbandonment {
4
+ static detail(loopId: number, status: number): string;
5
+ static complete(engine: Engine, db: Db, workspaceId: number, workerId: number, loopId: number, status: number): Promise<number>;
6
+ }
7
+ //# sourceMappingURL=MessageAbandonment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageAbandonment.d.ts","sourceRoot":"","sources":["../../src/server/MessageAbandonment.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAI5C,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;IAID,OAAa,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCpI;CACJ"}
@@ -0,0 +1,57 @@
1
+ // {§message-abandonment} — a loop that ends with another worker's message unanswered answers it 499 by the
2
+ // daemon's hand: one SEND to each message's address, in a maintenance turn of the loop that ended, so the
3
+ // sender wakes and reads the decline instead of waiting on a loop that is gone. No loop is opened: a cancelled
4
+ // scope stays cancelled ({§worker-lifecycle-no-resurrection}); the turn belongs to the ended loop.
5
+ import { PlurnkParser } from "@plurnk/plurnk-parser";
6
+ import Turn from "../core/Turn.js";
7
+ import TurnOps from "../core/TurnOps.js";
8
+ export default class MessageAbandonment {
9
+ static detail(loopId, status) {
10
+ return `Loop ${loopId} ended with status ${status}; this message was not answered.`;
11
+ }
12
+ // The messages the ended loop still holds without a completion, each completed 499 with the fact of the
13
+ // ending as the body. Returns how many were completed; none is the ordinary case.
14
+ static async complete(engine, db, workspaceId, workerId, loopId, status) {
15
+ const open = await db.drain_abandoned_messages.all({ loop_id: loopId });
16
+ if (open.length === 0)
17
+ return 0;
18
+ const text = open
19
+ .map(({ path }) => `\`\`\`\`SEND (${path}) [499]\n${MessageAbandonment.detail(loopId, status)}\n\`\`\`\``)
20
+ .join("\n\n");
21
+ const parsed = PlurnkParser.parseStatements(text, { executors: [] });
22
+ const statements = parsed.items.flatMap((item) => item.kind === "statement" ? [item.statement] : []);
23
+ if (statements.length !== open.length)
24
+ throw new Error(`message abandonment: ${open.length} messages, ${statements.length} completions parsed`);
25
+ const source = TurnOps.renderInternal(statements);
26
+ const admitted = TurnOps.parseInternal(source);
27
+ const { id: turnId } = await Turn.open(db, { loopId, producer: "_plurnk", kind: "maintenance" });
28
+ // The executor completes the turn it ran; only a turn it never finished is closed here, as failed.
29
+ let turnOpen = true;
30
+ try {
31
+ await engine.executeAdmittedTurn({
32
+ statements: admitted,
33
+ source,
34
+ emission: null,
35
+ origin: "_plurnk",
36
+ workspaceId,
37
+ workerId,
38
+ loopId,
39
+ turnId,
40
+ fromSequence: 1,
41
+ failOnOperationError: true,
42
+ });
43
+ turnOpen = false;
44
+ }
45
+ catch (cause) {
46
+ if (turnOpen) {
47
+ try {
48
+ await Turn.complete(db, turnId, 500);
49
+ }
50
+ catch { /* the executor may have closed it */ }
51
+ }
52
+ throw cause;
53
+ }
54
+ return open.length;
55
+ }
56
+ }
57
+ //# sourceMappingURL=MessageAbandonment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageAbandonment.js","sourceRoot":"","sources":["../../src/server/MessageAbandonment.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,0GAA0G;AAC1G,+GAA+G;AAC/G,mGAAmG;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACnC,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,MAAc;QACxC,OAAO,QAAQ,MAAM,sBAAsB,MAAM,kCAAkC,CAAC;IACxF,CAAC;IAED,wGAAwG;IACxG,kFAAkF;IAClF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,EAAM,EAAE,WAAmB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;QAC/G,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI;aACZ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,iBAAiB,IAAI,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;aACzG,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrG,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,MAAM,cAAc,UAAU,CAAC,MAAM,qBAAqB,CAAC,CAAC;QAChJ,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACjG,mGAAmG;QACnG,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,mBAAmB,CAAC;gBAC7B,UAAU,EAAE,QAAQ;gBACpB,MAAM;gBACN,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,SAAS;gBACjB,WAAW;gBACX,QAAQ;gBACR,MAAM;gBACN,MAAM;gBACN,YAAY,EAAE,CAAC;gBACf,oBAAoB,EAAE,IAAI;aAC7B,CAAC,CAAC;YACH,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC;oBAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;YACjG,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Retention.d.ts","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAKhD,eAAO,MAAM,eAAe,SAAS,MAAM,CAAC,UAAU,KAAiB,eAWrE,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,SAAS;;IAK1B,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAG1C;IAED,IAAI,MAAM,IAAI,eAAe,CAAyB;IAMhD,cAAc,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAQ/F;IAQK,GAAG,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAc1M;IAeD,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAI7C;IAED,IAAI,IAAI,IAAI,CAGX;CACJ"}
1
+ {"version":3,"file":"Retention.d.ts","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAKhD,eAAO,MAAM,eAAe,SAAS,MAAM,CAAC,UAAU,KAAiB,eAWrE,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,SAAS;;IAK1B,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAG1C;IAED,IAAI,MAAM,IAAI,eAAe,CAAyB;IAIhD,cAAc,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAQ/F;IASK,GAAG,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAe1M;IAeD,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAI7C;IAED,IAAI,IAAI,IAAI,CAGX;CACJ"}
@@ -1,5 +1,5 @@
1
1
  import { Knob } from "@plurnk/plurnk-meta";
2
- import DerivationUse from "../schemes/_derivation-use.js";
2
+ import ContentUse from "../core/ContentUse.js";
3
3
  // SQLite's PRAGMA auto_vacuum codes for the modes the daemon manages.
4
4
  const AUTO_VACUUM_CODE = Object.freeze({ none: 0, incremental: 2 });
5
5
  export const retentionPolicy = (env = process.env) => ({
@@ -23,8 +23,6 @@ export default class Retention {
23
23
  this.#policy = policy;
24
24
  }
25
25
  get policy() { return this.#policy; }
26
- // One pass, in dependency order: compositions and response bodies retire first, then the
27
- // items and derivations nothing references. Each statement is a no-op under the default policy.
28
26
  // {§db-space-reclamation} — once per open: a database whose auto-vacuum mode differs from the
29
27
  // policy's is converted (a mode change takes effect through one VACUUM). Runs before any drain.
30
28
  async prepareStorage() {
@@ -45,15 +43,17 @@ export default class Retention {
45
43
  throw new Error("page counts are unavailable");
46
44
  return row;
47
45
  }
46
+ // Release expired compositions and response bodies before collecting unreferenced content.
48
47
  async run(now = Date.now()) {
49
48
  const { retainPacketTurns, retainPacketMs, retainResponseTurns, retainResponseMs, collectPacketItems, collectDerivations, collectContents } = this.#policy;
50
49
  const packets = await this.#db.retention_retire_packets.run({ keep_turns: retainPacketTurns, keep_ms: retainPacketMs, now_ms: now });
51
50
  const responses = await this.#db.retention_retire_responses.run({ keep_turns: retainResponseTurns, keep_ms: retainResponseMs, now_ms: now });
52
51
  const items = await this.#db.retention_collect_packet_items.run({ collect: collectPacketItems ? 1 : 0 });
53
- const collected = await DerivationUse.collect(this.#db, async () => {
52
+ const collected = await ContentUse.collect(this.#db, async () => {
54
53
  const derivations = await this.#db.retention_collect_derivations.run({ collect: collectDerivations ? 1 : 0 });
55
54
  const contents = await this.#db.retention_collect_contents.run({ collect: collectContents ? 1 : 0 });
56
- return { derivations: derivations.changes, contents: contents.changes };
55
+ const native = await this.#db.retention_collect_native_contents.run({ collect: collectContents ? 1 : 0 });
56
+ return { derivations: derivations.changes, contents: contents.changes + native.changes };
57
57
  });
58
58
  const reclaimedPages = await this.#reclaim();
59
59
  // `.run`, not `.all`: `.all` is served by a read-only reader, and a checkpoint there is an I/O error.
@@ -1 +1 @@
1
- {"version":3,"file":"Retention.js","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Retention.js","sourceRoot":"","sources":["../../src/server/Retention.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  -- Retention ({§retention-policy}): the operator's policy over what the database keeps, as set
2
- -- statements run by Retention on the daemon's cadence and at shutdown. Under the defaults nothing
3
- -- that is information leaves; only what no row references.
2
+ -- statements run by Retention on the daemon's cadence and at shutdown. Packet compositions and
3
+ -- payloads expire independently of durable identities, decisions and accounting.
4
+
5
+ -- INIT: inference_payload_retirement
6
+ DROP TRIGGER IF EXISTS inference_payload_retirement;
7
+ CREATE TRIGGER inference_payload_retirement
8
+ AFTER UPDATE OF payloads_retired_at ON inference_calls
9
+ BEGIN
10
+ DELETE FROM model_call_responses WHERE id = NEW.id;
11
+ UPDATE provider_requests SET evidence = NULL
12
+ WHERE inference_call_id = NEW.id AND evidence IS NOT NULL;
13
+ END;
4
14
 
5
15
  -- PREP: retention_retire_packets
6
16
  -- A completed turn older than the policy — beyond the newest $keep_turns packet-bearing turns of
@@ -21,27 +31,25 @@ WHERE ($keep_turns >= 0 OR $keep_ms >= 0)
21
31
  );
22
32
 
23
33
  -- PREP: retention_retire_responses
24
- -- A settled call's response body beyond the newest $keep_turns body-bearing calls of its loop,
25
- -- or whose turn completed more than $keep_ms before $now_ms, retires; the call's identity,
26
- -- failure, capacity, admission and accounting stay, and the digest renders it request-only.
27
- -- -1 on both disables the statement; a call on an open turn is never retired.
28
- DELETE FROM model_call_responses
29
- WHERE ($keep_turns >= 0 OR $keep_ms >= 0)
30
- AND id IN (
31
- SELECT ic.id FROM inference_calls ic
32
- JOIN turns t ON t.id = ic.turn_id
33
- WHERE t.completed_at IS NOT NULL
34
- AND (
35
- ($keep_turns >= 0 AND (
36
- SELECT COUNT(*) FROM inference_calls newer
37
- JOIN turns nt ON nt.id = newer.turn_id
38
- WHERE nt.loop_id = t.loop_id
39
- AND EXISTS (SELECT 1 FROM model_call_responses r WHERE r.id = newer.id)
40
- AND (nt.sequence > t.sequence OR (nt.sequence = t.sequence AND newer.sequence > ic.sequence))
41
- ) >= $keep_turns)
42
- OR ($keep_ms >= 0 AND unixepoch(t.completed_at) * 1000 < $now_ms - $keep_ms)
43
- )
44
- );
34
+ -- Rank logical calls, not physical retries. Already retired calls retain their place
35
+ -- in that chronology; failed-only captures count too. Open work never expires.
36
+ WITH ranked AS MATERIALIZED (
37
+ SELECT ic.id, ic.state, t.completed_at, ic.payloads_retired_at,
38
+ row_number() OVER (PARTITION BY t.loop_id ORDER BY t.sequence DESC, ic.sequence DESC) AS ordinal
39
+ FROM inference_calls ic JOIN turns t ON t.id = ic.turn_id
40
+ WHERE ($keep_turns >= 0 OR $keep_ms >= 0)
41
+ AND (ic.payloads_retired_at IS NOT NULL
42
+ OR EXISTS (SELECT 1 FROM model_call_responses r WHERE r.id = ic.id)
43
+ OR EXISTS (SELECT 1 FROM provider_requests pr WHERE pr.inference_call_id = ic.id AND pr.evidence IS NOT NULL))
44
+ )
45
+ UPDATE inference_calls SET payloads_retired_at = strftime('%Y-%m-%dT%H:%M:%fZ', $now_ms / 1000.0, 'unixepoch')
46
+ WHERE id IN (
47
+ SELECT id FROM ranked
48
+ WHERE payloads_retired_at IS NULL AND state <> 'pending' AND completed_at IS NOT NULL
49
+ AND (($keep_turns >= 0 AND ordinal > $keep_turns)
50
+ OR ($keep_ms >= 0 AND unixepoch(completed_at) * 1000 < $now_ms - $keep_ms))
51
+ )
52
+ AND NOT EXISTS (SELECT 1 FROM provider_requests pr WHERE pr.inference_call_id = inference_calls.id AND pr.state = 'pending');
45
53
 
46
54
  -- PREP: retention_collect_packet_items
47
55
  -- {§packet-items}: an item no turn's composition references is transient data.
@@ -66,6 +74,24 @@ WHERE $collect = 1
66
74
  AND NOT EXISTS (SELECT 1 FROM entry_channel_rows r WHERE r.content_id = contents.id)
67
75
  AND NOT EXISTS (SELECT 1 FROM derivations d WHERE d.content_id = contents.id);
68
76
 
77
+ -- PREP: retention_collect_native_contents
78
+ -- {§native-content-lifetime}: curation flags never determine evidence ownership.
79
+ DELETE FROM native_contents
80
+ WHERE $collect = 1
81
+ AND hash NOT IN (
82
+ SELECT native_content_hash FROM log_entries WHERE native_content_hash IS NOT NULL
83
+ UNION
84
+ SELECT json_extract(a.value, '$.contentHash') FROM log_entries le,
85
+ json_each(CASE WHEN le.mimetype_rx = 'application/json' THEN le.rx ELSE '{}' END, '$.attachments') a
86
+ WHERE le.mimetype_rx = 'application/json' AND json_type(a.value, '$.contentHash') = 'text'
87
+ UNION
88
+ SELECT json_extract(a.value, '$.contentHash') FROM loop_messages m, json_each(m.evidence, '$.attachments') a
89
+ WHERE json_type(a.value, '$.contentHash') = 'text'
90
+ UNION
91
+ SELECT json_extract(a.value, '$.contentHash') FROM turns t, json_each(t.packet, '$.attachments') a
92
+ WHERE json_type(a.value, '$.contentHash') = 'text'
93
+ );
94
+
69
95
  -- {§db-space-reclamation} The daemon keeps its own file healthy: freed pages go back to the OS.
70
96
 
71
97
  -- PREP: retention_auto_vacuum_mode