fix(command): refuse a malformed coordinate on : and let a later segment see an earlier one (improvise-31oe.3)
PR #316 review blockers. A cursor fallback (clear-cell, yank, paste, drill-into-cell) now answers only for coordinates that were omitted, so `:clear-cell Type/Clothing Month/Feb junk` is refused instead of clearing the cursor's cell. The unknown-name checks move from `execute` to a RequireKnown effect run at apply time, so `:create-view Second . switch-view Second` is accepted as `improvise cmd` accepts it. Also pins that a quoted `.` is an argument. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
This commit is contained in:
committed by
Edward Langley
parent
2e90872a40
commit
c99353777b
+19
-6
@@ -478,9 +478,22 @@ wrote it into `hidden_items`), `toggle-group`, and `switch-view` (the effect
|
||||
ignores a view it lacks, and says nothing). `set-page` with an unknown item was
|
||||
worse than a no-op: it wrote the name into `page_selections`.
|
||||
|
||||
The check is in the **commands**, not the effects, on purpose. The effects are
|
||||
also the wire's mutation path (`model_effects`, gotcha 38), and a refusing
|
||||
effect there becomes a frame rejection (`MutationRefused`). That is arguably
|
||||
right, but it changes the protocol, and a browser composes these only from
|
||||
names it was sent. So it is left for a ticket of its own rather than slipped
|
||||
in here.
|
||||
The check runs at **apply** time, as an effect of its own. `execute` runs
|
||||
against one context built before the line ran, and a `:` line builds every
|
||||
segment up front, so a check in `execute` refused
|
||||
`create-view Second . switch-view Second` and
|
||||
`add-item Type Tools . set-page Type Tools` after their first halves had landed,
|
||||
while `improvise cmd` (which rebuilds the context per segment) accepted them.
|
||||
Each of these commands therefore returns `RequireKnown(needs)` followed by the
|
||||
real effect. `RequireKnown` refuses and aborts the batch (gotcha 21), so the
|
||||
real effect never applies. It is a `ViewOnly` effect that writes nothing and is
|
||||
off the wire on purpose: the wire's own effects (`model_effects`, gotcha 38)
|
||||
stay non-refusing, since a refusing effect there becomes a frame rejection
|
||||
(`MutationRefused`). That is arguably right, but it changes the protocol, and
|
||||
a browser composes these only from names it was sent. It is left for a ticket
|
||||
of its own.
|
||||
|
||||
The interactive cursor fallbacks of `clear-cell`, `yank`, `paste` and
|
||||
`drill-into-cell` answer only for coordinates that were OMITTED
|
||||
(`only_when_omitted`). Coordinates that were given and are malformed are
|
||||
refused, never replaced by the cursor's cell.
|
||||
|
||||
Reference in New Issue
Block a user