@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.
- package/.env.defaults +2 -2
- package/SPEC.md +122 -40
- package/dist/build-info.json +1 -1
- package/dist/core/BudgetReadout.d.ts +1 -3
- package/dist/core/BudgetReadout.d.ts.map +1 -1
- package/dist/core/BudgetReadout.js +43 -46
- package/dist/core/BudgetReadout.js.map +1 -1
- package/dist/core/CoreSchemeServices.d.ts.map +1 -1
- package/dist/core/CoreSchemeServices.js +1 -0
- package/dist/core/CoreSchemeServices.js.map +1 -1
- package/dist/core/Dispatcher.d.ts.map +1 -1
- package/dist/core/Dispatcher.js +7 -5
- package/dist/core/Dispatcher.js.map +1 -1
- package/dist/core/LoopLifecycle.sql +3 -2
- package/dist/core/PacketBuilder.d.ts.map +1 -1
- package/dist/core/PacketBuilder.js +16 -13
- package/dist/core/PacketBuilder.js.map +1 -1
- package/dist/core/PacketBuilder.sql +14 -0
- package/dist/core/ProposalLifecycle.d.ts +1 -0
- package/dist/core/ProposalLifecycle.d.ts.map +1 -1
- package/dist/core/ProposalLifecycle.js +1 -0
- package/dist/core/ProposalLifecycle.js.map +1 -1
- package/dist/core/TurnDispositionHandler.d.ts +1 -1
- package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
- package/dist/core/TurnDispositionHandler.js +5 -3
- package/dist/core/TurnDispositionHandler.js.map +1 -1
- package/dist/core/WorkerControlHandler.d.ts.map +1 -1
- package/dist/core/WorkerControlHandler.js +38 -2
- package/dist/core/WorkerControlHandler.js.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.d.ts +1 -0
- package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
- package/dist/core/caps/SchemeCtxImpl.js +2 -0
- package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
- package/dist/core/fork.sql +2 -2
- package/dist/core/mutation-types.d.ts +1 -0
- package/dist/core/mutation-types.d.ts.map +1 -1
- package/dist/core/packet-wire.d.ts +1 -1
- package/dist/core/packet-wire.d.ts.map +1 -1
- package/dist/core/packet-wire.js +6 -2
- package/dist/core/packet-wire.js.map +1 -1
- package/dist/core/plurnk-uri.d.ts +1 -1
- package/dist/core/plurnk-uri.d.ts.map +1 -1
- package/dist/core/plurnk-uri.js +1 -1
- package/dist/core/plurnk-uri.js.map +1 -1
- package/dist/core/scheme-types.d.ts +1 -0
- package/dist/core/scheme-types.d.ts.map +1 -1
- package/dist/man/plurnk-service.1 +4 -4
- package/dist/schemes/Exec.d.ts.map +1 -1
- package/dist/schemes/Exec.js +5 -1
- package/dist/schemes/Exec.js.map +1 -1
- package/dist/schemes/ExecutionInput.d.ts +2 -1
- package/dist/schemes/ExecutionInput.d.ts.map +1 -1
- package/dist/schemes/ExecutionInput.js +44 -6
- package/dist/schemes/ExecutionInput.js.map +1 -1
- package/dist/schemes/File.d.ts.map +1 -1
- package/dist/schemes/File.js +17 -5
- package/dist/schemes/File.js.map +1 -1
- package/dist/schemes/Log.d.ts.map +1 -1
- package/dist/schemes/Log.js +4 -1
- package/dist/schemes/Log.js.map +1 -1
- package/dist/schemes/Log.sql +24 -1
- package/dist/server/Daemon.d.ts +7 -1
- package/dist/server/Daemon.d.ts.map +1 -1
- package/dist/server/Daemon.js +50 -1
- package/dist/server/Daemon.js.map +1 -1
- package/dist/server/DrainSupervisor.d.ts +3 -1
- package/dist/server/DrainSupervisor.d.ts.map +1 -1
- package/dist/server/DrainSupervisor.js +17 -1
- package/dist/server/DrainSupervisor.js.map +1 -1
- package/dist/server/Functionality.d.ts.map +1 -1
- package/dist/server/Functionality.js +86 -49
- package/dist/server/Functionality.js.map +1 -1
- package/dist/server/FunctionalityManager.d.ts +1 -4
- package/dist/server/FunctionalityManager.d.ts.map +1 -1
- package/dist/server/FunctionalityManager.js +5 -5
- package/dist/server/FunctionalityManager.js.map +1 -1
- package/dist/server/MembersFunctionality.d.ts +7 -8
- package/dist/server/MembersFunctionality.d.ts.map +1 -1
- package/dist/server/MembersFunctionality.js +86 -54
- package/dist/server/MembersFunctionality.js.map +1 -1
- package/dist/server/MessageAbandonment.d.ts +7 -0
- package/dist/server/MessageAbandonment.d.ts.map +1 -0
- package/dist/server/MessageAbandonment.js +57 -0
- package/dist/server/MessageAbandonment.js.map +1 -0
- package/dist/server/Rollback.d.ts +29 -0
- package/dist/server/Rollback.d.ts.map +1 -0
- package/dist/server/Rollback.js +111 -0
- package/dist/server/Rollback.js.map +1 -0
- package/dist/server/drain.sql +9 -0
- package/docs/members.md +14 -9
- package/migrations/026_message_obligations.sql +32 -0
- package/migrations/027_members_identity.sql +20 -0
- package/migrations/028_mutation_patch.sql +20 -0
- 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
|
|
158
|
-
#
|
|
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.
|
|
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
|
|
624
|
-
workers
|
|
625
|
-
|
|
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
|
|
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
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
or
|
|
660
|
-
|
|
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
|
|
2983
|
-
streams
|
|
2984
|
-
|
|
2985
|
-
|
|
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
|
-
|
|
|
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})
|
|
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,
|
|
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 |
|
|
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})
|
|
5838
|
-
root; a leading `!` excludes matching members, and an exclusion wins over every inclusion.
|
|
5839
|
-
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
|
|
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)
|
|
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/<
|
|
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}) |
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"package":"@plurnk/plurnk-service","version":"3.
|
|
1
|
+
{"package":"@plurnk/plurnk-service","version":"3.3.0","revision":"1dcf640b6bad0f5972443dd59354a5fc094acf46","dirty":false}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
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":"
|
|
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-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
|
35
|
-
//
|
|
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,
|
|
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
|
-
//
|
|
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
|
|
50
|
-
|
|
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
|
-
|
|
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,
|
|
53
|
+
const probe = BudgetReadout.#render(template, "0".repeat(tokensWidth), "0".repeat(percentWidth));
|
|
74
54
|
const usage = BudgetReadout.#assertWeight(measurePacket(probe));
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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,
|
|
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,
|
|
91
|
-
return template.replace(TOKENS_PLACEHOLDER,
|
|
75
|
+
static #render(template, tokens, percent) {
|
|
76
|
+
return template.replace(TOKENS_PLACEHOLDER, tokens).replace(PERCENT_PLACEHOLDER, percent);
|
|
92
77
|
}
|
|
93
|
-
// 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":"
|
|
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":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EACR,wBAAwB,EACxB,2BAA2B,EAC3B,MAAM,EACN,UAAU,EACV,eAAe,EACf,aAAa,EAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrG,QAAQ,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5E,QAAQ,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,QAAQ,CAAC,mBAAmB,EAAE,CAC1B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,mBAAmB,KACvB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACrG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAClH,QAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACnG,QAAQ,CAAC,kBAAkB,EAAE,CACzB,OAAO,EAAE,wBAAwB,EACjC,GAAG,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC9E,MAAM,CAAC,EAAE,WAAW,KACnB,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAChD;AAKD,MAAM,MAAM,4BAA4B,GAClC;IACE,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACvE,GACC;IAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,0BAA0B;IACvC,yBAAyB,CACrB,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,GAAG,EAAE,qBAAqB,GAC3B,OAAO,CAAC,4BAA4B,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,0BAA0B,YAAa,OAAO,KAAG,0BAA0B,GAAG,IAI7E,CAAC;AAMf,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,SAAS,GAAG,mBAAmB,CAAC;AAEvF,8BAAsB,qBAAsB,YAAW,iBAAiB;;IAGpE,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAE3C;IAED,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,qBAAqB,GAAG,mBAAmB,
|
|
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,
|