@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
package/.env.defaults CHANGED
@@ -20,8 +20,11 @@ PLURNK_SERVICE_SHARE_FOLDER=
20
20
  # The listener's address, PLURNK_HOST and PLURNK_PORT, is shared with every client and so is
21
21
  # declared by @plurnk/plurnk-contracts; --host and --port still spell it for one invocation.
22
22
 
23
- # --- SQLite (optional sqlrite overrides) ---
24
- # Lock wait, ms; 0 = immediate failure. sqlrite defaults to 5000, WAL, synchronous=NORMAL.
23
+ # --- SQLite ---
24
+ # WAL durability ({§db-durability}): FULL syncs every commit; NORMAL may lose recent commits
25
+ # on power loss; OFF may corrupt the database; EXTRA equals FULL in WAL. Applied before migration.
26
+ PLURNK_SERVICE_SQLITE_SYNCHRONOUS=FULL
27
+ # Lock wait, ms; 0 = immediate failure. Unset = sqlrite's default.
25
28
  # PLURNK_SERVICE_SQLITE_TIMEOUT=5000
26
29
  # Page cache: positive = pages; negative = KiB. Unset = SQLite default.
27
30
  # PLURNK_SERVICE_SQLITE_CACHE_SIZE=-16000
@@ -69,7 +72,7 @@ PLURNK_SERVICE_FILE_MATERIALIZE_MAX_BYTES=104857600
69
72
  # Opt-in model-call ceiling shared by the worker tree, including BARE and resumes; -1 = uncapped.
70
73
  # Runtime (_plurnk) ancestry supplies no ceiling. Clients may tighten the model tree's limit.
71
74
  PLURNK_SERVICE_MAX_TURNS=-1
72
- # Actions per emission; -1 = unlimited. Final disposition remains; excess actions report an error.
75
+ # Resolved actions per emission, including glob targets; -1 = unlimited. WAIT remains exempt.
73
76
  PLURNK_SERVICE_MAX_COMMANDS=-1
74
77
  # Concurrent live workers per workspace; -1 = unlimited. Excess spawns return 508, not a queue.
75
78
  PLURNK_SERVICE_WORKSPACE_WORKERS_MAX_ACTIVE=-1
@@ -131,11 +134,11 @@ PLURNK_SERVICE_OPTIMISTIC_WAIT_MS=5000
131
134
  # Maximum park before reassessing live work, positive seconds; WAIT [seconds] overrides one park.
132
135
  PLURNK_SERVICE_WAIT_SEC=300
133
136
  # Ambient environment an EXEC subprocess may inherit from the host: exact names, or one
134
- # trailing-* prefix glob. This is a CEILING — a worker or a heading modifier narrows it,
135
- # nothing widens it. plurnk's own secrets (PLURNK_* and every provider credential name) are
136
- # stripped beneath it unconditionally and are not governed by this knob.
137
+ # trailing-* prefix glob. This bounds inherited host values, not explicit non-reserved values.
138
+ # PLURNK_* and provider credential names remain excluded regardless of these selectors.
139
+ # Module-owned launches and explicit MCP bindings follow their own launch contract.
137
140
  # The shipped list is what a shell, git, node and python need to run at all. An operator
138
- # who wants a tool's credential reachable by model-written commands adds it by name.
141
+ # who wants a non-reserved tool credential inherited by commands adds its name.
139
142
  PLURNK_SERVICE_EXEC_ENV_INHERIT=PATH,HOME,USER,LOGNAME,SHELL,PWD,TMPDIR,TERM,TZ,LANG,LC_*,PAGER,GIT_PAGER,NO_COLOR,CI
140
143
  # Names removed after INHERIT, same shapes; narrows without rewriting the list above.
141
144
  PLURNK_SERVICE_EXEC_ENV_EXCLUDE=
@@ -151,14 +154,15 @@ PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES=4
151
154
  PLURNK_SERVICE_EDIT_RECEIPT_REMOVED_LINES=40
152
155
  # Paths named per class in the packet's git status; the rest are counted.
153
156
  PLURNK_SERVICE_GIT_STATUS_PATHS=8
154
- # Above this share of the budget, measured before adding either, the Context gauge names its largest rows
155
- # and a packet within its budget carries the budget_pressure notice ({§context-pressure-notice}).
157
+ # Above this share of the budget, measured before adding the inventory, the Context gauge names its largest
158
+ # rows ({§context-gauge}); the gauge's percent is on every packet regardless.
156
159
  PLURNK_SERVICE_BUDGET_PRESSURE=80%
157
160
  # Heaviest retained log rows the pressured Context gauge names, as {path, tokens}; 0 names none.
158
161
  PLURNK_SERVICE_BUDGET_LARGEST_ITEMS=5
159
162
  # First page of everything that comes back unasked in size: a READ or FIND without a scope, a stream's
160
163
  # delivery, a peer worker's message, a receipt the model did not author ({§markerless-first-page}).
161
- # Lines of text, bytes of a byte view, results of a FIND; explicit scopes stay exact.
164
+ # Lines of text, bytes of a byte view, results of a FIND; explicit scopes stay exact. 100 is a page for
165
+ # the million-token windows hosted models have; a deployment with a small room tunes it down.
162
166
  PLURNK_SERVICE_PREVIEW_LINES=100
163
167
  # Independent bound on the same page, Unicode code points; CRLF counts as one separator.
164
168
  PLURNK_SERVICE_PREVIEW_CHARS=16000
@@ -219,23 +223,24 @@ PLURNK_SERVICE_DERIVE_STORE_BATCH=1024
219
223
  # Progress heartbeat, ms; starts, failures, and completion are immediate; no-op passes stay silent.
220
224
  PLURNK_SERVICE_DERIVE_PROGRESS_HEARTBEAT_MS=15000
221
225
 
222
- # --- Retention: information is kept; transient data is collected ({§retention-policy}) ---
223
- # Packet compositions kept per loop, newest first; -1 = every packet, forever.
226
+ # --- Retention: packet/response bodies and unreferenced content ({§retention-policy}) ---
227
+ # Packet compositions kept per loop, newest first; -1 disables the count limit, not the age limit.
224
228
  PLURNK_SERVICE_RETAIN_PACKET_TURNS=-1
225
- # Packet compositions kept by age, ms since the turn completed; -1 = no age limit. Thirty days:
226
- # no worker reads its own packets back that late, and a daemon left running for months stops growing.
229
+ # Packet compositions kept by age, ms since the turn completed; -1 disables the age limit.
227
230
  PLURNK_SERVICE_RETAIN_PACKET_MS=2592000000
228
- # Model response bodies kept per loop, newest first; -1 = every body, forever. The call's
229
- # evidence, admission and accounting always stay.
231
+ # Calls with captured payloads kept per loop, newest first; -1 disables the count limit.
232
+ # These controls do not retire messages, turn sources, operations, approval decisions or accounting.
230
233
  PLURNK_SERVICE_RETAIN_RESPONSE_TURNS=-1
231
- # Model response bodies kept by age, ms since the turn completed; -1 = no age limit. Thirty days, as above.
234
+ # Call payloads kept by age, ms since the turn completed; -1 disables the age limit.
235
+ # Covers normalized responses and all physical-request payloads, including failed retries.
236
+ # Identities, status, usage and cost remain; retirement is timestamped on the logical call.
232
237
  PLURNK_SERVICE_RETAIN_RESPONSE_MS=2592000000
233
238
  # Collect packet items no turn's composition references (1), or keep them (0).
234
239
  PLURNK_SERVICE_COLLECT_PACKET_ITEMS=1
235
240
  # Collect derivations no channel, turn source, or log row cites (1), or keep them (0).
236
241
  PLURNK_SERVICE_COLLECT_DERIVATIONS=1
237
- # Collect stored bodies no channel holds and no derivation indexes (1), or keep them (0)
238
- # ({§content-store}).
242
+ # Collect unreferenced text and native bodies (1), or keep them (0).
243
+ # Retained messages, operations and packet attachments pin native bytes ({§native-content-lifetime}).
239
244
  PLURNK_SERVICE_COLLECT_CONTENTS=1
240
245
  # Retention cadence while the daemon runs, ms; 0 = at shutdown only.
241
246
  PLURNK_SERVICE_RETENTION_INTERVAL_MS=3600000
package/INSTALL.md CHANGED
@@ -79,6 +79,25 @@ sidecars together. Copy the backup to a fresh working path, select that path wit
79
79
  `PLURNK_SERVICE_DB_PATH`, and start the same or a newer compatible service version.
80
80
  Do not overwrite a live database or pair a restored file with old sidecars.
81
81
 
82
+ | Restored input | Startup behaviour |
83
+ | --- | --- |
84
+ | Database | Retained history, approval decisions, attachments and workspace/worker configuration return. Interrupted work is settled without replaying uncertain effects ({§worker-lifecycle-restart-recovery}). |
85
+ | Project files and service configuration | Restore separately. Current files remain authoritative; startup reads the current configuration, not an earlier ambient environment captured in history. |
86
+ | Schedules | Enabled definitions rearm from the present; missed occurrences are not replayed ({§schedule-residency}, {§schedule-first-arming}). |
87
+ | Interactive MCP authorization | Reauthorize. Tokens and pending sign-ins are process-local, not part of the database backup ({§oauth-lifetime}). |
88
+
89
+ Retention controls expire packet compositions and call payloads, including physical-request
90
+ captures. Messages, turn sources, operation receipts, approval decisions and request accounting
91
+ remain with their containing history ({§retention-policy}); referenced attachment bytes remain
92
+ too ({§native-content-lifetime}). This is not content erasure. A share contains only what remains
93
+ when it is taken.
94
+
95
+ `PLURNK_SERVICE_SQLITE_SYNCHRONOUS` selects the database's WAL durability before migrations
96
+ or startup writes. Its shipped setting is in `.env.defaults`. `FULL` synchronizes every commit
97
+ to storage; selecting `NORMAL` explicitly trades power-loss durability for fewer synchronizations.
98
+ The guarantees and storage assumptions are defined in {§db-durability}. Neither setting makes
99
+ project-file writes transactional or replaces backups.
100
+
82
101
  ## Precedence
83
102
 
84
103
  Highest priority first ({§operator-config-precedence}):
@@ -125,7 +144,7 @@ outside the package.
125
144
  | --- | --- |
126
145
  | Startup defaults or installed extension configuration | The daemon's environment cascade. A remote client's shell does not change it. |
127
146
  | Model, reasoning, child model | Worker selections persist. Set them through client controls; changing a startup default does not retarget an existing Worker. |
128
- | MCPs, skills, outbound agents, schedules, membership | Workspace Functionality: list, discover, add, enable, disable, remove. Workers share the workspace's current selection. |
147
+ | MCPs, skills, outbound agents, schedules, membership | Workspace Functionality: list, discover, add, replace, enable, disable, remove. Workers share the workspace's current selection. |
129
148
  | Command environment | `env` manages worker overrides or workspace defaults. It does not reconfigure the daemon; running processes keep their launch environment. |
130
149
  | External capabilities | Service policy is a ceiling; workspace policy can narrow it for every worker. Hiding a doc does not grant or revoke authority. |
131
150
  | Proposal review / YOLO | Decides who accepts or rejects an admitted operation. Automatic acceptance never overrides capability or resource permissions. |