fix(inplace,embed): input set back mid-flight, report inputs, ambiguous anchors

Four items owed after S5b, reported by design-dev during the anti-slop run:

- carry() measured a sent-then-changed form against its OLD DEFAULTS. An
  answer set back mid-flight to the value the page first showed read as
  untouched, and the swap put the just-saved value over it. A form sent and
  then changed is now measured against its sent snapshot (sentSet.snapOf).
- The embed's clean-batch reload saw only our own forms. A report's own
  inputs lost whatever the operator had typed into them. Unsaved text in
  any control we don't own now holds the reload, and the page says so.
- Two r2b.toml rows ("D3 a stored theme...", "D3 forced light...") matched
  twice, so they proved only by where the first match fell. Both are
  re-anchored, and scripts/mutation_check.py now refuses any anchor that
  matches more than once. A new tool control covers that.
- The r2_flow contract's C3 steps 2 and 4 now say what S5b superseded. U3
  gains the report-input rule.

Mutation rows: u3_submit_all +1, r2_submit_all +1. Four rows were
re-anchored onto the moved lines.
This commit is contained in:
vh
2026-09-28 16:52:42 -07:00
parent a22a00b82e
commit 377e652670
13 changed files with 194 additions and 32 deletions
+8 -9
View File
@@ -26,15 +26,14 @@ _As of 2026-09-27:_
A hulda hunt on S3-S5a found 6 (release unasked, the Wipe-now guard moved to
the footer, a `__proto__` trapdoor, id collisions); all folded. The confirm
helper for wipe/release now lives in base.html's <head>.
**Still owed by booth-dev, after S5b lands (it rewrites the same code):**
(a) the embed's clean-batch reload can take text typed into the HOST page;
(b) carry() loses an edit set back to its original default mid-flight;
(c) two r2b.toml anchors match twice ("D3 a stored theme…", "D3 forced
light…") and prove only by where the first match falls; (d) the r2_flow
contract's C3 steps 2-4 are stale against S5b (status line never hidden,
one-form failure no longer reloads over a draft) — amend to point at
as_antislop S5b. **S5b MERGED AND PUSHED** (`0233ca6`, operator "merge and
push", 2026-09-28; booth-dev gate 1068 / 428/428 + seam pass clean): focus
**The four items booth-dev owed after S5b are DONE (2026-09-28):** the
embed's clean-batch reload now holds for unsaved text in the report's own
inputs; carry() measures a sent-then-changed form against what it SENT (an
answer set back mid-flight survives); the two double-matching r2b anchors
are re-anchored AND `scripts/mutation_check.py` now refuses any anchor that
matches more than once; the r2_flow C3 prose points at as_antislop S5b.
**S5b MERGED AND PUSHED** (`0233ca6`, operator "merge and push",
2026-09-28; booth-dev gate 1068 / 428/428 + seam pass clean): focus
survives a swap, a floating status line, and leaving with an unsent answer
ASKS FIRST (beforeunload, both surfaces). S5c (keys, doc bar, and the
refused-batch words that a later "Saved." can bury) is design-dev's next.