Files
tai/taicpp/tests/whatsapp_data/appstate_vectors.json
T
retoorandClaude Sonnet 5.5 1611f3baeb whatsapp: fix link/login 401, add image send, contact sync and search; harden failover
Root causes, each reproduced against the live server or endpoint:
- Server-only JIDs decoded as "@s.whatsapp.net" and pairing replies copied them
  into `to`, so the device was never registered and every login returned 401.
  Decoder/encoder fixed, replies use s.whatsapp.net, ADV hosted prefixes follow
  whatsmeow. The link wizard now waits for the restart, logs in, uploads prekeys
  and retries once with a fresh device on 401/403.
- Closed sockets made every receive loop spin until its deadline (the 7 minute
  CPU burn). Loops stop on a closed stream.
- whatsapp_send had no image argument and send_image was a stub. Added WaMedia
  (byte-exact against 8 wa-go golden vectors), media_conn upload, image send and
  the DeviceSentMessage copy for the user's other devices.
- Phone contacts never reached the client: added app-state sync (WaAppState,
  WaReceiver, LTHash and MAC checks verified against a whatsmeow-built oracle)
  and the historySyncConfig declaration at registration.
- Contact lookup: FTS5 trigram plus fuzzy ranking, ambiguity is reported and
  never guessed, global search lists contacts. Send caps (10/min, 200/day) are
  enforced and survive unlink.

Failover and agent:
- Every failed backend candidate is printed the moment it fails.
- muse runs with low reasoning effort, an empty preset and one stable workspace
  (36.5s down to 2.8s on the real prompt); Ctrl-C no longer counts as a backend
  failure; CLI backends use the circuit breaker; opencode runs are capped at 30s.
- Orphan tool results are dropped before sending (devplace HTTP 400, reproduced);
  compaction no longer starts its window on a tool result.
- Terminal art pasted as a prompt is refused before any model call.

Tests: whatsapp_test, muse_flags_test, llm_history_test; full suite 40 steps
(agent.e2e reads live tmux panes and is flaky, green on re-run).
Research archived under research/whatsapp-automation.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 21:32:38 +01:00

31 lines
7.7 KiB
JSON

{
"collection": "critical_unblock_low",
"expanded_keys": "cd8d4c08d549d621e238e4521ba9b83efa46bf5525ec7347f2d9af05bf30c551e147faaf6d0f241eb80a501f8718ea0c045b32581233cece26bc4b742ef0d56ee66c766dc82e65ca0ad76d43e859c4a0785abfb3f2d91d23349464d5fd4e4d18b831b21038203d3de16e909dcf537d9054b1bbe126abe795968996226c192a0e311ecad924ebd534c372ff80516959a179f4ef9a65bf11d88e995bb139f9282c",
"expect_contacts_after_patch": {
"31611111111@s.whatsapp.net": "Nigel Dokter (work)",
"31622222222@s.whatsapp.net": "Ann",
"31644444444@s.whatsapp.net": "Joop Visser"
},
"expect_contacts_after_snapshot": {
"31611111111@s.whatsapp.net": "Nigel Dokter",
"31622222222@s.whatsapp.net": "Ann",
"31633333333@s.whatsapp.net": "Pieter Bos"
},
"expect_removed_after_patch": [
"31633333333@s.whatsapp.net"
],
"expect_unnamed_skipped": [
"31655555555@s.whatsapp.net"
],
"key_data": "1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
"key_id": "000000014210",
"key_request_message": "620e1007420a0a080a06000000014210",
"key_share_message": "624510063a410a3f0a080a0600000001421012330a201112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f301208080710011a02000318fbd0eab6b733",
"patch": "0a02080212c901080012c4010a220a20fb70a76ccd2e83fd6676a021389dc1f435199a478ac43bab5c1384f3ddc209a91293010a9001050505050505050505050505050505051e3550be94e098243afc8ad308ff35e5a9ffa33626f4af1a67c122751d3c4e260103f19baa2eca076704fb13c76fc71c5046656b56c64a2a1525e6be93c958ce3dc0fa0aa9960428a98e9584bb233e173fb220e5268c2ad66a90a21f453d91f5f1563729f0ab74c3d039b15e0b24181ee05be9adb716e934a9cf8ae9a946d7c41a080a0600000001421012a701080112a2010a220a2019605d94a9b2875981501d0805664425f7242e0b0325bb2b16cd9c6c45c11e7112720a7006060606060606060606060606060606401ab713c69ad69e09d699ea7778a16920034fe2bde1e70e6fdfd3e05dbc545c1c5143278003b549dbd9320c886aedd333dff0ffabed6360450f7d6cb57529e72b9e9232d736f3c01ec093b42e301f674358aab982892b2a7e39fb6afad0def81a080a0600000001421012a701080012a2010a220a20d9df8cd984c860eb0e8f8e792a9a079c94dafecfd66eaec67de5681a846d389d12720a70070707070707070707070707070707078c14596c705bf42658a67581425b825fd94f946a5ba9647cb015b23bb41b0340e7edc21b4c9f6842824541b20616222f21787255527eea17288babe818e496a15ff8e219b9431efa7b5bbdad7ca72ec0c87c9ff4b926f6697e5664483c5c6ef91a080a0600000001421012b901080012b4010a220a20d9df8cd984c860eb0e8f8e792a9a079c94dafecfd66eaec67de5681a846d389d1283010a8001080808080808080808080808080808089149cc2abddd4b6b0ee629b85fff882077823a7fe524cac00acd12acf4f4e2ce10a90a25116085c4d539cddf8c6c301b85c052ff242957c587bb2057d0cdc8dc4528295ac7631e580742cbc0f09220099ab34e2c6795c8b772dae8c4dfd7549efddb1b05cbc6aec318cd77d2593e3a161a080a0600000001421012a701080012a2010a220a207ffec716397a4c3b916318eeeafcd6b3a670dc60fc7abb854afb2bda04258b2012720a7009090909090909090909090909090909f0666f275343cbcf3a6ff4497693cc406860037f496c1c498220f9856a9dc381255d355eecc27c5a58d953f3390b7461e6dccca3d74837d6b711861c0543361753b9e82057c2c86ccb1eb7dbff30bf0f8e6d262c0a1a015f666ec6cc951270f31a080a0600000001421012970108001292010a220a20db51e692c7be8aa6a4b3983c3b47e4129aa309081fddfbcb3ff5551141a4cf4612620a600a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0ab680bec5b55a236e3fea50f5101c0fd3028b33e68bfc9b8e81e5be62be98f37acad956885527a3f04e6898388cb43ff51e6cbbcbc1495bd0b3ccf5d413043029e35dcf01c2500584208bee8ceb5afc521a080a060000000142102220f49ac90fe873351cf971f99dbca797888bbfb887f1918137d77d04255b654dca2a2004253ae1745f29e61f6a4ffe39993c5791355e2659945c4f738dd4f9c842f17e32080a06000000014210",
"patch_hash_hex": "09e15626722d21e6e7d648d078029502b43638c1dd8da470b8845fec05b4db67e9ece5d1e124c619f31348870c9d3aa6bbbb1670557080d361cb703934094d0e0523cc54524d47871c732c16fcce3be5ebd96b24477ec10277fafecfec11fc51b0cebfa7297d4b2f863e2cca79823c87017913abbcdca07d388b0722f8a9c364",
"patch_tampered": "0a02080212c901080012c4010a220a20fb70a76ccd2e83fd6676a021389dc1f435199a478ac43bab5c1384f3ddc209a91293010a9001050505050505050505050505050505051e3550be94e098243afc8ad308ff35e5a9ffa33626f4af1a67c122751d3c4e260103f19baa2eca076704fb13c76fc71c5046656b56c64a2a1525e6be93c958ce3dc0fa0aa9960428a98e9584bb233e173fb220e5268c2ad66a90a21f453d91f5f1563729f0ab74c3d039b15e0b24181ee05be9adb716e934a9cf8ae9a946d7c41a080a0600000001421012a701080112a2010a220a2019605d94a9b2875981501d0805664425f7242e0b0325bb2b16cd9c6c45c11e7112720a7006060606060606060606060606060606401ab713c69ad69e09d699ea7778a16920034fe2bde1e70e6fdfd3e05dbc545c1c5143278003b549dbd9320c886aedd333dff0ffabed6360450f7d6cb57529e72b9e9232d736f3c01ec093b42e301f674358aab982892b2a7e39fb6afad0def81a080a0600000001421012a701080012a2010a220a20d9df8cd984c860eb0e8f8e792a9a079c94dafecfd66eaec67de5681a846d389d12720a70070707070707070707070707070707078c14596c705bf42658a67581425b825fd94f946a5ba9647cb015b23bb41b0340e7edc21b4c9f6842824541b20616222f21787255527eea17288babe818e496a15ff8e219b9431efa7b5bbdad7ca72ec0c87c9ff4b926f6697e5664483c5c6ef81a080a0600000001421012b901080012b4010a220a20d9df8cd984c860eb0e8f8e792a9a079c94dafecfd66eaec67de5681a846d389d1283010a8001080808080808080808080808080808089149cc2abddd4b6b0ee629b85fff882077823a7fe524cac00acd12acf4f4e2ce10a90a25116085c4d539cddf8c6c301b85c052ff242957c587bb2057d0cdc8dc4528295ac7631e580742cbc0f09220099ab34e2c6795c8b772dae8c4dfd7549efddb1b05cbc6aec318cd77d2593e3a161a080a0600000001421012a701080012a2010a220a207ffec716397a4c3b916318eeeafcd6b3a670dc60fc7abb854afb2bda04258b2012720a7009090909090909090909090909090909f0666f275343cbcf3a6ff4497693cc406860037f496c1c498220f9856a9dc381255d355eecc27c5a58d953f3390b7461e6dccca3d74837d6b711861c0543361753b9e82057c2c86ccb1eb7dbff30bf0f8e6d262c0a1a015f666ec6cc951270f31a080a0600000001421012970108001292010a220a20db51e692c7be8aa6a4b3983c3b47e4129aa309081fddfbcb3ff5551141a4cf4612620a600a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0ab680bec5b55a236e3fea50f5101c0fd3028b33e68bfc9b8e81e5be62be98f37acad956885527a3f04e6898388cb43ff51e6cbbcbc1495bd0b3ccf5d413043029e35dcf01c2500584208bee8ceb5afc521a080a060000000142102220f49ac90fe873351cf971f99dbca797888bbfb887f1918137d77d04255b654dca2a2004253ae1745f29e61f6a4ffe39993c5791355e2659945c4f738dd4f9c842f17e32080a06000000014210",
"patch_version": 2,
"snapshot": "0a02080112b4010a220a20fb70a76ccd2e83fd6676a021389dc1f435199a478ac43bab5c1384f3ddc209a91283010a80010101010101010101010101010101010141a7c88cb5b3ed2568af4d0bcde254a4297aa05f2e66927051856578a0fa49adfe2c34c13b46803b1eebae9a40c047fc4190cbcb8bd4a0f72582f471fb595dd0d028eecaad2418f25769237ae1a3cfdb9a800ba36c321ae146c231f3fc5318ab271b07a649fd9a11a830a965fce375941a080a0600000001421012a2010a220a20409c584d6581b70b6b5b3418aca3c88017cfefaea3048a6c7b3c65ef29b8cca912720a700202020202020202020202020202020267a519dd453181150c6f6d3950f665812244cc3469b456f16da2ab46c571932099b170788dfdf016108467d3beb19ea209b8fd830faefa6a7b057c13d709e495bca4b7977101dab1638296667ed4033fd8f6df4fdca31b4cea7223106f2a175c1a080a0600000001421012b4010a220a2019605d94a9b2875981501d0805664425f7242e0b0325bb2b16cd9c6c45c11e711283010a800103030303030303030303030303030303d9781cd0d2eb765aa9c1e49a22c512a6a6c8592cab67b986811737297d71b532938f70d44bc2b0eead1602d57767831277587ab9e12c6434eb5ab2b53a132541a2d28dceeaf610a4c7bb0f5532aa224ad176da3e14453da247e5bb11d43f027569506097194a72c95048e1b26dad5f741a080a060000000142101292010a220a20db51e692c7be8aa6a4b3983c3b47e4129aa309081fddfbcb3ff5551141a4cf4612620a60040404040404040404040404040404048c2d9a50c1d5bc18c174ae3cd612c1d4c59597fffc20e3786446d7e682373d5d8c803ddd2b91ad1777984f62428b83b660535d2c18f594089e72d47b43175d69d4d059249a3fc98d72b3ef1f432cd67e1a080a060000000142101a202747693d4d70f0fd07687f2e1bbecbe7afdc2a5d760ed7514dc0d8ebeaa1c8a922080a06000000014210",
"snapshot_hash_hex": "394dff58d81d16ae663a3660c76d694c93bdb729af13ad3262f69899ebb176a6107663299c0ec2a03126dd6543703029ba053f5ede70148289b616d32e2d54c9ac0c3a8b4d1469346a74e33db3b30b4f4e790ce88167003d92b0007529d63231d2c9160de8474fb69a6edc8d1a85af1eecb2785ade97db629a913924548bb281"
}