diff --git a/providers/studio-cutdown/provider.json b/providers/studio-cutdown/provider.json index 798cd58..6279000 100644 --- a/providers/studio-cutdown/provider.json +++ b/providers/studio-cutdown/provider.json @@ -20,7 +20,7 @@ "--bundle", "{{root:project}}" ], - "_note": "The renderer the write verbs enqueue for. Without it, stabilize and cut-retry ACCEPT work that nothing ever performs: the verb returns ok, a real marker lands on disk, and no cut is ever rendered. That is Ruling 16's third rung — it defeats both the verbs-answer check AND the data-changed-on-disk check, because the write genuinely happens and only the EFFECT is absent. Declared so the box starts it WITH the provider instead of someone remembering to." + "_note": "The renderer the write verbs enqueue for. Without it, stabilize and cut-retry ACCEPT work that nothing ever performs: the verb returns ok, a real marker lands on disk, and no cut is ever rendered. That is the failure mode worth naming, because it defeats both of the obvious checks — the verbs answer AND the data really changes on disk — while the product stays inert. Declared so the box starts it WITH the provider instead of someone remembering to." } ] }, diff --git a/providers/studio-video/provider.json b/providers/studio-video/provider.json index 1c11513..7638370 100644 --- a/providers/studio-video/provider.json +++ b/providers/studio-video/provider.json @@ -58,7 +58,7 @@ "/api/validate-audio", "/api/validate-export" ], - "_verbs_note": "THIS LIST IS DELIBERATELY 36 OF THE 43 VERBS THIS FILE ANSWERS, AND THE GAP IS NOT AN OVERSIGHT. Withheld: /api/note, /api/note/done, /api/note/flush, /api/note/reconciled, /api/receivers, /api/reveal-file, /api/shell-mtime. The first four reach `execFile(\"rig\", [\"queue\",\"create\", ...])` — live at export-server.mjs:459, :497 and :534 — so declaring them lets a Studio surface inject work into the rig's coordination system. /api/reveal-file runs `open -R`, which is macOS Finder and meaningless on the Linux boxes we ship to. THE CHOICE IS BEHAVIOUR-PRESERVING, WHICH IS THE POINT: on a multi-provider box (host + video + cutdown, i.e. every deployed studio) these seven ALREADY do not route today, because no app declares them and studio.mjs's sole-provider fallback needs exactly one provider. Declaring them here would ENABLE something currently unreachable — a policy change smuggled inside a format migration. A migration changes where a fact is written, never what the product does. THE SCOPE QUESTION IS GENUINELY OPEN and is NOT settled by this file: OQ-5 excluded the note verbs, but it was ruled under the threat model that Ruling 15 later RETRACTED, and that retraction says rig-injection is a FEATURE on a trusted box. So the exclusion rests on a withdrawn premise and the inclusion has never been ruled on its own merits. Routed rather than decided here.", + "_verbs_note": "THIS LIST IS DELIBERATELY 36 OF THE 43 VERBS THIS FILE ANSWERS, AND THE GAP IS NOT AN OVERSIGHT. Withheld: /api/note, /api/note/done, /api/note/flush, /api/note/reconciled, /api/receivers, /api/reveal-file, /api/shell-mtime. The first four reach `execFile(\"rig\", [\"queue\",\"create\", ...])` — live in export-server.mjs — so declaring them would let a Studio surface inject work into the agent system that runs the box. /api/reveal-file runs `open -R`, which is macOS Finder and meaningless on the Linux boxes this ships to. THE CHOICE IS BEHAVIOUR-PRESERVING, WHICH IS THE POINT: on a box running more than one provider these seven ALREADY do not route, because no app declares them and the runtime's single-provider fallback needs exactly one provider. Declaring them here would ENABLE something currently unreachable — a policy change smuggled inside a format migration. A migration changes where a fact is written, never what the product does. Whether these verbs SHOULD be exposed is a live product question and this file is not where it gets decided.", "supplies": [ "ffmpeg", "ffprobe" diff --git a/test/studio-cutdown-provider-contract.test.mjs b/test/studio-cutdown-provider-contract.test.mjs index f7ca94e..06f51fb 100644 --- a/test/studio-cutdown-provider-contract.test.mjs +++ b/test/studio-cutdown-provider-contract.test.mjs @@ -26,8 +26,8 @@ test("the cut lane travels with the provider that ships it", () => { "a declared companion whose file is absent is refused at boot, not skipped"); // The write verbs ENQUEUE; this process PERFORMS. Without it they accept work // nothing ever does — the verb returns ok, a real marker lands on disk, and only - // the product is inert. Ruling 16's third rung, which defeats both the - // verbs-answer check and the data-changed-on-disk check. + // the product is inert — a failure that defeats both of the obvious checks, + // because the verbs answer AND the data really changes on disk. assert.ok(lane.args.includes("{{root:footage}}") && lane.args.includes("{{root:project}}"), "the lane needs both roots bound or it watches nothing and renders nowhere"); });