web-control-panel.json 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. {
  2. "schemaVersion": 1,
  3. "pageVersion": "sha256:428fec496886d09cde951dc002e97021c4d9fc425843d101d1d5d17cc397bcc6",
  4. "claims": [
  5. {
  6. "id": "claim_3b56098917ee4e02b2f8ede066a9921a",
  7. "statement": "The web control panel is started only when web_port is configured, binds on 0.0.0.0 with no authentication, and serves requests on a dedicated wh-web OS thread one at a time.",
  8. "evidence": [
  9. {
  10. "resource": "repo://src/main.rs#L106-L115",
  11. "version": "repo-lines-v1:sha256:54c6448bd45241fd4b90479b1a91e2fd528e7a38f4ac5d543eda728fbf3756d5:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImYwZjA3MmY1NzA4NTRiMGM0ODg3YmRlZDU4YzU2NWRiZGExOTNlYmY3NGIwODZmMjYyNTFmZjZhOTZiMmJiYWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRmYWI3MTBkZGY3ODU5ZTU3NTc2NGE5MTNhMDAyYzc0NTg1ZmZhNzAwMTUxMGNiODgxMWRhODNkMmNmNzRiMzQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI1OTAxZTAwNGRkYTg1ZmUwNjg0OGVkYjhkMWIzM2Q1NTNmYWM4ZjkyMzZlZTFlMjlkZTNmNGUzMWRmNTM4NTkifQ"
  12. },
  13. {
  14. "resource": "repo://src/web.rs#L1-L19",
  15. "version": "repo-lines-v1:sha256:7ca0571f2b3a7bab8e55e28c77db9e518e764cccc07f6f3db6ee22483494b39e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhiM2Y3MzZlODVhNTljMGQxNWY5NTM0YmZmM2ZhZjEwYWQ5NDBjZWQwODY3ODBkYWU1YjNlZDk2NjEwMjMyZDYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhjNDU3YTVkZDNlNWJkNmQyZjgyZTU5MmRhN2IzOWQ3OTAxN2U0NzZkYjc0YjNhZjA0MDMwNWIwYmIyOGUxZTQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjowLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImU4ZTEwNzM3YjM4ZjIwMmZmZTRjOTFhYTU0N2IzNmEyNzA4NDQ2ODQ4MTVhYzJiZWZlMzc4MmNkMjBhMmNkZjgifQ"
  16. },
  17. {
  18. "resource": "repo://src/web.rs#L187-L214",
  19. "version": "repo-lines-v1:sha256:ab494114a58ebd5d3aac2772fa0fad447024157f3749782a39f2e7b5d2db8a0c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjMxZTI2MzA4NjJmNWZjZTY0Mjk3NGU4YTg5NmEyMjk3NWE3NDZlNjI5ZTcyMWNlYjY2YjhjZTgyOGM4NDJjMTgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA3ODdlYjhkMTU5MmY2NGVhMmE3M2NhNjA4ZmUyOWRkNjhlZDJiNmYyMDY2MmRlN2MxMmYxNmFjMTEyZWI0ZTIifQ"
  20. }
  21. ]
  22. },
  23. {
  24. "id": "claim_0efd2e13edc54ed3a8fd6f3d576511ad",
  25. "statement": "The server exposes GET /, GET /api/state, POST /api/global, POST /api/chat, POST /api/relink and POST /api/quit; any other method/path combination returns 404, and the query string is ignored.",
  26. "evidence": [
  27. {
  28. "resource": "repo://src/web.rs#L21-L32",
  29. "version": "repo-lines-v1:sha256:8d68f7263f5184bcacbcc32e3f2b90f72d9c90c4693a2bb0a0efaea433982b46:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM5YzE3NTNiNjYzYWNhNDFjNDA1MzRiYzljMGQwZGE0OGQ1NTc0ZGIxMTU2MjdiZmVlYTViY2RmYTJhMjQ5MmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU5NjJjZGY2NDAxOWI1Zjk5NTA1M2JmOTQ4NGU3MjAyM2I5YTgzYzlkMzUyZDhmMGVkNDRjZGFjZTEzOWZiMWUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNkNDMyMjkxNTVmYjM5ODIzZjhkMmY1ZDI1MDFkNzM1NzNiNjI0ODI0ODhlNWRlODg2ZGFiN2EzYTc1YjBmYmUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImM1NDU1MTc4NDk2MGFmNDM2ZTM2YmZkOGY2ODg0ZDg2ZWM3YTFlMmVlODA1NjU3OWY5YjMyMTQ5ZDk3OWJlZWIifQ"
  30. },
  31. {
  32. "resource": "repo://src/web.rs#L342-L364",
  33. "version": "repo-lines-v1:sha256:30fb4995bbb20426970a2e31f5f3dd5e5c811e6590f215688cbf4a0fd2662bf7:eyJzZWxlY3RlZExpbmVDb3VudCI6MjMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkxYTU1YzdlMmE3ODBiZDViNzE1ZDY2MTYyYjI5M2M2ZTI2MWY2MmI2Mjk5MzY2ZWJiNTZmZjhhZTNhMDlhNDEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjAzYjZjY2UzZDJjZWYzY2RhMWVkNWEwMzM5Y2QwMmM1ZGViNDRhNzBkMGYxNDA4MmJjZjNlYWYwMDJkN2U3NDkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImMxYmNlM2Y3ZjQ5NjMxNWJjMWQ1NWYzYzE5MjE4MGI4N2NhYjExNTgxZWVjNGQ0ZWRjMWQ2MzYyNzhhOTllYjUifQ"
  34. }
  35. ]
  36. },
  37. {
  38. "id": "claim_696ce9a26b74435f8d5439a5f1e4ab6b",
  39. "statement": "Every POST route, including /api/relink, requires the header X-Wh-Request with value 1 (name case-insensitive); without it the server returns 403 and forwards nothing to the application.",
  40. "evidence": [
  41. {
  42. "resource": "repo://src/web.rs#L168-L176",
  43. "version": "repo-lines-v1:sha256:81e9004c1f6afdff65111c92f71cf2a8b9e2fd1f87d5d54d60e8446e7b1dd361:eyJzZWxlY3RlZExpbmVDb3VudCI6OSwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiODU5OWJkMWM5YjdhMTQ5ZjczYzQzMjQ2MjljMzczMzFmOGNlZTM1NDVhN2IzYWUwNjk1ZWM0NmFlZjBiZmJjNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNGRhMDBiODU3YTc3N2IyNzQwZmQxZjg0MWIxZWQ0MzcwNmYwOTc5YWEyNzE5Zjk1YzJjOTJjMGNkYWEzOWJkYiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNGNmODQ4NzQ5MjczZDdkMWJlZDQ1ZTg2ZTNmMTU3ZmY3NTE0MjIyMTFkMWE3YzFlM2RhZDIzYWNkODNiZWRmNCJ9"
  44. },
  45. {
  46. "resource": "repo://src/web.rs#L216-L233",
  47. "version": "repo-lines-v1:sha256:007fa67085367288f4893ce88fd4bad25907592bb8915e1a4649d9de382800fe:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRkZDUwMWUyNTM5YWM1OTM1ODBjM2RiMTQ5YzBmMWUzMzBiZGJiNzU1YzZkYzJmZjk5Nzg3ODkzZjMwOWQ5ODMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImUyNmM2NzRiYmY2YzlkMzNlZjM0NTEwOGJhYmYzMmFmY2UxNzc1OTMwYjU0Y2JkOWU5NzkyNWQ3NDI2NWEyNzAifQ"
  48. },
  49. {
  50. "resource": "repo://src/web.rs#L383-L392",
  51. "version": "repo-lines-v1:sha256:f6fc6a9f07a89bf80251845896e2bb83deb08f3b693960e20ec04eda2ee7cab9:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE1NzEzZjExZDY3OGYyYmQ4ZDhjMWUyYThjNmRlMDg4ODg4NDQzZWFkYmQ0NTdhZmQyMmJhNzlmMjY2N2RjYzkiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU5NmY4Y2IwODNmYTgwMGE0ZGNkMjk2OTcyMmQ3YjkyNjg2YWRkOWViZTM2NTU0OTJmYTY3MmIxYTdjZWQyNDIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhiZGE3OWRiOTQ2MjJmMThhNzVjMWU4YmFmNzVlMTFhMWJjOGVmNzg4Yjg2M2VkMmQ2M2RhNTUyZTc0MGQyNDAifQ"
  52. },
  53. {
  54. "resource": "repo://src/web.rs#L64-L67",
  55. "version": "repo-lines-v1:sha256:c5e290866be837c820ed79dff719f958fe09c524ae81a8c5816c86113418fbf4:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMWM3MTlmN2I5YmZmYWVhN2I5MjhmMmE5MTg1MTA1NzQ3ZGJmYzg0YTI1NzNhZDFiNmI5NzQ2NzFlZmY0OWNlZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZTJlMmMwNmY2ZDg3NDRmYzBkODEyZDc0YTAwNWJmZDhhM2U2MDc1MTFlZmM0ZWMwNDQyY2E3YjQzNGQ5MDYxNyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiODU5M2I4MmRmMTExZjMwMmY3N2U4ZDI4N2EyNGU0NGZhNjVjYTMxYmZmNGYxNjFkZGIyNzgzNDc5MjI1NmRlYyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzc4YzAzMWRlMTc3YTZlMjdhMWQxMzY5OTEzNzBlYzJhOTQ3YTBjZTRmZjQ0MmI3NjQzZmYwM2Q2NTZjZmI5ZSJ9"
  56. }
  57. ]
  58. },
  59. {
  60. "id": "claim_1687a5d10c5c40f4bb1f7afee48bce96",
  61. "statement": "The /api/chat body is the chat JID as text, limited to 1024 bytes; oversized, empty, unreadable or non-UTF-8 bodies return 400.",
  62. "evidence": [
  63. {
  64. "resource": "repo://src/web.rs#L249-L252",
  65. "version": "repo-lines-v1:sha256:4ec9fcc7650183cfb21c285788334f7540990a3b6ecc6c0102a5483b1042f772:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTllNmY5YjI2ZmYxNmJlMThiYjFjOTA0Y2MwNWJhZjFiNTEzMzFhNjkwYTNhZjc0ZGYxNzJmOTdiNzQ3NGI1MSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMWU2NzNhYmQ0NTdhOTdlZWExN2E2MDA2MmViMGZhZWE2YmRmMDk0ODY4Y2M2YjhmOGMwZWJkYTJmNjFlZDQyZiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiYmQ3ZTRhZGRhNDk4ZTkwMmJjZDA5ZGI5YzQ5Yjc4ZmE2NGEzNDk0NjgxMGUyZDhiOTBiYThjOTVkNmRkYTNjZiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMTcxMDE3YWI5NThlNTM3MjhlNmNhMTY0YzEzOGY1NzNmMjRhOWZjZDVhNTQzOWQwNTY2MzA1ZTE0ODQ2ODJhZSJ9"
  66. },
  67. {
  68. "resource": "repo://src/web.rs#L48-L49",
  69. "version": "repo-lines-v1:sha256:0a12154e8c7fb736954719a1bc6bbb6919359fd03e35f9e1fc18873bf3953b71:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiM2Q1NzUxODkwZTcxOGQzNTJkMDE1MTI4ZTdhYTNmOGZlYjgwOTg0MGFlMWI4OWFjNDlhNDFlMTViMjZiZjg0NCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiODQ2NTQ3N2VkNjEyOTdmNGI4NTAyYmEzNmU4YzM3Nzg1NGFlM2Q4YzgzMDA1YmExOTI1ZDA2Y2Y3NTBkNWU4ZiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNzliYmEwYTMwZjdkZGRiODY5Njk1NTQ4NTc1OWE1ODg3M2YwMjM1NmVlNzQ2YjdhMjFjZmY1YmZjODhlODIyOSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzdlNGFiODViNjRhOWM4YTlkYThkNWI5Yzk0YjViZjgzZTRlZjhlNWNkNWMxNjY1MDhkODYzYTJlYTI1ZDVkMiJ9"
  70. },
  71. {
  72. "resource": "repo://src/web.rs#L394-L411",
  73. "version": "repo-lines-v1:sha256:ae5215de4d7affbc92b010adc8ddd1dfad664b5e5f3aeb27dba89330c0f5036d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjEwODk2MWUyZDgwZWE0ZWQxNThjMDExZjkyYzQ4YjEyYWQ2ZjVhM2FmMjdlMjkwNDA5MDkyMTIxYTVhOGVlOWIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImEyMzhhMjNmMGFkM2ZkODI4NjY4NzhlZTcwZmI0ZmQwYWVlODlmODFiMDJmZTFmYmQ0YjVmNDAyNzI2MzBiMTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjdiYzk4ZDZiMGRjNDkyYzUwMTZkZjEwODA1YTNhNTRlYjljMTg0YTVhNjEzN2U3ZjRiZWNmYTBjMjIwNTUwZDAifQ"
  74. }
  75. ]
  76. },
  77. {
  78. "id": "claim_6fa3690efd134dd3822d716fed56c8bb",
  79. "statement": "API requests are forwarded to App as AppEvent::Web with a oneshot reply channel, and the web thread blocks until App returns the WebState snapshot; a closed channel or dropped reply yields 503.",
  80. "evidence": [
  81. {
  82. "resource": "repo://src/app.rs#L1429-L1447",
  83. "version": "repo-lines-v1:sha256:2f4f01d0941f73cc4f75516db52f02e977ce6e14b23e95d6c32f62cba267d74b:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA3YTEzOTMxODdkZWNmZmM0NzMzYzYwY2FiYjA2MTkwYjdkYjAxMjJjYWEyYWM3YjRjNGUwNzBiNzIxNTk1NWQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjM2MGUyOWExOGZkNDE5NDVjMjM3NTgxMzM4ZGI3NWFjOTIzYzYxYjVmYmFiOTNlOTM3ODdlNWJmMGMyMjk4OTciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImNjODZlNGU1ZWEzODcxYTk3ZDc5ZGFkOTAzNTM1ZDc5ZTcwOGIzMjBiZTViZjA3NDM4MTEzMTk0MWEyNzRiZDcifQ"
  84. },
  85. {
  86. "resource": "repo://src/web.rs#L140-L147",
  87. "version": "repo-lines-v1:sha256:9dff2fd116ff7266dafbe9bcec01fa24bb6ab864bc1c054f5a6fcb6449d60e7d:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMDgxZDE0MGYzZjljNjA2NWEyZmE5ZjY1ZTQwMmNjNjA0ZThkYmJhYmZlODc0YjAwODI5ZmNkNDhjZjNhY2ExNSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNTgzZjQ1ZWYzZjM2ZTMyODc0MmY3MjgzOWZmODVhOWZlYTc4ZGVkNmNhYWMzZjk0ZjA1YzAxMjFmMWIyODc0MyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiZTY5YTZmM2ExYjQ0MmYyNDllOTIzNWEzMTUxOWNkM2VkZTFlMDAxZWMzYzgxZmJhMWJiM2FlMTVhMjIwYjhmZSJ9"
  88. },
  89. {
  90. "resource": "repo://src/web.rs#L277-L294",
  91. "version": "repo-lines-v1:sha256:e861fb160a755c379dd5c34376e0b72ed82fbd0a5d14d1e45b1800dd0f424c99:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA3NTc5MmI3MWNhYTk3ZDhhNGNiMzI2NGVkYTgxMGE2ZTkxMmY1NTFlY2JkNzAzMTQxMTg3ZmQ0MTZjMjM4NzQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjczNDM2MjAyMzYwMmRiYmFiMWRmYzFmZmY5MzcxN2RiYzU2Yjk1ZDhhN2JmODFhYmVmNDQ2MTZlNmEwMDM3ODYiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImYyYjNmMGVkYWNhNjE2MDgyMThmODc3ZmEzM2NiNzJjZTc5NzMyZWJhMDc0ZjBkNTUxNTc3NWY4OWUwZTAwY2QiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc2M2E2MWI4NTY0MTFjMWYwMGJmYzJhNDE2YjE4Mjg4MThiYjk4NzYyMDYwOTYzOTZlMzMzNmQ4ZWM5OGYwODkifQ"
  92. }
  93. ]
  94. },
  95. {
  96. "id": "claim_92efe37fdfa340458d352cfd0c9d653f",
  97. "statement": "The quit route writes its 200 response before sending WebCommand::Quit without waiting for the reply.",
  98. "evidence": [
  99. {
  100. "resource": "repo://src/web.rs#L258-L275",
  101. "version": "repo-lines-v1:sha256:155b300223ddf57fcf0446c63d0fe37474bd4a7d5c77f97cb07f527646eac78d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImE0YWQxNDUzZDYzOTBhMjY0YWY3NTcxNTJlZmI2ZDdhMDM1YWQ4YmQ4MTE0ZWZkMWRhZDI4MzAzZDM4NGViNmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk2YTMwMjE3MjllMmY0MzA2ZTIwOTY5YTU0YWM4YjFmMTA1MzIwMmM4Mzk4NWM5NzA4OTU3NmM2NzQ4YzE1MjAifQ"
  102. }
  103. ]
  104. },
  105. {
  106. "id": "claim_4ce4cb65f51445c9b7ad852328ccfa6f",
  107. "statement": "The browser page polls /api/state every 5 seconds while visible (every 2 seconds while WhatsApp is not connected), sends the X-Wh-Request header on every POST and orders responses with a ticket counter so stale polls do not overwrite newer toggle results.",
  108. "evidence": [
  109. {
  110. "resource": "repo://src/web_page.html#L416-L417",
  111. "version": "repo-lines-v1:sha256:4c8b0e851a2538b88a9455e95c394596dea318f931d8020c1d9573933faff85d:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOWE2MDhiOWU1ZmE1OWUyMjQyYWY4N2U4MDM5MmYwMjVmYmQ0ODFkYWJkYTZiNWMyZmI5Mjg3ZjIyOTk3MWE1OCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNjZhY2FmNWU0ODFjNGJmMzE2YTM4YTZhOTczNmMyYjBhNDFmNGJkYTFmOTQ4YzdkNTU3NWIwYWE3YTE1Y2Y3MCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiOWI4OWM1NTlmYWUxYTMyYzA2MDE1ODQzZWU2YWEzMWU3ZDY1M2JjZWQ2YzI1NmM4ZGFlMTllYWYwNjk4MGJmYyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYmY1MWRlZTMxZmYyMmU3NTE0YmRmOWYwNjNlYjIxOWMxZWI0MDYyM2ZlY2ZlMTI5ZGNiZjAyMGNjNjZjNTc4ZSJ9"
  112. },
  113. {
  114. "resource": "repo://src/web_page.html#L475-L484",
  115. "version": "repo-lines-v1:sha256:7b6d2b04110398692241256da2fc7b0be08d5ec5f56a928bacf625c9b8bfcb56:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhZjIyY2YwNzMyNTkyYzI0NzE0MWNiZTYxZWZhMTEwMTI2MTJmNWEzMTIyYjlhZjliYmFmNTJmNTcyNGQxOTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZiNTgwZTk2NGY4M2E0NzNmNDNkNDQzODQ2Mjk0OWQ2OGI1NjAwZmRhNzg3ZjE2Mzc0NWQwMGRlODljYmYzNmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImNlNDhiMTQzZTUxMjVjNzBhMjUyNTdmMTY2MzI2MDE1ZTBhYzdiYTBmMzlkOTY1ZTZjMmY1YTczZjlkZDVmYTkifQ"
  116. },
  117. {
  118. "resource": "repo://src/web_page.html#L703-L784",
  119. "version": "repo-lines-v1:sha256:c47b354da3f2a2f89fc81593d9acf896016b6125b92c47556517046b70378798:eyJzZWxlY3RlZExpbmVDb3VudCI6ODIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhZjIyY2YwNzMyNTkyYzI0NzE0MWNiZTYxZWZhMTEwMTI2MTJmNWEzMTIyYjlhZjliYmFmNTJmNTcyNGQxOTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg5MTRjMDFmMzFhZjgzMzczMDk0NGE5MzZjMWJjNTg4MDlkNTkwNjAzNGMyNGNlY2EyOWE5YTU4M2MzYjE4MjUiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjFjYjQxNTIxYjRlM2FlYmVmYTc3OTBkMzMwY2E3NzE1NzJjNDUxMzU0ZTY2ZjI4Mjc1MGIyY2E1YTE1NmMxNjUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjM3OTI5ZTkxZTBmOTljM2U4MjVkZTY5YjQzNWZiNjQ4NGQxYjBhMWRmMmY0NjU2MWFiZjFhMjlmMDQxODhiODgifQ"
  120. },
  121. {
  122. "resource": "repo://src/web_page.html#L823-L847",
  123. "version": "repo-lines-v1:sha256:bdeccd31cb679fe52d1ccf1cfe46b8f36c2c4ca6a2ee5a02f02d5e018246a621:eyJzZWxlY3RlZExpbmVDb3VudCI6MjUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhZjIyY2YwNzMyNTkyYzI0NzE0MWNiZTYxZWZhMTEwMTI2MTJmNWEzMTIyYjlhZjliYmFmNTJmNTcyNGQxOTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZiNTgwZTk2NGY4M2E0NzNmNDNkNDQzODQ2Mjk0OWQ2OGI1NjAwZmRhNzg3ZjE2Mzc0NWQwMGRlODljYmYzNmEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc0YzRlNDU1MWQ1NTYyYjdkNzM1OThiMTYzOTIyNmEyOTE2MDJmYmRjZDE4OWM0NTliYThiMmQ3OTkwYjIzOGIifQ"
  124. }
  125. ]
  126. },
  127. {
  128. "id": "claim_9c11f6a9f5b946d2b4092f7244c30d4f",
  129. "statement": "WebState also reports the current screen as connecting, pairing or main and, while a pairing QR payload is held, the QR code as an SVG document rendered by qr_svg; an unencodable payload yields null.",
  130. "evidence": [
  131. {
  132. "resource": "repo://src/web.rs#L125-L138",
  133. "version": "repo-lines-v1:sha256:fbad46fb3a55d90c9fc4c33c1b9c90419816360630851b1b616ef2cbf9f6c491:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjU3MTZiNTVhZWU2YTVlNjNhM2U3Y2FlOGY2YjlhNGU0MzRhMmZmYTE4NTBhMjhhNTFkNjRjZmUzMDFmZjkxMmEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImNlN2E5NWQ3ZGMzNzRjNzc1YjVlOWQ0OTE3OTFmYWRjYzA3NjdkYTFhOWFkNmZiMTgyZGNjMjk5NTc5YTcyOTEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjE4OGVjMTc0NDhiZWQ3ZmI1YjcxYWYzZWUyZjAwY2M5MjAzMTJlMDM2YzBiODQxZTdmNGE2OTVhNjlmMjViYzMifQ"
  134. },
  135. {
  136. "resource": "repo://src/web.rs#L34-L46",
  137. "version": "repo-lines-v1:sha256:5441ac1ffdef7b159cbf366e69f7988f719b0b5b0070fa9c484fc6ece13f85bd:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQwY2Q2M2U1YTllNmFjMzM4N2E2OWM1NTBmNWQ5YzIzMGIzN2NhZGM4ZDI2ZDllNTI5MGVkMzU3YzE5NzY0YWUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVlMTI1N2EyNDMwZTYyZDRjZTU3ZTQ2MjlmZDg0YzNiYTcyY2RhNDgwMDM3ZjIzZGY4MGVkYzZiNDA0NDg4MDgiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImYzYmEzMTQwZTgwZjNkNzlkNTQ2YjA5YjgwZTljY2RjMGM4ZDk5ZjllNmYyNjljMjUyZmE0OWQyNzBlMGZiMjIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjgzYmIyNTJjMjU1NmVmMTM5MWJjNDU1YmEyOTAxZWQ5MTczNmQ2Njc2MmEyZThmYzExMjJlYTFhMWYzYjVmZmQifQ"
  138. },
  139. {
  140. "resource": "repo://src/web.rs#L366-L381",
  141. "version": "repo-lines-v1:sha256:e6d58dec7c8a45140e76290e175a7b2f5a9b3c59f60b3e244064813974a3ed1d:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjMxYjQ2MDBlYjQ4M2JkNTEzNjA1ZTE0ODVkNmRjNmNjMDA3NjJkNzRiODNjNzg4OTQ2MGQzOWNkMGRjMzQ1YTgiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ0NGIyYWRlMGYzNzRmOGZjZGYxNGM5MTQxYzNkNTMxYjcxMzgwN2ZkZTc0NzI1NTZiOWJlNDI1MjE5NzM4OWYifQ"
  142. }
  143. ]
  144. },
  145. {
  146. "id": "claim_6434b6fdb46f4db6958e31fb3b9a6f55",
  147. "statement": "The browser page shows a pairing card with the connection progress or the QR image while the screen is not main, and its 'Nuovo QR' button asks for confirmation before posting /api/relink and applying the returned state.",
  148. "evidence": [
  149. {
  150. "resource": "repo://src/web_page.html#L680-L701",
  151. "version": "repo-lines-v1:sha256:2996469d07728fe9a9430abce7e412c174f30205d800ed61434df03a8c0d8913:eyJzZWxlY3RlZExpbmVDb3VudCI6MjIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkyYWQ3OTc4ZjRiODU3NDhjOGZiNzEzYzlmZjAyMTM3MDYxMDVkZWY3MjQwMmNjMGQwOThmZTg0MTUwYTRiYWMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImFhMjkzNzIyNTU4YzUyZGEzMGUzYjhjYTFjMTkyYmE1ZjlmNjA0NTNiOGJkMThmMjhlYjEwYTk5ODgwNGIzZTMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjExZTBkOTIwNWRlZGQyZjZkYTM2MTlhODdmOGYzZDY5Nzg2MjQ5YzAyZTVmYjAwNTdkODdkNzE5ZGIwNjMyY2IifQ"
  152. },
  153. {
  154. "resource": "repo://src/web_page.html#L787-L802",
  155. "version": "repo-lines-v1:sha256:edcf716f5c77bc9ba443f65a19535e9c1b254b9949a238743590df637a35157e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhZjIyY2YwNzMyNTkyYzI0NzE0MWNiZTYxZWZhMTEwMTI2MTJmNWEzMTIyYjlhZjliYmFmNTJmNTcyNGQxOTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijc2NTNiYWEyY2QxMjM0ZDlmZTgzOGNiZTJhN2EzODc1YTcyMWMxOTRmNGRjMjZiZTgwYjZlOTU5MGY2YzE3MmIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjU4MjJhZjlkZGY3ZTI1ZjQxYTFmZjU1NDA2MDljN2FhNGNhZmZjODBkMjhjM2VjNjkxY2ExY2RmOTMxMzQ0MDMifQ"
  156. }
  157. ]
  158. },
  159. {
  160. "id": "claim_b1096fa5dd8d4546896d8f4e96f57271",
  161. "statement": "Each WebChat in the panel state carries an optional avatar_url, the WhatsApp CDN URL of the chat's profile picture preview taken from App's avatar cache, null when not fetched yet or without picture.",
  162. "evidence": [
  163. {
  164. "resource": "repo://src/app.rs#L1990-L2006",
  165. "version": "repo-lines-v1:sha256:c2d9c9a91b384e368f619e50dfb7b5c40a6791f1e5936afb8ff8eeddeb228dad:eyJzZWxlY3RlZExpbmVDb3VudCI6MTcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImYxMTFhMDk4Y2E0M2I2Zjg1OTYwYTUxMjFiOGVmY2Y5MDVlZDZmNjdmZjE5MjY0NjcxZDhkYTFiYzhjZTEwNWQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjZmZWE5NWYzZGNkZjE2MDA3NzQxOTRlMGQxYzQ4MmM0YTFmZTYwNjcyYjNkZDAwNTk5ZGRjNjg4YTg2YTFlYWUifQ"
  166. },
  167. {
  168. "resource": "repo://src/web.rs#L112-L123",
  169. "version": "repo-lines-v1:sha256:c5fdd49df38b20cfcf7dceab82726fe734595fbadb9f46e8ff6e5d719135051c:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM4NzliYWUzOGUyYTU0NjA2NzhhNGMzNTEwZmY4ZmRhM2RhNjRlNzg5N2NlZGJkMjViM2U1N2U0MzhjZDVlMDEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5MjE5MDY2M2Q0YzgwMTM5MjgzNGZmZDdjMzNjZGRmODI3YjYxMWRjYTY3OGNhZTc2ZGY2OTJkYjY5MGUyNTciLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImM5MjU2ZWJhMWRkYzMwZjUxNzllYTZiZjVkM2YwNDEzYmVhNzlmMzcwZDZiNzdiYmUzODQyODYyMTNjMzY3ZjYifQ"
  170. }
  171. ]
  172. },
  173. {
  174. "id": "claim_fca3032fc2c94efb808f699e7522639e",
  175. "statement": "Every web request ends by calling maybe_start_avatar_fetch before the state snapshot is sent, so profile pictures are fetched only while the panel is polling.",
  176. "evidence": [
  177. {
  178. "resource": "repo://src/app.rs#L1434-L1447",
  179. "version": "repo-lines-v1:sha256:95ccc404cb44631061c7ce41c398bebcd048da051c5235b86d9599d5d4b19096:eyJzZWxlY3RlZExpbmVDb3VudCI6MTQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjhmODZlNzYwNTJhYmUwM2IyNzhmNDYwNDMzZjkyYTYxZTlhNmZjNmEwNjcwNDI4ODRkNzIyYzZlYzZjMDVhMDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjkwM2FjNDE5MWFjMTU4NzhjMTg5N2Y3OTdjMDU3MGM5MzZkOWUzODQ4Mjg4MTkzZDFjNmQ4YTdjMzAwZDUwNDMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImNjODZlNGU1ZWEzODcxYTk3ZDc5ZGFkOTAzNTM1ZDc5ZTcwOGIzMjBiZTViZjA3NDM4MTEzMTk0MWEyNzRiZDcifQ"
  180. }
  181. ]
  182. },
  183. {
  184. "id": "claim_a093c2f5ba2b4cbea9d25e3baa673f93",
  185. "statement": "The browser page renders each chat with a round avatar showing the upper-cased first character of the name, overlaid by the profile picture when avatar_url is set; the image src is replaced only when the URL changes, it is loaded with no-referrer policy, and a load error hides the image so the initial shows.",
  186. "evidence": [
  187. {
  188. "resource": "repo://src/web_page.html#L186-L215",
  189. "version": "repo-lines-v1:sha256:02e39e40f7618fd3d1b7eec5e87503b1b0ee1acb7cde76875c4387d28cb6d42b:eyJzZWxlY3RlZExpbmVDb3VudCI6MzAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdkN2M0YWY2YzM4NThkNDc0Y2E3NDU0NzgyNjEzNjc4M2E3MmY4YTZjYTc0Mjc4NjlhN2IwNzA0Y2IyNmRmMDIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhMDNlZmQ2YTA5MTllOWZkMWE1NDc4ZGJiODhjMGYwZTJlZmE1MjlmZWFiMDYzYWIwMDcxNjAxZTVjZWRiMmEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZiNDc4NmNiNzI3NDE2MDVjZWFiMjVkNjcwNDdjZDk2YTc3ODA5ZmIzMzdiMjM2MDE5MTRhNjhlMTk0MGMwOTIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjAxMDczMGVhMDBmNjU3YzIzMDYxNmViZjgxMmZlODEwMmQ4YmJjYzFjOWZmZGNjNWFjZWRjYTY1ODlkZmE2NTgifQ"
  190. },
  191. {
  192. "resource": "repo://src/web_page.html#L543-L624",
  193. "version": "repo-lines-v1:sha256:0f784ee083486fa4bab91b1c565bb4f77f4099ba8a05f58b1ba83f9d8f394736:eyJzZWxlY3RlZExpbmVDb3VudCI6ODIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVhZjIyY2YwNzMyNTkyYzI0NzE0MWNiZTYxZWZhMTEwMTI2MTJmNWEzMTIyYjlhZjliYmFmNTJmNTcyNGQxOTQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE0Y2IyNzU0MWM4OTUxOWJlODQwMWM4Y2ZmODE3OWQwYmU5OGFjMTk1NTkzZTg1MDYxYTJlNWMzMjMwNDk1NjEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjkxZGZkZTU1OTBmNGZkMGVmNzI5ZDNhZGI1MmE0NjIyNTYxMGM3NzNjOGEzZTQ0NGFkYTRiYTg4MDMyZjExYTgifQ"
  194. }
  195. ]
  196. }
  197. ],
  198. "verification": {
  199. "by": "openwiki/0.7.2",
  200. "at": "2026-10-25T12:54:53.684Z"
  201. }
  202. }