From 33da69ee72abaef87655442a64c6111b9364f0f7 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 5 Aug 2026 13:46:16 +0000 Subject: [PATCH] docs: watch item W-PUSHES-1 -- pushes_result vs discardable-result statements Recorded from the external review of #241: a future action vocabulary may carry calls that push a result AND are complete statements with that result discarded (connector invocations). pushes_result cannot express that; today's refusal path protects correctness, so nothing changes now. The candidate shapes (ResultBehavior enum / statement_terminal column) and the silent-default trap to avoid are recorded so the pressure point is met deliberately when the Power-Automate vocabulary arrives. --- docs/BLOCK-EDITOR-PLAN.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/BLOCK-EDITOR-PLAN.md b/docs/BLOCK-EDITOR-PLAN.md index 57e60bc..194d511 100644 --- a/docs/BLOCK-EDITOR-PLAN.md +++ b/docs/BLOCK-EDITOR-PLAN.md @@ -659,3 +659,24 @@ carved into ≤180/120/90 `(function:value)` calls; 256 is the codebook cardinality, not the array length. A possible rename of `ogar-loco` to reflect the projection-engine role is deferred to the pre-flip window (the cheapest moment; blockly-rs does not yet dep the crate directly). + +### Watch item W-PUSHES-1 — `pushes_result` may need a richer closure role (post-#241 review) + +The external review of #241 endorsed the statement-boundary rule +(stack-returns-to-zero after a non-pushing call) and flagged the pressure +point to watch, not fix: a future domain vocabulary may carry a call that +**pushes a result AND is legally a complete statement with that result +discarded** — e.g. a connector invocation that sends an email and returns a +message id. `pushes_result: Option` cannot express "produces a +discardable value", so such a verb would refuse segmentation (safe) or force +an artificial consumer (awkward), but never mis-group (the refusal path +protects correctness). + +**Ruling: do NOT change now.** No demonstrated consumer requires it; the +refusal path is the protection. When the pressure arrives — most likely the +Power-Automate/action vocabulary — the candidate shapes are a +`ResultBehavior { NoResult, ProducesValue, ProducesDiscardableValue }` +column or a separate `statement_terminal: bool`. Whichever is chosen must +land as a new `FnSpec` column with the same `None`-refuses discipline, and +the trap to avoid is letting "discardable" become a silent default that +swallows genuinely dangling operands.