@plurnk/plurnk-execs 0.4.42 → 0.4.43

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/SPEC.md CHANGED
@@ -218,11 +218,11 @@ Framework surface: **`Policy.isEnabled(tag, env?)`** (one layer, defaults to `pr
218
218
 
219
219
  ### §3.4 The empty-set notice (the legible no)
220
220
 
221
- When a loop leaves **zero** EXEC runtimes in the §3.2 *Active* bucket, the capability sheet must carry a positive statement — **"No EXEC operations permitted"** — not silent absence. The grammar still teaches `EXEC` as a valid op (the GBNF permits it); with no availability signal either way, the model reads the bare op mention as *unknown* and confabulates runtimes, burning its strikes on a gate that correctly refuses them (execs#24). The negative line closes that window: a legible *no* where silence invited a guess.
221
+ When a loop leaves **zero** EXEC runtimes in the §3.2 *Active* bucket, the capability sheet must carry a positive statement — **"No EXEC runtimes are active"** — not silent absence. The grammar still teaches `EXEC` as a valid op (the GBNF permits it); with no availability signal either way, the model reads the bare op mention as *unknown* and confabulates runtimes, burning its strikes on a gate that correctly refuses them (execs#24). The negative line closes that window: a legible *no* where silence invited a guess.
222
222
 
223
223
  **One contributor, both cases.** `Advertise.contribute(registry, isPermitted)` returns the permitted runtimes **and** the notice from the *same* filter — a non-empty result never carries a notice, so the N-runtime sheet and the 0-runtime line cannot drift out of sync.
224
224
 
225
- **Cause-agnostic.** `isPermitted` resolves whether a registered tag survives *this* loop's gates: execs supplies the §3.3 policy cascade as the baseline predicate, and the consumer composes stricter gates into it — the effect-typed **host bar** by which a loop mode (ask-mode) bars host-effecting ops. But *why* the set is empty — policy zeroing every tag, or the host bar catching them all — is never execs' business. Execs owns the §2.3 `effect()` classification and the count; the consumer owns the loop-mode decision and reduces it to the effect-typed bar it composes into the predicate. Nothing about the mode reaches execs. The word is **"permitted,"** not "disabled": one word must not imply one cause.
225
+ **Cause-agnostic.** `isPermitted` resolves whether a registered tag survives *this* loop's gates: execs supplies the §3.3 policy cascade as the baseline predicate, and the consumer composes stricter gates into it — the effect-typed **host bar** by which a loop mode (ask-mode) bars host-effecting ops. But *why* the set is empty — policy zeroing every tag, or the host bar catching them all — is never execs' business. Execs owns the §2.3 `effect()` classification and the count; the consumer owns the loop-mode decision and reduces it to the effect-typed bar it composes into the predicate. Nothing about the mode reaches execs. The line states a factual **state** (`… are active`), never a permission — `permitted`/`forbidden`/`disabled` reads as a behavioral prohibition a confused model over-applies, and also leaks a cause the line must stay agnostic to. The exact wording is validated by the consumer's ask-mode probe, not asserted here.
226
226
 
227
227
  Execs owns the notice content and the tally. It does **not** own the mode, the sheet's rendering, or the decision of when a loop bars host effects — only the single line spoken when its own count of surviving runtimes reaches zero.
228
228
 
@@ -1,6 +1,6 @@
1
1
  import type { ExecInfo, ExecRegistry } from "./types.ts";
2
2
  export default class Advertise {
3
- static readonly NO_EXECS_NOTICE = "No EXEC operations permitted";
3
+ static readonly NO_EXECS_NOTICE = "No EXEC runtimes are active";
4
4
  static contribute(registry: ExecRegistry, isPermitted: (tag: string) => boolean): {
5
5
  permitted: ExecInfo[];
6
6
  notice: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"advertise.d.ts","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqBzD,MAAM,CAAC,OAAO,OAAO,SAAS;IAI1B,MAAM,CAAC,QAAQ,CAAC,eAAe,kCAAkC;IAEjE,MAAM,CAAC,UAAU,CACb,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACtC;QAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAGlD;CACJ"}
1
+ {"version":3,"file":"advertise.d.ts","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,CAAC,OAAO,OAAO,SAAS;IAG1B,MAAM,CAAC,QAAQ,CAAC,eAAe,iCAAiC;IAEhE,MAAM,CAAC,UAAU,CACb,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACtC;QAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAGlD;CACJ"}
package/dist/advertise.js CHANGED
@@ -1,27 +1,8 @@
1
- // The EXEC family's capability contribution to the consumer's `# Plurnk System
2
- // Tools` sheet for ONE loop (SPEC §3.4). Its whole job is the legible no: when
3
- // a loop leaves ZERO EXEC runtimes Active (§3.2), the sheet must carry a
4
- // positive statement rather than silent absence — the grammar still teaches
5
- // `EXEC` as a valid op, so a bare op mention with no availability signal reads
6
- // as *unknown*, and the model confabulates runtimes that the gate then refuses
7
- // (execs#24). The negative line closes that window.
8
- //
9
- // One contributor, both cases. `permitted` and the `notice` fall out of the
10
- // SAME filter, so the N-runtime sheet and the 0-runtime line cannot drift: a
11
- // non-empty result never carries a notice.
12
- //
13
- // Cause-agnostic by contract. `isPermitted` resolves whether a registered tag
14
- // survives THIS loop's gates — execs supplies the §3.3 policy cascade as the
15
- // baseline, and the consumer composes stricter gates into it (the effect-typed
16
- // host bar of ask-mode, execs#24). WHY the set is empty is never execs'
17
- // business: execs owns the §2.3 `effect()` classification and this tally; the
18
- // consumer owns the loop-mode decision. Execs counts survivors and speaks the
19
- // count — nothing about the mode reaches this module.
1
+ // The EXEC family's per-loop capability contribution (SPEC §3.4, execs#24).
20
2
  export default class Advertise {
21
- // The single family-level line spoken when zero EXEC runtimes survive.
22
- // "permitted", not "disabled": true whether §3.3 policy zeroed every tag or
23
- // an effect-typed host bar caught them all — one word must not imply one cause.
24
- static NO_EXECS_NOTICE = "No EXEC operations permitted";
3
+ // A factual state, not a permission verb "permitted"/"forbidden" reads as a
4
+ // behavioral prohibition the model over-applies (SPEC §3.4).
5
+ static NO_EXECS_NOTICE = "No EXEC runtimes are active";
25
6
  static contribute(registry, isPermitted) {
26
7
  const permitted = [...registry.values()].filter(({ runtime }) => isPermitted(runtime));
27
8
  return { permitted, notice: permitted.length === 0 ? Advertise.NO_EXECS_NOTICE : null };
@@ -1 +1 @@
1
- {"version":3,"file":"advertise.js","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,+EAA+E;AAC/E,yEAAyE;AACzE,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,oDAAoD;AACpD,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,2CAA2C;AAC3C,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,wEAAwE;AACxE,8EAA8E;AAC9E,8EAA8E;AAC9E,sDAAsD;AACtD,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,uEAAuE;IACvE,4EAA4E;IAC5E,gFAAgF;IAChF,MAAM,CAAU,eAAe,GAAG,8BAA8B,CAAC;IAEjE,MAAM,CAAC,UAAU,CACb,QAAsB,EACtB,WAAqC;QAErC,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,CAAC;CACJ"}
1
+ {"version":3,"file":"advertise.js","sourceRoot":"","sources":["../src/advertise.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,8EAA8E;IAC9E,6DAA6D;IAC7D,MAAM,CAAU,eAAe,GAAG,6BAA6B,CAAC;IAEhE,MAAM,CAAC,UAAU,CACb,QAAsB,EACtB,WAAqC;QAErC,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-execs",
3
- "version": "0.4.42",
3
+ "version": "0.4.43",
4
4
  "description": "Framework + contract for the @plurnk/plurnk-execs-* runtime executor family.",
5
5
  "keywords": [
6
6
  "plurnk",