From dfa36606593c0b963974ebd174cf165e8eba0c1e Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 16 Aug 2026 01:12:51 +0530 Subject: [PATCH] docs(folio): the narrow window is not where the detection comes from the double taps land on home, so the counting form convicts them; what turned 0 convictions into 4 on the recorded ios run is submitCouldCommit, which drops the windows at those three steps from 5/4/7 to 2/1/2. --- examples/folio/sanderling/spec.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/examples/folio/sanderling/spec.ts b/examples/folio/sanderling/spec.ts index 2511a5a..4f7d952 100644 --- a/examples/folio/sanderling/spec.ts +++ b/examples/folio/sanderling/spec.ts @@ -286,12 +286,22 @@ const submitMovesBalanceByAtMostTypedAmount = always( // both sides of the comparison accumulate over the same window. It is the // double-submit stated directly: one tap, two rows. // -// One rule, two windows. The counting form can only compare two Home readings, -// and a walk that stays inside the transaction flow gives it a window hundreds -// of steps and dozens of submits wide, which is sound and says nothing. The -// second form says the same thing in money about the one account whose screen -// the walk is on, and that window is usually a single action, so it can still -// tell one commit from two: see committedAmountExceedsOneSubmit. +// One rule, two windows, and they judge different frames rather than the same +// frame twice. The counting form compares two Home readings, which is where a +// double tap lands: submit() pops one entry per commit, so two commits walk the +// stack back past the ledger to Home. What used to defeat it there was the +// width of the window, not the window's screen, and what fixed it is +// submitCouldCommit refusing to count submits the app cannot have accepted. +// Replaying the iOS run at runs/folio-ios/20260815-102711 through this file +// measures it: the three double taps sit in windows of 2, 1 and 2 submits with +// that rule and 5, 4 and 7 without, and the run convicts 4 times with it and 0 +// times without. +// +// The second form says the same thing in money about the one account whose +// screen the walk is on, and that window is usually a single action. It judges +// the frames the counting form cannot see between two Home visits, and catches +// the double submit whose second pop never ran: see +// committedAmountExceedsOneSubmit. const submitCommitsOneTransactionPerAction = always( next( () =>