@plurnk/plurnk-service 3.2.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 (94) hide show
  1. package/.env.defaults +2 -2
  2. package/SPEC.md +122 -40
  3. package/dist/build-info.json +1 -1
  4. package/dist/core/BudgetReadout.d.ts +1 -3
  5. package/dist/core/BudgetReadout.d.ts.map +1 -1
  6. package/dist/core/BudgetReadout.js +43 -46
  7. package/dist/core/BudgetReadout.js.map +1 -1
  8. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  9. package/dist/core/CoreSchemeServices.js +1 -0
  10. package/dist/core/CoreSchemeServices.js.map +1 -1
  11. package/dist/core/Dispatcher.d.ts.map +1 -1
  12. package/dist/core/Dispatcher.js +7 -5
  13. package/dist/core/Dispatcher.js.map +1 -1
  14. package/dist/core/LoopLifecycle.sql +3 -2
  15. package/dist/core/PacketBuilder.d.ts.map +1 -1
  16. package/dist/core/PacketBuilder.js +16 -13
  17. package/dist/core/PacketBuilder.js.map +1 -1
  18. package/dist/core/PacketBuilder.sql +14 -0
  19. package/dist/core/ProposalLifecycle.d.ts +1 -0
  20. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  21. package/dist/core/ProposalLifecycle.js +1 -0
  22. package/dist/core/ProposalLifecycle.js.map +1 -1
  23. package/dist/core/TurnDispositionHandler.d.ts +1 -1
  24. package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
  25. package/dist/core/TurnDispositionHandler.js +5 -3
  26. package/dist/core/TurnDispositionHandler.js.map +1 -1
  27. package/dist/core/WorkerControlHandler.d.ts.map +1 -1
  28. package/dist/core/WorkerControlHandler.js +38 -2
  29. package/dist/core/WorkerControlHandler.js.map +1 -1
  30. package/dist/core/caps/SchemeCtxImpl.d.ts +1 -0
  31. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  32. package/dist/core/caps/SchemeCtxImpl.js +2 -0
  33. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  34. package/dist/core/fork.sql +2 -2
  35. package/dist/core/mutation-types.d.ts +1 -0
  36. package/dist/core/mutation-types.d.ts.map +1 -1
  37. package/dist/core/packet-wire.d.ts +1 -1
  38. package/dist/core/packet-wire.d.ts.map +1 -1
  39. package/dist/core/packet-wire.js +6 -2
  40. package/dist/core/packet-wire.js.map +1 -1
  41. package/dist/core/plurnk-uri.d.ts +1 -1
  42. package/dist/core/plurnk-uri.d.ts.map +1 -1
  43. package/dist/core/plurnk-uri.js +1 -1
  44. package/dist/core/plurnk-uri.js.map +1 -1
  45. package/dist/core/scheme-types.d.ts +1 -0
  46. package/dist/core/scheme-types.d.ts.map +1 -1
  47. package/dist/man/plurnk-service.1 +4 -4
  48. package/dist/schemes/Exec.d.ts.map +1 -1
  49. package/dist/schemes/Exec.js +5 -1
  50. package/dist/schemes/Exec.js.map +1 -1
  51. package/dist/schemes/ExecutionInput.d.ts +2 -1
  52. package/dist/schemes/ExecutionInput.d.ts.map +1 -1
  53. package/dist/schemes/ExecutionInput.js +44 -6
  54. package/dist/schemes/ExecutionInput.js.map +1 -1
  55. package/dist/schemes/File.d.ts.map +1 -1
  56. package/dist/schemes/File.js +17 -5
  57. package/dist/schemes/File.js.map +1 -1
  58. package/dist/schemes/Log.d.ts.map +1 -1
  59. package/dist/schemes/Log.js +4 -1
  60. package/dist/schemes/Log.js.map +1 -1
  61. package/dist/schemes/Log.sql +24 -1
  62. package/dist/server/Daemon.d.ts +7 -1
  63. package/dist/server/Daemon.d.ts.map +1 -1
  64. package/dist/server/Daemon.js +50 -1
  65. package/dist/server/Daemon.js.map +1 -1
  66. package/dist/server/DrainSupervisor.d.ts +3 -1
  67. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  68. package/dist/server/DrainSupervisor.js +17 -1
  69. package/dist/server/DrainSupervisor.js.map +1 -1
  70. package/dist/server/Functionality.d.ts.map +1 -1
  71. package/dist/server/Functionality.js +86 -49
  72. package/dist/server/Functionality.js.map +1 -1
  73. package/dist/server/FunctionalityManager.d.ts +1 -4
  74. package/dist/server/FunctionalityManager.d.ts.map +1 -1
  75. package/dist/server/FunctionalityManager.js +5 -5
  76. package/dist/server/FunctionalityManager.js.map +1 -1
  77. package/dist/server/MembersFunctionality.d.ts +7 -8
  78. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  79. package/dist/server/MembersFunctionality.js +86 -54
  80. package/dist/server/MembersFunctionality.js.map +1 -1
  81. package/dist/server/MessageAbandonment.d.ts +7 -0
  82. package/dist/server/MessageAbandonment.d.ts.map +1 -0
  83. package/dist/server/MessageAbandonment.js +57 -0
  84. package/dist/server/MessageAbandonment.js.map +1 -0
  85. package/dist/server/Rollback.d.ts +29 -0
  86. package/dist/server/Rollback.d.ts.map +1 -0
  87. package/dist/server/Rollback.js +111 -0
  88. package/dist/server/Rollback.js.map +1 -0
  89. package/dist/server/drain.sql +9 -0
  90. package/docs/members.md +14 -9
  91. package/migrations/026_message_obligations.sql +32 -0
  92. package/migrations/027_members_identity.sql +20 -0
  93. package/migrations/028_mutation_patch.sql +20 -0
  94. package/package.json +10 -11
package/.env.defaults CHANGED
@@ -154,8 +154,8 @@ PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES=4
154
154
  PLURNK_SERVICE_EDIT_RECEIPT_REMOVED_LINES=40
155
155
  # Paths named per class in the packet's git status; the rest are counted.
156
156
  PLURNK_SERVICE_GIT_STATUS_PATHS=8
157
- # Above this share of the budget, measured before adding either, the Context gauge names its largest rows
158
- # 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.
159
159
  PLURNK_SERVICE_BUDGET_PRESSURE=80%
160
160
  # Heaviest retained log rows the pressured Context gauge names, as {path, tokens}; 0 names none.
161
161
  PLURNK_SERVICE_BUDGET_LARGEST_ITEMS=5
package/SPEC.md CHANGED
@@ -566,7 +566,7 @@ Every admitted authority is a literal `workers.name`; self-addressing uses the c
566
566
  | `READ` | existing literal name | Collect the named worker's deliverable. |
567
567
  | `KILL` | existing literal name | Terminate the named worker or caller. |
568
568
 
569
- - §worker-scheme-spawn **Spawn** — ```` ```WORK (worker://<name>)? ```` with a task body creates a new child worker (empty log) and starts it with that task on its first loop. WORK/FORK are the worker-creation verbs: EDIT is file/entry only, so EDIT on the bare worker entity is a **400** steering to WORK/FORK — the entity is not an entry. Names remain unique within a workspace for the lifetime of retained Worker rows, including after termination. An existing name returns 409 whose receipt names the working forms — `SEND (worker://<name>)` with the task as the body to give the live worker more work, or a name no worker holds for another; concurrent claims cannot redirect a published address or expose a raw uniqueness failure.
569
+ - §worker-scheme-spawn **Spawn** — ```` ```WORK (worker://<name>)? ```` with a task body creates a new child worker (empty log) and starts it with that task on its first loop. WORK/FORK are the worker-creation verbs: EDIT is file/entry only, so EDIT on the bare worker entity is a **400** steering to WORK/FORK — the entity is not an entry. Names remain unique within a workspace for the lifetime of retained Worker rows, including after termination. A WORK whose name a worker already holds is the voice door ({§worker-scheme-irc}): its body is delivered to that worker as a message, nothing is created, the receipt names the worker and `delivered: message`, and an `env` option is refused by name since a message takes none. A FORK whose name a worker holds is `409 worker-name-conflict` whose recovery names the working forms, WORK or `SEND (worker://<name>)` to message the live worker, or a name no worker holds to branch; concurrent claims cannot redirect a published address or expose a raw uniqueness failure.
570
570
  - §worker-spawn-prompt-resource **The spawn slot is overloaded by scheme.** A `worker://` path is
571
571
  the child's address and keeps the address rules ({§worker-control-addressing}). A path of any
572
572
  other scheme is the child's prompt resource: it is read whole (`<1,-1>`) under the caller's read capabilities, composed with
@@ -620,9 +620,10 @@ Every admitted authority is a literal `workers.name`; self-addressing uses the c
620
620
  - §child-orientation **Child orientation.** Beyond the conclusion delta, every
621
621
  turn the packet's status clump surfaces the live things this worker currently
622
622
  holds under the teaching's own word for handing work out: `## Delegation` is
623
- one JSON object, `{"workers": [...], "streams": [...]}`, its unconcluded child
624
- workers and its open streams as `{status, path}` pointers (the same shape as
625
- the errors section). Body-suppressed child activity is durable
623
+ one JSON object, `{"workers": [...], "streams": [...], "messages": [...]}`, its
624
+ unconcluded child workers, its open streams and the messages it sent that await
625
+ completion ({§worker-obligations}) as `{status, path}` pointers (the same shape as
626
+ the errors section); a message pointer carries the recipient loop's status. Body-suppressed child activity is durable
626
627
  history; this section is the current inventory that keeps an active obligation
627
628
  visible even when no new activity arrived. Each open stream pointer carries
628
629
  elapsed runtime, output inactivity, and its channels' sizes and growth since
@@ -649,15 +650,17 @@ Every admitted authority is a literal `workers.name`; self-addressing uses the c
649
650
  notices, and the rest keep that rule. The parent is not a section: the
650
651
  `## Worker` identity block carries `"parent": "worker://<name>"`, or
651
652
  `"parent": null` at a root, so a worker never infers its rank from silence.
652
- - §packet-current-turn **The packet says who and which turn, below the log.** The
653
+ - §packet-current-turn **The packet says who, which turn and who attends, below the log.** The
653
654
  `## Worker` block, in the status clump below the log ({§packet-cache-monotone}), carries
654
- `{"path": "worker://<name>", "parent": <address or null>, "loop": L, "turn": T}`: the actor,
655
- whose child it is, and the coordinate this packet's response becomes, so `reasoning://<worker>/L/T`
656
- and `ops://<worker>/L/T` are the model's own and `log:///L/T/*` its rows; a model never infers the
657
- present from the last row's coordinate, which may or may not be its own turn. The block
658
- changes every turn, so nothing of it precedes the log, and the packet carries no date, time
659
- or zone anywhere. The coordinate only; the source addresses stay
660
- documented, not taught.
655
+ `{"path": "worker://<name>", "parent": <address or null>, "loop": L, "turn": T, "owner":
656
+ {"address": "<owner>", "interactive": <boolean>}}`: the actor, whose child it is, the coordinate
657
+ this packet's response becomes, so `reasoning://<worker>/L/T` and `ops://<worker>/L/T` are the
658
+ model's own and `log:///L/T/*` its rows, and its approval owner ({§worker-ownership}) with whether
659
+ a person attends that owner; a model never infers the present from the last row's coordinate,
660
+ which may or may not be its own turn, and never infers from a missing tool alone that nobody can
661
+ answer. The block changes every turn, so nothing of it precedes the log, and the packet carries no
662
+ date, time or zone anywhere. The coordinate only; the source addresses stay documented, not
663
+ taught.
661
664
 
662
665
  Worker control rides the daemon's inject seam (active→fold, idle→enqueue+drain), so the handler creates/branches the worker and hands off; the daemon owns provider + system prompt. FORK/WORK carry the seed task in the body and are their own ops, dispatched to worker control — never the entry-copy path.
663
666
 
@@ -1655,7 +1658,7 @@ Every fact names the canonical key, never the host root or an echo of the
1655
1658
  model's spelling. These classes let a caller distinguish a wrong address, an
1656
1659
  invalid range, read-only authority, and occupied hidden state without guessing.
1657
1660
 
1658
- §membership-read-refusal **A file miss speaks of membership, never of the disk.** A file is read only as a member, so every `file` miss — READ, FIND of an exact path, KILL, a pattern EDIT's source, a COPY or MOVE source — is 404 `entry-not-found`, `No member of this workspace is at '<key>'.`, its target rendered as the reusable member address ({§fs-answer-in-canon}, {§file-url}). Recovery offers listing with FIND, creation with EDIT, and admission with `members (add)` as alternatives and presumes none ({§diagnostic-observation}): `` FIND lists paths. EDIT creates files; `members (add)` admits existing files with a `{"glob": "<path>"}` body. `` The sentence is about the address and is true whether or not a file is there: it neither claims absence nor hints at presence. Beyond the root the engine does not look at the disk at all, so two reads of `../` paths differ only in the name they echo, and their recovery speaks of the address too, true under every members scope: `'<key>' is outside the project root: only a members definition under the operator's namespace scope admits it.` Inside the root occupancy is not secret ({§fs-write-nonmember}), so an exact-path READ of a path that exists on disk but is not a member says so instead — 404 `entry-not-member`, `'<key>' exists on disk but is not a member of this workspace.`, with admission-only recovery; a path the repository ignores, which no model definition admits, carries the members discovery verdict instead: `The repository ignores it: a client or operator members definition can include it, a model definition cannot.` Occupancy may surface there; content never does ({§membership}).
1661
+ §membership-read-refusal **A file miss speaks of membership, never of the disk.** A file is read only as a member, so every `file` miss — READ, FIND of an exact path, KILL, a pattern EDIT's source, a COPY or MOVE source — is 404 `entry-not-found`, `No member of this workspace is at '<key>'.`, its target rendered as the reusable member address ({§fs-answer-in-canon}, {§file-url}). Recovery offers listing with FIND, creation with EDIT, and admission with `members (add)` as alternatives and presumes none ({§diagnostic-observation}): `` FIND lists paths. EDIT creates files; `members (add)` admits existing files with a `{"alias": "<name>", "definition": {"glob": "<path>"}}` body. `` The sentence is about the address and is true whether or not a file is there: it neither claims absence nor hints at presence. Beyond the root the engine does not look at the disk at all, so two reads of `../` paths differ only in the name they echo, and their recovery speaks of the address too, true under every members scope: `'<key>' is outside the project root: only a members definition under the operator's namespace scope admits it.` Inside the root occupancy is not secret ({§fs-write-nonmember}), so an exact-path READ of a path that exists on disk but is not a member says so instead — 404 `entry-not-member`, `'<key>' exists on disk but is not a member of this workspace.`, with admission-only recovery; a path the repository ignores, which no model definition admits, carries the members discovery verdict instead: `The repository ignores it: a client or operator members definition can include it, a model definition cannot.` Occupancy may surface there; content never does ({§membership}).
1659
1662
 
1660
1663
  §file-directory-target **A directory is named as a directory.** Inside the root, a READ (or other exact-path read), KILL or EDIT whose target is a directory on disk — with or without a trailing slash — is refused `path-is-directory`, never as a missing or non-member file: READ and KILL answer 404, EDIT 403. The detail is `'<key>' is a directory, not a file; <OP> reads/removes/writes one file.`; a READ or KILL carries the listing as its recovery, `` `FIND (<key>/)` lists its files. ``, and an EDIT carries none. Beyond the root the disk stays dark and {§membership-read-refusal} holds unchanged.
1661
1664
 
@@ -2388,6 +2391,32 @@ The `## Log` section is a sequence of ordinary Markdown records separated by one
2388
2391
 
2389
2392
  An emission row's body is not in its record ({§emission-row}); its eligible program follows it as a separate assistant message ({§emission-history}). Patterns retain their literal spelling; a pattern containing a line break is JSON-quoted to keep the H3 on one physical line. Receipts are descriptive records, not reconstructed operation headings. Absent fields are not invented. Every physical body line retains its canonical numeric `N:` or anchored `@hash N:` coordinate, so source text cannot create a record boundary. The section contains records only, with no leading prose or enclosing fence.
2390
2393
 
2394
+ §log-mutation-patch **A settled file mutation's row keeps what it did.** When an accepted EDIT,
2395
+ COPY, MOVE or KILL writes or removes a text member, the file scheme appends the unified diff of
2396
+ that write, `current` to `proposed`, to the operation row it is settling (`log_entries.patch`); a
2397
+ row that settles several writes keeps them in application order. The row serves it as its `patch`
2398
+ channel, `log:///<loop>/<turn>/<item>/<OP>#patch`, `text/x-diff`, for the life of the row: a fork
2399
+ copies it with the row, and it never enters a receipt or a packet unasked. Nothing is kept for a
2400
+ byte write, a member past the materialization bound, or a row settled before this version, and
2401
+ nothing is reconstructed for them: such a row has no `patch` channel, and whatever reads one, a
2402
+ rollback included, fails by name rather than inventing one.
2403
+
2404
+ §rollback **Rollback reverses a worker's settled file mutations, latest first, through ordinary
2405
+ operations.** `rollback({ workspaceId, workerId, clientWorkerId, to })` (`workspace.rollback { to,
2406
+ workerId? }` for a client) names a log coordinate of `workerId`, `<loop>/<turn>/<item>`; the state
2407
+ after that item is what remains. Every settled EDIT, COPY, MOVE or KILL row after it, latest first,
2408
+ has its patch ({§log-mutation-patch}) reversed against the file as it is now and written back as an
2409
+ operation of the acting client in `clientWorkerId`, settled under that worker's owner: a rewrite as
2410
+ `EDIT <1,-1>`, a removed file as a creating `EDIT`, a created file as `KILL`. Each reversal is a
2411
+ proposal, a row and a patch of its own, so a rollback is reviewable afterwards and reversible by the
2412
+ same means. The report (`RollbackReport`) lists what was restored, the rows skipped because they
2413
+ kept no patch or were reversed already (the file is in the state before that mutation, as an earlier
2414
+ rollback left it), and where it stopped: `drift`, the file no longer holds what that mutation wrote,
2415
+ leaves that file and everything earlier untouched; `refused` carries the reversing operation's
2416
+ Problem. A coordinate that is not one of the worker's rows is `404 coordinate-not-found`, a
2417
+ malformed one `400 coordinate-invalid`, and a workspace without a project root `400
2418
+ project-root-required`. Nothing is reconstructed for a patchless row, and the log is never rewritten.
2419
+
2391
2420
  §log-address-metadata **Addresses name their relationship, not the row's producer.**
2392
2421
 
2393
2422
  | Spelling | Meaning | Where |
@@ -2979,10 +3008,22 @@ When all messages are resolved but new results require another packet, the engin
2979
3008
  reports only: `All Open Messages resolved. Review new results; emit no OPs if finished.`
2980
3009
  The notice creates no state and does not demand another final reply.
2981
3010
 
2982
- §worker-obligations A worker holds its unresolved children and open non-detached
2983
- streams (`worker_obligations`); `loop_obligations` names them per loop. The
2984
- packet's Delegation list, WAIT, completion and drain wake settlement use that
2985
- same durable liveness.
3011
+ §worker-obligations A worker holds its unresolved children, its open non-detached
3012
+ streams, and the messages it sent to other workers that await completion while the
3013
+ recipient's loop is live (`worker_obligations`); `loop_obligations` names them per
3014
+ loop. The packet's Delegation list, WAIT, completion and drain wake settlement use
3015
+ that same durable liveness: a worker that messaged another worker parks on an
3016
+ authored WAIT until the completion arrives ({§message-completion}), and with no WAIT
3017
+ joins that work with the bounded park rather than concluding idle.
3018
+
3019
+ §message-abandonment **An ended loop answers what it left open.** When a loop ends,
3020
+ every message another worker sent it that has no completion is completed `499` by the
3021
+ daemon: one `_plurnk` SEND to the message's address in a maintenance turn of the
3022
+ recipient, "Loop *N* ended with status *S*; this message was not answered.",
3023
+ delivered to the sender like any reply ({§message-reply-delivery}). A message the
3024
+ ending loop had not yet published is re-homed first ({§message-loop-containment}) and
3025
+ is not abandoned. The sender's hold ends with the recipient's loop either way; the
3026
+ completion is what wakes it and tells it.
2986
3027
 
2987
3028
  §wait-obligation-matrix **End-of-program resolution.** Execute all admitted operations and settle optimistic work before applying this table. WAIT is an optional yield, not an end-of-program delimiter.
2988
3029
 
@@ -3144,7 +3185,9 @@ of which Worker launched it ({§execution-output-identity}).
3144
3185
  | --- | --- |
3145
3186
  | Admission | Require SEND control and the original invocation's runtime/tool capabilities. Preserve its classified effect: host input proposes; pure/read input uses the same effect policy as launch. |
3146
3187
  | Acceptance | Recheck both capabilities, workspace, and the exact live subscription. Stale approval cannot reach a replacement invocation. |
3147
- | Queued or starting without a receiver | `409 input-unavailable`, immediately; never wait for an execution slot while blocking another input-dependent execution. |
3188
+ | Launched without input | The invocation's preparation declared no receiver ({§executor-live-input}): `409 input-unavailable`, immediately, naming the launch form that opens input. |
3189
+ | Queued for a slot | `409 input-unavailable`, immediately and `retryable`; never wait for an execution slot while blocking another input-dependent execution. |
3190
+ | Admitted, receiver declared, not yet open | Delivery waits for the receiver to register, within the backpressure bound; the execution settling first returns `410 input-closed`. A receiver registered without the declaration is the executor's defect and fails its run. |
3148
3191
  | Unknown address | `404 stream-not-found`. A terminal execution or retired input returns `410 input-closed`. |
3149
3192
  | Delivery | Serialize accepted inputs per invocation. Preserve authored body and receiver-owned metadata. Receiver success means delivery only, not completion. |
3150
3193
  | Backpressure | `PLURNK_SERVICE_EXEC_INPUT_TIMEOUT_MS` bounds each accepted delivery, including its queue residence. Expiry returns `504 input-timeout`; cancellation returns `499 input-cancelled`. Once delivery has begun, retire and abort input on either; delivery may be partial and is never replayed. The execution itself is not implicitly killed. |
@@ -4103,7 +4146,7 @@ Each knob's value lives on its panel and nowhere else (`plurnk-service config de
4103
4146
  | `PLURNK_SERVICE_PROVIDER_RECOVERY_BACKOFF` | First recovery delay (ms); doubles per failure up to `PLURNK_SERVICE_PROVIDER_RECOVERY_BACKOFF_MAX` ({§provider-recovery}). |
4104
4147
  | `PLURNK_SERVICE_MAX_STRIKES` | Consecutive turn-contract strike threshold ({§engine-rails}). |
4105
4148
  | `PLURNK_SERVICE_EMISSION_ATTEMPTS` | Completed provider responses allowed beneath one engine turn before frame admission is exhausted. Bounded interior operation errors are admitted without spending this budget. Exhaustion contributes one frame-contract strike under {§invalid-emission-attempts}. |
4106
- | `PLURNK_SERVICE_BUDGET_PRESSURE` | Budget percentage above which the gauge names its largest rows ({§context-gauge}) and a packet within its budget carries the `budget_pressure` notice ({§context-pressure-notice}); measured before adding either. |
4149
+ | `PLURNK_SERVICE_BUDGET_PRESSURE` | Budget percentage above which the gauge names its largest rows ({§context-gauge}); measured before adding the inventory. |
4107
4150
  | `PLURNK_SERVICE_BUDGET_LARGEST_ITEMS` | How many of the heaviest retained log rows the pressured gauge names ({§context-gauge}). |
4108
4151
  | `PLURNK_SERVICE_LINE_ANCHOR_CONTEXT_LINES` | Minimum neighboring lines hashed on each side; repeated handles expand their context ({§line-anchor-disambiguation}). |
4109
4152
  | `PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES` | Surrounding and landed lines shown at each EDIT result boundary ({§edit-result-receipt-projection}). |
@@ -4503,6 +4546,20 @@ It neither removes the old definition first nor merges omitted fields.
4503
4546
  | Authorization required | Publish the existing authorization-required handoff; this is not a failed preparation. |
4504
4547
  | Identical definition | Retain enabledness and normal attachment reuse; this is not an explicit enable/restart. |
4505
4548
 
4549
+ §functionality-addressing **A family may name definitions by their content.** An adapter that
4550
+ declares `addressing` supplies the input of `add` and the input of `enable`, `disable` and `remove`,
4551
+ and reads from a select input the alias it names; its alias grammar ({§functionality-adapter}) is
4552
+ the identity's own, and the generated teaching's `add` example is that input. Every other rule of
4553
+ the coordinator — ownership, enabledness, `alias-exists`, `alias-unknown`, publication, documents —
4554
+ reads the alias as that identity. The members family names its definitions by their glob
4555
+ ({§members-functionality}).
4556
+
4557
+ | Verb | Addressing family |
4558
+ |---|---|
4559
+ | `add` | Admits every definition the body names, or none: one refusal refuses the whole body. Reapplying a definition the scope holds is idempotent; a different definition under the same name is `alias-exists` (409), whose recovery is remove and add. The receipt lists the admitted definitions in body order (`definitions`) and names no one `alias`. Preparation receives them all as its admissions. |
4560
+ | `replace` | Not served: when the name is the definition there is nothing to reassign, so neither projection offers it ({§functionality-discover-advertisement}). |
4561
+ | `enable`, `disable`, `remove` | Take the family's select input; the receipt names the one alias it concerned. |
4562
+
4506
4563
  §functionality-mutation-status **Mutation status describes the committed resource
4507
4564
  outcome, not the management invocation's stream lifetime.** Apply these rows in
4508
4565
  order; refusals retain their own Problems and do not commit a replacement.
@@ -4510,10 +4567,10 @@ order; refusals retain their own Problems and do not commit a replacement.
4510
4567
  | Outcome | Status |
4511
4568
  |---|---:|
4512
4569
  | The resulting definition requires authorization | 202 |
4513
- | `add` or `replace` creates a local definition, including an override of an inherited definition | 201 |
4514
- | `add` reapplies the identical local definition; `replace` assigns an existing local definition; `enable`, `disable`, or `remove` settles | 200 |
4570
+ | `add` or `replace` creates a local definition, including an override of an inherited definition; an `add` naming several ({§functionality-addressing}) creates any of them | 201 |
4571
+ | `add` reapplies the identical local definition, every one it names; `replace` assigns an existing local definition; `enable`, `disable`, or `remove` settles | 200 |
4515
4572
 
4516
- `add` of a different local definition remains `alias-exists` (409); `replace` is explicit.
4573
+ `add` of a different local definition remains `alias-exists` (409); `replace` is explicit where a family serves it.
4517
4574
  Model invocation settlement follows {§functionality-model-mutation} independently.
4518
4575
 
4519
4576
  §functionality-discover-advertisement **A family's `discover` advertises exactly the inputs it
@@ -4873,6 +4930,7 @@ Core's behavior behind them.
4873
4930
  | Runtime actor | `ensureRuntimeWorker(workspaceId)` | Returns the workspace's `_plurnk` actor, creating it if absent; it always retains runtime ownership. |
4874
4931
  | Workspace lifecycle | `forkWorker({ workspaceId, workerId, name? })` | Creates a child worker that branches the source worker's history while sharing workspace state. |
4875
4932
  | §methods-workspace-rename Workspace metadata | `renameWorkspace(workspaceId, name)` | Changes only the world's unique mutable name; workers, log, and membership remain intact. |
4933
+ | §methods-workspace-rollback Workspace files | `rollback({ workspaceId, workerId, clientWorkerId, to })` | Reverses `workerId`'s settled file mutations after its coordinate `to` as the client's own operations in `clientWorkerId` ({§rollback}); answers a `RollbackReport`. |
4876
4934
  | §methods-workspace-prompts Workspace metadata | `listPrompts(workspaceId, limit?, workerId?)` | Returns nonempty loop-seed prompts a client addressed to the workspace's model workers, newest-first; `workerId` narrows to one worker. Authorship is the seed message's address ({§message-arrival}): a worker-issued seed (WORK, FORK, SEND to a worker) has none and is never history, whichever worker it seeded; a client prompt at a forked conversation worker is. An omitted limit is `PLURNK_SERVICE_PROMPTS_PAGE`. |
4877
4935
  | Workspace metadata | `listWorkspaces()`, `workspaceDerivationStatus(...)` | Reads current workspace identity and derivation progress. |
4878
4936
  | §methods-worker-read Worker topology | `readWorker({ workspaceId, identity })` | Ownership-bounds an exact id-or-name lookup and returns one durable Worker projection or `null` under {§application-worker-observation}. Supplying both identities or neither is invalid. |
@@ -5332,8 +5390,7 @@ flowchart TD
5332
5390
  ```
5333
5391
 
5334
5392
  - §context-budget **One room.** The budget is the provider's input capacity through the loop's calibration, `floor(inputCapacity / factor)` ({§tokenomics-calibrated-readout}), and it bounds the whole packet — teaching, catalog, log and gauge together. Nothing on the service panel sizes a part of it: no projection share or preview page. When the loop's first response fixes its factor, the budget follows it either way; a room that shrinks under the model is announced by the over-budget row ({§context-over-budget-row}), never hidden by keeping a larger figure.
5335
- - §context-gauge **One gauge.** Every packet carries one `## Context` section holding one JSON object: `tokens`, the packet's weight as rendered, and `budget`, the known room. Only when the packet without an inventory strictly exceeds `PLURNK_SERVICE_BUDGET_PRESSURE` of its budget does `largest` name the `PLURNK_SERVICE_BUDGET_LARGEST_ITEMS` heaviest retained log rows as `{path, tokens}`, ranked by weight then path. Unknown budget omits both `budget` and `largest`. The final `tokens` includes the inventory; over budget, its full configured count remains available for curation ({§context-over-budget-row}). Each log row heading carries its own `tokens`. The gauge is state: it never presents `budget − tokens` as response allowance and carries no mandate.
5336
- - §context-pressure-notice **Pressure is one notice.** When the gauge names its inventory ({§context-gauge}) and the packet, with the notice in it, stays within its budget, the packet's notices section carries one `engine:context` notice `budget_pressure`, `level: warn`, whose directive is "YOU MUST NOT exceed budget." and whose message is "Context is at *N*% of budget." *N* is `floor(100 × tokens / budget)` over the gauge's final figures, so the share never disagrees with the gauge, and the notice carries no count of its own. It is decided and rendered with the packet it describes, recurs on every such packet, and is never buffered or sent to clients, which read their own pair ({§tokenomics-client-gauge}). An over-budget packet carries the row instead ({§context-over-budget-row}).
5393
+ - §context-gauge **One gauge.** Every packet carries one `## Context` section holding one JSON object: `tokens`, the packet's weight as rendered, `budget`, the known room, and `percent`, `floor(100 × tokens / budget)` over the gauge's own final figures, so the share never disagrees with the counts beside it; a zero budget states no share. Only when the packet without an inventory strictly exceeds `PLURNK_SERVICE_BUDGET_PRESSURE` of its budget does `largest` name the `PLURNK_SERVICE_BUDGET_LARGEST_ITEMS` heaviest retained log rows as `{path, tokens}`, ranked by weight then path. Unknown budget omits `budget`, `percent` and `largest`. The final `tokens` includes the inventory; over budget, its full configured count remains available for curation ({§context-over-budget-row}). Each log row heading carries its own `tokens`. The gauge is state: it never presents `budget − tokens` as response allowance and carries no mandate.
5337
5394
  - §context-fit **One rule: whole if it fits, otherwise as much as fits, then its size and address.** A result the model asked for — a READ without a scope, a FIND, an exec result delivered on close — arrives complete when its weight fits within `budget − tokens` as of that turn, less the room the turn still owes — one receipt's measured weight for each result still to land in it and the emission record that answers it, so that the receipts of a batch and the answer always fit. Otherwise the complete result stays where it was read from and the row is a `413` receipt naming the result's size, its weight, the remaining budget, and the two verbs: `READ` a range, or `KILL` first. A READ of lines carries, above its receipt, the longest prefix of those lines whose row fits that room — the lines with their anchors, the returned range closed on the last line delivered, and the receipt naming the lines delivered; a result whose first line does not fit, a FIND, a stream page and a byte view are bodiless receipts. An arrival the model did not ask for — an inbound `SEND`, a child's conclusion — takes the same bodiless receipt as a fact, not an error: its size and its address. Explicit scopes (`<a,b>`, a pattern, `<1,-1>`) are exact and take the same test. Result cuts are named where they happen: the first page of what came back unasked in size ({§markerless-first-page}) and the cut at the room in the receipt. The optional emission history is whole or absent ({§emission-history}), never a cut.
5338
5395
  - §context-verbs **The verbs are the curation.** `READ` with a range takes a piece of what did not fit ({§read-selection-projection}); `NOTE` keeps what the model learned; `KILL` retires rows, ranges and bodies ({§log-kill-scope}) and may carry what it keeps of them as its own NOTE ({§log-kill-distillation}). The daemon adds no other mechanism.
5339
5396
  - §context-over-budget-row **Over budget is a row and a request, not an ending.** A packet whose weight exceeds `budget` is still submitted when it fits the window ({§context-wall}), and it carries one `_plurnk` error row at the head of its turn, `engine/context/packet-exceeds-budget` 413: "Context exceeds budget. YOU MUST ONLY KILL, MOVE or NOTE this turn." The row is the mandate and carries no figure: the gauge is the one home for `tokens` and `budget` ({§context-gauge}), and it shows the packet over with the row in it. The row is shown once, in the packet it describes, then retired from the projection as a no-match KILL receipt is ({§log-kill-meta-operation}): it stays durable and readable at its coordinate, and a later packet that is over carries its own row. Nothing is hidden to make the packet smaller; the response grant is the window's remainder above the provider's output floor ({§provider-output-floor}). The limit protects a loop; it never ends one.
@@ -5691,7 +5748,6 @@ retain distinct contracts and lifetimes.
5691
5748
  | `search_progress` | repository materialization/indexing lifecycle ({§persistent-search-index}); structured phase, count, and percent; `level: info`, `warn` when a completed pass carries failed members ({§derivation-member-failure}), `error` on terminal failure | none | none |
5692
5749
  | `git_inspection_refused` | engine membership — automatic Git inspection refused a supplied repository whose config declares a `filter.*` program ({§membership-git-hermetic}); names the key; `level: warn`, once per workspace until the key changes or clears | none | none |
5693
5750
  | `continued_without_note` | engine turn — a continuing or parked model turn that admitted no NOTE ({§continued-without-note}); `level: warn` | YOU MUST record at least one NOTE along with other operations. | none |
5694
- | `budget_pressure` | engine context — a packet within its budget whose gauge is under pressure ({§context-pressure-notice}); `level: warn`; rendered with that packet, never buffered | YOU MUST NOT exceed budget. | none |
5695
5751
  | `outside_text` | engine turn — text the emission carried outside its operations, discarded ({§outside-text}); `level: warn` | YOU MUST NOT emit anything except whitespace between fenced operations. | none |
5696
5752
  | `invalid_emission` | engine grammar — a response rejected before dispatch; `level: error` | YOU MUST ONLY emit fenced operations; with the parameters, pattern, and terse aside on the fenced Operation line. | content-offset of the parser diagnostic, when it has one |
5697
5753
  | `output_truncated` | engine capacity or turn — an emission cut at the output allowance ({§output-allowance-notice}); `level: error` when the cut response was rejected, otherwise `warn` | YOU SHOULD emit fewer or shorter operations per turn. | none |
@@ -5831,15 +5887,18 @@ remain one compact orientation line, not an expansion of every tool's signature.
5831
5887
 
5832
5888
  §members-functionality **File membership is one workspace Functionality family.**
5833
5889
  Core registers the `members` family with the coordinator ({§functionality-coordinator}):
5834
- the model, the client, and the operator learn one surface — `list | discover | add | replace |
5890
+ the model, the client, and the operator learn one surface — `list | discover | add |
5835
5891
  enable | disable | remove`, `workspace.members.<verb>` for the client,
5836
5892
  ```` ```members (<verb>) ```` for the model — for what the model may see, exactly as they do for skills and
5837
- MCP servers. A definition is one shell-path glob ({§path-glob-matching}), `{ glob }`, relative to the project
5838
- root; a leading `!` excludes matching members, and an exclusion wins over every inclusion.
5839
- Admission provenance (`service-configuration`, `client-action`, `model-proposal`)
5840
- rides the definition to enforce {§members-model-scope}; configuration-source
5841
- provenance belongs to the shared inspection projection ({§configuration-provenance}).
5842
- The alias is a short name, suggested from the glob. `list` shows each
5893
+ MCP servers. A definition is one shell-path glob ({§path-glob-matching}) relative to the project
5894
+ root; a leading `!` excludes matching members, and an exclusion wins over every inclusion. The glob
5895
+ is the definition's identity ({§functionality-addressing}): `add` takes `{"files": ["<glob>", …]}`
5896
+ and admits each glob, trimmed, as one definition, a glob named twice being one; `enable`, `disable`
5897
+ and `remove` take `{"file": "<glob>"}`, the glob as `list` shows it. A bare `!` is 400
5898
+ `definition-invalid`. Admission provenance (`service-configuration`, `client-action`,
5899
+ `model-proposal`) rides the persisted definition, `{ glob, provenance }`, to enforce
5900
+ {§members-model-scope}; configuration-source provenance belongs to the shared inspection projection
5901
+ ({§configuration-provenance}). `list` shows each
5843
5902
  definition with what it resolved to — `include` or `exclude`, the pattern, the members it
5844
5903
  admits or removes (count and a bounded sample), and for a model's inclusion the matches the
5845
5904
  repository's ignore rules refused — so the model sees what its glob did and adapts.
@@ -5850,7 +5909,9 @@ or exclude. A query that names neither, blank or a bare `!`, is 400 `query-inval
5850
5909
  never content; nothing is added.
5851
5910
 
5852
5911
  §members-configuration *Available definitions.* `PLURNK_MEMBERS_<alias>=<glob>`
5853
- declares one service-origin rule (`!glob` excludes). The shared naming and
5912
+ declares one service-origin rule (`!glob` excludes), named by its glob like every definition; the
5913
+ key is its configuration provenance, which `list` shows, and two keys declaring one glob fail by
5914
+ name. The shared naming and
5854
5915
  enabledness dialect is {§resource-environment}; `PLURNK_MEMBERS_ENABLED` supplies
5855
5916
  the panel default and `PLURNK_MEMBERS_<alias>_ENABLED` overrides one rule.
5856
5917
  An empty glob or a bare `!` fails validation. Controls may precede their rule;
@@ -5877,7 +5938,8 @@ the repository ignores ({§membership-model-universe}). The engine's creation re
5877
5938
  overwrites or retires them. Projection happens at the family's publication commit and
5878
5939
  re-resolves membership; workspace cooling changes nothing, because desired state is
5879
5940
  durable. Each enabled definition is one generated document at
5880
- `worker:///_plurnk/members/<alias>.md` ({§functionality-documents}) — its glob, origin,
5941
+ `worker:///_plurnk/members/<glob>.md` ({§functionality-documents}), the glob percent-encoded as
5942
+ one path segment (RFC 3986 unreserved characters and parentheses stay literal) — its glob, origin,
5881
5943
  provenance, and what it resolved to — surveyed at turn 0 like every family's enabled
5882
5944
  definitions ({§actor-boundary-catalog-preview}), so the model sees why a file is or is
5883
5945
  not a member before it asks. There is no other membership path: the client's `/members`
@@ -6309,6 +6371,24 @@ lane's run directory and the lane's reclaim takes all of it; an unnamed run is C
6309
6371
  that passes is reclaimed when it exits; a failed suite's evidence is never touched and stays exactly where the run reported it. A cross-package test may reuse Core's migration fixture only by passing a path inside the
6310
6372
  caller's own run directory.
6311
6373
 
6374
+ §tier-census **A real-model tier run is one directory with its census.** The live and demo drivers
6375
+ stamp `PLURNK_TIER_RUN` as `<kind>-<UTC stamp>`; every worker the run claims lands inside
6376
+ `PLURNK_BENCHMARKS/tier-<kind>-<stamp>/`, each in its own `<label>-XXXXXX/` with its database, its own
6377
+ host, its digest and a `census.json` naming the specimen that drove it, its loops, turns, requests,
6378
+ tokens and cost. The run's `census.md` and `census.json`, written by the tier's node:test reporter
6379
+ when the run ends, carry one row per specimen: verdict, skip reason or first failure line, the
6380
+ workers it claimed, turns, requests and cost; a run never deletes or moves any of it. A specimen
6381
+ declares what it requires of the route and the host (`input:<image|pdf|audio|video>`, `reasoning`,
6382
+ `output-budget`, `env:<NAME>`, `url:<http(s) URL>`, `bin:<name>` on PATH, `checkout:<client|a2a-tck>`
6383
+ at `PLURNK_CLIENT_CHECKOUT` or `PLURNK_A2A_TCK_CHECKOUT`, else beside the repository); an unmet
6384
+ requirement is a skip, before anything boots or is spent, whose reason names the requirement and what
6385
+ was observed, and the census answers each unmet route-bound requirement with the declared aliases
6386
+ whose catalog entry satisfies it. A route the harness cannot resolve is a failure, never a skip. No
6387
+ test surface is an opt-in flag or a script of its own: the third-party MCP composition, the
6388
+ llama-server rails, the upstream A2A TCK and the client's real-model TUI tier are live specimens that
6389
+ run wherever their requirements hold. `tier:history` ledgers every census under the home: per
6390
+ specimen, its verdicts over runs and its last reason.
6391
+
6312
6392
  §fs-world-state **The world-state harness — coverage that closes the class.** Op-outcome tests check what an op returned; the harness checks the resulting world. `WorldState.check(db)` asserts, pure-db and read-only: identity uniqueness in practice (no tuple holds two rows), the canonical fixpoint on every file-class key, channel orphan-freedom, the closed admission set (every file row's origin is Git or constraint), and sig-coherence. Generated-pick incorporation and lifecycle require filesystem/Git evidence and are covered by the composed creation matrix rather than a false pure-database proxy. The harness runs as a lifecycle-test epilogue and at every soak turn boundary, where the delta half applies: an idle turn grows the entries table by ZERO. A violation names its law and its row.
6313
6393
 
6314
6394
  ## Problem codes and pinned wording
@@ -6341,11 +6421,14 @@ Every Problem code core mints is named here under its family ({§problem-error-c
6341
6421
  | `kill-target-scheme-required` | 400 | KILL target requires a scheme. |
6342
6422
  | `worker-not-found` | 404 | Worker '*name*' does not exist in this workspace. |
6343
6423
  | `entry-operation-unsupported` | 400 | KILL requires an entry-bearing target; '*scheme*' does not provide one. |
6424
+ | `coordinate-invalid` | 400 | '*to*' is not a log coordinate ({§rollback}). Recovery: Name the coordinate as `<loop>/<turn>/<item>`, as the log shows it. |
6425
+ | `coordinate-not-found` | 404 | No log entry exists at log:///*coordinate* ({§rollback}). |
6426
+ | `project-root-required` | 400 | Rollback restores files, and this workspace has no project root ({§rollback}). |
6344
6427
  | `resource-scheme-required` | 400 | Resource selection requires an address. |
6345
6428
  | `channel-required` | 400 | The '*scheme*' scheme has no default channel. Recovery: Address a named channel with a URI fragment. |
6346
6429
  | `binary-source-unsupported` | 415 | Channel #*name* is binary and its scheme keeps no bytes to transfer. |
6347
- | `metadata-unsupported` | 400 | *OP* takes only the env option; '*key*' is not one. |
6348
- | `worker-name-conflict` | 409 | Worker '*name*' already exists in this workspace. |
6430
+ | `metadata-unsupported` | 400 | *OP* takes only the env option; '*key*' is not one. A WORK to a held name with env: WORK to the existing worker '*name*' carries env; a message takes none. |
6431
+ | `worker-name-conflict` | 409 | Worker '*name*' already exists in this workspace. Recovery: WORK or SEND (worker://*name*) delivers a message to the live worker; FORK with a name no worker holds. ({§worker-scheme-spawn}) |
6349
6432
  | `no-operation` | 422 | The turn performed no operation ({§empty-turn}). |
6350
6433
  | `send-target-not-a-recipient` | 400 | The addressed scheme is not a SEND recipient. Recovery: Name a message address or a recipient that implements SEND. |
6351
6434
  | `invalid-operation-syntax` | 400 | The parser's diagnostic for an invalid operation in an admitted turn. |
@@ -6408,7 +6491,7 @@ lists the schemes the workspace registers, and rebuilds the address into nothing
6408
6491
  | `file-create-excluded` | 403 | A members exclusion (`!_glob_`) covers '*path*'. Recovery: Remove or disable the excluding members definition, or choose another path. |
6409
6492
  | `file-create-gitignored` | 403 | Active Git policy ignores '*path*', and no members definition includes it. Recovery: Choose a Git-admitted path or add a members definition that includes it. |
6410
6493
  | `file-materialization-limit` | 413 | The file exceeds the materialization byte limit and is not read into the workspace. |
6411
- | `entry-not-found` | 404 | No member of this workspace is at '*path*'. Recovery: FIND lists paths. EDIT creates files; `members (add)` admits existing files with a `{"glob": "<path>"}` body. A path beyond the root recovers instead to: '*path*' is outside the project root: only a members definition under the operator's namespace scope admits it. |
6494
+ | `entry-not-found` | 404 | No member of this workspace is at '*path*'. Recovery: FIND lists paths. EDIT creates files; `members (add)` admits existing files with a `{"alias": "<name>", "definition": {"glob": "<path>"}}` body. A path beyond the root recovers instead to: '*path*' is outside the project root: only a members definition under the operator's namespace scope admits it. |
6412
6495
  | `body-channel-required` | 400 | A file write requires a body channel. |
6413
6496
  | `write-failed` | 500 | Publication or its settlement failed; the result distinguishes an unpublished write from an already-published one. |
6414
6497
  | `creation-rollback-failed` | 500 | Incorporating a newly created file failed, and rollback was incomplete. |
@@ -6421,7 +6504,7 @@ lists the schemes the workspace registers, and rebuilds the address into nothing
6421
6504
  | code | status | contract |
6422
6505
  |---|---:|---|
6423
6506
  | `invalid-input-target` | 400 | SEND input addresses an execution, without a channel or scope. |
6424
- | `input-unavailable` | 409 | This execution's input receiver is no longer enabled. |
6507
+ | `input-unavailable` | 409 | This execution was launched without input. Recovery: Launch it with `[{"stdin": "open"}]` when its runtime takes input, then SEND to that execution. — This execution is queued for an execution slot; its input opens when it starts. Recovery: SEND again once the execution has started. — This execution's input receiver is no longer enabled. |
6425
6508
  | `stream-not-found` | 404 | No execution exists at the requested address. Recovery, when the id holds an execution under another runtime ({§exec-near-miss}): The execution at /*id* is `*runtime*:///*id*`. |
6426
6509
  | `input-closed` | 410 | Execution input is closed. |
6427
6510
  | `executor-not-registered` | 400 | No executor or MCP service named '*runtime*' is registered for this worker. |
@@ -6518,7 +6601,6 @@ lists the schemes the workspace registers, and rebuilds the address into nothing
6518
6601
  | Nothing is in flight. Continuing. | a WAIT (or a premature terminal) with no live work ({§wait-obligation-matrix}) |
6519
6602
  | All Open Messages resolved. Review new results; emit no OPs if finished. | resolved messages with unobserved results ({§loop-completion}) |
6520
6603
  | Context exceeds budget. YOU MUST ONLY KILL, MOVE or NOTE this turn. | the over-budget row ({§context-over-budget-row}) |
6521
- | YOU MUST NOT exceed budget. Context is at *N*% of budget. | a packet within its budget under pressure ({§context-pressure-notice}) |
6522
6604
  | YOU MUST record at least one NOTE along with other operations. The turn continued without a NOTE. | a continuing or parked model turn without a NOTE ({§continued-without-note}) |
6523
6605
  | Each directive in the notice table | a notice of the model's own output ({§notice-directive}) |
6524
6606
  | Context window overflow: the packet cannot fit the model's window even as receipts. | the wall ({§context-wall}) |
@@ -6531,5 +6613,5 @@ lists the schemes the workspace registers, and rebuilds the address into nothing
6531
6613
  | '*path*' is a directory, not a file; READ reads one file. Recovery: `FIND (_path_/)` lists its files. | READ of a directory |
6532
6614
  | The execution at ops://*worker*/*loop* has not concluded. | a bare READ of a running worker's result (425) |
6533
6615
  | The child provider failed. | a child's provider failure read back by its parent |
6534
- | '*path*' exists on disk but is not a member of this workspace. Recovery: Admit it with `members (add)` and a `{"glob": "<path>"}` body. | a non-member on disk at the addressed path |
6616
+ | '*path*' exists on disk but is not a member of this workspace. Recovery: Admit it with `members (add)` and a `{"alias": "<name>", "definition": {"glob": "<path>"}}` body. | a non-member on disk at the addressed path |
6535
6617
  | '*path*' exists on disk but is not a member of this workspace. Recovery: The repository ignores it: a client or operator members definition can include it, a model definition cannot. | a non-member the repository ignores ({§membership-read-refusal}) |
@@ -1 +1 @@
1
- {"package":"@plurnk/plurnk-service","version":"3.2.0","revision":"f96502a26d62a6f87b22950a9e2006348ac8a6bc","dirty":false}
1
+ {"package":"@plurnk/plurnk-service","version":"3.3.0","revision":"1dcf640b6bad0f5972443dd59354a5fc094acf46","dirty":false}
@@ -1,12 +1,10 @@
1
- import type { Notice } from "@plurnk/plurnk-contracts";
2
- type MeasurePacket = (gauge: string, notice: Notice | null) => number;
1
+ type MeasurePacket = (gauge: string) => number;
3
2
  export interface LargestLogItem {
4
3
  readonly path: string;
5
4
  readonly tokens: number;
6
5
  }
7
6
  export interface Readout {
8
7
  readonly gauge: string;
9
- readonly notice: Notice | null;
10
8
  }
11
9
  export default class BudgetReadout {
12
10
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"BudgetReadout.d.ts","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKvD,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAcD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI1C;IAGD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS9C;IAID,MAAM,CAAC,OAAO,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,eAAe,GAAE,SAAS,cAAc,EAAO,GAChD,OAAO,CAgBT;CAqFJ"}
1
+ {"version":3,"file":"BudgetReadout.d.ts","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"AAKA,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAKD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAM1C;IAGD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS9C;IAID,MAAM,CAAC,OAAO,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,aAAa,EAC5B,eAAe,GAAE,SAAS,cAAc,EAAO,GAChD,OAAO,CAcT;CAyFJ"}
@@ -1,23 +1,19 @@
1
1
  import { Knob } from "@plurnk/plurnk-meta";
2
2
  const TOKENS_PLACEHOLDER = "{{tokens}}";
3
+ const PERCENT_PLACEHOLDER = "{{percent}}";
3
4
  const MAX_WIDTH_PASSES = 64;
4
- // {§context-pressure-notice} — the share and the constraint it nears; the gauge keeps the counts.
5
- const pressureNotice = (share) => ({
6
- source: "engine:context",
7
- kind: "budget_pressure",
8
- level: "warn",
9
- directive: "YOU MUST NOT exceed budget.",
10
- message: `Context is at ${share}% of budget.`,
11
- });
12
- // {§context-gauge} — one measured JSON object; the curation inventory and the pressure notice
13
- // ({§context-pressure-notice}) appear only under pressure.
14
- // Never a response allowance ({§output-allowance-notice}).
5
+ // {§context-gauge} — one measured JSON object: the packet's weight, the room, and the share of the room
6
+ // that weight is, on every packet with a budget; the curation inventory joins only above the threshold.
7
+ // Never a response allowance ({§output-allowance-notice}) and never a mandate.
15
8
  export default class BudgetReadout {
16
9
  static draft(budget) {
17
10
  if (budget === null)
18
11
  return `{"tokens":${TOKENS_PLACEHOLDER}}`;
19
12
  BudgetReadout.#assertBudget(budget);
20
- return `{"tokens":${TOKENS_PLACEHOLDER},"budget":${budget}}`;
13
+ // A zero room has no share to state: every weight exceeds it ({§context-over-budget-row}).
14
+ if (budget === 0)
15
+ return `{"tokens":${TOKENS_PLACEHOLDER},"budget":0}`;
16
+ return `{"tokens":${TOKENS_PLACEHOLDER},"budget":${budget},"percent":${PERCENT_PLACEHOLDER}}`;
21
17
  }
22
18
  // The budget a stored gauge showed the model; null when it shows none.
23
19
  static budgetOf(content) {
@@ -31,8 +27,8 @@ export default class BudgetReadout {
31
27
  const budget = typeof gauge === "object" && gauge !== null ? gauge.budget : undefined;
32
28
  return typeof budget === "number" ? budget : null;
33
29
  }
34
- // {§tokenomics-render-weight-budget} — the width only expands, so the final
35
- // numeric substitution cannot change the measured packet length or oscillate.
30
+ // {§tokenomics-render-weight-budget} — the widths only expand, so the final numeric substitutions
31
+ // cannot change the measured packet length or oscillate.
36
32
  static resolve(template, measurePacket, largestLogItems = []) {
37
33
  BudgetReadout.#assertTemplate(template);
38
34
  const ranked = largestLogItems
@@ -41,44 +37,33 @@ export default class BudgetReadout {
41
37
  ? a.path < b.path ? -1 : a.path > b.path ? 1 : 0
42
38
  : a.tokens > b.tokens ? -1 : 1)
43
39
  .slice(0, Knob.integer("PLURNK_SERVICE_BUDGET_LARGEST_ITEMS", 0));
44
- const neutral = BudgetReadout.#resolveTemplate(template, (gauge) => measurePacket(gauge, null));
40
+ const neutral = BudgetReadout.#resolveTemplate(template, measurePacket);
45
41
  const budget = BudgetReadout.budgetOf(neutral.content);
46
42
  const pressure = Knob.percent("PLURNK_SERVICE_BUDGET_PRESSURE");
47
- // Neither the inventory nor the notice can trigger its own appearance; their weight is included only after admission.
43
+ // The inventory cannot trigger its own appearance; its weight is included only after admission.
48
44
  if (budget === null || neutral.usage <= budget * pressure)
49
- return { gauge: neutral.content, notice: null };
50
- const pressured = BudgetReadout.#withInventory(template, ranked);
51
- const noticed = neutral.usage > budget ? null : BudgetReadout.#withNotice(pressured, budget, neutral.usage, measurePacket);
52
- return noticed ?? { gauge: BudgetReadout.#resolveTemplate(pressured, (gauge) => measurePacket(gauge, null)).content, notice: null };
53
- }
54
- // {§context-pressure-notice} — the share is the gauge's own final tokens over its budget, the notice
55
- // included; a packet the notice would carry over its budget carries none.
56
- static #withNotice(template, budget, usage, measurePacket) {
57
- let share = Math.floor(usage * 100 / budget);
58
- for (let pass = 0; pass < MAX_WIDTH_PASSES; pass += 1) {
59
- const notice = pressureNotice(share);
60
- const resolved = BudgetReadout.#resolveTemplate(template, (gauge) => measurePacket(gauge, notice));
61
- if (resolved.usage > budget)
62
- return null;
63
- const measured = Math.floor(resolved.usage * 100 / budget);
64
- if (measured === share)
65
- return { gauge: resolved.content, notice };
66
- share = measured;
67
- }
68
- throw new Error(`Budget pressure share did not converge after ${MAX_WIDTH_PASSES} passes`);
45
+ return { gauge: neutral.content };
46
+ return { gauge: BudgetReadout.#resolveTemplate(BudgetReadout.#withInventory(template, ranked), measurePacket).content };
69
47
  }
70
48
  static #resolveTemplate(template, measurePacket) {
71
- let width = 1;
49
+ const budget = BudgetReadout.#templateBudget(template);
50
+ let tokensWidth = 1;
51
+ let percentWidth = 1;
72
52
  for (let pass = 0; pass < MAX_WIDTH_PASSES; pass += 1) {
73
- const probe = BudgetReadout.#render(template, width, "0".repeat(width));
53
+ const probe = BudgetReadout.#render(template, "0".repeat(tokensWidth), "0".repeat(percentWidth));
74
54
  const usage = BudgetReadout.#assertWeight(measurePacket(probe));
75
- const value = String(usage);
76
- const expanded = Math.max(width, value.length);
77
- if (expanded !== width) {
78
- width = expanded;
55
+ const tokens = String(usage);
56
+ // {§context-gauge} — the share is the gauge's own final tokens over its budget, so it never
57
+ // disagrees with the figures beside it.
58
+ const percent = budget === null ? "" : String(Math.floor(usage * 100 / budget));
59
+ const expandedTokens = Math.max(tokensWidth, tokens.length);
60
+ const expandedPercent = Math.max(percentWidth, percent.length);
61
+ if (expandedTokens !== tokensWidth || expandedPercent !== percentWidth) {
62
+ tokensWidth = expandedTokens;
63
+ percentWidth = expandedPercent;
79
64
  continue;
80
65
  }
81
- const content = BudgetReadout.#render(template, width, value);
66
+ const content = BudgetReadout.#render(template, tokens.padStart(tokensWidth), percent.padStart(percentWidth));
82
67
  const finalWeight = BudgetReadout.#assertWeight(measurePacket(content));
83
68
  if (finalWeight !== usage) {
84
69
  throw new Error(`Budget readout measurement changed after fixed-width substitution: ${usage} -> ${finalWeight}`);
@@ -87,10 +72,18 @@ export default class BudgetReadout {
87
72
  }
88
73
  throw new Error(`Budget readout field width did not converge after ${MAX_WIDTH_PASSES} passes`);
89
74
  }
90
- static #render(template, width, value) {
91
- return template.replace(TOKENS_PLACEHOLDER, value.padStart(width));
75
+ static #render(template, tokens, percent) {
76
+ return template.replace(TOKENS_PLACEHOLDER, tokens).replace(PERCENT_PLACEHOLDER, percent);
92
77
  }
93
- // The inventory rides inside the same JSON object as its `largest` field, so the
78
+ // The budget the template states, read before any substitution; null when it states none.
79
+ static #templateBudget(template) {
80
+ const match = /"budget":(\d+)/u.exec(template);
81
+ if (match === null)
82
+ return null;
83
+ const budget = Number(match[1]);
84
+ return budget > 0 ? budget : null;
85
+ }
86
+ // The inventory rides inside the same JSON object as its `largest` field, after the share, so the
94
87
  // section is one JSON payload.
95
88
  static #withInventory(template, items) {
96
89
  const largest = items
@@ -122,6 +115,10 @@ export default class BudgetReadout {
122
115
  if (template.split(TOKENS_PLACEHOLDER).length !== 2) {
123
116
  throw new TypeError(`Budget readout template must contain ${TOKENS_PLACEHOLDER} exactly once`);
124
117
  }
118
+ const percents = template.split(PERCENT_PLACEHOLDER).length - 1;
119
+ if (percents > 1 || (percents === 1 && BudgetReadout.#templateBudget(template) === null)) {
120
+ throw new TypeError(`Budget readout template may contain ${PERCENT_PLACEHOLDER} once, after a positive budget`);
121
+ }
125
122
  }
126
123
  }
127
124
  //# sourceMappingURL=BudgetReadout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BudgetReadout.js","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BudgetReadout.js","sourceRoot":"","sources":["../../src/core/BudgetReadout.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CoreSchemeServices.d.ts","sourceRoot":"","sources":["../../src/core/CoreSchemeServices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoreSchemeServices.d.ts","sourceRoot":"","sources":["../../src/core/CoreSchemeServices.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export class CoreSchemeAdapterBase {
21
21
  turnId: ctx.turnId,
22
22
  writer: ctx.writer,
23
23
  signal: ctx.signal,
24
+ ...(ctx.logEntryId === undefined ? {} : { logEntryId: ctx.logEntryId }),
24
25
  resources: "resources" in ctx ? ctx.resources : undefined,
25
26
  streamEventNotify: services.streamEventNotify,
26
27
  wakeWorkerNotify: services.wakeWorkerNotify,