From 1e2cfc78b8d0aaa38b72b535eafa05e7cda30af1 Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 16 Aug 2026 01:40:20 +0530 Subject: [PATCH 1/2] test(ci): pin three real folio traces from run 31902501859 ios convicted on submitCommitsOneTransactionPerAction, web on both gated properties, android ran its full 200 steps healthy. Every step is kept; of each step only step, violations, witnesses and residuals survive. hierarchy is replaced by the quoted "...Screen" resource ids it held, in order. It cannot just be dropped: it is 95% of the bytes and also the only place the android route gate's grep can match, so dropping it flips that leg from healthy to 'never reached'. 8.4MB to 59KB. --- .../testdata/folio-android-healthy.jsonl | 200 ++++++++++++++++++ .../testdata/folio-ios-convicted.jsonl | 49 +++++ .../testdata/folio-web-convicted.jsonl | 184 ++++++++++++++++ 3 files changed, 433 insertions(+) create mode 100644 .github/scripts/testdata/folio-android-healthy.jsonl create mode 100644 .github/scripts/testdata/folio-ios-convicted.jsonl create mode 100644 .github/scripts/testdata/folio-web-convicted.jsonl diff --git a/.github/scripts/testdata/folio-android-healthy.jsonl b/.github/scripts/testdata/folio-android-healthy.jsonl new file mode 100644 index 0000000..5e882a9 --- /dev/null +++ b/.github/scripts/testdata/folio-android-healthy.jsonl @@ -0,0 +1,200 @@ +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":1} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":2} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":3} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":4} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":5} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":6} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":7} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":8} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":9} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":10} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":11} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":12} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":13} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":14} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":15} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":16} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":17} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":18} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":19} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":20} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":21} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":22} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":23} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":24} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":25} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":26} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":27} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":28} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":29} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":30} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":31} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":32} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":33} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":34} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":35} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":36} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":37} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":38} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":39} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":40} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":41} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":42} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":43} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":44} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":45} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":46} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":47} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":48} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":49} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":50} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":51} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":52} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":53} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":54} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":55} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":56} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":57} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":58} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":59} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":60} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":61} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":62} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":63} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":64} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":65} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":66} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":67} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":68} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":69} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":70} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":71} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":72} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":73} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":74} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":75} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":76} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":77} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":78} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":79} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":80} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":81} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":82} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":83} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":84} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":85} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":86} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":87} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":88} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":89} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":90} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":91} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":92} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":93} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":94} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":95} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":96} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":97} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":98} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":99} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":100} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":101} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":102} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":103} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":104} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":105} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":106} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":107} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":108} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":109} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":110} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":111} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":112} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":113} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":114} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":115} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":116} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":117} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":118} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":119} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":120} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":121} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":122} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":123} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":124} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":125} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":126} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":127} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":128} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":129} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":130} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":131} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":132} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":133} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":134} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":135} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":136} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":137} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":138} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":139} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":140} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":141} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":142} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":143} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":144} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":145} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":146} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":147} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":148} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":149} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":150} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":151} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":152} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":153} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":154} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":155} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":156} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":157} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":158} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":159} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":160} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":161} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":162} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":163} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":164} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":165} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":166} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":167} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":168} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":169} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":170} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":171} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":172} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":173} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":174} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":175} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":176} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":177} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":178} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":179} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":180} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":181} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":182} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":183} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":184} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":185} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":186} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":187} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":188} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":189} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":190} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":191} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":192} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":193} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":194} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":195} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":196} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":197} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":198} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":199} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":200} diff --git a/.github/scripts/testdata/folio-ios-convicted.jsonl b/.github/scripts/testdata/folio-ios-convicted.jsonl new file mode 100644 index 0000000..7796172 --- /dev/null +++ b/.github/scripts/testdata/folio-ios-convicted.jsonl @@ -0,0 +1,49 @@ +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":1} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":2} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":3} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":4} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":5} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":6} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":7} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":8} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":9} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":10} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":11} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":12} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":13} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":14} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":15} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":16} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":17} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":18} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":19} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":20} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":21} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":22} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":23} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":24} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":25} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":26} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":27} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":28} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":29} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":30} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":31} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":32} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":33} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":34} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":35} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":36} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":37} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":38} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":39} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":40} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":41} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":42} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":43} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":44} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":45} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":46} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":47} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":48} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"op":"false"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":49,"violations":["submitCommitsOneTransactionPerAction"],"witnesses":{"submitCommitsOneTransactionPerAction":{"detected_step":49,"extractors":{"accountBalance":null,"accountCards":[{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"accessibilityText":"SA, Savings, $1,888.00, 7 transactions","bounds":"[20,130][382,202]","class":"Button","clickable":"true","editable":"false","enabled":"true","identifier":"AccountCard"},"bounds":{"bottom":202,"left":20,"right":382,"top":130},"checked":false,"class":"Button","clickable":true,"desc":"SA, Savings, $1,888.00, 7 transactions","editable":false,"enabled":true,"focused":false,"id":"AccountCard","selected":false,"text":"","x":201,"y":166}],"accountNameField":null,"accounts":[{"balance":188800,"name":"Savings"}],"addAccountButton":{"__sanderlingSelector":"testTag:HomeScreen > testTag:AddAccountButton","attrs":{"accessibilityText":"+ Add account","bounds":"[20,777][382,825]","class":"Button","clickable":"true","editable":"false","enabled":"true","identifier":"AddAccountButton"},"bounds":{"bottom":825,"left":20,"right":382,"top":777},"checked":false,"class":"Button","clickable":true,"desc":"+ Add account","editable":false,"enabled":true,"focused":false,"id":"AddAccountButton","selected":false,"text":"","x":201,"y":801},"addAccountSubmit":null,"addTxnButton":null,"extractor_0":0,"extractor_1":0,"homeTxnCounts":{"Savings":7},"lastAction":{"applied":true,"kind":"DoubleTap","on":"id:TxnSubmit","relaunched":null},"loggedIn":true,"loginEmailField":null,"loginPasswordField":null,"loginSubmit":null,"route":"home","submitsInWindow":6,"submitsSinceAccountBalance":1,"submitsSinceCounts":6,"totalBalance":188800,"txnAmountField":null,"txnSubmit":null},"reason":"predicate false","step":48}}} diff --git a/.github/scripts/testdata/folio-web-convicted.jsonl b/.github/scripts/testdata/folio-web-convicted.jsonl new file mode 100644 index 0000000..5896eab --- /dev/null +++ b/.github/scripts/testdata/folio-web-convicted.jsonl @@ -0,0 +1,184 @@ +{"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":1} +{"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":2} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":3} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":4} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":5} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":6} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":7} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":8} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":9} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":10} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":11} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen","HomeScreen","HomeScreen","AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":12} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":13} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":14} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":15} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":16} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":17} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":18} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":19} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":20} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":21} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":22} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":23} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":24} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":25} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":26} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":27} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":28} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":29} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":30} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":31} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":32} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":33} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":34} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":35} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":36} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":37} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":38} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":39} +{"hierarchy":{"resourceIds":["LoginScreen","LoginScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":40} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":41} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":42} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":43} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":44} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":45} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":46} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":47} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen","HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":48} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":49} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":50} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":51} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":52} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":53} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":54} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":55} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":56} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":57} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":58} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":59} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":60} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":61} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":62} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":63} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":64} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":65} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":66} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":67} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":68} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":69} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":70} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":71} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":72} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":73} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":74} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":75} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":76} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":77} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":78} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":79} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":80} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":81} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":82} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":83} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":84} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":85} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":86} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":87} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":88} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":89} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":90} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":91} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":92} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":93} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":94} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":95} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":96} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":97} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":98} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":99} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":100} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":101} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":102} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":103} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":104} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":105} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":106} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":107} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":108} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":109} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":110} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":111} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":112} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":113} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","AddAccountScreen","AddAccountScreen","HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":114} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":115} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":116} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":117} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":118} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":119} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":120} +{"hierarchy":{"resourceIds":["AddAccountScreen","AddAccountScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":121} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":122} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":123} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":124} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":125} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":126} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":127} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":128} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":129} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":130} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":131} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":132} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":133} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":134} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":135} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":136} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":137} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":138} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":139} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":140} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":141} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":142} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":143} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":144} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":145} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":146} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":147} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":148} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":149} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":150} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":151} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":152} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":153} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":154} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":155} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":156} +{"hierarchy":{"resourceIds":["LedgerScreen","LedgerScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":157} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":158} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":159} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":160} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":161} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":162} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":163} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":164} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":165} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":166} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":167} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":168} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":169} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":170} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":171} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":172} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":173} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":174} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":175} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":176} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":177} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":178} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":179} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen","LedgerScreen","LedgerScreen","AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":180} +{"hierarchy":{"resourceIds":["HomeScreen","HomeScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":181} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":182} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"name":"p4","op":"predicate"},"submitMovesBalanceByAtMostTypedAmount":{"name":"p3","op":"predicate"}},"step":183} +{"hierarchy":{"resourceIds":["AddTransactionScreen","AddTransactionScreen"]},"residuals":{"newAccountBalanceIsZero":{"name":"p2","op":"predicate"},"submitCommitsOneTransactionPerAction":{"op":"false"},"submitMovesBalanceByAtMostTypedAmount":{"op":"false"}},"step":184,"violations":["submitCommitsOneTransactionPerAction","submitMovesBalanceByAtMostTypedAmount"],"witnesses":{"submitCommitsOneTransactionPerAction":{"detected_step":184,"extractors":{"accountBalance":null,"accountCards":[{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":139,"left":20,"right":760,"top":67},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AccountCard","text":"NANaN14 transactions$4,579.00","x":390,"y":103},{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":221,"left":20,"right":760,"top":149},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AccountCard","text":"TRTravel3 transactions$801.00","x":390,"y":185},{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":297,"left":20,"right":760,"top":231},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AccountCard","text":"Aa0 transactions$0.00","x":390,"y":264}],"accountNameField":null,"accounts":[{"balance":457900,"name":"NANaN"},{"balance":80100,"name":"TRTravel"},{"balance":0,"name":"Aa"}],"addAccountButton":{"__sanderlingSelector":"testTag:HomeScreen > testTag:AddAccountButton","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":421,"left":20,"right":760,"top":375},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AddAccountButton","text":"+ Add account","x":390,"y":398},"addAccountSubmit":null,"addTxnButton":null,"extractor_0":0,"extractor_1":0,"homeTxnCounts":{"Aa":"0","NANaN":"14","TRTravel":"3"},"lastAction":{"applied":true,"kind":"DoubleTap","on":"id:TxnSubmit","relaunched":null},"loggedIn":true,"loginEmailField":null,"loginPasswordField":null,"loginSubmit":null,"route":"home","submitsInWindow":1,"submitsSinceAccountBalance":1,"submitsSinceCounts":1,"totalBalance":538000,"txnAmountField":null,"txnSubmit":null},"reason":"predicate false","step":183},"submitMovesBalanceByAtMostTypedAmount":{"detected_step":184,"extractors":{"accountBalance":null,"accountCards":[{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":139,"left":20,"right":760,"top":67},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AccountCard","text":"NANaN14 transactions$4,579.00","x":390,"y":103},{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":221,"left":20,"right":760,"top":149},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AccountCard","text":"TRTravel3 transactions$801.00","x":390,"y":185},{"__sanderlingSelector":"testTag:HomeScreen > testTag:AccountCard","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":297,"left":20,"right":760,"top":231},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AccountCard","text":"Aa0 transactions$0.00","x":390,"y":264}],"accountNameField":null,"accounts":[{"balance":457900,"name":"NANaN"},{"balance":80100,"name":"TRTravel"},{"balance":0,"name":"Aa"}],"addAccountButton":{"__sanderlingSelector":"testTag:HomeScreen > testTag:AddAccountButton","attrs":{"aria-label":"","tag":"div"},"bounds":{"bottom":421,"left":20,"right":760,"top":375},"class":"","clickable":true,"dataset":{},"desc":"","enabled":true,"focused":false,"id":"AddAccountButton","text":"+ Add account","x":390,"y":398},"addAccountSubmit":null,"addTxnButton":null,"extractor_0":0,"extractor_1":0,"homeTxnCounts":{"Aa":"0","NANaN":"14","TRTravel":"3"},"lastAction":{"applied":true,"kind":"DoubleTap","on":"id:TxnSubmit","relaunched":null},"loggedIn":true,"loginEmailField":null,"loginPasswordField":null,"loginSubmit":null,"route":"home","submitsInWindow":1,"submitsSinceAccountBalance":1,"submitsSinceCounts":1,"totalBalance":538000,"txnAmountField":null,"txnSubmit":null},"reason":"predicate false","step":183}}} From 6ab719fb7753c5563439751c4033f07846829ee0 Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 16 Aug 2026 01:40:25 +0530 Subject: [PATCH 2/2] test(ci): drive the classifier over the real traces Four cases on real data: each leg's real verdict, plus the android trace cut before it reached the transaction screen, which is what proves the route gate reads a real hierarchy dump. Also corrects the hand-written fixtures. They set is_error to false on a plain violation; internal/trace/writer.go tags that field omitempty, so a real trace omits it entirely. Harmless to the classifier, but a fixture that does not look like reality is the thing that hides drift. --- .github/scripts/folio-run-test.sh | 53 +++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/.github/scripts/folio-run-test.sh b/.github/scripts/folio-run-test.sh index dc9757a..5ee4abf 100755 --- a/.github/scripts/folio-run-test.sh +++ b/.github/scripts/folio-run-test.sh @@ -13,6 +13,7 @@ set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" script="$here/folio-run.sh" spec="$here/../../examples/folio/sanderling/spec.ts" +testdata="$here/testdata" work="$(mktemp -d)" trap 'rm -rf "$work"' EXIT @@ -25,6 +26,9 @@ run() { # [none] ; trace lines on stdin local name="$1" platform="$2" code="$3" trace_mode="${4:-file}" case_dir="$work/$name" mkdir -p "$case_dir" + # the web leg serves this directory and waits for index.html before it runs + mkdir -p "$case_dir/examples/folio/app/webApp/build/dist/wasmJs/developmentExecutable" + echo ok > "$case_dir/examples/folio/app/webApp/build/dist/wasmJs/developmentExecutable/index.html" cat > "$case_dir/trace.jsonl" printf '#!/usr/bin/env bash\n' > "$case_dir/sanderling" cat >> "$case_dir/sanderling" <<'STUB' @@ -46,7 +50,7 @@ STUB STUB_ARGV="$case_dir/argv" STUB_TRACE="$case_dir/trace.jsonl" \ STUB_TRACE_MODE="$trace_mode" STUB_CODE="$code" \ SANDERLING="$case_dir/sanderling" SPEC="${spec_override:-$spec}" \ - GITHUB_STEP_SUMMARY="$case_dir/summary.md" \ + GITHUB_STEP_SUMMARY="$case_dir/summary.md" PORT=8796 \ SEED=7 MAX_STEPS=240 DURATION=20m \ bash -eo pipefail -c "'$script' '$platform'" \ > "$case_dir/out" 2> "$case_dir/err" || status=$? @@ -80,8 +84,11 @@ expect_argv() { # grep -qxF -- "$1" "$case_dir/argv" || fail "$2: '$1' never reached the binary" } -convicting='{"violations":["submitCommitsOneTransactionPerAction"],"witnesses":{"submitCommitsOneTransactionPerAction":{"is_error":false,"reason":"one tap, two rows"}}}' -unrelated='{"violations":["newAccountBalanceIsZero"],"witnesses":{"newAccountBalanceIsZero":{"is_error":false,"reason":"opened at 4.00"}}}' +# is_error is absent, not false: internal/trace/writer.go tags it omitempty, so a +# predicate that simply returned false never writes the key. The real traces +# pinned under testdata/ carry exactly this shape. +convicting='{"violations":["submitCommitsOneTransactionPerAction"],"witnesses":{"submitCommitsOneTransactionPerAction":{"reason":"predicate false"}}}' +unrelated='{"violations":["newAccountBalanceIsZero"],"witnesses":{"newAccountBalanceIsZero":{"reason":"predicate false"}}}' threw='{"violations":["submitMovesBalanceByAtMostTypedAmount"],"witnesses":{"submitMovesBalanceByAtMostTypedAmount":{"is_error":true,"reason":"TypeError: cannot read text of undefined"}}}' on_txn='{"route":"AddTransactionScreen","violations":[]}' off_txn='{"route":"HomeScreen","violations":[]}' @@ -278,6 +285,46 @@ TRACE expect_status 0 gate-matches-spec expect_silent "no longer declares" gate-matches-spec +# --- real traces, from actions run 31902501859 on this branch's code --------- + +# The cases above are hand-written, so they only prove the classifier agrees +# with what this file assumes a trace looks like. These are what the binary +# actually wrote. Every step is kept; of each step only step, violations, +# witnesses and residuals survive, and hierarchy is replaced by the "...Screen" +# resource ids it held, in order, because that dump is 95% of the bytes and the +# only place the route gate's grep can match. Running the classifier over the +# originals and over these produced byte-identical verdicts. + +run ios-real ios 2 file < "$testdata/folio-ios-convicted.jsonl" +expect_status 0 ios-real +expect_says "folio/ios: found the submit bug in 49 steps (submitCommitsOneTransactionPerAction)" ios-real +expect_summary "- 49 steps recorded, exit 2" ios-real +# a real conviction carries no is_error, so reading it as a thrown predicate is +# the mistake this asserts against +expect_silent "a predicate threw" ios-real + +# Both gated properties fired on the same step, and both are named. +run web-real web 2 file < "$testdata/folio-web-convicted.jsonl" +expect_status 0 web-real +expect_says "folio/web: found the submit bug in 184 steps (submitCommitsOneTransactionPerAction, submitMovesBalanceByAtMostTypedAmount)" web-real +expect_summary "- convicted on: submitCommitsOneTransactionPerAction, submitMovesBalanceByAtMostTypedAmount" web-real + +# 200 steps, no violation, and it reached the transaction screen: the health +# gate's passing case on real data. +run android-real android 0 file < "$testdata/folio-android-healthy.jsonl" +expect_status 0 android-real +expect_says "folio/android: healthy run over 200 steps, reached the transaction screen" android-real +expect_silent "never reached" android-real + +# The same real trace cut to before it first reached the transaction screen. +# The route gate reads the accessibility hierarchy, so this is the one case that +# proves it reads real hierarchy dumps and not just the shape assumed above. +head -10 "$testdata/folio-android-healthy.jsonl" > "$work/android-early.jsonl" +run android-real-stalled android 0 file < "$work/android-early.jsonl" +expect_status 1 android-real-stalled +expect_says "never reached AddTransactionScreen over 10 steps" android-real-stalled +expect_says "routes the trace does record: LoginScreen,HomeScreen,AddAccountScreen,LedgerScreen" android-real-stalled + if [ "$failed" = 0 ]; then echo "folio-run.sh: ok" fi