runtime-and-event-loop.json 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. {
  2. "schemaVersion": 1,
  3. "pageVersion": "sha256:302d26e89266adfff5cc6a109b6aff5744e957b32642d4337dc08f42da914d70",
  4. "claims": [
  5. {
  6. "id": "claim_a384a56f0ebf4add8c0ab7722b040888",
  7. "statement": "main loads the config, ensures the data dir, opens the history DB, creates AppEvent and WaEvent unbounded channels, starts WhatsApp, spawns the forwarder, builds App, spawns the input thread and runs the TUI.",
  8. "evidence": [
  9. {
  10. "resource": "repo://src/main.rs#L28-L51",
  11. "version": "repo-lines-v1:sha256:a1f78dd345a599ce923351dc782f73a2a62e23022449fe5ca2ec531b7f066305:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImExZDA2ZTA0OGNkMjcyNzM4ZDgzN2IwYzBlYzZhYWIwYjAzMTQ1N2U0NzVmZDQ5YWJiY2JhZmM1ZjczYzAyMGQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjczZTczMWU3YjM0NmQ1YzQyMzJhYzA0ODFlYmY5ZWZhNTgxNTljMTY4ZmFhNTQ4YzYwNDZiODI1Yjg2Y2ZmMDQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjcyOGNjMGI0ZGIzNjFhYzMxMDc4YmMxOTZiZDY1MjkxMzVhNmFmYzQ1ZWNhZTkyMWY2MTcxMjI1ZTJmNGNkOTgifQ"
  12. }
  13. ]
  14. },
  15. {
  16. "id": "claim_8eca0eac1bfe4276be6c56202f9efdd7",
  17. "statement": "The WhatsApp forwarder wraps each WaEvent in AppEvent::Wa and stops when a channel side closes.",
  18. "evidence": [
  19. {
  20. "resource": "repo://src/main.rs#L57-L65",
  21. "version": "repo-lines-v1:sha256:6be0244c848e1db9107831f7228801caee72758797c9fa238420d9b550b1aa04:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMDFmYWUxNzcwNWQ2OTQ2NTViZGFlMjdlZTE4ZDA4MDg1ZjdjMzlmZjgyYWEzYjdiZGI0Yjc3ZGUxOTY3MjJjNiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiYzRiMzgyZTY4YzBlZTk1MGMwODdiOTA2YmZmMGJiMTQzNmI1MTFmMGFhZmVkNmFmNmE1YmM0ZTdhMTc5YmJlMCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYjU5MDFlMDA0ZGRhODVmZTA2ODQ4ZWRiOGQxYjMzZDU1M2ZhYzhmOTIzNmVlMWUyOWRlM2Y0ZTMxZGY1Mzg1OSJ9"
  22. }
  23. ]
  24. },
  25. {
  26. "id": "claim_b0365817200d431ab80d6f5cb929dd25",
  27. "statement": "Terminal input is read on a dedicated OS thread named wh-input; a read error is reported as WaEvent::Error and stops the thread.",
  28. "evidence": [
  29. {
  30. "resource": "repo://src/main.rs#L22-L22",
  31. "version": "repo-lines-v1:sha256:1d14980ebaa2f31e4144fe6b04613dfc3285892428a59dc526be0808a55c1eff:eyJzZWxlY3RlZExpbmVDb3VudCI6MSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMWQxNDk4MGViYWEyZjMxZTQxNDRmZTZiMDQ2MTNkZmMzMjg1ODkyNDI4YTU5ZGM1MjZiZTA4MDhhNTVjMWVmZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMWQxNDk4MGViYWEyZjMxZTQxNDRmZTZiMDQ2MTNkZmMzMjg1ODkyNDI4YTU5ZGM1MjZiZTA4MDhhNTVjMWVmZiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDZmZmE0OWU5ZTQyNmZkYjkwM2I2ZmIyNjYxZDdjZDEwZmM1OTljMjFjZjg2ZDMzMWFlNjY4NDBhMzUwZGNkMyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMzRkZmU0NTZlN2M0YTU3MTBiMzQzZDg2MWFjYTE5YWRmM2I1MDA4MzQ3OGYxMjdiM2QxYTZlNWM0MjNkMDMxNyJ9"
  32. },
  33. {
  34. "resource": "repo://src/main.rs#L71-L102",
  35. "version": "repo-lines-v1:sha256:cf6579340493800af2e3db3ff443a6e706051052b19e599dfa304084d854b29f:eyJzZWxlY3RlZExpbmVDb3VudCI6MzIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRhNzdjMDlkNzU5NTU0NWM4Y2M5NGU5YjhlZDg4YzQzYWQ4ZDAyNDAwM2FmYjE5NmFjOWNlOGZlMTMzMjkzNjYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjhmNWY0NWU2MTAxMTkyODQ5ZGNjNzA5NjBlMDA0M2Q2ZmM2ZTg5ZWIwNDkzYTc0MTMzYjAxMTQ2OWFmYzg0NWIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImViNTc2ZTc2ZWM5NDRlZjNmY2IzMGZmZDlkYTJiOTU5NzNiNDUyYTdkYTQ4NjM5ODczNjM1MDExOGQ2MDU3ZDAifQ"
  36. }
  37. ]
  38. },
  39. {
  40. "id": "claim_dfcac46a3d404aac87e54470d53a91c7",
  41. "statement": "Only key press events become AppEvent::Key and resize events become AppEvent::Redraw; other terminal events are dropped.",
  42. "evidence": [
  43. {
  44. "resource": "repo://src/main.rs#L109-L115",
  45. "version": "repo-lines-v1:sha256:85bac23651d9b95ec5f5593453b077b12706d21eed247ce921d00504110bfaad:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYzcxMDI5NWZiM2ZiYzY4ODZmZmNkZmJiMzEzMGYwMjgzYWM2MDY0MmQ5MGQ2OTllY2QwM2U1ZTI2MmM1NjVjMiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZTkzZDY1YjVkODczOTc3NmUxMzMzZmZmZGQ0MzlhOGQ3YzQwYTA0MTAyNzUzMjY3NTQ4MDAwNmQyMGVmMGE2NCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNjQxY2IxZDYxYmJhN2RkZDlmYmI4YTI5MWY4MDdmMDVjNjY3NjkyMzY2M2RjM2IzYTcyOWQ3MzI4NDVkNDhjZCJ9"
  46. }
  47. ]
  48. },
  49. {
  50. "id": "claim_64e36e0f00d545d48fc16d79cfaf28dd",
  51. "statement": "run_tui always restores the terminal after the event loop returns.",
  52. "evidence": [
  53. {
  54. "resource": "repo://src/main.rs#L121-L126",
  55. "version": "repo-lines-v1:sha256:0f8fe295d420386182d43d18d5735ed806080dd2bfac8adb559c5685bef212f9:eyJzZWxlY3RlZExpbmVDb3VudCI6NiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYzI5YzU4MTYzNmNkOTM0NmZjNDQyMjUwOTZkZTU0NDQ3MDAwNGU0MmM1Yzg3Nzg1Y2Q0Yzc0Zjk1Y2I1NzJmNSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiOWQ4OGMwZjlkMTllYjQ0M2JlOGRhN2ZmNzc4MWM5MGEwNTBhZWVlMDJmOWI4ZDFhOTRmYTY3ZmZjMDc0YzY5YSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZWQyNGY5Y2EzODEzYjAyZDVkY2E4MmY0ZTc3NTM0ODc5ZGFhM2E0MjhmMmMzMzliMjU4NTgyNTk0MTg1NjI4ZiJ9"
  56. }
  57. ]
  58. },
  59. {
  60. "id": "claim_45a8dbf5c9434d65bc96c1d5a96ecbe5",
  61. "statement": "The event loop draws a frame, awaits the next event and dispatches it to App until should_quit is set or the channel closes.",
  62. "evidence": [
  63. {
  64. "resource": "repo://src/main.rs#L133-L152",
  65. "version": "repo-lines-v1:sha256:644802a473993f7032f4dbd83c1464e2a0c1554ff7d51b3cc5503bc08fcf5548:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkwNTMwZjA2M2RhYzc0YzIwZGZmMGE4YmI5MjA5MTFmYThjYTA2YWRhMTMyMDU4ZGI2NTRiYjBjNDg5MTE0YjAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFmYzBjMDAyZTcyMTE3NTg2ODEyN2Y4ZmZiYzNmYTVlMWNhNDBjNmYxYjNlM2JiNTUwMDU3YmU0NDkyYWI2MTIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjowLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUifQ"
  66. }
  67. ]
  68. },
  69. {
  70. "id": "claim_8349159e23ea452480265bcada84d14c",
  71. "statement": "event_loop records list_mode_before = app.list_mode before handle_event and calls terminal.clear() when the list mode changed, forcing a full repaint so wide glyphs from the previous list leave no stale cells.",
  72. "evidence": [
  73. {
  74. "resource": "repo://src/main.rs#L128-L152",
  75. "version": "repo-lines-v1:sha256:c813b17a84a3084eefaa34b8e9284507be8cfac301dd0b8abab485d88d66204a:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNlMTkzYjAzYzI2ZWIzM2EwMjk4MWViY2MyNmM2YzIxNmRlZGQzYTkxMDQ5OTA0ODI5ZjJmNDQ0ZTVmYWYyODUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjAzYTEwMzdmMDcxOTYxZmIzYjEzYTdkYWZmNjlhY2MyYmFiODEwZmU4YmRhMTZhMmIyMjcxNTU0MzcxNGNjNzUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjowLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUifQ"
  76. }
  77. ]
  78. }
  79. ],
  80. "verification": {
  81. "by": "openwiki/0.7.2",
  82. "at": "2026-10-19T19:53:56.480Z"
  83. }
  84. }