| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- {
- "schemaVersion": 1,
- "pageVersion": "sha256:21cc0fb63966a544bddde383e86cf876395c9fc874b47d7f29a65bec3fdf80e7",
- "claims": [
- {
- "id": "claim_c5dd9ee6003245adaa1701eb40862582",
- "statement": "Role serialises to system, user and assistant, and ChatTurn holds a role and content.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L40-L65",
- "version": "repo-lines-v1:sha256:2985d21aab6a595c3f5ede27b794f4b4793b24bfb2676f79788e10d0f5c1638c:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjA5YzYwYmU2NjI3ZGFmNGM2MzEzZThlMTdmNzExNzFjY2RlYWU5MjZiNTBlZmU1ZWIyNTljN2FhN2Q0MGUzZDUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjJmNzFiMjQ4YTgyZjdiZjQ0YzUyZmY4ODk2NDNiZWJmNGI1YWNjZmQ4N2YzOWIzNWIxNGZiNTU2MmRkMTRlODgiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6Ijk0ODgzMTY4NjYzMDEyM2RlNmQ0ZmJlNmJiYjBiZmM5Njg1MzgzOTI3MmQ1YTNmYzFiZjViMjdiZWY3NjlkNTUifQ"
- }
- ]
- },
- {
- "id": "claim_93019c6e84b74870ba0a05b843fffef8",
- "statement": "AiClient and ImageInput Debug implementations omit the API key and image bytes.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L79-L114",
- "version": "repo-lines-v1:sha256:b5153594d9ad9919e3ec2998b8a919a82896f11b12e49d60f9ba2a0e9d9e99e8:eyJzZWxlY3RlZExpbmVDb3VudCI6MzYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjE2NTYxZDE4YzQxMTY4MjBjZGFiOTJmMjQwNDVhNzlmMTVlNzZmZTdiY2FiODY4Y2JkYTMyZWI1YzM0NWQ1YmMiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjlmNmJiOTYyNTQ3MDUwOWQxZGNiM2Y4NmFhZTRhYmY2MzY1NTgxZTYxOTQ4Y2IxNGE4MDUxOWIyNzA0NGVlN2YiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjIyZmQyY2VkZGZlMDVkZDM4ZTYwZmRjYzkwNGU1OWZkZTM3Y2IxODY4Yjk3MzhlODJkNWI2ZTIxZmE3Nzg0OWYifQ"
- }
- ]
- },
- {
- "id": "claim_5dfcd52a48d349059a04d949e6637509",
- "statement": "AiClient::new requires openai_api_key, uses a 60 second request timeout and builds the endpoint from the base URL without trailing slash plus /chat/completions.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L123-L146",
- "version": "repo-lines-v1:sha256:db0bee879f2e4478a109162fbc51bdecbf1b9713d605a6c093c17f94bcc77662:eyJzZWxlY3RlZExpbmVDb3VudCI6MjQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQyMDRmMzBiYmM1OTNhOGQxOGFiYTY3OWYyMWQ0ZGY1M2JiN2YxYjdlYWIwYTNkNDRmOWJhMjgyZmVhYjFhYjUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjA2YWQyYTE2MzQ0NTcwYjlkY2QwODA0NjQ4Y2NhNzgxYTA0YmRiNWVmMTkwYTQxZGRlOWQ1N2NjYzE0ZjBhY2QiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImY0OGYzMmRjZTI0MWMwNmFjYzBlZjdjZTc4NWM4MGZjM2E5NTk3MTZlODYwNTcwYjdkZmM0MWNiYjg0MWZjNDkifQ"
- },
- {
- "resource": "repo://src/ai.rs#L23-L26",
- "version": "repo-lines-v1:sha256:387091425f02a452aec12422a8131f0728f26389419cee2af4500edf72eba0d1:eyJzZWxlY3RlZExpbmVDb3VudCI6NCwiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZTdjZDhjOGU3Yzc4MWIxNTNhYzUzOGI4MGU4YmUwYjI5OTkzZjNlMTI0ZThmYjRhMzcwOGQ5Yjk5YzkwNmRlZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYzgxOGM0OTA5ZDY1ZmUwYmI0NWFmYjQyYmNlNTE4YjA1MzlkOTFhMzY2NzUyMWMwMTYxYjYxMzkwZGY4MTI2YyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiZjAxZGVmODgwNmEwNDc3ZGQyNTdmOGM5NDlkZDViOWE3ZjA2MzZjOWQzZjkwY2VlZWQ3OTRkZjE0NjZlOWIwNyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYzY0NGQwYjM2ZWY3MmUxMTU1YTY5N2MwNGU4ZmZhNjNmZDU1MjQ2NTkyZWI2YTM3MTNkNjA2M2Y3Y2JjYjBmOCJ9"
- }
- ]
- },
- {
- "id": "claim_c2b08a6fd5474b718caeccd3caf28a21",
- "statement": "The default base URL is https://ollama.com/v1 and the default model is deepseek-v4.1-flash.",
- "evidence": [
- {
- "resource": "repo://src/config.rs#L30-L32",
- "version": "repo-lines-v1:sha256:ace88a2257793291dac3b3a9be115c8460366e7dce83953bc6d52977e07763a4:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZTc2MTBlZDMwOGNjNWU5MmE3MzAxODA5ZDE1OWZiODlkOTg5ZjIxYTNmZjMwZTc5MGQ2NjU4ZDAwNTM0MThjNCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiYWM0ZGZhMzdlOWNjNjNjNTM4MmEzNjg2M2Q2Nzg3ZWU0OWViYTU2N2EyNGFiYmYyZGI3OTlhN2YwOWFjMmI1NCIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiY2JiNmQ0YzQ2ZTZkZWY5ZGZmYWRiYzZiNTIwN2U4N2EwZTI4MzQzMjliZmI0M2I1YjI2NmU2MTA0Y2RlZWJiMiIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiN2U4MDVmNGIzNWUzODc2YTEyODk5MTUyODJhZGE1Y2QzM2E3N2Y1MzJiZjI5YzE4Yzg5ZGEyMmIxNGNmNTBiZCJ9"
- }
- ]
- },
- {
- "id": "claim_f1bcd507d7bc494488698809a5e4d5af",
- "statement": "complete sends a body with the model and role/content messages.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L155-L157",
- "version": "repo-lines-v1:sha256:a3ec9a09465e569f49aa094724a4248349e01af6882b33eff3ef98c7a36479b5:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiMGE5MGZlNDNkOTJhMDA1YTM3YjEyYmM5Nzk3MTIxNGVjNDc1NDk2MTc0MmUyNzQ0OTgwODQ0ZTVkYWFlMTNmNSIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiMGM3M2U1ZDEwODQwYmM2YjFhODk4YTJlNmM0YjY4MTg3NWJlOTYzYmZlMzU4NDU1MWRmNjZiNTUyZjRkNmQyZCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiM2JlODA2YWQyMDg1ZmYxMDNjZGJjODM1ODRkYjM4MGRmNDU5N2YwNmQ0YmY5NDk0Nzc0ZDVmZGVlODliZjBiYyJ9"
- },
- {
- "resource": "repo://src/ai.rs#L251-L265",
- "version": "repo-lines-v1:sha256:8da73c5db165f5fa75abc3690914fecd0fa4f4cf69f9b6e00754f6aa06259d9b:eyJzZWxlY3RlZExpbmVDb3VudCI6MTUsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdiZjlhNjk0Mjc3MDY1MDI5ZThmZDIwMjYwYzBmMzZjZDNjMDYzYzQ5Yjg3NTU2YzI1NzdjZDZiZmZjODM3NDEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImMwNDdhZDE2MzZiMWQ2OTc3ODM5NDBjNDMxZmIzN2IwZjFhMWRjNTNlMzc2YzI1YWZkZGUxMGJlYjI3ZGE1MjAiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6ImFhYTYwMmMyOGUzMzA2N2Y1NjhmNDcxYmYzMDQwNGM0ODllMjZkZGJiNmU3MWZiZDVhNDlhZTY4NTIwMWQzZDEifQ"
- }
- ]
- },
- {
- "id": "claim_eca836c7fc554ba9b5a1e0bbfe970f9d",
- "statement": "complete_with_image requires a vision model and validates that the image is non-empty and at most MAX_IMAGE_BYTES (5 MiB).",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L18-L20",
- "version": "repo-lines-v1:sha256:cddeca6fba6fde7769f6cdec95f08d62b34b93c4f1a6822927f4b106a7db0a07:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNTkyZDVjNzYwZTNiYmRlNWQ3MDRlNjE4YWY1ZmVmZTY5YWMzODEyMjg0MGU3NTUwYjk1N2RlYTZkMjFiY2YxZiIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiMGJmZTUyOGM4OWM4NTc2YTQxMjYyZDU4NTdkMjE4ZDFjYWIzYTFhYzY4MzVlMGVjMDI4ODI2ZDk5YWVkZWVhNiIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDdiNTMxMDc0OTNkYTIyZTIzZmQyYTlmZTVjY2EwYjFhOGQzYjM2MmI2YzQ1YjkyMjZiZDM1OWE5MzgxODFiMyIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiMDM4NDJhNGNmOTA1YmJmOWY2NmFkNTY5ODljYjZiYmFhNjNhMzQ0YmIwMjUwNjY4YmU2ODVhNjZlMGRjYjgwZiJ9"
- },
- {
- "resource": "repo://src/ai.rs#L163-L188",
- "version": "repo-lines-v1:sha256:09e6dc97be82afa541e08754b7972d99101012d23043f13a33a5b715fae942de:eyJzZWxlY3RlZExpbmVDb3VudCI6MjYsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkxYzVkNjRhYTJhNTc0N2NmZjZkNGI0NTZhMDU5MjdiYjE0NTYxNDVmN2Y3NTMxMzRkNDJjZjk4ZDE0OGE5ZWUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjgxMWVjNjQyYTI2NDEzZmE1YjBmYWI4YzA5YzhlODhjZTU1MWM5YzgyNDM5NTlhOTlmNDI4NGVmZDg4ZTdiMzYiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjhjYjUwZmYxYTFiNjc3OTk5YTRkODM5ZDhlMjEwYTg3ZTFjMTE4OTYzOWE4ODYzYzJmYjlhZTAxMjI2ODFlNmIifQ"
- },
- {
- "resource": "repo://src/ai.rs#L311-L323",
- "version": "repo-lines-v1:sha256:243c30ce27815b3f4e71973311ebe2902652ba4d0e469d4320b987046b4aea2e:eyJzZWxlY3RlZExpbmVDb3VudCI6MTMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6ImY5YzNhMGViNjE4M2YxNzFmMmE4ZTQxY2JlNWFmMjc0YjdhNjk1ZmM5Zjk3YTAwZDUzZGQ4MmVmYmJiMDE2ZWEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImY1NjQyY2ZlYzYwMmNlYzJhOWUyZDk4ODc3OWUzNjIwZjkzZDU2NWRjZDA1MjM1NWFjZmFlOTkyMjAwODRmYjEiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJjZjMyZDY2ZGY3ZDk0Y2VmMmU2OTgwYjBmMDAwYzUyMTA4MmQ1ZmFhYTNjMTk4ZmM5OTVhMmYxNGU5MjE3Y2UifQ"
- }
- ]
- },
- {
- "id": "claim_23440e7b2c704bdd90c1385f5bcb4ecd",
- "statement": "The vision body turns the last user turn into text and image_url parts, or appends an image-only user message, embedding the image as a base64 data URL.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L274-L304",
- "version": "repo-lines-v1:sha256:0421b4eafacfa0da02301fb95fc4b94d4cd4b0a9d61791112860348f252e7675:eyJzZWxlY3RlZExpbmVDb3VudCI6MzEsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjdlZTMyOWRjZTI2MzIyY2FkMmI0N2E0NGU0MjY1YmEwNzM3YjM1NDJjMjM1MzUwZmQyMWZlOGI0MTNjM2M4ODUiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImRjNWUzZjQ5YTQ0MjE1MjlmZmI4NTMyNzkzY2ZlZTllNjlkMzFhNWZhMWY4YzA1ZGJlMTcwZGI0MTRlMGQxYjMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJjMWU2Yzg2MTE1NTc0YWZlM2FhMjAwNDYxYzRkMmUzZmRiNzI5ZjFmYjMyMjQzN2VmNGJhNWZmYzJmMDkxZGIifQ"
- }
- ]
- },
- {
- "id": "claim_8b2297ed4cce446aaf66b88450532f54",
- "statement": "request_reply posts with bearer auth and reports transport, read, non-2xx and invalid JSON errors with response bodies truncated to 300 characters.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L217-L243",
- "version": "repo-lines-v1:sha256:377803e3746f5be90128e5ac22c90103dc416685b89058e065fadf2ae66495b2:eyJzZWxlY3RlZExpbmVDb3VudCI6MjcsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjFmYWQyYmNjYzU1ZWJiNGE5OTJlNjQ1YmE4ZDBiNDc3MWFjNDk0YTcwMDhlMDUxOTk5MmMxOWQ4ZjQwYTFmYjEiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjUzNGRhMTA2NDE1N2QyNzIyZWNjYzIzNTUzNTlhZDIyN2IwYjQwNDU5YWRkMGM0YWRhODZkMTNhZDZlODJjZTUiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjlmNzAxY2VmNDIxNmQ1ZmRhYmUwMzRiMWRiMDQ3YjRlNmZhNWExMTM2YTM1MzEzNDg1OGYzNmQ4NjlhNTZiZDQifQ"
- },
- {
- "resource": "repo://src/ai.rs#L448-L450",
- "version": "repo-lines-v1:sha256:81326ce3f8703f9c90b0068b202df13efb9689c0fe8ee236b5f77cbaa6edc4d4:eyJzZWxlY3RlZExpbmVDb3VudCI6MywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiZGYzN2E0ZTlhMDhhNjc2ZjRjMTg3MTA1ZTk0OTQ2YWM4MjhiZWM4ZTZhMjlmYWMxYTk5NDk2ZDBiNjYwYWIyZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDEyY2EzNDVjY2Y3NWJmOWMwODA2YmNlNjk1YmU4ZGU4MDhiNzk5ODQyNTFhN2E1NGQyMDJjZjYxMDFkZDQ1MSIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiN2UyNTA4ZjI2MjVhMWRhY2EwMjIyZWMzYTdmYzNkMWQ4MzZjODdlZjQyODVhYTlmYzZiZmQ0ZTAwN2MzOGY4NCIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiN2JjOThkNmIwZGM0OTJjNTAxNmRmMTA4MDVhM2E1NGViOWMxODRhNWE2MTM3ZTdmNGJlY2ZhMGMyMjA1NTBkMCJ9"
- }
- ]
- },
- {
- "id": "claim_1acd5c55f8234d20bf935285166fe3b1",
- "statement": "parse_reply returns the trimmed first choice content and fails on missing choices or empty content.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L331-L348",
- "version": "repo-lines-v1:sha256:b4141c4af9d4b72b638ca3901c24c019a87de5cc0149465761d63c1c2a7b30c0:eyJzZWxlY3RlZExpbmVDb3VudCI6MTgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjlhNGJhYzcxZjEwYTkwZWNmMzZkMzM5ZjJjZGZkZmY3OThmNTk4NDE4ODc0NWM3M2IzYTkzMDVmMTE0YjI4ZDAiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImIxNDJlMWMwZDkyM2E5YWY0YzczOGRhZThhMjkwMjg1YzRmYmNkMmY5YmQ1OGY1NGMzMTk1M2NhMTliZDE4ZTQiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJjZTgwZDQ1MzU3ZWY2NWZiNjUzODgzZWEzOTU1NDMyMDMzN2Q0YjA3MzcxNzQ1ZWE0MGFkYzRmMGFjNTU0YTcifQ"
- }
- ]
- },
- {
- "id": "claim_81e7f0f6c91247d7a19ac4576bc19245",
- "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.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L190-L209",
- "version": "repo-lines-v1:sha256:ba98f0d5c85a04762a0b5b0f52b0312a6fe7010f6894234828e6040933fd49bd:eyJzZWxlY3RlZExpbmVDb3VudCI6MjAsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjUxNzY0ZmUzOGM2MTVjODM3MzM2M2ZhM2U2OTVhNTQ3Y2M0MGM5MjhmZjIwYjE0ZTI3NGRjZjQxNDI5NjI5MjQiLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQ4OTNmNDBlMzc4MWViODk2YzgyZDA0NmEwODA2N2ExMWUzNWNkZjJmMWRmYWYyNmZlYTkwYjhkYjY2NzY0MTMiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjZiMjBlNzhiOGRlMmI1ZDBlYzRlNDgwN2I0ZTNhODFmYzIyYjczMTQ4Mzg2ZWVmNzM1ZjZjYzFlMTIyYjRkZWMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJmNjljNjZiNTk4NDRmMjg4YzY3Yzg4NWY2NzQwNmEwNmExNjg4OWI4ZTc4NDMzNDZiMWUzNmRkNjRlYWIzNTUifQ"
- },
- {
- "resource": "repo://src/ai.rs#L399-L442",
- "version": "repo-lines-v1:sha256:708d606edee28a507ed556f78b94a9c7da74e9c069e02f390412464b7b2ea30e:eyJzZWxlY3RlZExpbmVDb3VudCI6NDQsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkxYjRlNWM3NzBmZmRlY2QyZDNlNDczNWUxNjFlOGZiMTVmYmM5NTFkZWMyNmI4YmY2ZWQ3MzdjMmVhZmE4MDciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZkMjAxZWU4NzY1ZDNhMzAxMjY5NDkzNmVkZjFmNWQ2NzlhMzAyN2ExYTgwMzg0MjJmYTkzZTZmYzllN2RkZWMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjJjZTgwZDQ1MzU3ZWY2NWZiNjUzODgzZWEzOTU1NDMyMDMzN2Q0YjA3MzcxNzQ1ZWE0MGFkYzRmMGFjNTU0YTcifQ"
- },
- {
- "resource": "repo://src/config.rs#L279-L285",
- "version": "repo-lines-v1:sha256:77a53fa11fa04d405caba6426205b2c57c25edd1b59ce057d5429c3cb0af854d:eyJzZWxlY3RlZExpbmVDb3VudCI6NywiZmlyc3RTZWxlY3RlZExpbmVIYXNoIjoiNzUyM2JkYmRjYjY1ZGIyYThmNWU0OGI0ZmUyMDdjOTUxYjdjNzE3NDYxYzgwNjUzODMxNjExZGI0YjMxZjdhZCIsImxhc3RTZWxlY3RlZExpbmVIYXNoIjoiNDg5M2Y0MGUzNzgxZWI4OTZjODJkMDQ2YTA4MDY3YTExZTM1Y2RmMmYxZGZhZjI2ZmVhOTBiOGRiNjY3NjQxMyIsInByZWNlZGluZ0NvbnRleHRMaW5lQ291bnQiOjMsInByZWNlZGluZ0NvbnRleHRIYXNoIjoiNDRhMWY2MWFmZTk3ZWM0YWZjODI1OWM4ZGI4MDljZjlmMjkxNWQ3ZWUwYWRlZWJhNzdkZDMxZDBjZmJkM2JhZSIsImZvbGxvd2luZ0NvbnRleHRMaW5lQ291bnQiOjMsImZvbGxvd2luZ0NvbnRleHRIYXNoIjoiYTUyMTYwNGIzNWZjNDBhZjAwY2JhNGVlYTJmZDVlMmMzYWYxODYzYjM5MTE4NWQ3YmY0YmIwOWU3MmQwYzhiMyJ9"
- }
- ]
- },
- {
- "id": "claim_f0daf29d06b746e4a4770b63d4051776",
- "statement": "Log records replace image base64 data URLs with a placeholder carrying only the payload length and never include the API key.",
- "evidence": [
- {
- "resource": "repo://src/ai.rs#L350-L397",
- "version": "repo-lines-v1:sha256:e830f325d8c43a24ff3d984cdf42ad06554b5a92cf56bc4bf6c77a580822e60c:eyJzZWxlY3RlZExpbmVDb3VudCI6NDgsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjNhZmRkOGE1NjBlNzQ4ZmFmNGRlZDhhYjJmOWU4NmUyMTU5NDA1YTAxMGUwYzE4YjI2M2NhNDE4MzAxMzFjZTciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6IjcwZmRhNDBjNDBhZTM2Yzk5ODVhZWRjMDE5MDM3NDJmMTViYmY5ZDY4N2IxZjk1MTVmZDkwOWU2ZGUzY2E2ZTkiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjFmYjc4NDZkODI2ZmYyZmU0ZGExODEzZjRmODQxM2ViOWEyMWQwZjZlNWUwOTFkMjFhMDI1OWI3NzhiOGIyNWMifQ"
- },
- {
- "resource": "repo://src/ai.rs#L399-L421",
- "version": "repo-lines-v1:sha256:e7220f3e055e3aba45c898158efa96ce9e802fc18cbcac7911028d984018c8ad:eyJzZWxlY3RlZExpbmVDb3VudCI6MjMsImZpcnN0U2VsZWN0ZWRMaW5lSGFzaCI6IjkxYjRlNWM3NzBmZmRlY2QyZDNlNDczNWUxNjFlOGZiMTVmYmM5NTFkZWMyNmI4YmY2ZWQ3MzdjMmVhZmE4MDciLCJsYXN0U2VsZWN0ZWRMaW5lSGFzaCI6IjQxMmNhMzQ1Y2NmNzViZjljMDgwNmJjZTY5NWJlOGRlODA4Yjc5OTg0MjUxYTdhNTRkMjAyY2Y2MTAxZGQ0NTEiLCJwcmVjZWRpbmdDb250ZXh0TGluZUNvdW50IjozLCJwcmVjZWRpbmdDb250ZXh0SGFzaCI6ImZkMjAxZWU4NzY1ZDNhMzAxMjY5NDkzNmVkZjFmNWQ2NzlhMzAyN2ExYTgwMzg0MjJmYTkzZTZmYzllN2RkZWMiLCJmb2xsb3dpbmdDb250ZXh0TGluZUNvdW50IjozLCJmb2xsb3dpbmdDb250ZXh0SGFzaCI6IjNhNTdiMWEyNDNlMjM2MjAyZjY2OGUyYmMwY2EyMTMwNDJmOTgwYzM4NGY4ZmMwZWRlNWZlN2ZiYzNkOTEyY2UifQ"
- }
- ]
- }
- ],
- "verification": {
- "by": "openwiki/0.7.2",
- "at": "2026-10-19T19:53:56.480Z"
- }
- }
|