ai-client.json 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. {
  2. "schemaVersion": 1,
  3. "pageVersion": "sha256:e71947f4ffd79153e75af279f7eade4504e8b9a729d276a1f1938a45a094f7a0",
  4. "claims": [
  5. {
  6. "id": "claim_c5dd9ee6003245adaa1701eb40862582",
  7. "statement": "Role serialises to system, user and assistant, and ChatTurn holds a role and content.",
  8. "evidence": [
  9. {
  10. "resource": "repo://src/ai.rs#L60-L87",
  11. "version": "repo-lines-v1:sha256:a3ba5081f556babe8c0b542175d88321a54c6a0d016283721c5f79da510b0435:eyJzZWxlY3RlZExpbmVDb3VudCI6MjgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRjYzU5YWNjMmRmZWM1OWI2NjE3ZDdmNmE5MTljOTNhZGU4NjU2MzU5ZGNhYTA5MjUxZDM0YzRlZmI4NTIzMjEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZmNDU4MTFlNWRlMTgyNWY2ZTllYTM0ZmM2NzAwNTg2YWQxNGViZDVhOTFiNmE3ODZkNTU5YTBhMmI4ZWU5NDQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk0ODgzMTY4NjYzMDEyM2RlNmQ0ZmJlNmJiYjBiZmM5Njg1MzgzOTI3MmQ1YTNmYzFiZjViMjdiZWY3NjlkNTUifQ"
  12. }
  13. ]
  14. },
  15. {
  16. "id": "claim_93019c6e84b74870ba0a05b843fffef8",
  17. "statement": "AiClient and ImageInput Debug implementations omit the API key and image bytes.",
  18. "evidence": [
  19. {
  20. "resource": "repo://src/ai.rs#L124-L160",
  21. "version": "repo-lines-v1:sha256:252913842faf254329b50d5fd74240a84fdd0456ec9e8e68bcc77e1d8883daa4:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2NTYxZDE4YzQxMTY4MjBjZGFiOTJmMjQwNDVhNzlmMTVlNzZmZTdiY2FiODY4Y2JkYTMyZWI1YzM0NWQ1YmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjM3ZDYwZjQxMWJhNTUxYTEzOGUwOWJkYjdiMDg5YjRjMGE3NDUyNTU2MzUzYmE3YTAxNGVhODA5ODEyY2M1Y2QiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjIyZmQyY2VkZGZlMDVkZDM4ZTYwZmRjYzkwNGU1OWZkZTM3Y2IxODY4Yjk3MzhlODJkNWI2ZTIxZmE3Nzg0OWYifQ"
  22. }
  23. ]
  24. },
  25. {
  26. "id": "claim_5dfcd52a48d349059a04d949e6637509",
  27. "statement": "AiClient::new requires openai_api_key, uses a 60 second request timeout, builds the endpoint from the base URL without trailing slash plus /chat/completions and copies the retry count from ai_retries.",
  28. "evidence": [
  29. {
  30. "resource": "repo://src/ai.rs#L169-L197",
  31. "version": "repo-lines-v1:sha256:f967f19779a732371d88712967219c8c951d71246e7691599693c2d86eaa50b2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQyMDRmMzBiYmM1OTNhOGQxOGFiYTY3OWYyMWQ0ZGY1M2JiN2YxYjdlYWIwYTNkNDRmOWJhMjgyZmVhYjFhYjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjA2YWQyYTE2MzQ0NTcwYjlkY2QwODA0NjQ4Y2NhNzgxYTA0YmRiNWVmMTkwYTQxZGRlOWQ1N2NjYzE0ZjBhY2QiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImY0OGYzMmRjZTI0MWMwNmFjYzBlZjdjZTc4NWM4MGZjM2E5NTk3MTZlODYwNTcwYjdkZmM0MWNiYjg0MWZjNDkifQ"
  32. },
  33. {
  34. "resource": "repo://src/ai.rs#L26-L29",
  35. "version": "repo-lines-v1:sha256:387091425f02a452aec12422a8131f0728f26389419cee2af4500edf72eba0d1:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZTdjZDhjOGU3Yzc4MWIxNTNhYzUzOGI4MGU4YmUwYjI5OTkzZjNlMTI0ZThmYjRhMzcwOGQ5Yjk5YzkwNmRlZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYzgxOGM0OTA5ZDY1ZmUwYmI0NWFmYjQyYmNlNTE4YjA1MzlkOTFhMzY2NzUyMWMwMTYxYjYxMzkwZGY4MTI2YyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMDg1MDNiYzliMGYzYjMwYjZmMzI3Y2ZlMzIwYTNhNDA0MzI4N2MzNDJhMmZhOTI1ZjYyM2M2ODAyYThkYTY3OSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYzY0NGQwYjM2ZWY3MmUxMTU1YTY5N2MwNGU4ZmZhNjNmZDU1MjQ2NTkyZWI2YTM3MTNkNjA2M2Y3Y2JjYjBmOCJ9"
  36. }
  37. ]
  38. },
  39. {
  40. "id": "claim_c2b08a6fd5474b718caeccd3caf28a21",
  41. "statement": "The default base URL is https://ollama.com/v1 and the default model is deepseek-v4.1-flash.",
  42. "evidence": [
  43. {
  44. "resource": "repo://src/config.rs#L35-L37",
  45. "version": "repo-lines-v1:sha256:ace88a2257793291dac3b3a9be115c8460366e7dce83953bc6d52977e07763a4:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZTc2MTBlZDMwOGNjNWU5MmE3MzAxODA5ZDE1OWZiODlkOTg5ZjIxYTNmZjMwZTc5MGQ2NjU4ZDAwNTM0MThjNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYWM0ZGZhMzdlOWNjNjNjNTM4MmEzNjg2M2Q2Nzg3ZWU0OWViYTU2N2EyNGFiYmYyZGI3OTlhN2YwOWFjMmI1NCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiY2JiNmQ0YzQ2ZTZkZWY5ZGZmYWRiYzZiNTIwN2U4N2EwZTI4MzQzMjliZmI0M2I1YjI2NmU2MTA0Y2RlZWJiMiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiN2U4MDVmNGIzNWUzODc2YTEyODk5MTUyODJhZGE1Y2QzM2E3N2Y1MzJiZjI5YzE4Yzg5ZGEyMmIxNGNmNTBiZCJ9"
  46. }
  47. ]
  48. },
  49. {
  50. "id": "claim_f1bcd507d7bc494488698809a5e4d5af",
  51. "statement": "complete sends a body with the model, role/content messages and a tools list containing only the parameterless no_reply function.",
  52. "evidence": [
  53. {
  54. "resource": "repo://src/ai.rs#L199-L208",
  55. "version": "repo-lines-v1:sha256:84db9a28e9fbaa3500a8750fd4e0562b0ca94d27cb5b716c579ef27b6d1ab945:eyJzZWxlY3RlZExpbmVDb3VudCI6MTAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRjOTFlMDQ2M2RhZDJlNGQ5NTk1YmYzNDkzMTdiZjFkNDRkY2ExMzI4NGNkZTEwMDIwNmJjYTFiNDFlYjBhNmEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImViOWEwOGJjMjlmNmViZWJlOWE1ZjAxOTAzZDk4NDVkYmNiNTg0MmE0NTVmMDdkNWY0MDAyZGFjMzJhNWM2MDUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNiZTgwNmFkMjA4NWZmMTAzY2RiYzgzNTg0ZGIzODBkZjQ1OTdmMDZkNGJmOTQ5NDc3NGQ1ZmRlZTg5YmYwYmMifQ"
  56. },
  57. {
  58. "resource": "repo://src/ai.rs#L343-L379",
  59. "version": "repo-lines-v1:sha256:dda6d7007908d587c35f4714ff74812e0a09bc602f912758f08b2a1b5d39175f:eyJzZWxlY3RlZExpbmVDb3VudCI6MzcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM5OGNjOWNlYzY5ZDJiZmQzNThlZTEyMzYxYWNmNWI4Nzc5NjI1NjUzMDRlNDcwOWJjMmUxMDE3ODU5YTJjZDQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU0OWVhZTIzMTIxNDdhOTMxMjNjMGE4ZjJlZTUyYmVjNTgzYTRhMzc5NjQ5MGQ4NmYxMWE3OWIzNWE2ZWViY2EiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijc1NDJjMzEwZjQwN2NjOGUxZjNiNzg4MDQzOTM4YTBmNzdkYWVkNDJmZDI4NTI3YTU2ZjRmMzUxNDY5OWE0ZjYifQ"
  60. }
  61. ]
  62. },
  63. {
  64. "id": "claim_eca836c7fc554ba9b5a1e0bbfe970f9d",
  65. "statement": "describe_image requires a vision model and validates that the image is non-empty and at most MAX_IMAGE_BYTES (5 MiB) before any request.",
  66. "evidence": [
  67. {
  68. "resource": "repo://src/ai.rs#L18-L20",
  69. "version": "repo-lines-v1:sha256:cddeca6fba6fde7769f6cdec95f08d62b34b93c4f1a6822927f4b106a7db0a07:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNTkyZDVjNzYwZTNiYmRlNWQ3MDRlNjE4YWY1ZmVmZTY5YWMzODEyMjg0MGU3NTUwYjk1N2RlYTZkMjFiY2YxZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMGJmZTUyOGM4OWM4NTc2YTQxMjYyZDU4NTdkMjE4ZDFjYWIzYTFhYzY4MzVlMGVjMDI4ODI2ZDk5YWVkZWVhNiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDdiNTMxMDc0OTNkYTIyZTIzZmQyYTlmZTVjY2EwYjFhOGQzYjM2MmI2YzQ1YjkyMjZiZDM1OWE5MzgxODFiMyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYWMzYWNhOGE0NDIxMDNkMDMwNGMzMjYzZmIzMzQxNzBkMjVmN2M3MmZjZjg2ZWZkNGIwZTE2MDY2NDBiYjk2NyJ9"
  70. },
  71. {
  72. "resource": "repo://src/ai.rs#L218-L236",
  73. "version": "repo-lines-v1:sha256:3b94ba30b7e5cb2d330d42ad007c48b0603bfef4b59fed9f017691dc5588825f:eyJzZWxlY3RlZExpbmVDb3VudCI6MTksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjUzNTRlMzRjMWYwMTgyN2YyMzk2ZTdlZTc3MWZkOTQ4MDhkOGFiNjlkMzIyOGU3NzQyNWI4MDIyMzM1NWRiYjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjRiZTViMmQ5MTI2YWViZGRjY2YxOWJlYmFiZTFmNjRkODYzZmQzODA0MWMyY2FkYjk3MzM3ZWFiYmZiNmUzOGYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA1ZWY0YzRmMGNjMDcxMzBjOTc1ZWVhM2E3MzdkMGJmOGNjZjY3MThiODUwMDY5NWY0NTU2Y2E2OTk5NmQ0YTcifQ"
  74. },
  75. {
  76. "resource": "repo://src/ai.rs#L408-L427",
  77. "version": "repo-lines-v1:sha256:092f50c0711f3d5bc0d27aec19da222f84f626a7d3a736ad917fcc84a58b6d9f:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjRmNjM1OTllNGU1ZWMwYTJmMzlmYWEzN2RlYTJlODQwZWIzYjQ2NmJmMGJiNDBlODEzYjdlMTMzYTI0ZGVjZmUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImUyYjlmYWRmNDM1MTMxNWMwYmMwMTE2YTQzYjNkYmQ5OGE0NWE5YjI0NjExYTg4Y2Q2ODRjZTMyNzlmOGE0N2EiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjYwNjNjNGQxYWY4Y2Q4OWJiMGJkZDc2NTdmZmNiZjY4MDZhNjEwZDc5ZDZjOGQ0YzMwN2MyNDFkZjM5MDA1MjIiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImJiZTExYTZmMDQxMTdlZjQ2MDZhNTZkNmMxNWZjNjE5N2Q4ODg5ODY1MzcxNTc1ZTk0MDg0ODg4YjBhZTEzOWYifQ"
  78. }
  79. ]
  80. },
  81. {
  82. "id": "claim_23440e7b2c704bdd90c1385f5bcb4ecd",
  83. "statement": "The image description body is a single user message holding the description request text and the image as a base64 data URL, sent to the vision model without tools.",
  84. "evidence": [
  85. {
  86. "resource": "repo://src/ai.rs#L381-L406",
  87. "version": "repo-lines-v1:sha256:504cd9a8e9a12796644c5e64bf2dfaf3e052ae4cdc48d88acb91a8674cd4d994:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkxMWU4YjYyZTMzYmM0ODQxYzg2YTUyYmJmZDQyNGFlNDFlMGJiZWE4MjQyMmQxMGUwZDIwYjlmMzA1ZmI0MGMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImY4ZTUxYTI1NDgwNDkyN2MwNDc3OTFjYjkyNmUxY2MxNTUwMzY3ZjhlYTA3NWFjNzk0MDc5NGIzOTAwZmUxNGMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJjMWU2Yzg2MTE1NTc0YWZlM2FhMjAwNDYxYzRkMmUzZmRiNzI5ZjFmYjMyMjQzN2VmNGJhNWZmYzJmMDkxZGIifQ"
  88. }
  89. ]
  90. },
  91. {
  92. "id": "claim_8b2297ed4cce446aaf66b88450532f54",
  93. "statement": "request_reply posts with bearer auth and reports transport, read, non-2xx (as a typed StatusError) and invalid JSON errors with response bodies truncated to 300 characters.",
  94. "evidence": [
  95. {
  96. "resource": "repo://src/ai.rs#L105-L122",
  97. "version": "repo-lines-v1:sha256:1e8751e4147e04846b7aafee348637638f2fc85f2f11b79537cc0246feaccc44:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImVmOTlmZDhkOTIwYjk2MTFiZmI3MDkxZTJjZTU3ODM3ZTY5MzY2NmVkNjRjMzFmNmIzMDY5MjJhYjVjOTBkMjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjM0ZGQyM2ZhMzVjMjczYjgwYzEwZGViNzUwYjNmM2M5NDFhNmJlMDg1NDBmNWFlNGQ2ODdkNjQyZmQ0NTQxNjQiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImJjMDk2M2MxZWY1YzRiMjZkZDNmNGY2MDhlZGRhZmNhMDRkMDVhNjI1ODk1YTcxZTYzMmY2N2Y4OTQxYjc2M2IiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjY3Y2VkMGUzMjc4NjE2MjcwZjFiMDY1NjRlYjlhMDUyYTczNTc0ZWJlYjgxODg0ZDM0YjIyZTFlMjBiMDM0ZTYifQ"
  98. },
  99. {
  100. "resource": "repo://src/ai.rs#L282-L314",
  101. "version": "repo-lines-v1:sha256:580ac5298eb243d788d0a8c2ab3c5d4b293ef2288d101b6f46bb06680a3bdbab:eyJzZWxlY3RlZExpbmVDb3VudCI6MzMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijc1MTkyMjFkZDdiYWFiZGNmMTIyYmJmNTU5ZGM5MGNiOWJmY2E2NTcxOGU4NTk1MDIyMGEzOGE1MTk0ODgwZTYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImEyYWMyZWMxODc1NDdmYTFiNzk2MjZiMGE0NjUyN2IwZDc2N2U0YzE0MzAyMTQyYjQ0NjdiMzY4ZDA2YjcyMTgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImI2YzllMjYwYjQyZThmYmJiMDRiOWZiM2UwOWEzNmMyZjI1OWI1MDBhOTM1OWE0OTYwMTA2NDYxNWIxY2Q5YjMifQ"
  102. },
  103. {
  104. "resource": "repo://src/ai.rs#L568-L574",
  105. "version": "repo-lines-v1:sha256:366599ee31cc7c09c20fa0ddcff49b42b55831d6b97ede5ec5da7376b9aaa450:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTgxODJmYmI3OGRjMzUzZjJkNjM2ZTc2MjU0YzYzNjIxZmQ2N2IyZjFlNzVmNTM0MzE0ZjFmYmI2N2IwYjJkZSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiODI0MTY5N2IzMjdjNjYxODJlYTJhODdjOGJmZDI1Nzk5Y2I5MTk3OGY0MTBhMmI0NjA4ZTM2YjZiZDc4YjUzYiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiN2JjOThkNmIwZGM0OTJjNTAxNmRmMTA4MDVhM2E1NGViOWMxODRhNWE2MTM3ZTdmNGJlY2ZhMGMyMjA1NTBkMCJ9"
  106. }
  107. ]
  108. },
  109. {
  110. "id": "claim_1acd5c55f8234d20bf935285166fe3b1",
  111. "statement": "parse_reply returns Reply::NoReply when the first choice calls the no_reply tool (even with text), otherwise Reply::Text with the trimmed first choice content, and fails on missing choices or empty content.",
  112. "evidence": [
  113. {
  114. "resource": "repo://src/ai.rs#L429-L477",
  115. "version": "repo-lines-v1:sha256:b50cbfe36f47a1bcbd306810d81baa272a3fb57a711164de89a741f5818b12ca:eyJzZWxlY3RlZExpbmVDb3VudCI6NDksImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImRjZjNhM2E5Zjk2MTJjZGJmMDZjMjU0YTU2NGY4NTBlOGFiZTEyYTNjMWNmZWRmNWYxMjJiN2IzMTlmZDdmYjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijk2MjY0OGRjYWQyYTIyOTY3Y2YzMGUxZDRhMGE2NDA0OGQyZmE4NGY0ODNmNTEyMjU4NjZmODIyMmJmMTVlZWIiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImU0MDRmMmRiY2YyZGQyYjZhMThkYWRkYjg3MTg4Y2E2NGQyMjZhOWZmMTJkMGEzNTNjZGIzMzM3YTcyY2NkODAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImIyMWNhYWEyZTk5ZTU2MTA0ZWU2MjkxM2JhMTY3ZTc0MmJkYzBmZDg0YmI3ZDhiODg5NzQyMWI2ZTExNzUzYWUifQ"
  116. }
  117. ]
  118. },
  119. {
  120. "id": "claim_81e7f0f6c91247d7a19ac4576bc19245",
  121. "statement": "When ai_log is enabled, send_body appends one record per request (header with timestamp, endpoint and model, pretty request body, RISPOSTA or ERRORE outcome) to ai_requests.log in the data directory, ignoring write failures.",
  122. "evidence": [
  123. {
  124. "resource": "repo://src/ai.rs#L261-L280",
  125. "version": "repo-lines-v1:sha256:80e196adb6578d005aa9692b9e78d664b43c74a606ded3b99a348545c412b065:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjUxNzY0ZmUzOGM2MTVjODM3MzM2M2ZhM2U2OTVhNTQ3Y2M0MGM5MjhmZjIwYjE0ZTI3NGRjZjQxNDI5NjI5MjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEyYTMyMmRjMWM3OTk2OTEzNTU1MGI0YzRkMzYyMThiNTQ4ZDY2NjE4OWRmNDFkMWM1ODIyYjU1MmE3OTljNjMifQ"
  126. },
  127. {
  128. "resource": "repo://src/ai.rs#L521-L566",
  129. "version": "repo-lines-v1:sha256:f5678d32b8e747a88110624d96ba85e6f0b191d2ff311ce41bd841dd4cd0a2a9:eyJzZWxlY3RlZExpbmVDb3VudCI6NDYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAxYmE0NzE5YzgwYjZmZTkxMWIwOTFhN2MwNTEyNGI2NGVlZWNlOTY0ZTA5YzA1OGVmOGY5ODA1ZGFjYTU0NmIiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjVhMDJhNmJkMDVjZjBmNWY4NmNlMjk3MTg5ZDk1MjJlYzU4ZWZhMzY1ZjI4NGNjNGYyOWE2NTk2NmQxODhiZWQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJjZTgwZDQ1MzU3ZWY2NWZiNjUzODgzZWEzOTU1NDMyMDMzN2Q0YjA3MzcxNzQ1ZWE0MGFkYzRmMGFjNTU0YTcifQ"
  130. },
  131. {
  132. "resource": "repo://src/config.rs#L333-L339",
  133. "version": "repo-lines-v1:sha256:77a53fa11fa04d405caba6426205b2c57c25edd1b59ce057d5429c3cb0af854d:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNzUyM2JkYmRjYjY1ZGIyYThmNWU0OGI0ZmUyMDdjOTUxYjdjNzE3NDYxYzgwNjUzODMxNjExZGI0YjMxZjdhZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDRhMWY2MWFmZTk3ZWM0YWZjODI1OWM4ZGI4MDljZjlmMjkxNWQ3ZWUwYWRlZWJhNzdkZDMxZDBjZmJkM2JhZSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYTUyMTYwNGIzNWZjNDBhZjAwY2JhNGVlYTJmZDVlMmMzYWYxODYzYjM5MTE4NWQ3YmY0YmIwOWU3MmQwYzhiMyJ9"
  134. }
  135. ]
  136. },
  137. {
  138. "id": "claim_f0daf29d06b746e4a4770b63d4051776",
  139. "statement": "Log records replace image base64 data URLs with a placeholder carrying only the payload length and never include the API key.",
  140. "evidence": [
  141. {
  142. "resource": "repo://src/ai.rs#L473-L547",
  143. "version": "repo-lines-v1:sha256:abb31f22842d8a444e09f5ec22b68f5ff8465a79ef1489ef4b124d21b18bcd0e:eyJzZWxlY3RlZExpbmVDb3VudCI6NzUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNhZmRkOGE1NjBlNzQ4ZmFmNGRlZDhhYjJmOWU4NmUyMTU5NDA1YTAxMGUwYzE4YjI2M2NhNDE4MzAxMzFjZTciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjBhNjlhODZmMTdiMzAyZWQ5MDgwZTZhMGNjNzY1ZTgxMmFiZmJmYzBmYmZjODNmY2Q5MTA5ZDQ0MWQ3MTExZTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRkNmI1NWM2ODQyOGJkOWU4ZDZiNGU0Y2YwYmJmYmI4Mjc4MWEzMjU4NjEwYWU5ZTAxMjI3NzA0NjM1MGQwN2IiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImVkMjc4N2RhNGI5YWFiNTIyZDRmZWQwODQ1MjY2YzFmMzk5ZWEwM2E4NTdjOTE5Njk2Y2MzNjk2Y2I1NjVmNGQifQ"
  144. }
  145. ]
  146. },
  147. {
  148. "id": "claim_9851fadc06844be99a0f3d957816a806",
  149. "statement": "Requests are sent through send_with_retry, which makes up to 1 + ai_retries attempts, retrying only errors accepted by is_retryable and returning the last attempt's error.",
  150. "evidence": [
  151. {
  152. "resource": "repo://src/ai.rs#L238-L259",
  153. "version": "repo-lines-v1:sha256:c006e232dbf853be3e7d3072eeee16260cafa0266b3e5044835b674eb20f8601:eyJzZWxlY3RlZExpbmVDb3VudCI6MjIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjYwNzBmYTg1ZjNiN2RjOGYwM2QwYjBmMjA2NWNhYzQ5NWYxNWQyNzQwMWExN2I4YzE2Y2Q4ZmQ5YWIwMWQ0MWQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjExYWIwMTYzYTk2YjkzZWI0ODA1NmUxM2Y4ODUzMTJmOGVhNDQ5NjcwYmY3MWU2ZTRiZTAxOTU0ODg1OTk2YjEifQ"
  154. }
  155. ]
  156. },
  157. {
  158. "id": "claim_3db025b2e15e4fafb172f9c85b626365",
  159. "statement": "is_retryable rejects HTTP 4xx responses other than 429 and accepts 429, 5xx and every non-status failure.",
  160. "evidence": [
  161. {
  162. "resource": "repo://src/ai.rs#L317-L332",
  163. "version": "repo-lines-v1:sha256:29bbd06d8acee1a3e8788f3a5d669981da5c3ff1da3d4ad7b5a66e0cfcd3a69a:eyJzZWxlY3RlZExpbmVDb3VudCI6MTYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImQxOGVkNTcxN2U3MjlmODcxM2RkZjJiYWE4ZGI1ZGZlZDgzNWYyY2JhZDI3ZGEwNTUwMzgwMWNiNmZlNTAwNGYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjE5ZTc2MzU1Y2YxMTk5NDgwYzNmOTk4MzZiMTQ4NmM4NDFkODkxZmFhZDkwNGM2MDhlMDkzMDIyZDM3NTdhZWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjVjZGFjZmMzNDYzZjY1NDljYjAzNTQ0MzdiNjg3N2YzYmNlZjVhNWQ4NDk2YmMwYjFhYzc0YTE5OWUyY2Q0YTEifQ"
  164. }
  165. ]
  166. },
  167. {
  168. "id": "claim_7034e6fb066940d290795dfacb0eec1f",
  169. "statement": "The wait before retry number n is 2 seconds times n (linear backoff).",
  170. "evidence": [
  171. {
  172. "resource": "repo://src/ai.rs#L334-L341",
  173. "version": "repo-lines-v1:sha256:97d05ac13a6dbe53449bb68ab41111ae5cd01fd47dfe333a12720fe3807b20ca:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiOTIwYTE1YWFhMWYxOTliZDY5OWE4ZDYwMmUxZjBmZTI4Y2EzZjY5MDBiYzdkMzRlNTA5ZjA3MDQ5ZjRkN2FiNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMTllNzYzNTVjZjExOTk0ODBjM2Y5OTgzNmIxNDg2Yzg0MWQ4OTFmYWFkOTA0YzYwOGUwOTMwMjJkMzc1N2FlZSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMmIxNGY0OGEzYjA0NzBiZWJhYWYzOTkyZGUzMWVjOTIzNzQ2OGI2NjhiZGYyOTE3NzgzODdiZGZmNmVmZWM3ZiJ9"
  174. },
  175. {
  176. "resource": "repo://src/ai.rs#L40-L41",
  177. "version": "repo-lines-v1:sha256:a6cd14dcc37ca5d183c435aa127ad8dbeef21602bc807930aa189eca98564927:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZGQ1MjU3MzRjZmE3YjA2ZDZmMWRhMDZkZTcwNWQ2MWVhOWU0NzhmNTBlOWVmOTgxYzZkMDUwNTVmMjMzMmY2YSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYzBhYmVjMDQ5ZGNlYzk3OWRhZGFkMTBhOGQ5Njc3NWQyNjZlZTc4ODg4NzIxMTdkMmVlZTQ2MGYzNzMwOGEwOCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiM2JkNzgyOGI3NTc2YTllMzY4ZGZlOTE4Mjc0NGQ5OTVmNGVmNDZmMzkwZDcyYmMxZDNlZjVlMjRlMjY0Y2QwMyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMDkxNDgzNWMyYmIwMWE3ZmI2NzE5NTA4ZDFlZTdjMzU1MzJlYTk1MWI4MDE4NDgyNDY1NTRiMzg3ZDI0ZTY2NiJ9"
  178. }
  179. ]
  180. },
  181. {
  182. "id": "claim_6439ccd0b4f54d9cad75a0e3501d84fb",
  183. "statement": "When ai_log is enabled, one log record is appended per attempt, so each retry is logged separately.",
  184. "evidence": [
  185. {
  186. "resource": "repo://src/ai.rs#L238-L280",
  187. "version": "repo-lines-v1:sha256:61675dd2723f8e4314c949dc027ac6e1a543b610794b2f4213100826f4f7eb90:eyJzZWxlY3RlZExpbmVDb3VudCI6NDMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjYwNzBmYTg1ZjNiN2RjOGYwM2QwYjBmMjA2NWNhYzQ5NWYxNWQyNzQwMWExN2I4YzE2Y2Q4ZmQ5YWIwMWQ0MWQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6Ijk5OWJkZWZlZWFjYTYzNDBlMDI5MGRjODZlODg5Yzg5ZDVlMTg5YWE1YmE0NGI1ODViM2I3MDczNGY0YTYyZDgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjEyYTMyMmRjMWM3OTk2OTEzNTU1MGI0YzRkMzYyMThiNTQ4ZDY2NjE4OWRmNDFkMWM1ODIyYjU1MmE3OTljNjMifQ"
  188. }
  189. ]
  190. },
  191. {
  192. "id": "claim_436ce19bdcf94d028d46da1886350561",
  193. "statement": "The image description request comes from vision.md when present, otherwise from the built-in DEFAULT_IMAGE_DESCRIPTION_REQUEST, and a NoReply outcome of a description is turned into an empty-reply error.",
  194. "evidence": [
  195. {
  196. "resource": "repo://src/ai.rs#L184-L196",
  197. "version": "repo-lines-v1:sha256:e959c04c9811c5e76d9abb77e95982781c484819d9218c76a6cf30f03ac92baa:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjAyZDhhNWIxYzc4MTIwMGExYTNiYmQ2NGI4MDU0Yzk3N2E3OWZkNDk0MDk3M2I3M2RlMjE5MTVkZjQ2YTFmMGEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY5YjE5ODJlOGRkNzQ4MTE4MTQ2YjM5YTJkMDA2MmY0MDgxZTM0Nzc5Yjg2NzVjMjM0YzRmYjEyNGRjMzkzOTAiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImI4NjJmMzRhNzU3YWRjNDZhMDMxY2JmY2VjZjI4NTQ1NDJkMDc5ZDEyZjAzNzc4ZGMwMzgwYTI3ODY0YjYyMWUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjQ4NGU3OGMwZTQzNDBjZGJhNzIzZTIwNzdiODQ3NTUzZTg0ZDNlOTkwMjZmZWQxOGIwNDUxNDA1Y2MxNzQxMmEifQ"
  198. },
  199. {
  200. "resource": "repo://src/ai.rs#L22-L23",
  201. "version": "repo-lines-v1:sha256:093425babc91b6274b3b8f3a786d50d409a30fc9e71342d62c8cc3f248520993:eyJzZWxlY3RlZExpbmVDb3VudCI6MiwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiYjdhOTc4ZWIwYzk2ZDZlMDlhM2MxNzI4ZjNkNDhlZTE5NTA4MDQ2MGEwMjAyOGMxY2MyM2JiMjYzNTllY2RmMSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMjQzZjI1YjQzY2FmYmUxYTg5MDNiMjAwMThiMDEwZWE4NmJiZWQ3N2JhOTk3NjAwZTdjNTAzMmM5Y2M1Y2NmOCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNmY1ZjBkMGY4NWQyYWRmMmE1YjFmODFlNDY4NDJkZGRmMjljZTY2NDQ3NGY0MTllYjQ5NTAzMzMwMTNlYTU4NiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMDM4NDJhNGNmOTA1YmJmOWY2NmFkNTY5ODljYjZiYmFhNjNhMzQ0YmIwMjUwNjY4YmU2ODVhNjZlMGRjYjgwZiJ9"
  202. },
  203. {
  204. "resource": "repo://src/ai.rs#L225-L236",
  205. "version": "repo-lines-v1:sha256:bda19d95aafbb2269b1eb5d3138a4ddf5ed88f848b8254487116da95269ad3df:eyJzZWxlY3RlZExpbmVDb3VudCI6MTIsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6Ijg3ZmUwOTY4MzlmODMzNDkxOTA4ZTQ1NmFhNDI2MDJkZjQzNTc5ZDQyOWExMDg4YmVlNWRhNjE4ZjlkOWYwZmYiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjBiYjIyNTU2ZGUzMmVjZTc4YjRlYThhMjUwNjQzODVkMWZhYjdjNjA2ODk5MTQ2NDJmZjk2NjkzNDE4NzA5ZWQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjA1ZWY0YzRmMGNjMDcxMzBjOTc1ZWVhM2E3MzdkMGJmOGNjZjY3MThiODUwMDY5NWY0NTU2Y2E2OTk5NmQ0YTcifQ"
  206. }
  207. ]
  208. },
  209. {
  210. "id": "claim_70aafb70d3424afcaadc8fc0e2628054",
  211. "statement": "The no_reply tool description only says what the tool does, never when to use it; deciding when to stay silent is left to the system prompt in SOUL.md.",
  212. "evidence": [
  213. {
  214. "resource": "repo://src/ai.rs#L42-L49",
  215. "version": "repo-lines-v1:sha256:316aee398af311a49e09bb1b511935db92322af15e12d53c4ab9a88707448d9d:eyJzZWxlY3RlZExpbmVDb3VudCI6OCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMzk0M2Q3YWQzMjNmOTlkMDAzM2JjMTI5ODk3MmI3YmUwNzIxYjAxNDZjMmExYjlhZmZjYzc0NTcyYWFjZjNiNSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiZDk4ODQ5YjY2YWQzY2FiZTdlZmVjOGU1ZmI5YWI3NjJkYTc4MzViMzg4YzM4YWIyOWVkNDM1MjBiNGI4YTk1NSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZGNkYjE3MDIxM2RkOWVkM2I2OWExZmU5ZWYwNzg1YWRhMzljNzkzMDA3N2E0OGM5ODMxNWE1ZjJmOWFlYTIzNyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiNzUwZjY3OTE5ZWU2Y2JmNWYxY2VmYjNkZDIyMTViMWFmOTJmMDkwZDdhNWFjMDg3OGZlY2IwOWQ0YTczYzM4NCJ9"
  216. }
  217. ]
  218. }
  219. ],
  220. "verification": {
  221. "by": "openwiki/0.7.2",
  222. "at": "2026-10-21T21:49:12.291Z"
  223. }
  224. }