From bae144055e6b01759e2c90114eba2be372282e50 Mon Sep 17 00:00:00 2001 From: Andre Ferraro Date: Fri, 21 Aug 2026 11:00:29 -0300 Subject: [PATCH] refactor(llm): elevate prompt engineering with context grounding and contrastive taxonomy --- graphify-out/.graphify_labels.json | 4 +- graphify-out/.graphify_labels.json.sig | 2 +- graphify-out/2026-08-21/.graphify_labels.json | 9 +- graphify-out/2026-08-21/GRAPH_REPORT.md | 101 +- graphify-out/2026-08-21/graph.json | 2525 ++++++++++++----- graphify-out/2026-08-21/manifest.json | 42 +- graphify-out/GRAPH_REPORT.md | 38 +- ...9635f468f2b3f6a9564902ef4b5355b9d40e7.json | 1 + ...4da1a07c5087c261f9a4d84946b14af267305.json | 1 + graphify-out/cache/stat-index.json | 2 +- graphify-out/graph.html | 6 +- graphify-out/graph.json | 742 ++--- graphify-out/manifest.json | 12 +- src/adapters/llm.py | 91 +- tests/test_llm_fallback.py | 4 +- 15 files changed, 2401 insertions(+), 1179 deletions(-) create mode 100644 graphify-out/cache/ast/v0.9.47-s2/37c7075e5b486aeecc47f32dc299635f468f2b3f6a9564902ef4b5355b9d40e7.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/9009157bba0e34fe9c5ece500464da1a07c5087c261f9a4d84946b14af267305.json diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index 86b7751..622aae7 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.graphify_labels.json @@ -148,7 +148,7 @@ "146": "Specification Quality Checklist: Convert Article JSON to Markdown", "147": "CLI Contract: `convert_article_to_markdown.py`", "148": "9. Interface CLI", - "149": "get_hl_gl_ceid", + "149": "sample_rss_xml", "150": "13. Estratégia de testes", "151": "6. Contrato de entrada", "152": "InherenceClassifier", @@ -164,7 +164,7 @@ "162": "test_normalize_date_iso_8601_variants", "163": "test_metadata_priority_original_url_all_fallbacks", "164": "test_normalize_scalar_non_string_types", - "165": "LLMFallbackAdapter", + "165": ".disambiguate", "166": "remove_duplicate_initial_h1", "167": "test_normalize_scalar_whitespace_collapsing" } diff --git a/graphify-out/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index ef5c792..6efeda0 100644 --- a/graphify-out/.graphify_labels.json.sig +++ b/graphify-out/.graphify_labels.json.sig @@ -1 +1 @@ -{"0": "36bdb6f09c457f7c", "1": "8c5bf6244cf710c6", "2": "efbcc9c62a3ee78b", "3": "8599153989b07faa", "4": "b5952a1f7fee9f20", "5": "5b8462a3f82d188c", "6": "80f79e9e2011a3e3", "7": "4654167fd211d027", "8": "50acfa00fe353440", "9": "c6d2f770737823f1", "10": "44f2ca451aea24be", "11": "feaac5ab67a8c17a", "12": "b71bd92e5edbf2e0", "13": "219d65ba6d2689e4", "14": "8e30bb8112fd02d1", "15": "03906ab80b99db85", "16": "5d51c60ba1bc2be0", "17": "a1da914f522dcd21", "18": "fbad840891b90569", "19": "0686ff2d6fe29fb3", "20": "060baa9e1924b465", "21": "a5c8f2c3080b8243", "22": "0d76852f1d29eeb1", "23": "6ff68619f2d72924", "24": "3da11675eee7ec46", "25": "a6696589e9556f97", "26": "6c752999e8a4d4b6", "27": "2d4e13ea2111d750", "28": "4b60cb0ee1ac186a", "29": "f56fbca9bb8235ec", "30": "c7beed940704509f", "31": "38be2d254fb31ae8", "32": "ee5596fcf7e7c0b3", "33": "e4d4e0a440bc599f", "34": "c897e49c001acdae", "35": "3aad272a2cf5d495", "36": "0a197439d306b956", "37": "f43acf5c8b1329af", "38": "6775efafc9b33338", "39": "8176a164778526f9", "40": "66b69189c0acc3ff", "41": "0322ff824966a4d8", "42": "784c9e3d336a7f53", "43": "4b8bb6c3f7b64856", "44": "18c0ff3e6225bcb2", "45": "b18defdea7d53e37", "46": "54c0fceb01591230", "47": "0fad42a4989aa7e3", "48": "0237e1e02ee47a27", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6", "80": "6ff8a97e63c9a2f3", "81": "a38f84ae3d895236", "82": "dc6ddc157a3b9efb", "83": "a05140495d7a0353", "84": "24ca89fec34df075", "85": "f8bfd0cfe9e8b478", "86": "410d15a346bd5894", "87": "6b41d288cfd834ab", "88": "5aa6db96312a8811", "89": "80225792bb62ba04", "90": "e18a0a239fe528ba", "91": "d4579c5b7aa2742a", "92": "7b9ba7c3bff11361", "93": "71cd9c1fa4a857f0", "94": "34cd980be3c32d21", "95": "970093453f3b7d90", "96": "9e96780a2b7c4bd6", "97": "b7c10b0e09caac0b", "98": "089ea6a55861c693", "99": "cb6165a7dc822d29", "100": "8c97d8c400895e15", "101": "bd22248d0516e5d4", "102": "6aa00d5a83295f11", "103": "f58668f5b10ccdeb", "104": "4ec787414cc6f50b", "105": "1cf3077fd45d874a", "106": "edcd5d9bb3c4b00f", "107": "37f2f47110fe3eaa", "108": "b7ad5abb1da8cf8d", "109": "cb48a9c4f54efa38", "110": "f6dd36fd7f3edbe5", "111": "2925b620f0b1fd17", "112": "d8b3099917c3b711", "113": "3bb61caa0302c804", "114": "0d4f1d08dd056bb9", "115": "4ac2dcddeec2ff11", "116": "07da9aae9668f573", "117": "196f63e0c4536d30", "118": "ade84262e3cfac12", "119": "ebe4e5e0c42c613f", "120": "27256931b19a2867", "121": "5396e68ca6c185ad", "122": "aa8a1de55696b666", "123": "96618c9a362af46c", "124": "83f104cbb62fd03e", "125": "6db738fb27190349", "126": "6a087a22cbcef972", "127": "85fd71a0cad8d3a5", "128": "22dd4feed96c4229", "129": "c4d2f60f532e6f16", "130": "f6b0aa8a1568926b", "131": "142d0db70bad18fe", "132": "67ea4284cbc02c54", "133": "d899cfc86c7a4a27", "134": "ba9464410a9b4168", "135": "0d496a12149eca27", "136": "521f5c7b9d566b4d", "137": "9e37828bdd2ba8c5", "138": "ec03c97194c56f91", "139": "f4e6d5dfa30034c5", "140": "d9b47fa423cf0748", "141": "1e0330b8757f333e", "142": "f35d75e1194c008d", "143": "4d2ae7190b514a34", "144": "4a98716cabf43f86", "145": "56b2431193739c38", "146": "edc785fd71bb0675", "147": "4c7347f8f86e1fbd", "148": "8ca77cc4fd6fd437", "149": "09850697b717469a", "150": "f4f4ce1a1180ddb1", "151": "e426746f6e9ee15f", "152": "756d0fd1d69866c1", "153": "a3593e6f45bafb20", "154": "56747bad6345d66b", "155": "a8e7498fa7e257df", "156": "56e7b2355898077f", "157": "f2fc88f7d8214711", "158": "c966f6f8570c8c29", "159": "5f6094aa385f3bfe", "160": "2834e7d59672e756", "161": "cc6e436d94fd0033", "162": "64f33a2fc8969cd2", "163": "26ac1c0a00eabce1", "164": "cdcea44a6805ae55", "165": "5faccba309eb478d", "166": "85c97dab928b9b1b", "167": "7ab5695391e32126"} \ No newline at end of file +{"0": "36bdb6f09c457f7c", "1": "8c5bf6244cf710c6", "2": "efbcc9c62a3ee78b", "3": "8599153989b07faa", "4": "b5952a1f7fee9f20", "5": "5b8462a3f82d188c", "6": "80f79e9e2011a3e3", "7": "4654167fd211d027", "8": "50acfa00fe353440", "9": "c6d2f770737823f1", "10": "44f2ca451aea24be", "11": "feaac5ab67a8c17a", "12": "b71bd92e5edbf2e0", "13": "219d65ba6d2689e4", "14": "8e30bb8112fd02d1", "15": "03906ab80b99db85", "16": "5d51c60ba1bc2be0", "17": "a1da914f522dcd21", "18": "fbad840891b90569", "19": "0686ff2d6fe29fb3", "20": "060baa9e1924b465", "21": "a5c8f2c3080b8243", "22": "0d76852f1d29eeb1", "23": "6ff68619f2d72924", "24": "3da11675eee7ec46", "25": "a6696589e9556f97", "26": "6c752999e8a4d4b6", "27": "2d4e13ea2111d750", "28": "4b60cb0ee1ac186a", "29": "f56fbca9bb8235ec", "30": "c7beed940704509f", "31": "38be2d254fb31ae8", "32": "ee5596fcf7e7c0b3", "33": "e4d4e0a440bc599f", "34": "c897e49c001acdae", "35": "3aad272a2cf5d495", "36": "0a197439d306b956", "37": "f43acf5c8b1329af", "38": "6775efafc9b33338", "39": "8176a164778526f9", "40": "66b69189c0acc3ff", "41": "0322ff824966a4d8", "42": "784c9e3d336a7f53", "43": "4b8bb6c3f7b64856", "44": "18c0ff3e6225bcb2", "45": "b18defdea7d53e37", "46": "54c0fceb01591230", "47": "0fad42a4989aa7e3", "48": "0237e1e02ee47a27", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6", "80": "6ff8a97e63c9a2f3", "81": "a38f84ae3d895236", "82": "08e48bd11f9714df", "83": "5095122914e83cf5", "84": "1aef305bd7d7d63f", "85": "f8bfd0cfe9e8b478", "86": "410d15a346bd5894", "87": "6b41d288cfd834ab", "88": "5aa6db96312a8811", "89": "80225792bb62ba04", "90": "fd291228c3311f40", "91": "d4579c5b7aa2742a", "92": "7b9ba7c3bff11361", "93": "71cd9c1fa4a857f0", "94": "34cd980be3c32d21", "95": "970093453f3b7d90", "96": "9e96780a2b7c4bd6", "97": "b7c10b0e09caac0b", "98": "089ea6a55861c693", "99": "cb6165a7dc822d29", "100": "8c97d8c400895e15", "101": "bd22248d0516e5d4", "102": "6aa00d5a83295f11", "103": "f58668f5b10ccdeb", "104": "4ec787414cc6f50b", "105": "1cf3077fd45d874a", "106": "edcd5d9bb3c4b00f", "107": "37f2f47110fe3eaa", "108": "b7ad5abb1da8cf8d", "109": "cb48a9c4f54efa38", "110": "f6dd36fd7f3edbe5", "111": "2925b620f0b1fd17", "112": "d8b3099917c3b711", "113": "3bb61caa0302c804", "114": "0d4f1d08dd056bb9", "115": "4ac2dcddeec2ff11", "116": "07da9aae9668f573", "117": "196f63e0c4536d30", "118": "ade84262e3cfac12", "119": "ebe4e5e0c42c613f", "120": "27256931b19a2867", "121": "5396e68ca6c185ad", "122": "aa8a1de55696b666", "123": "96618c9a362af46c", "124": "83f104cbb62fd03e", "125": "6db738fb27190349", "126": "6a087a22cbcef972", "127": "85fd71a0cad8d3a5", "128": "22dd4feed96c4229", "129": "c4d2f60f532e6f16", "130": "f6b0aa8a1568926b", "131": "142d0db70bad18fe", "132": "67ea4284cbc02c54", "133": "d899cfc86c7a4a27", "134": "ba9464410a9b4168", "135": "0d496a12149eca27", "136": "521f5c7b9d566b4d", "137": "9e37828bdd2ba8c5", "138": "ec03c97194c56f91", "139": "f4e6d5dfa30034c5", "140": "d9b47fa423cf0748", "141": "1e0330b8757f333e", "142": "f35d75e1194c008d", "143": "4d2ae7190b514a34", "144": "4a98716cabf43f86", "145": "56b2431193739c38", "146": "edc785fd71bb0675", "147": "4c7347f8f86e1fbd", "148": "8ca77cc4fd6fd437", "149": "8968e9e7d55afcbe", "150": "f4f4ce1a1180ddb1", "151": "e426746f6e9ee15f", "152": "b2337918dbdaf257", "153": "a3593e6f45bafb20", "154": "56747bad6345d66b", "155": "a8e7498fa7e257df", "156": "56e7b2355898077f", "157": "f2fc88f7d8214711", "158": "c966f6f8570c8c29", "159": "5f6094aa385f3bfe", "160": "2834e7d59672e756", "161": "cc6e436d94fd0033", "162": "64f33a2fc8969cd2", "163": "26ac1c0a00eabce1", "164": "cdcea44a6805ae55", "165": "a6e35f4937a5000c", "166": "85c97dab928b9b1b", "167": "7ab5695391e32126"} \ No newline at end of file diff --git a/graphify-out/2026-08-21/.graphify_labels.json b/graphify-out/2026-08-21/.graphify_labels.json index c50ebb9..86b7751 100644 --- a/graphify-out/2026-08-21/.graphify_labels.json +++ b/graphify-out/2026-08-21/.graphify_labels.json @@ -45,7 +45,7 @@ "43": "2. Basic CLI Usage Examples", "44": "2. Standard Streams & Exit Codes", "45": "ClassificationResult", - "46": "InherenceClassifier", + "46": "test_adversarial.py", "47": "classifier.py", "48": "test_convert_article_to_markdown.py", "49": "content_northvolt_de.md", @@ -151,7 +151,7 @@ "149": "get_hl_gl_ceid", "150": "13. Estratégia de testes", "151": "6. Contrato de entrada", - "152": "assemble_markdown_document", + "152": "InherenceClassifier", "153": "convert_html_to_markdown", "154": "JSON Schema Contract: Deterministic Article Content Selection", "155": "5. Escopo", @@ -163,5 +163,8 @@ "161": "test_normalize_list_deduplication_preserves_case_and_order", "162": "test_normalize_date_iso_8601_variants", "163": "test_metadata_priority_original_url_all_fallbacks", - "164": "test_normalize_scalar_non_string_types" + "164": "test_normalize_scalar_non_string_types", + "165": "LLMFallbackAdapter", + "166": "remove_duplicate_initial_h1", + "167": "test_normalize_scalar_whitespace_collapsing" } diff --git a/graphify-out/2026-08-21/GRAPH_REPORT.md b/graphify-out/2026-08-21/GRAPH_REPORT.md index c424036..0533968 100644 --- a/graphify-out/2026-08-21/GRAPH_REPORT.md +++ b/graphify-out/2026-08-21/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - TextNLPClassifierApp (2026-08-21) ## Corpus Check -- 200 files · ~108,772 words +- 201 files · ~110,162 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1527 nodes · 1899 edges · 165 communities (118 shown, 47 thin omitted) -- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 51 edges (avg confidence: 0.95) +- 1554 nodes · 1970 edges · 168 communities (120 shown, 48 thin omitted) +- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 59 edges (avg confidence: 0.95) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `926a6b8c` +- Built from commit: `cb33dafa` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -57,7 +57,7 @@ - 2. Basic CLI Usage Examples - 2. Standard Streams & Exit Codes - ClassificationResult -- InherenceClassifier +- test_adversarial.py - classifier.py - test_convert_article_to_markdown.py - content_northvolt_de.md @@ -160,7 +160,7 @@ - get_hl_gl_ceid - 13. Estratégia de testes - 6. Contrato de entrada -- assemble_markdown_document +- InherenceClassifier - convert_html_to_markdown - JSON Schema Contract: Deterministic Article Content Selection - 5. Escopo @@ -173,35 +173,38 @@ - test_normalize_date_iso_8601_variants - test_metadata_priority_original_url_all_fallbacks - test_normalize_scalar_non_string_types +- LLMFallbackAdapter +- remove_duplicate_initial_h1 +- test_normalize_scalar_whitespace_collapsing ## God Nodes (most connected - your core abstractions) -1. `ECPSnapshot` - 31 edges -2. `InherenceClassifier` - 25 edges -3. `select_article_extractor()` - 23 edges -4. `ExtractorName` - 21 edges -5. `DecisionCategory` - 17 edges -6. `ClassificationResult` - 17 edges -7. `PRD — Conversão de artigo JSON para Markdown` - 16 edges -8. `process_batch()` - 15 edges -9. `8. Regras funcionais` - 15 edges -10. `resolve_article_metadata()` - 14 edges +1. `ECPSnapshot` - 40 edges +2. `InherenceClassifier` - 29 edges +3. `DecisionCategory` - 28 edges +4. `LLMFallbackAdapter` - 26 edges +5. `ClassificationResult` - 24 edges +6. `select_article_extractor()` - 23 edges +7. `ExtractorName` - 21 edges +8. `PRD — Conversão de artigo JSON para Markdown` - 16 edges +9. `process_batch()` - 15 edges +10. `8. Regras funcionais` - 15 edges ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] classify.py → src/models.py - `test_e2e_extract_google_news_live_pipeline()` --uses--> `ExtractionResult` [INFERRED] tests/test_extract_google_news.py → scripts/extract_google_news.py +- `test_llm_adapter_interface()` --calls--> `LLMFallbackAdapter` [EXTRACTED] + tests/test_adapters.py → src/adapters/llm.py - `classifier()` --uses--> `InherenceClassifier` [INFERRED] tests/test_benchmark_24.py → src/classifier.py -- `test_classification_result_serialization()` --uses--> `DecisionCategory` [INFERRED] - tests/test_models.py → src/models.py -- `petrobras_ecp()` --uses--> `ECPSnapshot` [INFERRED] - tests/test_classifier.py → src/models.py +- `test_adversarial_apple_fruit_recipe()` --uses--> `DecisionCategory` [INFERRED] + tests/test_adversarial.py → src/models.py ## Import Cycles - None detected. -## Communities (165 total, 47 thin omitted) +## Communities (168 total, 48 thin omitted) ### Community 0 - "Task Planning" Cohesion: 0.07 @@ -344,20 +347,20 @@ Cohesion: 0.29 Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC) ### Community 45 - "ClassificationResult" -Cohesion: 0.09 -Nodes (19): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., LocalEmbeddingsAdapter (+11 more) +Cohesion: 0.11 +Nodes (17): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., LocalEmbeddingsAdapter (+9 more) -### Community 46 - "InherenceClassifier" -Cohesion: 0.12 -Nodes (27): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier., DecisionCategory, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC. (+19 more) +### Community 46 - "test_adversarial.py" +Cohesion: 0.10 +Nodes (19): Any, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC., Run CLI via subprocess with missing target_name and verify error payload., Run CLI via subprocess with corrupted JSON and verify error payload. (+11 more) ### Community 47 - "classifier.py" Cohesion: 0.16 -Nodes (16): count_phrase_occurrences(), match_phrase_in_text(), Core deterministic classification engine (Tier 1 core)., Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., extract_evidence_snippets(), extract_sentences() (+8 more) +Nodes (15): count_phrase_occurrences(), match_phrase_in_text(), Core deterministic classification engine (Tier 1 core)., Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., extract_evidence_snippets(), extract_sentences() (+7 more) ### Community 48 - "test_convert_article_to_markdown.py" -Cohesion: 0.07 -Nodes (27): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa comportamento com listas vazias, nulas ou contendo apenas placeholders., Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabeçalhos…, Valida a cadeia de fallback completa para o campo TÍTULO (6 níveis)., Garante que subtítulo idêntico ao título seja automaticamente omitido (None)., Valida decodificação de entidades HTML nomeadas e numéricas., Garante que listas de autores/tags usem apenas a primeira fonte válida, sem…, Garante correspondência exata byte a byte para Trafilatura, Newspaper4k e… (+19 more) +Cohesion: 0.08 +Nodes (25): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa divisão por ponto e vírgula na string e vírgulas em elementos de lista…, Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabeçalhos…, Valida a cadeia de fallback completa para o campo TÍTULO (6 níveis)., Garante que subtítulo idêntico ao título seja automaticamente omitido (None)., Valida decodificação de entidades HTML nomeadas e numéricas., Garante correspondência exata byte a byte para Trafilatura, Newspaper4k e…, Garante que múltiplas execuções no mesmo arquivo produzam hashes SHA-256… (+17 more) ### Community 80 - "test_extract_article_contents.py" Cohesion: 0.06 @@ -436,8 +439,8 @@ Cohesion: 0.15 Nodes (17): emit_error(), main(), parse_args(), Namespace, ClassificationError, ErrorCode, MatchedGraphEntity, Enum (+9 more) ### Community 101 - "ECPSnapshot" -Cohesion: 0.20 -Nodes (10): ECPSnapshot, Any, classifier(), fixture, parametrize, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), test_ecp_snapshot_defaults() (+2 more) +Cohesion: 0.24 +Nodes (10): ECPSnapshot, classifier(), fixture, parametrize, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), Unit tests for ECP models, schema validation, and structured error handling., test_ecp_snapshot_defaults() (+2 more) ### Community 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -585,7 +588,7 @@ Nodes (11): 1. Validação de Entrada, Tipagem & Isolamento de Lotes, 2. Isolame ### Community 140 - "convert_article" Cohesion: 0.15 -Nodes (13): clean_body_images(), convert_article(), Path, Remove o primeiro título H1 do corpo somente quando ele for igual ao título…, Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e…, Executa a leitura do JSON, validação, conversão e escrita atômica do arquivo…, remove_duplicate_initial_h1(), Testa remoção de H1 inicial coincidente com título com variações de espaços e… (+5 more) +Nodes (13): assemble_markdown_document(), clean_body_images(), convert_article(), Path, Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e…, Monta a estrutura final do documento Markdown respeitando a ordem estrita do…, Executa a leitura do JSON, validação, conversão e escrita atômica do arquivo…, Valida descarte de data:, relativos e deduplicação mantendo a primeira… (+5 more) ### Community 141 - "005-convert-json-markdown/plan.md" Cohesion: 0.33 @@ -631,9 +634,9 @@ Nodes (4): 13.1 Testes unitários, 13.2 Testes de integração do CLI, 13.3 Caso Cohesion: 0.50 Nodes (4): 6.1 Formato, 6.2 Valores aceitos para `selected_extractor`, 6.3 Campos obrigatórios após a resolução, 6. Contrato de entrada -### Community 152 - "assemble_markdown_document" -Cohesion: 0.50 -Nodes (4): assemble_markdown_document(), Monta a estrutura final do documento Markdown respeitando a ordem estrita do…, Testa montagem com todos os campos e apenas com campos obrigatórios., test_assemble_markdown_document_full_and_minimal() +### Community 152 - "InherenceClassifier" +Cohesion: 0.14 +Nodes (24): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Unit tests for deterministic classification decision logic., test_contextual_inherent(), test_direct_inherent(), test_negative_anchor_suppression(), test_not_related() (+16 more) ### Community 153 - "convert_html_to_markdown" Cohesion: 0.33 @@ -647,25 +650,33 @@ Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: De Cohesion: 0.67 Nodes (3): 5.1 Incluído, 5.2 Fora do escopo, 5. Escopo +### Community 165 - "LLMFallbackAdapter" +Cohesion: 0.13 +Nodes (11): LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Returns True if an API key or custom provider function is configured., Constructs a structured disambiguation prompt for the LLM., Executes LLM fallback for ambiguous boundary cases. Returns a refined…, Parses and validates structured JSON response from LLM., Any, Valida detecção de disponibilidade por chave de API ou provider customizado. (+3 more) + +### Community 166 - "remove_duplicate_initial_h1" +Cohesion: 0.50 +Nodes (4): Remove o primeiro título H1 do corpo somente quando ele for igual ao título…, remove_duplicate_initial_h1(), Testa remoção de H1 inicial coincidente com título com variações de espaços e…, test_remove_duplicate_initial_h1_exact_and_variations() + ## Knowledge Gaps - **696 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+691 more) These have ≤1 connection - possible missing edges or undocumented components. -- **47 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **48 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ - **Why does `PRD — Conversão de artigo JSON para Markdown` connect `PRD — Conversão de artigo JSON para Markdown` to `8. Regras funcionais`, `12. Critérios de aceite`, `11. Requisitos não funcionais`, `9. Interface CLI`, `13. Estratégia de testes`, `6. Contrato de entrada`, `5. Escopo`?** - _High betweenness centrality (0.007) - this node is a cross-community bridge._ + _High betweenness centrality (0.008) - this node is a cross-community bridge._ +- **Why does `Implementation Plan: Convert Article JSON to Markdown` connect `Implementation Plan: Convert Article JSON to Markdown` to `005-convert-json-markdown/plan.md`?** + _High betweenness centrality (0.004) - this node is a cross-community bridge._ +- **Why does `Tasks: Convert Article JSON to Markdown` connect `Tasks: Convert Article JSON to Markdown` to `005-convert-json-markdown/plan.md`?** + _High betweenness centrality (0.004) - this node is a cross-community bridge._ - **Are the 10 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?** _`ECPSnapshot` has 10 INFERRED edges - model-reasoned connections that need verification._ - **Are the 6 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?** _`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 12 inferred relationships involving `ExtractorName` (e.g. with `test_article_1_regression_technical_tie_markdown_images()` and `test_ct_001_three_candidates_clear_winner()`) actually correct?** - _`ExtractorName` has 12 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 10 inferred relationships involving `DecisionCategory` (e.g. with `InherenceClassifier` and `test_adversarial_apple_fruit_recipe()`) actually correct?** - _`DecisionCategory` has 10 INFERRED edges - model-reasoned connections that need verification._ -- **What connects `text-nlp-classifier`, `MatchedGraphEntity`, `graphify` to the rest of the system?** - _696 weakly-connected nodes found - possible documentation gaps or missing edges._ -- **Should `Task Planning` be split into smaller, more focused modules?** - _Cohesion score 0.07407407407407407 - nodes in this community are weakly interconnected._ \ No newline at end of file +- **Are the 18 inferred relationships involving `DecisionCategory` (e.g. with `LLMFallbackAdapter` and `InherenceClassifier`) actually correct?** + _`DecisionCategory` has 18 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 4 inferred relationships involving `LLMFallbackAdapter` (e.g. with `ClassificationResult` and `DecisionCategory`) actually correct?** + _`LLMFallbackAdapter` has 4 INFERRED edges - model-reasoned connections that need verification._ \ No newline at end of file diff --git a/graphify-out/2026-08-21/graph.json b/graphify-out/2026-08-21/graph.json index a942618..e045508 100644 --- a/graphify-out/2026-08-21/graph.json +++ b/graphify-out/2026-08-21/graph.json @@ -120,6 +120,45 @@ "source_file": "scripts/select_article_extractor.py", "source_location": "L33" }, + { + "id": "src_classifier_inherenceclassifier", + "label": "InherenceClassifier", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "inherenceclassifier", + "source_file": "src/classifier.py", + "source_location": "L41" + }, + { + "id": "src_models_decisioncategory", + "label": "DecisionCategory", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "decisioncategory", + "source_file": "src/models.py", + "source_location": "L11" + }, + { + "id": "src_adapters_llm_llmfallbackadapter", + "label": "LLMFallbackAdapter", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "llmfallbackadapter", + "source_file": "src/adapters/llm.py", + "source_location": "L17" + }, { "id": "src_adapters_base_basenlpadapter", "label": "BaseNLPAdapter", @@ -146,19 +185,6 @@ "source_file": "src/adapters/embeddings.py", "source_location": "L13" }, - { - "id": "src_adapters_llm_llmfallbackadapter", - "label": "LLMFallbackAdapter", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": "llmfallbackadapter", - "source_file": "src/adapters/llm.py", - "source_location": "L15" - }, { "id": "src_models_classificationresult", "label": "ClassificationResult", @@ -172,32 +198,6 @@ "source_file": "src/models.py", "source_location": "L122" }, - { - "id": "src_classifier_inherenceclassifier", - "label": "InherenceClassifier", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "inherenceclassifier", - "source_file": "src/classifier.py", - "source_location": "L41" - }, - { - "id": "src_models_decisioncategory", - "label": "DecisionCategory", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "decisioncategory", - "source_file": "src/models.py", - "source_location": "L11" - }, { "id": "src_models_relatedentity", "label": "RelatedEntity", @@ -205,7 +205,7 @@ "_callable_class": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "relatedentity", "source_file": "src/models.py", @@ -524,18 +524,6 @@ "source_file": "tests/test_models.py", "source_location": "L88" }, - { - "id": "src_models_classificationresult_to_dict", - "label": ".to_dict()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": ".to_dict()", - "source_file": "src/models.py", - "source_location": "L134" - }, { "id": "src_models_ecpsnapshot_from_dict", "label": ".from_dict()", @@ -560,18 +548,6 @@ "source_file": "src/models.py", "source_location": "L105" }, - { - "id": "src_models_relatedentity_from_dict", - "label": ".from_dict()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": ".from_dict()", - "source_file": "src/models.py", - "source_location": "L37" - }, { "id": "tests_test_benchmark_24_classifier", "label": "classifier()", @@ -1353,28 +1329,28 @@ "source_location": "L135" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", - "label": "test_normalize_list_semicolon_and_comma_split()", + "id": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", + "label": "test_metadata_priority_first_valid_source_no_cross_merging()", "_callable": true, "_origin": "ast", "community": 131, "community_name": "convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_list_semicolon_and_comma_split()", + "norm_label": "test_metadata_priority_first_valid_source_no_cross_merging()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L103" + "source_location": "L451" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", - "label": "test_normalize_scalar_whitespace_collapsing()", + "id": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", + "label": "test_normalize_list_empty_and_invalid()", "_callable": true, "_origin": "ast", "community": 131, "community_name": "convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_scalar_whitespace_collapsing()", + "norm_label": "test_normalize_list_empty_and_invalid()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L53" + "source_location": "L134" }, { "id": "scripts_convert_article_to_markdown_resolve_article_body", @@ -1398,7 +1374,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_invalid_selected_extractor()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L339" + "source_location": "L340" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", @@ -1410,7 +1386,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_newspaper4k_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L274" + "source_location": "L275" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", @@ -1422,7 +1398,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_readability_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L294" + "source_location": "L295" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", @@ -1434,7 +1410,19 @@ "file_type": "code", "norm_label": "test_resolve_article_body_trafilatura_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L257" + "source_location": "L258" + }, + { + "id": "scripts_convert_article_to_markdown_assemble_markdown_document", + "label": "assemble_markdown_document()", + "_callable": true, + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "file_type": "code", + "norm_label": "assemble_markdown_document()", + "source_file": "scripts/convert_article_to_markdown.py", + "source_location": "L550" }, { "id": "scripts_convert_article_to_markdown_clean_body_images", @@ -1461,16 +1449,16 @@ "source_location": "L618" }, { - "id": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", - "label": "remove_duplicate_initial_h1()", + "id": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", + "label": "test_assemble_markdown_document_full_and_minimal()", "_callable": true, "_origin": "ast", "community": 140, "community_name": "convert_article", "file_type": "code", - "norm_label": "remove_duplicate_initial_h1()", - "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L483" + "norm_label": "test_assemble_markdown_document_full_and_minimal()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L508" }, { "id": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", @@ -1482,7 +1470,7 @@ "file_type": "code", "norm_label": "test_clean_body_images_removes_invalid_and_deduplicates()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L485" + "source_location": "L486" }, { "id": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", @@ -1494,19 +1482,7 @@ "file_type": "code", "norm_label": "test_convert_article_api_direct()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L734" - }, - { - "id": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", - "label": "test_remove_duplicate_initial_h1_exact_and_variations()", - "_callable": true, - "_origin": "ast", - "community": 140, - "community_name": "convert_article", - "file_type": "code", - "norm_label": "test_remove_duplicate_initial_h1_exact_and_variations()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L468" + "source_location": "L735" }, { "id": "scripts_convert_article_to_markdown_main", @@ -1542,7 +1518,7 @@ "file_type": "code", "norm_label": "test_parse_arguments_api_direct()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L754" + "source_location": "L755" }, { "id": "scripts_extract_google_news_get_hl_gl_ceid", @@ -1593,28 +1569,148 @@ "source_location": "L60" }, { - "id": "scripts_convert_article_to_markdown_assemble_markdown_document", - "label": "assemble_markdown_document()", + "id": "tests_test_classifier_test_contextual_inherent", + "label": "test_contextual_inherent()", "_callable": true, "_origin": "ast", "community": 152, - "community_name": "assemble_markdown_document", + "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": "assemble_markdown_document()", - "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L550" + "norm_label": "test_contextual_inherent()", + "source_file": "tests/test_classifier.py", + "source_location": "L49" }, { - "id": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", - "label": "test_assemble_markdown_document_full_and_minimal()", + "id": "tests_test_classifier_test_direct_inherent", + "label": "test_direct_inherent()", "_callable": true, "_origin": "ast", "community": 152, - "community_name": "assemble_markdown_document", + "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": "test_assemble_markdown_document_full_and_minimal()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L507" + "norm_label": "test_direct_inherent()", + "source_file": "tests/test_classifier.py", + "source_location": "L33" + }, + { + "id": "tests_test_classifier_test_negative_anchor_suppression", + "label": "test_negative_anchor_suppression()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_negative_anchor_suppression()", + "source_file": "tests/test_classifier.py", + "source_location": "L91" + }, + { + "id": "tests_test_classifier_test_not_related", + "label": "test_not_related()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_not_related()", + "source_file": "tests/test_classifier.py", + "source_location": "L78" + }, + { + "id": "tests_test_classifier_test_tangential_inherent", + "label": "test_tangential_inherent()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_tangential_inherent()", + "source_file": "tests/test_classifier.py", + "source_location": "L64" + }, + { + "id": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "label": "test_classifier_graceful_degradation_when_llm_raises_exception()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_classifier_graceful_degradation_when_llm_raises_exception()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L255" + }, + { + "id": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "label": "test_classifier_skips_tier3_on_clear_direct_inherent_case()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_classifier_skips_tier3_on_clear_direct_inherent_case()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L224" + }, + { + "id": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "label": "test_classifier_triggers_tier3_on_ambiguous_tangential_case()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_classifier_triggers_tier3_on_ambiguous_tangential_case()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L190" + }, + { + "id": "tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", + "label": "test_cli_execution_with_enable_llm_flag()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_cli_execution_with_enable_llm_flag()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L289" + }, + { + "id": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "label": "test_llm_adapter_handling_invalid_and_corrupt_responses()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_llm_adapter_handling_invalid_and_corrupt_responses()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L149" + }, + { + "id": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "label": "test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L118" + }, + { + "id": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "label": "test_llm_adapter_parsing_valid_json_response()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_llm_adapter_parsing_valid_json_response()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L78" }, { "id": "scripts_convert_article_to_markdown_convert_html_to_markdown", @@ -1638,7 +1734,7 @@ "file_type": "code", "norm_label": "test_convert_html_to_markdown_empty_or_whitespace()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L245" + "source_location": "L246" }, { "id": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", @@ -1650,7 +1746,7 @@ "file_type": "code", "norm_label": "test_convert_html_to_markdown_rich_formatting()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L215" + "source_location": "L216" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", @@ -1662,7 +1758,7 @@ "file_type": "code", "norm_label": "test_normalize_list_author_url_filtering()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L114" + "source_location": "L115" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", @@ -1674,7 +1770,7 @@ "file_type": "code", "norm_label": "test_normalize_date_invalid_and_placeholders()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L162" + "source_location": "L163" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", @@ -1686,7 +1782,7 @@ "file_type": "code", "norm_label": "test_normalize_list_deduplication_preserves_case_and_order()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L127" + "source_location": "L128" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", @@ -1698,7 +1794,7 @@ "file_type": "code", "norm_label": "test_normalize_date_iso_8601_variants()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L145" + "source_location": "L146" }, { "id": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", @@ -1710,7 +1806,7 @@ "file_type": "code", "norm_label": "test_metadata_priority_original_url_all_fallbacks()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L395" + "source_location": "L396" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", @@ -1722,7 +1818,151 @@ "file_type": "code", "norm_label": "test_normalize_scalar_non_string_types()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L90" + "source_location": "L91" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_build_prompt", + "label": ".build_prompt()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".build_prompt()", + "source_file": "src/adapters/llm.py", + "source_location": "L37" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_disambiguate", + "label": ".disambiguate()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".disambiguate()", + "source_file": "src/adapters/llm.py", + "source_location": "L52" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_evaluate_similarity", + "label": ".evaluate_similarity()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".evaluate_similarity()", + "source_file": "src/adapters/llm.py", + "source_location": "L34" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/adapters/llm.py", + "source_location": "L20" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_is_available", + "label": ".is_available()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".is_available()", + "source_file": "src/adapters/llm.py", + "source_location": "L30" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "label": "._parse_llm_response()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "._parse_llm_response()", + "source_file": "src/adapters/llm.py", + "source_location": "L75" + }, + { + "id": "src_classifier_inherenceclassifier_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/classifier.py", + "source_location": "L44" + }, + { + "id": "tests_test_llm_fallback_test_llm_adapter_availability_detection", + "label": "test_llm_adapter_availability_detection()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_adapter_availability_detection()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L31" + }, + { + "id": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "label": "test_llm_adapter_build_prompt_structure()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_adapter_build_prompt_structure()", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L48" + }, + { + "id": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", + "label": "remove_duplicate_initial_h1()", + "_callable": true, + "_origin": "ast", + "community": 166, + "community_name": "remove_duplicate_initial_h1", + "file_type": "code", + "norm_label": "remove_duplicate_initial_h1()", + "source_file": "scripts/convert_article_to_markdown.py", + "source_location": "L483" + }, + { + "id": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", + "label": "test_remove_duplicate_initial_h1_exact_and_variations()", + "_callable": true, + "_origin": "ast", + "community": 166, + "community_name": "remove_duplicate_initial_h1", + "file_type": "code", + "norm_label": "test_remove_duplicate_initial_h1_exact_and_variations()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L469" + }, + { + "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", + "label": "test_normalize_scalar_whitespace_collapsing()", + "_callable": true, + "_origin": "ast", + "community": 167, + "community_name": "test_normalize_scalar_whitespace_collapsing", + "file_type": "code", + "norm_label": "test_normalize_scalar_whitespace_collapsing()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L54" }, { "id": "scripts_extract_google_news_build_parser", @@ -1892,66 +2132,6 @@ "source_file": "src/adapters/embeddings.py", "source_location": "L23" }, - { - "id": "src_adapters_llm_llmfallbackadapter_disambiguate", - "label": ".disambiguate()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".disambiguate()", - "source_file": "src/adapters/llm.py", - "source_location": "L28" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_evaluate_similarity", - "label": ".evaluate_similarity()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".evaluate_similarity()", - "source_file": "src/adapters/llm.py", - "source_location": "L25" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_init", - "label": ".__init__()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/adapters/llm.py", - "source_location": "L18" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_is_available", - "label": ".is_available()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".is_available()", - "source_file": "src/adapters/llm.py", - "source_location": "L22" - }, - { - "id": "src_classifier_inherenceclassifier_init", - "label": ".__init__()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/classifier.py", - "source_location": "L44" - }, { "id": "tests_test_adapters_test_classifier_with_adapter_flags", "label": "test_classifier_with_adapter_flags()", @@ -2000,13 +2180,37 @@ "source_file": "tests/test_models.py", "source_location": "L70" }, + { + "id": "src_models_classificationresult_to_dict", + "label": ".to_dict()", + "_callable": true, + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": ".to_dict()", + "source_file": "src/models.py", + "source_location": "L134" + }, + { + "id": "src_models_relatedentity_from_dict", + "label": ".from_dict()", + "_callable": true, + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": ".from_dict()", + "source_file": "src/models.py", + "source_location": "L37" + }, { "id": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", "label": "test_adversarial_apple_fruit_recipe()", "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_apple_fruit_recipe()", "source_file": "tests/test_adversarial.py", @@ -2018,7 +2222,7 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_related_entity_without_scope_context()", "source_file": "tests/test_adversarial.py", @@ -2030,7 +2234,7 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_sao_paulo_city_vs_fc()", "source_file": "tests/test_adversarial.py", @@ -2042,7 +2246,7 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_corrupted_json()", "source_file": "tests/test_adversarial.py", @@ -2054,7 +2258,7 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_empty_content()", "source_file": "tests/test_adversarial.py", @@ -2066,7 +2270,7 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_missing_required_field()", "source_file": "tests/test_adversarial.py", @@ -2078,7 +2282,7 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_success_stdout()", "source_file": "tests/test_adversarial.py", @@ -2090,72 +2294,12 @@ "_callable": true, "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "petrobras_ecp()", "source_file": "tests/test_classifier.py", "source_location": "L10" }, - { - "id": "tests_test_classifier_test_contextual_inherent", - "label": "test_contextual_inherent()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_contextual_inherent()", - "source_file": "tests/test_classifier.py", - "source_location": "L49" - }, - { - "id": "tests_test_classifier_test_direct_inherent", - "label": "test_direct_inherent()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_direct_inherent()", - "source_file": "tests/test_classifier.py", - "source_location": "L33" - }, - { - "id": "tests_test_classifier_test_negative_anchor_suppression", - "label": "test_negative_anchor_suppression()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_negative_anchor_suppression()", - "source_file": "tests/test_classifier.py", - "source_location": "L91" - }, - { - "id": "tests_test_classifier_test_not_related", - "label": "test_not_related()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_not_related()", - "source_file": "tests/test_classifier.py", - "source_location": "L78" - }, - { - "id": "tests_test_classifier_test_tangential_inherent", - "label": "test_tangential_inherent()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_tangential_inherent()", - "source_file": "tests/test_classifier.py", - "source_location": "L64" - }, { "id": "src_classifier_count_phrase_occurrences", "label": "count_phrase_occurrences()", @@ -2178,7 +2322,7 @@ "file_type": "code", "norm_label": ".classify()", "source_file": "src/classifier.py", - "source_location": "L60" + "source_location": "L65" }, { "id": "src_classifier_match_phrase_in_text", @@ -2262,7 +2406,7 @@ "file_type": "code", "norm_label": "test_cli_default_output_naming()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L674" + "source_location": "L675" }, { "id": "tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", @@ -2274,7 +2418,7 @@ "file_type": "code", "norm_label": "test_cli_exit_codes_and_error_handling()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L581" + "source_location": "L582" }, { "id": "tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", @@ -2286,7 +2430,7 @@ "file_type": "code", "norm_label": "test_cli_json_root_must_be_object()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L615" + "source_location": "L616" }, { "id": "tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", @@ -2298,7 +2442,7 @@ "file_type": "code", "norm_label": "test_cli_no_stdout_pollution_and_atomic_preservation()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L630" + "source_location": "L631" }, { "id": "tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", @@ -2310,7 +2454,7 @@ "file_type": "code", "norm_label": "test_conversion_determinism_sha256_repeatability()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L557" + "source_location": "L558" }, { "id": "tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", @@ -2322,7 +2466,7 @@ "file_type": "code", "norm_label": "test_e2e_pipeline_with_real_extracted_selected_json()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L703" + "source_location": "L704" }, { "id": "tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", @@ -2334,19 +2478,7 @@ "file_type": "code", "norm_label": "test_golden_fixtures_byte_level_precision()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L540" - }, - { - "id": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", - "label": "test_metadata_priority_first_valid_source_no_cross_merging()", - "_callable": true, - "_origin": "ast", - "community": 48, - "community_name": "test_convert_article_to_markdown.py", - "file_type": "code", - "norm_label": "test_metadata_priority_first_valid_source_no_cross_merging()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L450" + "source_location": "L541" }, { "id": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", @@ -2358,7 +2490,7 @@ "file_type": "code", "norm_label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L435" + "source_location": "L436" }, { "id": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", @@ -2370,7 +2502,7 @@ "file_type": "code", "norm_label": "test_metadata_priority_title_all_fallbacks()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L353" + "source_location": "L354" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", @@ -2382,19 +2514,19 @@ "file_type": "code", "norm_label": "test_normalize_date_rfc_2822_variants()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L153" + "source_location": "L154" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", - "label": "test_normalize_list_empty_and_invalid()", + "id": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", + "label": "test_normalize_list_semicolon_and_comma_split()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_list_empty_and_invalid()", + "norm_label": "test_normalize_list_semicolon_and_comma_split()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L133" + "source_location": "L104" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", @@ -2406,7 +2538,7 @@ "file_type": "code", "norm_label": "test_normalize_scalar_complex_html_entities()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L44" + "source_location": "L45" }, { "id": "scripts_extract_article_contents_articlecrawler_close", @@ -3126,7 +3258,7 @@ "file_type": "code", "norm_label": "test_normalize_scalar_placeholders_discarded()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L84" + "source_location": "L85" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", @@ -3138,7 +3270,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_strict_isolation_all_extractors()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L316" + "source_location": "L317" }, { "id": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", @@ -3150,7 +3282,7 @@ "file_type": "code", "norm_label": "test_validate_url_invalid_schemes()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L205" + "source_location": "L206" }, { "id": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", @@ -3162,7 +3294,7 @@ "file_type": "code", "norm_label": "test_validate_url_valid_schemes()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L185" + "source_location": "L186" }, { "id": "specify_templates_tasks_template", @@ -3913,17 +4045,6 @@ "source_file": "tests/test_cli.py", "source_location": "L1" }, - { - "id": "src_models_py_any", - "label": "Any", - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "any", - "source_file": "", - "source_location": "" - }, { "id": "tests_test_benchmark_24", "label": "test_benchmark_24.py", @@ -3957,6 +4078,17 @@ "source_file": "", "source_location": "" }, + { + "id": "tests_test_models", + "label": "test_models.py", + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": "test_models.py", + "source_file": "tests/test_models.py", + "source_location": "L1" + }, { "id": "tests_test_benchmark_24_rationale_1", "label": "Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence\u2026", @@ -3968,6 +4100,17 @@ "source_file": "tests/test_benchmark_24.py", "source_location": "L1" }, + { + "id": "tests_test_models_rationale_1", + "label": "Unit tests for ECP models, schema validation, and structured error handling.", + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "rationale", + "norm_label": "unit tests for ecp models, schema validation, and structured error handling.", + "source_file": "tests/test_models.py", + "source_location": "L1" + }, { "id": "specs_001_multilingual_entity_classifier_spec_assumptions", "label": "Assumptions", @@ -8286,26 +8429,26 @@ "source_location": "L57" }, { - "id": "tests_test_convert_article_to_markdown_rationale_104", - "label": "Testa divis\u00e3o por ponto e v\u00edrgula na string e v\u00edrgulas em elementos de lista\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_135", + "label": "Testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", "_origin": "ast", "community": 131, "community_name": "convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa divisao por ponto e virgula na string e virgulas em elementos de lista...", + "norm_label": "testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L104" + "source_location": "L135" }, { - "id": "tests_test_convert_article_to_markdown_rationale_54", - "label": "Valida colapso de tabs, quebras de linha e espa\u00e7os m\u00faltiplos em um \u00fanico espa\u00e7o.", + "id": "tests_test_convert_article_to_markdown_rationale_452", + "label": "Garante que listas de autores/tags usem apenas a primeira fonte v\u00e1lida, sem\u2026", "_origin": "ast", "community": 131, "community_name": "convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "valida colapso de tabs, quebras de linha e espacos multiplos em um unico espaco.", + "norm_label": "garante que listas de autores/tags usem apenas a primeira fonte valida, sem...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L54" + "source_location": "L452" }, { "id": "docs_prd_convert_json_markdown_8_regras_funcionais", @@ -8811,7 +8954,7 @@ "source_location": "L168" }, { - "id": "tests_test_convert_article_to_markdown_rationale_258", + "id": "tests_test_convert_article_to_markdown_rationale_259", "label": "Testa prioridade trafilatura.markdown sobre trafilatura.text.", "_origin": "ast", "community": 135, @@ -8819,10 +8962,10 @@ "file_type": "rationale", "norm_label": "testa prioridade trafilatura.markdown sobre trafilatura.text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L258" + "source_location": "L259" }, { - "id": "tests_test_convert_article_to_markdown_rationale_275", + "id": "tests_test_convert_article_to_markdown_rationale_276", "label": "Testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "_origin": "ast", "community": 135, @@ -8830,10 +8973,10 @@ "file_type": "rationale", "norm_label": "testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L275" + "source_location": "L276" }, { - "id": "tests_test_convert_article_to_markdown_rationale_295", + "id": "tests_test_convert_article_to_markdown_rationale_296", "label": "Testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "_origin": "ast", "community": 135, @@ -8841,10 +8984,10 @@ "file_type": "rationale", "norm_label": "testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L295" + "source_location": "L296" }, { - "id": "tests_test_convert_article_to_markdown_rationale_340", + "id": "tests_test_convert_article_to_markdown_rationale_341", "label": "Garante erro ao receber selected_extractor ausente ou n\u00e3o reconhecido.", "_origin": "ast", "community": 135, @@ -8852,7 +8995,7 @@ "file_type": "rationale", "norm_label": "garante erro ao receber selected_extractor ausente ou nao reconhecido.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L340" + "source_location": "L341" }, { "id": "specs_005_convert_json_markdown_plan_complexity_tracking", @@ -9543,17 +9686,6 @@ "source_file": "", "source_location": "" }, - { - "id": "scripts_convert_article_to_markdown_rationale_484", - "label": "Remove o primeiro t\u00edtulo H1 do corpo somente quando ele for igual ao t\u00edtulo\u2026", - "_origin": "ast", - "community": 140, - "community_name": "convert_article", - "file_type": "rationale", - "norm_label": "remove o primeiro titulo h1 do corpo somente quando ele for igual ao titulo...", - "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L484" - }, { "id": "scripts_convert_article_to_markdown_rationale_519", "label": "Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e\u2026", @@ -9565,6 +9697,17 @@ "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L519" }, + { + "id": "scripts_convert_article_to_markdown_rationale_551", + "label": "Monta a estrutura final do documento Markdown respeitando a ordem estrita do\u2026", + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "file_type": "rationale", + "norm_label": "monta a estrutura final do documento markdown respeitando a ordem estrita do...", + "source_file": "scripts/convert_article_to_markdown.py", + "source_location": "L551" + }, { "id": "scripts_convert_article_to_markdown_rationale_619", "label": "Executa a leitura do JSON, valida\u00e7\u00e3o, convers\u00e3o e escrita at\u00f4mica do arquivo\u2026", @@ -9577,18 +9720,7 @@ "source_location": "L619" }, { - "id": "tests_test_convert_article_to_markdown_rationale_469", - "label": "Testa remo\u00e7\u00e3o de H1 inicial coincidente com t\u00edtulo com varia\u00e7\u00f5es de espa\u00e7os e\u2026", - "_origin": "ast", - "community": 140, - "community_name": "convert_article", - "file_type": "rationale", - "norm_label": "testa remocao de h1 inicial coincidente com titulo com variacoes de espacos e...", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L469" - }, - { - "id": "tests_test_convert_article_to_markdown_rationale_486", + "id": "tests_test_convert_article_to_markdown_rationale_487", "label": "Valida descarte de data:, relativos e deduplica\u00e7\u00e3o mantendo a primeira\u2026", "_origin": "ast", "community": 140, @@ -9596,10 +9728,21 @@ "file_type": "rationale", "norm_label": "valida descarte de data:, relativos e deduplicacao mantendo a primeira...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L486" + "source_location": "L487" }, { - "id": "tests_test_convert_article_to_markdown_rationale_735", + "id": "tests_test_convert_article_to_markdown_rationale_509", + "label": "Testa montagem com todos os campos e apenas com campos obrigat\u00f3rios.", + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "file_type": "rationale", + "norm_label": "testa montagem com todos os campos e apenas com campos obrigatorios.", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L509" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_736", "label": "Testa a chamada direta da fun\u00e7\u00e3o convert_article em c\u00f3digo Python.", "_origin": "ast", "community": 140, @@ -9607,7 +9750,7 @@ "file_type": "rationale", "norm_label": "testa a chamada direta da funcao convert_article em codigo python.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L735" + "source_location": "L736" }, { "id": "specs_005_convert_json_markdown_checklists_markdown_conversion", @@ -10039,7 +10182,7 @@ "source_location": "L701" }, { - "id": "tests_test_convert_article_to_markdown_rationale_755", + "id": "tests_test_convert_article_to_markdown_rationale_756", "label": "Testa a chamada direta do parse_arguments.", "_origin": "ast", "community": 145, @@ -10047,7 +10190,7 @@ "file_type": "rationale", "norm_label": "testa a chamada direta do parse_arguments.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L755" + "source_location": "L756" }, { "id": "specs_005_convert_json_markdown_checklists_requirements", @@ -10502,26 +10645,136 @@ "source_location": "L61" }, { - "id": "scripts_convert_article_to_markdown_rationale_551", - "label": "Monta a estrutura final do documento Markdown respeitando a ordem estrita do\u2026", + "id": "tests_test_classifier", + "label": "test_classifier.py", "_origin": "ast", "community": 152, - "community_name": "assemble_markdown_document", - "file_type": "rationale", - "norm_label": "monta a estrutura final do documento markdown respeitando a ordem estrita do...", - "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L551" + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_classifier.py", + "source_file": "tests/test_classifier.py", + "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_508", - "label": "Testa montagem com todos os campos e apenas com campos obrigat\u00f3rios.", + "id": "tests_test_llm_fallback", + "label": "test_llm_fallback.py", "_origin": "ast", "community": 152, - "community_name": "assemble_markdown_document", + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_llm_fallback.py", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L1" + }, + { + "id": "src_classifier_rationale_42", + "label": "Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", "file_type": "rationale", - "norm_label": "testa montagem com todos os campos e apenas com campos obrigatorios.", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L508" + "norm_label": "tier 1 deterministic nlp entity inherence classifier with optional tier 2 /...", + "source_file": "src/classifier.py", + "source_location": "L42" + }, + { + "id": "tests_test_classifier_rationale_1", + "label": "Unit tests for deterministic classification decision logic.", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "unit tests for deterministic classification decision logic.", + "source_file": "tests/test_classifier.py", + "source_location": "L1" + }, + { + "id": "tests_test_llm_fallback_rationale_1", + "label": "Su\u00edte de Testes para o Adaptador de Fallback para LLM (Tier 3) do Classificador\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "suite de testes para o adaptador de fallback para llm (tier 3) do classificador...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L1" + }, + { + "id": "tests_test_llm_fallback_rationale_119", + "label": "Valida extra\u00e7\u00e3o de JSON quando a resposta do LLM vem formatada em bloco\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "valida extracao de json quando a resposta do llm vem formatada em bloco...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L119" + }, + { + "id": "tests_test_llm_fallback_rationale_150", + "label": "Valida que respostas corrompidas ou JSONs sem campos obrigat\u00f3rios retornem None\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "valida que respostas corrompidas ou jsons sem campos obrigatorios retornem none...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L150" + }, + { + "id": "tests_test_llm_fallback_rationale_191", + "label": "Garante que o classificador dispare o Tier 3 LLM para casos amb\u00edguos\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "garante que o classificador dispare o tier 3 llm para casos ambiguos...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L191" + }, + { + "id": "tests_test_llm_fallback_rationale_225", + "label": "Garante que casos claros (alta confian\u00e7a e alta densidade de \u00e2ncoras) N\u00c3O\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "garante que casos claros (alta confianca e alta densidade de ancoras) nao...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L225" + }, + { + "id": "tests_test_llm_fallback_rationale_256", + "label": "Garante que se o LLM falhar por erro de rede ou timeout, o classificador\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "garante que se o llm falhar por erro de rede ou timeout, o classificador...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L256" + }, + { + "id": "tests_test_llm_fallback_rationale_290", + "label": "Garante que a CLI classify.py aceite e processe a flag --enable-llm sem erros.", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "garante que a cli classify.py aceite e processe a flag --enable-llm sem erros.", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L290" + }, + { + "id": "tests_test_llm_fallback_rationale_79", + "label": "Valida o parsing e instancia\u00e7\u00e3o correta do ClassificationResult a partir da\u2026", + "_origin": "ast", + "community": 152, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "valida o parsing e instanciacao correta do classificationresult a partir da...", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L79" }, { "id": "scripts_convert_article_to_markdown_rationale_150", @@ -10535,7 +10788,7 @@ "source_location": "L150" }, { - "id": "tests_test_convert_article_to_markdown_rationale_216", + "id": "tests_test_convert_article_to_markdown_rationale_217", "label": "Valida convers\u00e3o de elementos HTML estruturados para Markdown com t\u00edtulos ATX.", "_origin": "ast", "community": 153, @@ -10543,10 +10796,10 @@ "file_type": "rationale", "norm_label": "valida conversao de elementos html estruturados para markdown com titulos atx.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L216" + "source_location": "L217" }, { - "id": "tests_test_convert_article_to_markdown_rationale_246", + "id": "tests_test_convert_article_to_markdown_rationale_247", "label": "Testa convers\u00e3o de HTML vazio retornando string vazia.", "_origin": "ast", "community": 153, @@ -10554,7 +10807,7 @@ "file_type": "rationale", "norm_label": "testa conversao de html vazio retornando string vazia.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L246" + "source_location": "L247" }, { "id": "specs_004_deterministic_content_selection_contracts_json_schema", @@ -10725,7 +10978,7 @@ "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_115", + "id": "tests_test_convert_article_to_markdown_rationale_116", "label": "Garante que URLs em campos de autor sejam estritamente descartadas.", "_origin": "ast", "community": 159, @@ -10733,7 +10986,7 @@ "file_type": "rationale", "norm_label": "garante que urls em campos de autor sejam estritamente descartadas.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L115" + "source_location": "L116" }, { "id": "agents_skills_ponytail_help_skill", @@ -10836,7 +11089,7 @@ "source_location": "L63" }, { - "id": "tests_test_convert_article_to_markdown_rationale_163", + "id": "tests_test_convert_article_to_markdown_rationale_164", "label": "Garante que datas inv\u00e1lidas ou placeholders retornem None sem lan\u00e7ar exce\u00e7\u00e3o\u2026", "_origin": "ast", "community": 160, @@ -10844,10 +11097,10 @@ "file_type": "rationale", "norm_label": "garante que datas invalidas ou placeholders retornem none sem lancar excecao...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L163" + "source_location": "L164" }, { - "id": "tests_test_convert_article_to_markdown_rationale_128", + "id": "tests_test_convert_article_to_markdown_rationale_129", "label": "Testa deduplica\u00e7\u00e3o case-insensitive preservando a grafia e ordem da primeira\u2026", "_origin": "ast", "community": 161, @@ -10855,10 +11108,10 @@ "file_type": "rationale", "norm_label": "testa deduplicacao case-insensitive preservando a grafia e ordem da primeira...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L128" + "source_location": "L129" }, { - "id": "tests_test_convert_article_to_markdown_rationale_146", + "id": "tests_test_convert_article_to_markdown_rationale_147", "label": "Valida parsing de datas ISO 8601 em m\u00faltiplos formatos e fusos.", "_origin": "ast", "community": 162, @@ -10866,10 +11119,10 @@ "file_type": "rationale", "norm_label": "valida parsing de datas iso 8601 em multiplos formatos e fusos.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L146" + "source_location": "L147" }, { - "id": "tests_test_convert_article_to_markdown_rationale_396", + "id": "tests_test_convert_article_to_markdown_rationale_397", "label": "Valida a cadeia de fallback completa para a URL ORIGINAL (5 n\u00edveis).", "_origin": "ast", "community": 163, @@ -10877,10 +11130,10 @@ "file_type": "rationale", "norm_label": "valida a cadeia de fallback completa para a url original (5 niveis).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L396" + "source_location": "L397" }, { - "id": "tests_test_convert_article_to_markdown_rationale_91", + "id": "tests_test_convert_article_to_markdown_rationale_92", "label": "Valida que entradas n\u00e3o string retornem None de forma segura.", "_origin": "ast", "community": 164, @@ -10888,7 +11141,128 @@ "file_type": "rationale", "norm_label": "valida que entradas nao string retornem none de forma segura.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L91" + "source_location": "L92" + }, + { + "id": "src_classifier_py_any", + "label": "Any", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "any", + "source_file": "", + "source_location": "" + }, + { + "id": "src_adapters_llm_rationale_18", + "label": "Optional adapter for LLM fallback boundary disambiguation.", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "optional adapter for llm fallback boundary disambiguation.", + "source_file": "src/adapters/llm.py", + "source_location": "L18" + }, + { + "id": "src_adapters_llm_rationale_31", + "label": "Returns True if an API key or custom provider function is configured.", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "returns true if an api key or custom provider function is configured.", + "source_file": "src/adapters/llm.py", + "source_location": "L31" + }, + { + "id": "src_adapters_llm_rationale_40", + "label": "Constructs a structured disambiguation prompt for the LLM.", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "constructs a structured disambiguation prompt for the llm.", + "source_file": "src/adapters/llm.py", + "source_location": "L40" + }, + { + "id": "src_adapters_llm_rationale_58", + "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "executes llm fallback for ambiguous boundary cases. returns a refined...", + "source_file": "src/adapters/llm.py", + "source_location": "L58" + }, + { + "id": "src_adapters_llm_rationale_80", + "label": "Parses and validates structured JSON response from LLM.", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "parses and validates structured json response from llm.", + "source_file": "src/adapters/llm.py", + "source_location": "L80" + }, + { + "id": "tests_test_llm_fallback_rationale_32", + "label": "Valida detec\u00e7\u00e3o de disponibilidade por chave de API ou provider customizado.", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "valida deteccao de disponibilidade por chave de api ou provider customizado.", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L32" + }, + { + "id": "tests_test_llm_fallback_rationale_49", + "label": "Valida a montagem do prompt de desambigua\u00e7\u00e3o com metadados do ECP e documento.", + "_origin": "ast", + "community": 165, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "valida a montagem do prompt de desambiguacao com metadados do ecp e documento.", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L49" + }, + { + "id": "scripts_convert_article_to_markdown_rationale_484", + "label": "Remove o primeiro t\u00edtulo H1 do corpo somente quando ele for igual ao t\u00edtulo\u2026", + "_origin": "ast", + "community": 166, + "community_name": "remove_duplicate_initial_h1", + "file_type": "rationale", + "norm_label": "remove o primeiro titulo h1 do corpo somente quando ele for igual ao titulo...", + "source_file": "scripts/convert_article_to_markdown.py", + "source_location": "L484" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_470", + "label": "Testa remo\u00e7\u00e3o de H1 inicial coincidente com t\u00edtulo com varia\u00e7\u00f5es de espa\u00e7os e\u2026", + "_origin": "ast", + "community": 166, + "community_name": "remove_duplicate_initial_h1", + "file_type": "rationale", + "norm_label": "testa remocao de h1 inicial coincidente com titulo com variacoes de espacos e...", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L470" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_55", + "label": "Valida colapso de tabs, quebras de linha e espa\u00e7os m\u00faltiplos em um \u00fanico espa\u00e7o.", + "_origin": "ast", + "community": 167, + "community_name": "test_normalize_scalar_whitespace_collapsing", + "file_type": "rationale", + "norm_label": "valida colapso de tabs, quebras de linha e espacos multiplos em um unico espaco.", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L55" }, { "id": "agents_skills_speckit_checklist_skill", @@ -13499,17 +13873,6 @@ "source_file": "src/adapters/llm.py", "source_location": "L1" }, - { - "id": "src_adapters_llm_rationale_16", - "label": "Optional adapter for LLM fallback boundary disambiguation.", - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "optional adapter for llm fallback boundary disambiguation.", - "source_file": "src/adapters/llm.py", - "source_location": "L16" - }, { "id": "tests_test_adapters_rationale_1", "label": "Unit tests for optional adapter interfaces (Tier 2 / Tier 3).", @@ -13521,56 +13884,45 @@ "source_file": "tests/test_adapters.py", "source_location": "L1" }, + { + "id": "src_models_py_any", + "label": "Any", + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": "any", + "source_file": "", + "source_location": "" + }, { "id": "tests_test_adversarial", "label": "test_adversarial.py", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "test_adversarial.py", "source_file": "tests/test_adversarial.py", "source_location": "L1" }, - { - "id": "tests_test_classifier", - "label": "test_classifier.py", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_classifier.py", - "source_file": "tests/test_classifier.py", - "source_location": "L1" - }, { "id": "tests_test_classifier_py_fixture", "label": "fixture", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "code", "norm_label": "fixture", "source_file": "", "source_location": "" }, - { - "id": "src_classifier_rationale_42", - "label": "Tier 1 Deterministic NLP Entity Inherence Classifier.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "tier 1 deterministic nlp entity inherence classifier.", - "source_file": "src/classifier.py", - "source_location": "L42" - }, { "id": "tests_test_adversarial_rationale_1", "label": "Adversarial and robustness test suite for Multilingual NLP Entity Inherence\u2026", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "adversarial and robustness test suite for multilingual nlp entity inherence...", "source_file": "tests/test_adversarial.py", @@ -13581,7 +13933,7 @@ "label": "Run CLI via subprocess without --output and verify stdout is pure parseable\u2026", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "run cli via subprocess without --output and verify stdout is pure parseable...", "source_file": "tests/test_adversarial.py", @@ -13592,7 +13944,7 @@ "label": "Run CLI via subprocess with empty content and verify error code and exit code.", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "run cli via subprocess with empty content and verify error code and exit code.", "source_file": "tests/test_adversarial.py", @@ -13603,7 +13955,7 @@ "label": "Content about city/state governance of S\u00e3o Paulo against ECP for S\u00e3o Paulo FC.", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "content about city/state governance of sao paulo against ecp for sao paulo fc.", "source_file": "tests/test_adversarial.py", @@ -13614,7 +13966,7 @@ "label": "Run CLI via subprocess with missing target_name and verify error payload.", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "run cli via subprocess with missing target_name and verify error payload.", "source_file": "tests/test_adversarial.py", @@ -13625,7 +13977,7 @@ "label": "Run CLI via subprocess with corrupted JSON and verify error payload.", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "run cli via subprocess with corrupted json and verify error payload.", "source_file": "tests/test_adversarial.py", @@ -13636,7 +13988,7 @@ "label": "Content about apple fruit/culinary recipe against Apple Inc. tech entity.", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "content about apple fruit/culinary recipe against apple inc. tech entity.", "source_file": "tests/test_adversarial.py", @@ -13647,23 +13999,12 @@ "label": "High-weight related entity mentioned in passing without required domain anchors.", "_origin": "ast", "community": 46, - "community_name": "InherenceClassifier", + "community_name": "test_adversarial.py", "file_type": "rationale", "norm_label": "high-weight related entity mentioned in passing without required domain anchors.", "source_file": "tests/test_adversarial.py", "source_location": "L69" }, - { - "id": "tests_test_classifier_rationale_1", - "label": "Unit tests for deterministic classification decision logic.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "unit tests for deterministic classification decision logic.", - "source_file": "tests/test_classifier.py", - "source_location": "L1" - }, { "id": "src_classifier", "label": "classifier.py", @@ -13686,17 +14027,6 @@ "source_file": "src/parser.py", "source_location": "L1" }, - { - "id": "tests_test_models", - "label": "test_models.py", - "_origin": "ast", - "community": 47, - "community_name": "classifier.py", - "file_type": "code", - "norm_label": "test_models.py", - "source_file": "tests/test_models.py", - "source_location": "L1" - }, { "id": "src_classifier_rationale_1", "label": "Core deterministic classification engine (Tier 1 core).", @@ -13731,7 +14061,7 @@ "source_location": "L31" }, { - "id": "src_classifier_rationale_61", + "id": "src_classifier_rationale_66", "label": "Classify inherence of content against an ECP snapshot.", "_origin": "ast", "community": 47, @@ -13739,7 +14069,7 @@ "file_type": "rationale", "norm_label": "classify inherence of content against an ecp snapshot.", "source_file": "src/classifier.py", - "source_location": "L61" + "source_location": "L66" }, { "id": "src_parser_rationale_1", @@ -13785,17 +14115,6 @@ "source_file": "src/parser.py", "source_location": "L9" }, - { - "id": "tests_test_models_rationale_1", - "label": "Unit tests for ECP models, schema validation, and structured error handling.", - "_origin": "ast", - "community": 47, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "unit tests for ecp models, schema validation, and structured error handling.", - "source_file": "tests/test_models.py", - "source_location": "L1" - }, { "id": "tests_test_convert_article_to_markdown", "label": "test_convert_article_to_markdown.py", @@ -13819,18 +14138,18 @@ "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_134", - "label": "Testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", + "id": "tests_test_convert_article_to_markdown_rationale_105", + "label": "Testa divis\u00e3o por ponto e v\u00edrgula na string e v\u00edrgulas em elementos de lista\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", + "norm_label": "testa divisao por ponto e virgula na string e virgulas em elementos de lista...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L134" + "source_location": "L105" }, { - "id": "tests_test_convert_article_to_markdown_rationale_154", + "id": "tests_test_convert_article_to_markdown_rationale_155", "label": "Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabe\u00e7alhos\u2026", "_origin": "ast", "community": 48, @@ -13838,10 +14157,10 @@ "file_type": "rationale", "norm_label": "valida parsing de datas no formato rfc 2822 (usado em feeds rss e cabecalhos...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L154" + "source_location": "L155" }, { - "id": "tests_test_convert_article_to_markdown_rationale_354", + "id": "tests_test_convert_article_to_markdown_rationale_355", "label": "Valida a cadeia de fallback completa para o campo T\u00cdTULO (6 n\u00edveis).", "_origin": "ast", "community": 48, @@ -13849,10 +14168,10 @@ "file_type": "rationale", "norm_label": "valida a cadeia de fallback completa para o campo titulo (6 niveis).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L354" + "source_location": "L355" }, { - "id": "tests_test_convert_article_to_markdown_rationale_436", + "id": "tests_test_convert_article_to_markdown_rationale_437", "label": "Garante que subt\u00edtulo id\u00eantico ao t\u00edtulo seja automaticamente omitido (None).", "_origin": "ast", "community": 48, @@ -13860,10 +14179,10 @@ "file_type": "rationale", "norm_label": "garante que subtitulo identico ao titulo seja automaticamente omitido (none).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L436" + "source_location": "L437" }, { - "id": "tests_test_convert_article_to_markdown_rationale_45", + "id": "tests_test_convert_article_to_markdown_rationale_46", "label": "Valida decodifica\u00e7\u00e3o de entidades HTML nomeadas e num\u00e9ricas.", "_origin": "ast", "community": 48, @@ -13871,21 +14190,10 @@ "file_type": "rationale", "norm_label": "valida decodificacao de entidades html nomeadas e numericas.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L45" + "source_location": "L46" }, { - "id": "tests_test_convert_article_to_markdown_rationale_451", - "label": "Garante que listas de autores/tags usem apenas a primeira fonte v\u00e1lida, sem\u2026", - "_origin": "ast", - "community": 48, - "community_name": "test_convert_article_to_markdown.py", - "file_type": "rationale", - "norm_label": "garante que listas de autores/tags usem apenas a primeira fonte valida, sem...", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L451" - }, - { - "id": "tests_test_convert_article_to_markdown_rationale_541", + "id": "tests_test_convert_article_to_markdown_rationale_542", "label": "Garante correspond\u00eancia exata byte a byte para Trafilatura, Newspaper4k e\u2026", "_origin": "ast", "community": 48, @@ -13893,10 +14201,10 @@ "file_type": "rationale", "norm_label": "garante correspondencia exata byte a byte para trafilatura, newspaper4k e...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L541" + "source_location": "L542" }, { - "id": "tests_test_convert_article_to_markdown_rationale_558", + "id": "tests_test_convert_article_to_markdown_rationale_559", "label": "Garante que m\u00faltiplas execu\u00e7\u00f5es no mesmo arquivo produzam hashes SHA-256\u2026", "_origin": "ast", "community": 48, @@ -13904,10 +14212,10 @@ "file_type": "rationale", "norm_label": "garante que multiplas execucoes no mesmo arquivo produzam hashes sha-256...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L558" + "source_location": "L559" }, { - "id": "tests_test_convert_article_to_markdown_rationale_582", + "id": "tests_test_convert_article_to_markdown_rationale_583", "label": "Testa toda a matriz de c\u00f3digos de sa\u00edda da CLI (0, 1, 2).", "_origin": "ast", "community": 48, @@ -13915,10 +14223,10 @@ "file_type": "rationale", "norm_label": "testa toda a matriz de codigos de saida da cli (0, 1, 2).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L582" + "source_location": "L583" }, { - "id": "tests_test_convert_article_to_markdown_rationale_616", + "id": "tests_test_convert_article_to_markdown_rationale_617", "label": "Garante encerramento com c\u00f3digo 1 caso a raiz do JSON seja lista, n\u00famero ou\u2026", "_origin": "ast", "community": 48, @@ -13926,10 +14234,10 @@ "file_type": "rationale", "norm_label": "garante encerramento com codigo 1 caso a raiz do json seja lista, numero ou...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L616" + "source_location": "L617" }, { - "id": "tests_test_convert_article_to_markdown_rationale_631", + "id": "tests_test_convert_article_to_markdown_rationale_632", "label": "Garante que stdout permane\u00e7a limpo e grava\u00e7\u00e3o at\u00f4mica preserve arquivos\u2026", "_origin": "ast", "community": 48, @@ -13937,10 +14245,10 @@ "file_type": "rationale", "norm_label": "garante que stdout permaneca limpo e gravacao atomica preserve arquivos...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L631" + "source_location": "L632" }, { - "id": "tests_test_convert_article_to_markdown_rationale_675", + "id": "tests_test_convert_article_to_markdown_rationale_676", "label": "Garante gera\u00e7\u00e3o autom\u00e1tica de .md quando -o n\u00e3o \u00e9 informado.", "_origin": "ast", "community": 48, @@ -13948,10 +14256,10 @@ "file_type": "rationale", "norm_label": "garante geracao automatica de .md quando -o nao e informado.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L675" + "source_location": "L676" }, { - "id": "tests_test_convert_article_to_markdown_rationale_704", + "id": "tests_test_convert_article_to_markdown_rationale_705", "label": "Valida a convers\u00e3o E2E de um artigo real extra\u00eddo do arquivo\u2026", "_origin": "ast", "community": 48, @@ -13959,7 +14267,7 @@ "file_type": "rationale", "norm_label": "valida a conversao e2e de um artigo real extraido do arquivo...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L704" + "source_location": "L705" }, { "id": "examples_content_northvolt_de", @@ -17531,7 +17839,7 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc4 licenca", "source_file": "README.md", - "source_location": "L539" + "source_location": "L543" }, { "id": "readme_matriz_determin\u00edstica_de_metadados", @@ -17615,7 +17923,7 @@ "node_kind": "heading", "norm_label": "\ud83e\uddea testes e qualidade de codigo", "source_file": "README.md", - "source_location": "L510" + "source_location": "L511" }, { "id": "readme_textnlpclassifierapp", @@ -18145,7 +18453,7 @@ "source_location": "" }, { - "id": "tests_test_convert_article_to_markdown_rationale_186", + "id": "tests_test_convert_article_to_markdown_rationale_187", "label": "Garante aceita\u00e7\u00e3o de URLs absolutas com esquema HTTP e HTTPS v\u00e1lidos.", "_origin": "ast", "community": 99, @@ -18153,10 +18461,10 @@ "file_type": "rationale", "norm_label": "garante aceitacao de urls absolutas com esquema http e https validos.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L186" + "source_location": "L187" }, { - "id": "tests_test_convert_article_to_markdown_rationale_206", + "id": "tests_test_convert_article_to_markdown_rationale_207", "label": "Garante rejei\u00e7\u00e3o de esquemas n\u00e3o permitidos, URLs relativas e strings vazias.", "_origin": "ast", "community": 99, @@ -18164,10 +18472,10 @@ "file_type": "rationale", "norm_label": "garante rejeicao de esquemas nao permitidos, urls relativas e strings vazias.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L206" + "source_location": "L207" }, { - "id": "tests_test_convert_article_to_markdown_rationale_317", + "id": "tests_test_convert_article_to_markdown_rationale_318", "label": "Garante que a aus\u00eancia de corpo no extrator selecionado NUNCA fa\u00e7a fallback\u2026", "_origin": "ast", "community": 99, @@ -18175,10 +18483,10 @@ "file_type": "rationale", "norm_label": "garante que a ausencia de corpo no extrator selecionado nunca faca fallback...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L317" + "source_location": "L318" }, { - "id": "tests_test_convert_article_to_markdown_rationale_85", + "id": "tests_test_convert_article_to_markdown_rationale_86", "label": "Garante que todos os placeholders documentados no PRD sejam descartados\u2026", "_origin": "ast", "community": 99, @@ -18186,7 +18494,7 @@ "file_type": "rationale", "norm_label": "garante que todos os placeholders documentados no prd sejam descartados...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L85" + "source_location": "L86" } ], "links": [ @@ -19075,7 +19383,55 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/llm.py", - "source_location": "L35", + "source_location": "L62", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter_disambiguate", + "target": "src_adapters_llm_llmfallbackadapter_build_prompt", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/adapters/llm.py", + "source_location": "L65", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter_disambiguate", + "target": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/adapters/llm.py", + "source_location": "L70", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "target": "src_models_decisioncategory", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/adapters/llm.py", + "source_location": "L100", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/adapters/llm.py", + "source_location": "L109", "weight": 1.0 }, { @@ -19099,7 +19455,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L223", + "source_location": "L228", "weight": 1.0 }, { @@ -19111,7 +19467,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L227", + "source_location": "L232", "weight": 1.0 }, { @@ -19123,7 +19479,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L66", + "source_location": "L71", "weight": 1.0 }, { @@ -19135,7 +19491,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L67", + "source_location": "L72", "weight": 1.0 }, { @@ -19147,7 +19503,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L68", + "source_location": "L73", "weight": 1.0 }, { @@ -19159,7 +19515,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L81", + "source_location": "L86", "weight": 1.0 }, { @@ -19171,7 +19527,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L89", + "source_location": "L94", "weight": 1.0 }, { @@ -19183,7 +19539,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L53", + "source_location": "L58", "weight": 1.0 }, { @@ -19195,7 +19551,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L58", + "source_location": "L63", "weight": 1.0 }, { @@ -19579,7 +19935,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L523", + "source_location": "L524", "weight": 1.0 }, { @@ -19591,7 +19947,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L494", + "source_location": "L495", "weight": 1.0 }, { @@ -19603,7 +19959,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L748", + "source_location": "L749", "weight": 1.0 }, { @@ -19615,7 +19971,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L247", + "source_location": "L248", "weight": 1.0 }, { @@ -19627,7 +19983,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L231", + "source_location": "L232", "weight": 1.0 }, { @@ -19639,7 +19995,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L458", + "source_location": "L459", "weight": 1.0 }, { @@ -19651,7 +20007,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L404", + "source_location": "L405", "weight": 1.0 }, { @@ -19663,7 +20019,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L445", + "source_location": "L446", "weight": 1.0 }, { @@ -19675,7 +20031,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L358", + "source_location": "L359", "weight": 1.0 }, { @@ -19687,7 +20043,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L164", + "source_location": "L165", "weight": 1.0 }, { @@ -19699,7 +20055,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L147", + "source_location": "L148", "weight": 1.0 }, { @@ -19711,7 +20067,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L155", + "source_location": "L156", "weight": 1.0 }, { @@ -19723,7 +20079,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L123", + "source_location": "L124", "weight": 1.0 }, { @@ -19735,7 +20091,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L130", + "source_location": "L131", "weight": 1.0 }, { @@ -19747,7 +20103,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L135", + "source_location": "L136", "weight": 1.0 }, { @@ -19759,7 +20115,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L107", + "source_location": "L108", "weight": 1.0 }, { @@ -19771,7 +20127,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L47", + "source_location": "L48", "weight": 1.0 }, { @@ -19783,7 +20139,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L92", + "source_location": "L93", "weight": 1.0 }, { @@ -19795,7 +20151,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L86", + "source_location": "L87", "weight": 1.0 }, { @@ -19807,7 +20163,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L56", + "source_location": "L57", "weight": 1.0 }, { @@ -19819,7 +20175,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L756", + "source_location": "L757", "weight": 1.0 }, { @@ -19831,7 +20187,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L474", + "source_location": "L475", "weight": 1.0 }, { @@ -19843,7 +20199,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L342", + "source_location": "L343", "weight": 1.0 }, { @@ -19855,7 +20211,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L284", + "source_location": "L285", "weight": 1.0 }, { @@ -19867,7 +20223,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L304", + "source_location": "L305", "weight": 1.0 }, { @@ -19879,7 +20235,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L336", + "source_location": "L337", "weight": 1.0 }, { @@ -19891,7 +20247,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L264", + "source_location": "L265", "weight": 1.0 }, { @@ -19903,7 +20259,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L207", + "source_location": "L208", "weight": 1.0 }, { @@ -19915,7 +20271,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L187", + "source_location": "L188", "weight": 1.0 }, { @@ -20518,6 +20874,270 @@ "source_location": "L7", "weight": 1.0 }, + { + "source": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L264", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L265", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L267", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L235", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L236", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L238", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L195", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L204", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L206", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_availability_detection", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L34", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L50", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L51", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L58", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L162", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L163", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L170", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L121", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L122", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L129", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L80", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L89", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L96", + "weight": 1.0 + }, { "source": "tests_test_models_test_classification_error_serialization", "target": "src_models_classificationerror", @@ -21067,7 +21687,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L61", + "source_location": "L62", "weight": 1.0 }, { @@ -21079,7 +21699,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L315", + "source_location": "L316", "weight": 1.0 }, { @@ -21091,7 +21711,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L190", + "source_location": "L191", "weight": 1.0 }, { @@ -21103,7 +21723,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L176", + "source_location": "L177", "weight": 1.0 }, { @@ -21394,6 +22014,18 @@ "source_location": "L330", "weight": 1.0 }, + { + "source": "src_classifier_inherenceclassifier_init", + "target": "src_classifier_py_any", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "src/classifier.py", + "source_location": "L44", + "weight": 1.0 + }, { "source": "src_models_classificationerror_to_dict", "target": "src_models_py_any", @@ -21595,7 +22227,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L11", + "source_location": "L13", "weight": 1.0 }, { @@ -21607,7 +22239,19 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L12", + "source_location": "L14", + "weight": 1.0 + }, + { + "source": "src_adapters_llm", + "target": "src_models_decisioncategory", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "src/adapters/llm.py", + "source_location": "L14", "weight": 1.0 }, { @@ -21619,7 +22263,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L12", + "source_location": "L14", "weight": 1.0 }, { @@ -21655,7 +22299,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L51", + "source_location": "L56", "weight": 1.0 }, { @@ -21667,7 +22311,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L56", + "source_location": "L61", "weight": 1.0 }, { @@ -21919,7 +22563,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -21931,7 +22575,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -21943,7 +22587,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -21955,7 +22599,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -21967,7 +22611,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -21979,7 +22623,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -21991,7 +22635,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22003,7 +22647,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22015,7 +22659,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22027,7 +22671,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22039,7 +22683,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22051,7 +22695,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22366,6 +23010,66 @@ "source_location": "L3", "weight": 1.0 }, + { + "source": "tests_test_llm_fallback", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L15", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "src_classifier_inherenceclassifier", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L16", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "src_models_classificationresult", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L17", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "src_models_decisioncategory", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L17", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "src_models_ecpsnapshot", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L17", + "weight": 1.0 + }, { "source": "tests_test_models", "target": "src_parser_extract_evidence_snippets", @@ -22603,7 +23307,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L11", + "source_location": "L13", "weight": 1.0 }, { @@ -22615,7 +23319,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L12", + "source_location": "L14", "weight": 1.0 }, { @@ -22795,7 +23499,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L20", + "source_location": "L21", "weight": 1.0 }, { @@ -22834,6 +23538,42 @@ "source_location": "L3", "weight": 1.0 }, + { + "source": "tests_test_llm_fallback", + "target": "src_adapters_llm", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L15", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "src_classifier", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L16", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "src_models", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_llm_fallback.py", + "source_location": "L17", + "weight": 1.0 + }, { "source": "tests_test_models", "target": "src_parser", @@ -23050,6 +23790,30 @@ "source_location": "L37", "weight": 1.0 }, + { + "source": "src_adapters_llm_llmfallbackadapter_build_prompt", + "target": "src_models_classificationresult", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "src/adapters/llm.py", + "source_location": "L37", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter_build_prompt", + "target": "src_models_ecpsnapshot", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "src/adapters/llm.py", + "source_location": "L37", + "weight": 1.0 + }, { "source": "src_adapters_llm_llmfallbackadapter_disambiguate", "target": "src_models_ecpsnapshot", @@ -23059,7 +23823,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/adapters/llm.py", - "source_location": "L28", + "source_location": "L52", "weight": 1.0 }, { @@ -23071,7 +23835,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/classifier.py", - "source_location": "L60", + "source_location": "L65", "weight": 1.0 }, { @@ -23323,7 +24087,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "src/adapters/llm.py", - "source_location": "L28", + "source_location": "L52", "weight": 1.0 }, { @@ -27493,7 +28257,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L510", + "source_location": "L511", "weight": 1.0 }, { @@ -27504,7 +28268,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L539", + "source_location": "L543", "weight": 1.0 }, { @@ -33895,7 +34659,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L15", + "source_location": "L17", "weight": 1.0 }, { @@ -34643,7 +35407,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L103", + "source_location": "L104", "weight": 1.0 }, { @@ -34654,7 +35418,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L114", + "source_location": "L115", "weight": 1.0 }, { @@ -34665,7 +35429,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L127", + "source_location": "L128", "weight": 1.0 }, { @@ -34676,7 +35440,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L133", + "source_location": "L134", "weight": 1.0 }, { @@ -34687,7 +35451,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L145", + "source_location": "L146", "weight": 1.0 }, { @@ -34698,7 +35462,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L153", + "source_location": "L154", "weight": 1.0 }, { @@ -34709,7 +35473,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L162", + "source_location": "L163", "weight": 1.0 }, { @@ -34720,7 +35484,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L185", + "source_location": "L186", "weight": 1.0 }, { @@ -34731,7 +35495,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L205", + "source_location": "L206", "weight": 1.0 }, { @@ -34742,7 +35506,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L215", + "source_location": "L216", "weight": 1.0 }, { @@ -34753,7 +35517,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L245", + "source_location": "L246", "weight": 1.0 }, { @@ -34764,7 +35528,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L257", + "source_location": "L258", "weight": 1.0 }, { @@ -34775,7 +35539,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L274", + "source_location": "L275", "weight": 1.0 }, { @@ -34786,7 +35550,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L294", + "source_location": "L295", "weight": 1.0 }, { @@ -34797,7 +35561,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L316", + "source_location": "L317", "weight": 1.0 }, { @@ -34808,7 +35572,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L339", + "source_location": "L340", "weight": 1.0 }, { @@ -34819,7 +35583,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L353", + "source_location": "L354", "weight": 1.0 }, { @@ -34830,7 +35594,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L395", + "source_location": "L396", "weight": 1.0 }, { @@ -34841,7 +35605,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L435", + "source_location": "L436", "weight": 1.0 }, { @@ -34852,7 +35616,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L44", + "source_location": "L45", "weight": 1.0 }, { @@ -34863,7 +35627,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L450", + "source_location": "L451", "weight": 1.0 }, { @@ -34874,7 +35638,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L468", + "source_location": "L469", "weight": 1.0 }, { @@ -34885,7 +35649,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L485", + "source_location": "L486", "weight": 1.0 }, { @@ -34896,7 +35660,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L507", + "source_location": "L508", "weight": 1.0 }, { @@ -34907,7 +35671,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L53", + "source_location": "L54", "weight": 1.0 }, { @@ -34918,7 +35682,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L540", + "source_location": "L541", "weight": 1.0 }, { @@ -34929,7 +35693,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L557", + "source_location": "L558", "weight": 1.0 }, { @@ -34940,7 +35704,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L581", + "source_location": "L582", "weight": 1.0 }, { @@ -34951,7 +35715,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L615", + "source_location": "L616", "weight": 1.0 }, { @@ -34962,7 +35726,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L630", + "source_location": "L631", "weight": 1.0 }, { @@ -34973,7 +35737,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L674", + "source_location": "L675", "weight": 1.0 }, { @@ -34984,7 +35748,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L703", + "source_location": "L704", "weight": 1.0 }, { @@ -34995,7 +35759,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L734", + "source_location": "L735", "weight": 1.0 }, { @@ -35006,7 +35770,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L754", + "source_location": "L755", "weight": 1.0 }, { @@ -35017,7 +35781,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L84", + "source_location": "L85", "weight": 1.0 }, { @@ -35028,7 +35792,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L90", + "source_location": "L91", "weight": 1.0 }, { @@ -35482,6 +36246,105 @@ "source_location": "L6", "weight": 1.0 }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L118", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L149", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L190", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L224", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L255", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L289", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_llm_adapter_availability_detection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L31", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L48", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback", + "target": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L78", + "weight": 1.0 + }, { "source": "tests_test_models", "target": "tests_test_models_test_parser_strip_markdown", @@ -35963,7 +36826,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L15", + "source_location": "L17", "weight": 1.0 }, { @@ -36326,7 +37189,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L18", + "source_location": "L20", "weight": 1.0 }, { @@ -36337,7 +37200,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L22", + "source_location": "L30", "weight": 1.0 }, { @@ -36348,7 +37211,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L25", + "source_location": "L34", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter", + "target": "src_adapters_llm_llmfallbackadapter_build_prompt", + "relation": "method", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L37", "weight": 1.0 }, { @@ -36359,7 +37233,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L28", + "source_location": "L52", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter", + "target": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "relation": "method", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L75", "weight": 1.0 }, { @@ -36381,7 +37266,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L60", + "source_location": "L65", "weight": 1.0 }, { @@ -37210,14 +38095,58 @@ "weight": 1.0 }, { - "source": "src_adapters_llm_rationale_16", + "source": "src_adapters_llm_rationale_18", "target": "src_adapters_llm_llmfallbackadapter", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L16", + "source_location": "L18", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_rationale_31", + "target": "src_adapters_llm_llmfallbackadapter_is_available", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L31", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_rationale_40", + "target": "src_adapters_llm_llmfallbackadapter_build_prompt", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L40", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_rationale_58", + "target": "src_adapters_llm_llmfallbackadapter_disambiguate", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L58", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_rationale_80", + "target": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L80", "weight": 1.0 }, { @@ -37265,14 +38194,14 @@ "weight": 1.0 }, { - "source": "src_classifier_rationale_61", + "source": "src_classifier_rationale_66", "target": "src_classifier_inherenceclassifier_classify", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L61", + "source_location": "L66", "weight": 1.0 }, { @@ -37540,399 +38469,399 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_104", + "source": "tests_test_convert_article_to_markdown_rationale_105", "target": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L104", + "source_location": "L105", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_115", + "source": "tests_test_convert_article_to_markdown_rationale_116", "target": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L115", + "source_location": "L116", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_128", + "source": "tests_test_convert_article_to_markdown_rationale_129", "target": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L128", + "source_location": "L129", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_134", + "source": "tests_test_convert_article_to_markdown_rationale_135", "target": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L134", + "source_location": "L135", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_146", + "source": "tests_test_convert_article_to_markdown_rationale_147", "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L146", + "source_location": "L147", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_154", + "source": "tests_test_convert_article_to_markdown_rationale_155", "target": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L154", + "source_location": "L155", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_163", + "source": "tests_test_convert_article_to_markdown_rationale_164", "target": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L163", + "source_location": "L164", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_186", + "source": "tests_test_convert_article_to_markdown_rationale_187", "target": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L186", + "source_location": "L187", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_206", + "source": "tests_test_convert_article_to_markdown_rationale_207", "target": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L206", + "source_location": "L207", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_216", + "source": "tests_test_convert_article_to_markdown_rationale_217", "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L216", + "source_location": "L217", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_246", + "source": "tests_test_convert_article_to_markdown_rationale_247", "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L246", + "source_location": "L247", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_258", + "source": "tests_test_convert_article_to_markdown_rationale_259", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L258", + "source_location": "L259", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_275", + "source": "tests_test_convert_article_to_markdown_rationale_276", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L275", + "source_location": "L276", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_295", + "source": "tests_test_convert_article_to_markdown_rationale_296", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L295", + "source_location": "L296", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_317", + "source": "tests_test_convert_article_to_markdown_rationale_318", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L317", + "source_location": "L318", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_340", + "source": "tests_test_convert_article_to_markdown_rationale_341", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L340", + "source_location": "L341", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_354", + "source": "tests_test_convert_article_to_markdown_rationale_355", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L354", + "source_location": "L355", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_396", + "source": "tests_test_convert_article_to_markdown_rationale_397", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L396", + "source_location": "L397", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_436", + "source": "tests_test_convert_article_to_markdown_rationale_437", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L436", + "source_location": "L437", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_45", - "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L45", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_451", + "source": "tests_test_convert_article_to_markdown_rationale_452", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L451", + "source_location": "L452", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_469", + "source": "tests_test_convert_article_to_markdown_rationale_46", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L46", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_470", "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L469", + "source_location": "L470", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_486", + "source": "tests_test_convert_article_to_markdown_rationale_487", "target": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L486", + "source_location": "L487", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_508", + "source": "tests_test_convert_article_to_markdown_rationale_509", "target": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L508", + "source_location": "L509", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_54", - "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L54", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_541", + "source": "tests_test_convert_article_to_markdown_rationale_542", "target": "tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L541", + "source_location": "L542", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_558", + "source": "tests_test_convert_article_to_markdown_rationale_55", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L55", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_559", "target": "tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L558", + "source_location": "L559", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_582", + "source": "tests_test_convert_article_to_markdown_rationale_583", "target": "tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L582", + "source_location": "L583", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_616", + "source": "tests_test_convert_article_to_markdown_rationale_617", "target": "tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L616", + "source_location": "L617", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_631", + "source": "tests_test_convert_article_to_markdown_rationale_632", "target": "tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L631", + "source_location": "L632", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_675", + "source": "tests_test_convert_article_to_markdown_rationale_676", "target": "tests_test_convert_article_to_markdown_test_cli_default_output_naming", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L675", + "source_location": "L676", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_704", + "source": "tests_test_convert_article_to_markdown_rationale_705", "target": "tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L704", + "source_location": "L705", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_735", + "source": "tests_test_convert_article_to_markdown_rationale_736", "target": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L735", + "source_location": "L736", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_755", + "source": "tests_test_convert_article_to_markdown_rationale_756", "target": "tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L755", + "source_location": "L756", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_85", + "source": "tests_test_convert_article_to_markdown_rationale_86", "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L85", + "source_location": "L86", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_91", + "source": "tests_test_convert_article_to_markdown_rationale_92", "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L91", + "source_location": "L92", "weight": 1.0 }, { @@ -38166,6 +39095,116 @@ "source_location": "L1", "weight": 1.0 }, + { + "source": "tests_test_llm_fallback_rationale_1", + "target": "tests_test_llm_fallback", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_119", + "target": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L119", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_150", + "target": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L150", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_191", + "target": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L191", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_225", + "target": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L225", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_256", + "target": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L256", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_290", + "target": "tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L290", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_32", + "target": "tests_test_llm_fallback_test_llm_adapter_availability_detection", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L32", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_49", + "target": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L49", + "weight": 1.0 + }, + { + "source": "tests_test_llm_fallback_rationale_79", + "target": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L79", + "weight": 1.0 + }, { "source": "tests_test_models_rationale_1", "target": "tests_test_models", @@ -39027,13 +40066,13 @@ }, { "source": "src_adapters_llm_llmfallbackadapter", - "target": "src_models_ecpsnapshot", + "target": "src_models_decisioncategory", "relation": "uses", "_origin": "ast", "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/llm.py", - "source_location": "L30", + "source_location": "L100", "weight": 0.8 }, { @@ -39044,7 +40083,18 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/llm.py", - "source_location": "L32", + "source_location": "L38", + "weight": 0.8 + }, + { + "source": "src_adapters_llm_llmfallbackadapter", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "src/adapters/llm.py", + "source_location": "L38", "weight": 0.8 }, { @@ -39055,7 +40105,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L151", + "source_location": "L156", "weight": 0.8 }, { @@ -39066,7 +40116,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L53", + "source_location": "L58", "weight": 0.8 }, { @@ -39077,7 +40127,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L58", + "source_location": "L63", "weight": 0.8 }, { @@ -39088,7 +40138,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L60", + "source_location": "L65", "weight": 0.8 }, { @@ -39099,7 +40149,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L60", + "source_location": "L65", "weight": 0.8 }, { @@ -39322,6 +40372,83 @@ "source_location": "L202", "weight": 0.8 }, + { + "source": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L278", + "weight": 0.8 + }, + { + "source": "tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L249", + "weight": 0.8 + }, + { + "source": "tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L218", + "weight": 0.8 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L59", + "weight": 0.8 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L171", + "weight": 0.8 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L130", + "weight": 0.8 + }, + { + "source": "tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_llm_fallback.py", + "source_location": "L97", + "weight": 0.8 + }, { "source": "tests_test_models_test_classification_error_serialization", "target": "src_models_errorcode", @@ -39511,5 +40638,5 @@ } ], "hyperedges": [], - "built_at_commit": "926a6b8cfc50c59412b40a9462d3ec533e852375" + "built_at_commit": "cb33dafac1333f44ca864800474e17303f0e408a" } \ No newline at end of file diff --git a/graphify-out/2026-08-21/manifest.json b/graphify-out/2026-08-21/manifest.json index 0ae9de8..bf01124 100644 --- a/graphify-out/2026-08-21/manifest.json +++ b/graphify-out/2026-08-21/manifest.json @@ -294,9 +294,9 @@ "semantic_hash": "" }, "classify.py": { - "mtime": 1787264412.2457643, - "seen": 1787264519.0539427, - "ast_hash": "e89fc4b64bd7606fc466d5338108705b", + "mtime": 1787320064.0177462, + "seen": 1787320239.022448, + "ast_hash": "3679326c88a59f796f587e0c61c31417", "semantic_hash": "" }, "pyproject.toml": { @@ -330,15 +330,15 @@ "semantic_hash": "" }, "src/adapters/llm.py": { - "mtime": 1787264412.2437606, - "seen": 1787264519.0542035, - "ast_hash": "ba2990328f5b25ac6cdfc3b57acc9d39", + "mtime": 1787320047.0352886, + "seen": 1787320239.0258572, + "ast_hash": "ffcf26cb4e89395aa8771ddb4f5de785", "semantic_hash": "" }, "src/classifier.py": { - "mtime": 1787264459.052089, - "seen": 1787264519.0542045, - "ast_hash": "b8fb440374ecd66bb8bf67c70c19ed1f", + "mtime": 1787320047.0362887, + "seen": 1787320239.025866, + "ast_hash": "d6cc674d407a99ab52f6d5156f9b3d8e", "semantic_hash": "" }, "src/language.py": { @@ -654,9 +654,9 @@ "semantic_hash": "" }, "README.md": { - "mtime": 1787319775.4204426, - "seen": 1787319817.9012172, - "ast_hash": "f809a191cb40e8a0367c748b9c8d3e84", + "mtime": 1787320219.5852203, + "seen": 1787320239.0933797, + "ast_hash": "ce59670fbaebc5e408a30a1009a58d12", "semantic_hash": "" }, "scripts/extract_article_contents.py": { @@ -816,15 +816,15 @@ "semantic_hash": "" }, "scripts/convert_article_to_markdown.py": { - "mtime": 1787318905.723034, - "seen": 1787319817.895658, - "ast_hash": "b58fbd8b426de464df2c269c32831583", + "mtime": 1787320071.2809863, + "seen": 1787320239.0233297, + "ast_hash": "7939a71acd9b264f9d00eab5c652cd36", "semantic_hash": "" }, "tests/test_convert_article_to_markdown.py": { - "mtime": 1787318905.723034, - "seen": 1787319817.8974621, - "ast_hash": "95c041594afec14ed25bc237b7ff8b89", + "mtime": 1787320111.811304, + "seen": 1787320239.0292969, + "ast_hash": "5223f35131b8e952e05c44710f3988b2", "semantic_hash": "" }, "docs/prd_convert_json_markdown.md": { @@ -910,5 +910,11 @@ "seen": 1787317712.8280091, "ast_hash": "c63c1c39e34e08a239aa8bea3c264756", "semantic_hash": "" + }, + "tests/test_llm_fallback.py": { + "mtime": 1787320089.2120655, + "seen": 1787320239.0310187, + "ast_hash": "74bc17c4668551e77214d6581baf206c", + "semantic_hash": "" } } \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index 0533968..03fb38d 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,7 +1,7 @@ # Graph Report - TextNLPClassifierApp (2026-08-21) ## Corpus Check -- 201 files · ~110,162 words +- 201 files · ~110,615 words - Verdict: corpus is large enough that graph structure adds value. ## Summary @@ -10,7 +10,7 @@ - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `cb33dafa` +- Built from commit: `31152d50` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -157,7 +157,7 @@ - Specification Quality Checklist: Convert Article JSON to Markdown - CLI Contract: `convert_article_to_markdown.py` - 9. Interface CLI -- get_hl_gl_ceid +- sample_rss_xml - 13. Estratégia de testes - 6. Contrato de entrada - InherenceClassifier @@ -173,7 +173,7 @@ - test_normalize_date_iso_8601_variants - test_metadata_priority_original_url_all_fallbacks - test_normalize_scalar_non_string_types -- LLMFallbackAdapter +- .disambiguate - remove_duplicate_initial_h1 - test_normalize_scalar_whitespace_collapsing @@ -192,7 +192,7 @@ ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] classify.py → src/models.py -- `test_e2e_extract_google_news_live_pipeline()` --uses--> `ExtractionResult` [INFERRED] +- `test_extract_google_news_orchestration_mocked()` --uses--> `ExtractionResult` [INFERRED] tests/test_extract_google_news.py → scripts/extract_google_news.py - `test_llm_adapter_interface()` --calls--> `LLMFallbackAdapter` [EXTRACTED] tests/test_adapters.py → src/adapters/llm.py @@ -371,16 +371,16 @@ Cohesion: 0.08 Nodes (24): 1. Visão geral (arquitetura), 2.1 DTO de entrada (`googlenews_etl/application/dtos/extract_news_dto.py`), 2.2 Value Object de validação (`googlenews_etl/domain/entities/search_query.py`), 2. Entrada, 3.1 O caso de uso (`googlenews_etl/application/use_cases/extract_news_use_case.py`), 3.2 A porta (`googlenews_etl/domain/ports/news_extractor_port.py`), 3.3.1 Inicialização: sessão HTTP com impersonação de browser, 3.3.2 Mapeamento idioma → parâmetros `hl`/`gl` (`_get_hl_gl`) (+16 more) ### Community 82 - "extract_google_news.py" -Cohesion: 0.20 -Nodes (14): extract_google_news(), _fetch_rss_content(), NewsArticle, _normalize_text_for_comparison(), parse_google_news_rss(), Remove pontuação e espaços extras para comparação de redundância., Parseia o XML do RSS do Google News e extrai os itens estruturados., Resolve em paralelo as URLs intermediárias do Google News para os links finais… (+6 more) +Cohesion: 0.15 +Nodes (18): extract_google_news(), _fetch_rss_content(), get_hl_gl_ceid(), NewsArticle, _normalize_text_for_comparison(), parse_google_news_rss(), Mapeia idioma e locale para os parâmetros hl, gl e ceid do Google News., Remove pontuação e espaços extras para comparação de redundância. (+10 more) ### Community 83 - "ExtractionResult" Cohesion: 0.29 -Nodes (5): ExtractionResult, Any, Resultado consolidado da extração., Valida a consolidação do ExtractionResult a partir da busca mockada com URLs…, test_extract_google_news_orchestration_mocked() +Nodes (5): ExtractionResult, Any, Resultado consolidado da extração., Valida E2E o fluxo completo de busca, parsing e resolução de URLs reais ao vivo., test_e2e_extract_google_news_live_pipeline() ### Community 84 - "test_extract_google_news.py" -Cohesion: 0.16 -Nodes (14): Resolve a URL intermediária do Google News para a URL real do veículo., resolve_article_url(), fixture, Testes unitários e de integração para o Extrator de Manchetes do Google News.…, Valida o parsing do feed RSS, higienização de tags HTML e deduplicação., Valida fallback gracioso de URL quando não é link do Google News ou em erro., Valida resolução bem-sucedida de URL do Google News para o portal destino., Valida E2E que o decodificador resolve uma URL real do Google News para o… (+6 more) +Cohesion: 0.15 +Nodes (15): Resolve a URL intermediária do Google News para a URL real do veículo., resolve_article_url(), Testes unitários e de integração para o Extrator de Manchetes do Google News.…, Valida fallback gracioso de URL quando não é link do Google News ou em erro., Valida resolução bem-sucedida de URL do Google News para o portal destino., Valida E2E que o decodificador resolve uma URL real do Google News para o…, Valida o mapeamento padrão de idiomas para pares (hl, gl, ceid)., Valida a sobrescrita geográfica quando o argumento locale é especificado. (+7 more) ### Community 85 - "Implementation Tasks: Google News Headlines Extractor" Cohesion: 0.14 @@ -400,7 +400,7 @@ Nodes (7): Architecture & Pipeline, Documentation (this feature), Implementation ### Community 90 - "SearchQuery" Cohesion: 0.20 -Nodes (6): Value Object com parâmetros de busca validados., SearchQuery, Valida E2E o fluxo completo de busca, parsing e resolução de URLs reais ao vivo., Valida as regras de negócio e limites de SearchQuery., test_e2e_extract_google_news_live_pipeline(), test_search_query_validation() +Nodes (6): Value Object com parâmetros de busca validados., SearchQuery, Valida a consolidação do ExtractionResult a partir da busca mockada com URLs…, Valida as regras de negócio e limites de SearchQuery., test_extract_google_news_orchestration_mocked(), test_search_query_validation() ### Community 91 - "1. Technical Decisions & Tradeoffs" Cohesion: 0.25 @@ -622,9 +622,9 @@ Nodes (5): 1. Script Signature, 2. Command-Line Arguments, 3. Exit Codes, 4. Sta Cohesion: 0.40 Nodes (5): 9.1 Script, 9.2 Argumentos, 9.3 Exemplos, 9.4 Saída do processo, 9. Interface CLI -### Community 149 - "get_hl_gl_ceid" -Cohesion: 0.25 -Nodes (8): get_hl_gl_ceid(), Mapeia idioma e locale para os parâmetros hl, gl e ceid do Google News., Valida o mapeamento padrão de idiomas para pares (hl, gl, ceid)., Valida a sobrescrita geográfica quando o argumento locale é especificado., Valida fallback dinâmico para idiomas regionais não listados explicitamente., test_get_hl_gl_ceid_default_mappings(), test_get_hl_gl_ceid_dynamic_fallback(), test_get_hl_gl_ceid_with_custom_locale() +### Community 149 - "sample_rss_xml" +Cohesion: 0.67 +Nodes (3): fixture, Fixture que fornece o conteúdo do XML de exemplo para testes offline., sample_rss_xml() ### Community 150 - "13. Estratégia de testes" Cohesion: 0.50 @@ -635,8 +635,8 @@ Cohesion: 0.50 Nodes (4): 6.1 Formato, 6.2 Valores aceitos para `selected_extractor`, 6.3 Campos obrigatórios após a resolução, 6. Contrato de entrada ### Community 152 - "InherenceClassifier" -Cohesion: 0.14 -Nodes (24): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Unit tests for deterministic classification decision logic., test_contextual_inherent(), test_direct_inherent(), test_negative_anchor_suppression(), test_not_related() (+16 more) +Cohesion: 0.11 +Nodes (31): LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., InherenceClassifier, Any, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Unit tests for deterministic classification decision logic., test_contextual_inherent() (+23 more) ### Community 153 - "convert_html_to_markdown" Cohesion: 0.33 @@ -650,9 +650,9 @@ Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: De Cohesion: 0.67 Nodes (3): 5.1 Incluído, 5.2 Fora do escopo, 5. Escopo -### Community 165 - "LLMFallbackAdapter" -Cohesion: 0.13 -Nodes (11): LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Returns True if an API key or custom provider function is configured., Constructs a structured disambiguation prompt for the LLM., Executes LLM fallback for ambiguous boundary cases. Returns a refined…, Parses and validates structured JSON response from LLM., Any, Valida detecção de disponibilidade por chave de API ou provider customizado. (+3 more) +### Community 165 - ".disambiguate" +Cohesion: 0.25 +Nodes (4): Executes LLM fallback for ambiguous boundary cases. Returns a refined…, Parses and validates structured JSON response from LLM., Returns True if an API key or custom provider function is configured., Constructs an expert-engineered prompt for multilingual entity inherence… ### Community 166 - "remove_duplicate_initial_h1" Cohesion: 0.50 diff --git a/graphify-out/cache/ast/v0.9.47-s2/37c7075e5b486aeecc47f32dc299635f468f2b3f6a9564902ef4b5355b9d40e7.json b/graphify-out/cache/ast/v0.9.47-s2/37c7075e5b486aeecc47f32dc299635f468f2b3f6a9564902ef4b5355b9d40e7.json new file mode 100644 index 0000000..4e36da8 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/37c7075e5b486aeecc47f32dc299635f468f2b3f6a9564902ef4b5355b9d40e7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_src_adapters_llm_py", "label": "llm.py", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L1"}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "label": "LLMFallbackAdapter", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L17", "_callable": true, "_callable_class": true}, {"id": "basenlpadapter", "label": "BaseNLPAdapter", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/adapters/llm.py"}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "label": ".__init__()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L20", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "label": ".is_available()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L30", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_evaluate_similarity", "label": ".evaluate_similarity()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L34", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "label": ".build_prompt()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L37", "_callable": true}, {"id": "ecpsnapshot", "label": "ECPSnapshot", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/adapters/llm.py"}, {"id": "classificationresult", "label": "ClassificationResult", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/adapters/llm.py"}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "label": ".disambiguate()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L123", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "label": "._parse_llm_response()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L146", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_rationale_1", "label": "Optional LLM fallback adapter (Tier 3). Disabled by default. Provides fallback\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L1"}, {"id": "$graphify-root$_src_adapters_llm_rationale_18", "label": "Optional adapter for LLM fallback boundary disambiguation.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L18"}, {"id": "$graphify-root$_src_adapters_llm_rationale_31", "label": "Returns True if an API key or custom provider function is configured.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L31"}, {"id": "$graphify-root$_src_adapters_llm_rationale_40", "label": "Constructs an expert-engineered prompt for multilingual entity inherence\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L40"}, {"id": "$graphify-root$_src_adapters_llm_rationale_129", "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L129"}, {"id": "$graphify-root$_src_adapters_llm_rationale_151", "label": "Parses and validates structured JSON response from LLM.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L151"}], "edges": [{"source": "$graphify-root$_src_adapters_llm_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "src_adapters_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "basenlpadapter", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_evaluate_similarity", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "target": "classificationresult", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L123", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L123", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "classificationresult", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L123", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "classificationresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L123", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L146", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "target": "classificationresult", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L146", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "target": "classificationresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L146", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L133", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L136", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L141", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "target": "classificationresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L180", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_1", "target": "$graphify-root$_src_adapters_llm_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_18", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_31", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_40", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_129", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L129", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_151", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L151", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L27", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L45", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L54", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L56", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L77", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "provider_fn", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L140", "receiver": "self"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L154", "receiver": "raw_response"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "startswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L155", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "startswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L157", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "endswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L159", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L161", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "loads", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L163", "receiver": "json"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/adapters/llm.py", "source_location": "L164"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L167", "receiver": "parsed"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "DecisionCategory", "is_member_call": false, "source_file": "src/adapters/llm.py", "source_location": "L171", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L172", "receiver": "parsed"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L174", "receiver": "parsed"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/9009157bba0e34fe9c5ece500464da1a07c5087c261f9a4d84946b14af267305.json b/graphify-out/cache/ast/v0.9.47-s2/9009157bba0e34fe9c5ece500464da1a07c5087c261f9a4d84946b14af267305.json new file mode 100644 index 0000000..dfaf7bf --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/9009157bba0e34fe9c5ece500464da1a07c5087c261f9a4d84946b14af267305.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_llm_fallback_py", "label": "test_llm_fallback.py", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "label": "test_llm_adapter_availability_detection()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L31", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "label": "test_llm_adapter_build_prompt_structure()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L48", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "label": "test_llm_adapter_parsing_valid_json_response()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L78", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "label": "test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L118", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "label": "test_llm_adapter_handling_invalid_and_corrupt_responses()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L149", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "label": "test_classifier_triggers_tier3_on_ambiguous_tangential_case()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L192", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "label": "test_classifier_skips_tier3_on_clear_direct_inherent_case()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L226", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "label": "test_classifier_graceful_degradation_when_llm_raises_exception()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L257", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "label": "test_cli_execution_with_enable_llm_flag()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L291", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_1", "label": "Su\u00edte de Testes para o Adaptador de Fallback para LLM (Tier 3) do Classificador\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_32", "label": "Valida detec\u00e7\u00e3o de disponibilidade por chave de API ou provider customizado.", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L32"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_49", "label": "Valida a montagem do prompt de desambigua\u00e7\u00e3o com metadados do ECP e documento.", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L49"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_79", "label": "Valida o parsing e instancia\u00e7\u00e3o correta do ClassificationResult a partir da\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L79"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_119", "label": "Valida extra\u00e7\u00e3o de JSON quando a resposta do LLM vem formatada em bloco\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L119"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_150", "label": "Valida que respostas corrompidas ou JSONs sem campos obrigat\u00f3rios retornem None\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L150"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_193", "label": "Garante que o classificador dispare o Tier 3 LLM para casos amb\u00edguos\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L193"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_227", "label": "Garante que casos claros (alta confian\u00e7a e alta densidade de \u00e2ncoras) N\u00c3O\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L227"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_258", "label": "Garante que se o LLM falhar por erro de rede ou timeout, o classificador\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L258"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_292", "label": "Garante que a CLI classify.py aceite e processe a flag --enable-llm sem erros.", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L292"}], "edges": [{"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "src_adapters_llm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "src_classifier", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L48", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L118", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L149", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L192", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L226", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L257", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L291", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_1", "target": "$graphify-root$_tests_test_llm_fallback_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_32", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_49", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_79", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_119", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L119", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_150", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L150", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_193", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L193", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_227", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L227", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_258", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L258", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_292", "target": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L292", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L34", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "is_available", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L35", "receiver": "adapter_empty"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L38", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "is_available", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L39", "receiver": "adapter_with_key"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "is_available", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L45", "receiver": "adapter_with_fn"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "build_prompt", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L71", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L80", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L81", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L89", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L96", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L109", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L122", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L129", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L142", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L161", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L162", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "make_bad_provider", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L164", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L165", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L172", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L184", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L197", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L198", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L206", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L208", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "classify", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L218", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L237", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "tracking_provider", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_llm_fallback.py", "source_location": "L237"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L238", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L240", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "classify", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L250", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L266", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "failing_provider", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_llm_fallback.py", "source_location": "L266"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L267", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L269", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "classify", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L278", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L294", "receiver": "ecp_file"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L295", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L307", "receiver": "content_file"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "run", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L310", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_llm_fallback.py", "source_location": "L313"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "exists", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L326", "receiver": "output_file"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "loads", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L327", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L327", "receiver": "output_file"}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json index a0116f0..2eed8f4 100644 --- a/graphify-out/cache/stat-index.json +++ b/graphify-out/cache/stat-index.json @@ -1 +1 @@ -{".agents/skills/graphify/SKILL.md":{"size":41276,"mtime_ns":1787189375574389900,"indexed_at_ns":1787189383574665500,"word_count":5211,"hashes":{".agents/skills/graphify/skill.md":"3f0ba089a04e342e4337913a03515905fe205f57914b53b8eb1ff59dc926a4ea"}},".agents/skills/graphify/references/add-watch.md":{"size":2486,"mtime_ns":1787176247108301100,"indexed_at_ns":1787189352249948700,"word_count":366,"hashes":{".agents/skills/graphify/references/add-watch.md":"bc4c3ac2e736e36fff3e120b2a7967f1f049c6b05ca39db50606b4bb83c768f7"}},".agents/skills/graphify/references/exports.md":{"size":3362,"mtime_ns":1787176247109325900,"indexed_at_ns":1787189352252005200,"word_count":470,"hashes":{".agents/skills/graphify/references/exports.md":"81b09c0ad09d54d52b68755c32544024e290c02f53bdeb283b1b76d7eebc2445"}},".agents/skills/graphify/references/extraction-spec.md":{"size":7960,"mtime_ns":1787176247109325900,"indexed_at_ns":1787189352254091000,"word_count":1038,"hashes":{".agents/skills/graphify/references/extraction-spec.md":"d07c5b2e8224b1006b1a336f77d0af22f637fe8d20166895bf852c32324d851b"}},".agents/skills/graphify/references/github-and-merge.md":{"size":2177,"mtime_ns":1787176247111831300,"indexed_at_ns":1787189352255826900,"word_count":271,"hashes":{".agents/skills/graphify/references/github-and-merge.md":"189cf7c8c51988d23f6ad25dff96855ce0e7336bffa352dedb3867954e702f7b"}},".agents/skills/graphify/references/hooks.md":{"size":1267,"mtime_ns":1787176247112843500,"indexed_at_ns":1787189352257586300,"word_count":193,"hashes":{".agents/skills/graphify/references/hooks.md":"3e7d2df361e7059e921192b1693cc7859e4a2b0474446f8352be5a4624790eaa"}},".agents/skills/graphify/references/query.md":{"size":13456,"mtime_ns":1787176247113897600,"indexed_at_ns":1787189352259619700,"word_count":1763,"hashes":{".agents/skills/graphify/references/query.md":"151ad7ed0ee4aefe411f026261f605a61134cc6247324fe8df3ae1e785321283"}},".agents/skills/graphify/references/transcribe.md":{"size":3173,"mtime_ns":1787176247113897600,"indexed_at_ns":1787189352261502100,"word_count":418,"hashes":{".agents/skills/graphify/references/transcribe.md":"cbbbae90e451d722b39df0df7bc267bb9b7ecb3dd8a9e8be4b40237df053c8d6"}},".agents/skills/graphify/references/update.md":{"size":10425,"mtime_ns":1787176247115420200,"indexed_at_ns":1787189352263334600,"word_count":1196,"hashes":{".agents/skills/graphify/references/update.md":"b209dbb3bb5466e601a530b65925c55c34f040ffcf56d38ea64be9aaf75f92ce"}},".agents/skills/ponytail-audit/SKILL.md":{"size":1693,"mtime_ns":1786995804152832800,"indexed_at_ns":1787189325036907200,"word_count":234,"hashes":{".agents/skills/ponytail-audit/skill.md":"b29dd08e26692c4bdd87b024d43820e2b45527984d9b3330b5fcfc78491aac52"}},".agents/skills/ponytail-debt/SKILL.md":{"size":1747,"mtime_ns":1786995804152832800,"indexed_at_ns":1787189325037560500,"word_count":261,"hashes":{".agents/skills/ponytail-debt/skill.md":"4b8e8de454f0d7d46bce20b3f4b4ea4c5a1eb60691c0d8bef27ef4ded155e4bc"}},".agents/skills/ponytail-gain/SKILL.md":{"size":2023,"mtime_ns":1786995804154227800,"indexed_at_ns":1787189325038161300,"word_count":246,"hashes":{".agents/skills/ponytail-gain/skill.md":"9e15d99db7452555dae0cc55e5c37799e1dc8acaed4eb89c0e9641d3afbb9646"}},".agents/skills/ponytail-help/SKILL.md":{"size":2867,"mtime_ns":1786995804154227800,"indexed_at_ns":1787189325038779900,"word_count":379,"hashes":{".agents/skills/ponytail-help/skill.md":"4b6ba4d12d19068c08b12af63c05b0acc9ce3beed06654065450c0cd6042d9db"}},".agents/skills/ponytail-review/SKILL.md":{"size":2440,"mtime_ns":1786995804155238700,"indexed_at_ns":1787189325039426100,"word_count":339,"hashes":{".agents/skills/ponytail-review/skill.md":"694090b91438cff578931361d36947da438722dd1f9f7460022bb3aa5b18b4de"}},".agents/skills/ponytail/SKILL.md":{"size":6757,"mtime_ns":1786995804156239700,"indexed_at_ns":1787189325040071200,"word_count":1079,"hashes":{".agents/skills/ponytail/skill.md":"64fc6e81a1b2b008fd72f5c9686498e53383e9cb25d518dc81305799e985bf6f"}},".agents/skills/speckit-analyze/SKILL.md":{"size":11642,"mtime_ns":1787189272133064100,"indexed_at_ns":1787189325040713600,"word_count":1569,"hashes":{".agents/skills/speckit-analyze/skill.md":"12f78b5b87a05d7075320de7e7df0fc3890ee915bf5203ef2c397fee48b0d04e"}},".agents/skills/speckit-checklist/SKILL.md":{"size":22277,"mtime_ns":1787189272160379600,"indexed_at_ns":1787189325041377200,"word_count":2981,"hashes":{".agents/skills/speckit-checklist/skill.md":"1b9b592206c499d1c46699ea99fd3795ec31638e3968aa90054d07bff9f26852"}},".agents/skills/speckit-clarify/SKILL.md":{"size":19212,"mtime_ns":1787189272137533000,"indexed_at_ns":1787189325042095600,"word_count":2688,"hashes":{".agents/skills/speckit-clarify/skill.md":"d091faedcb83b3f11a3049a84424f5d66b6bdf181b192a8167c07b94133e617d"}},".agents/skills/speckit-constitution/SKILL.md":{"size":9959,"mtime_ns":1787189272141381400,"indexed_at_ns":1787189325042781900,"word_count":1376,"hashes":{".agents/skills/speckit-constitution/skill.md":"791892a3d87f7bd6ea936f896c5050b183942489d68bfb383c2ba4de8380a901"}},".agents/skills/speckit-converge/SKILL.md":{"size":12639,"mtime_ns":1787189272150381400,"indexed_at_ns":1787189325043428600,"word_count":1798,"hashes":{".agents/skills/speckit-converge/skill.md":"c04c22c94ac9a47d73d547636127b06f38647627a4dbfbc36ae50dd0a95971b3"}},".agents/skills/speckit-implement/SKILL.md":{"size":12703,"mtime_ns":1787189272146373000,"indexed_at_ns":1787189325044057400,"word_count":1691,"hashes":{".agents/skills/speckit-implement/skill.md":"a779bc551abfa24d77556554b4cc0225b3c57bc436956b9cb9aafe306c581945"}},".agents/skills/speckit-plan/SKILL.md":{"size":7857,"mtime_ns":1787189272154380100,"indexed_at_ns":1787189325044689700,"word_count":1083,"hashes":{".agents/skills/speckit-plan/skill.md":"74b5f950130fa658b857d1c81ac052d89277cbe9901c51f01270963c746277b6"}},".agents/skills/speckit-specify/SKILL.md":{"size":18258,"mtime_ns":1787189272165381000,"indexed_at_ns":1787189325045384300,"word_count":2452,"hashes":{".agents/skills/speckit-specify/skill.md":"b86e839509339a9e11a605b6db50fcd3a435511d5cbe1bbbf4f473ac4bdd5447"}},".agents/skills/speckit-tasks/SKILL.md":{"size":10978,"mtime_ns":1787189272169379600,"indexed_at_ns":1787189325046041900,"word_count":1581,"hashes":{".agents/skills/speckit-tasks/skill.md":"69de6853783574ace13eadf7c706a610df2f2584901974b713a51c1576e53339"}},".agents/skills/speckit-taskstoissues/SKILL.md":{"size":7686,"mtime_ns":1787189272172364900,"indexed_at_ns":1787189325046665600,"word_count":1153,"hashes":{".agents/skills/speckit-taskstoissues/skill.md":"fc53c7413cf050b143775a1aeca2773eabb248782a58d599b52d0d232c6c05fd"}},".specify/init-options.json":{"size":174,"mtime_ns":1787189272252382200,"indexed_at_ns":1787189325022221000,"word_count":16,"hashes":{".specify/init-options.json":"b39c8c1030871841dded0aede892fe2d25b36883333777cbab7d7c1c67b36f87"}},".specify/integration.json":{"size":279,"mtime_ns":1787189272181379700,"indexed_at_ns":1787189325023926100,"word_count":24,"hashes":{".specify/integration.json":"d7545650420a2ed3fd6878ad7006b8de79f5e812dd6352c0d86d530db3a12134"}},".specify/integrations/agy.manifest.json":{"size":1299,"mtime_ns":1787189272178366200,"indexed_at_ns":1787189325024675000,"word_count":31,"hashes":{".specify/integrations/agy.manifest.json":"504c42820b8e37a7eb26b328881026982f3a6a71fa16de670c425b35b37f00e4"}},".specify/integrations/speckit.manifest.json":{"size":1536,"mtime_ns":1787189272238379600,"indexed_at_ns":1787189325025369900,"word_count":35,"hashes":{".specify/integrations/speckit.manifest.json":"cc15502df7b241b7ef08785a613f642d69dc561b8b5db2ccba121fcb6d2c1680"}},".specify/memory/.constitution-template.json":{"size":103,"mtime_ns":1787189272257369800,"indexed_at_ns":1787189325026009300,"word_count":6,"hashes":{".specify/memory/.constitution-template.json":"a0f4bf5e5399e118b61e8bae9404743316cea6d0fff4270d8758aeb55525b988"}},".specify/memory/constitution.md":{"size":2346,"mtime_ns":1787189272254379900,"indexed_at_ns":1787189325047314000,"word_count":272,"hashes":{".specify/memory/constitution.md":"51f14d46d5b6abddce28779396666792636c8d9629f0202e84501a5e759267ab"}},".specify/scripts/powershell/check-prerequisites.ps1":{"size":6122,"mtime_ns":1787189272202379800,"indexed_at_ns":1787189325026668000,"word_count":685,"hashes":{".specify/scripts/powershell/check-prerequisites.ps1":"80f1c4dc6817140dea987bb5727d38be754679c7052f1d9a088031536423cb23"}},".specify/scripts/powershell/common.ps1":{"size":34245,"mtime_ns":1787189272206379800,"indexed_at_ns":1787189325027347800,"word_count":3419,"hashes":{".specify/scripts/powershell/common.ps1":"63b253c967802e85ab12e76ac716eca4bb164dde2b9324e08e406d848ec4104b"}},".specify/scripts/powershell/create-new-feature.ps1":{"size":13026,"mtime_ns":1787189272211369000,"indexed_at_ns":1787189325028005300,"word_count":1421,"hashes":{".specify/scripts/powershell/create-new-feature.ps1":"7b4eb36a1fbbbe9a449b5f99de1055b1aad88e775eeb0db3f86e4ff013e6ddd1"}},".specify/scripts/powershell/resolve-template.ps1":{"size":889,"mtime_ns":1787189272214379900,"indexed_at_ns":1787189325028621300,"word_count":86,"hashes":{".specify/scripts/powershell/resolve-template.ps1":"78234a87c584e697a8fda8b18f134914e41465cbb67c1608b81e69860741502c"}},".specify/scripts/powershell/setup-plan.ps1":{"size":2927,"mtime_ns":1787189272218379500,"indexed_at_ns":1787189325029271700,"word_count":325,"hashes":{".specify/scripts/powershell/setup-plan.ps1":"4d5b636734ae78061da3a7675f0af4acfa6b65f7d994d5372c8c051f25bb8966"}},".specify/scripts/powershell/setup-tasks.ps1":{"size":3892,"mtime_ns":1787189272221379900,"indexed_at_ns":1787189325029900900,"word_count":429,"hashes":{".specify/scripts/powershell/setup-tasks.ps1":"5c980d1a41d186b634bc350128c31e5f3074099b996989c0a0d95b22623b2932"}},".specify/templates/checklist-template.md":{"size":2033,"mtime_ns":1787189272223379700,"indexed_at_ns":1787189325047907900,"word_count":271,"hashes":{".specify/templates/checklist-template.md":"6fb0a979b8534e1b3343d1ce6e45f84d32b118e096620bfdeed241dbc1a1da8a"}},".specify/templates/constitution-template.md":{"size":2346,"mtime_ns":1787189272226379800,"indexed_at_ns":1787189325048534600,"word_count":272,"hashes":{".specify/templates/constitution-template.md":"ae22b7c7ecb6ccd516fed25916e465146432c58f1bef904a92b535ac0bbecfcf"}},".specify/templates/plan-template.md":{"size":3682,"mtime_ns":1787189272229368600,"indexed_at_ns":1787189325049160100,"word_count":463,"hashes":{".specify/templates/plan-template.md":"e5cfe5097c5de0add0f0de02b7a5d2cd2470c9a2f24c0e6e15439d274e12abe0"}},".specify/templates/spec-template.md":{"size":4556,"mtime_ns":1787189272231368600,"indexed_at_ns":1787189325049780800,"word_count":629,"hashes":{".specify/templates/spec-template.md":"2734a509d4b2f34ee6258475c4fb2e80a6dbfcbc47c8552df5b6278907529250"}},".specify/templates/tasks-template.md":{"size":9171,"mtime_ns":1787189272234379700,"indexed_at_ns":1787189325050369300,"word_count":1384,"hashes":{".specify/templates/tasks-template.md":"070ed0dfafd8310a243b51cc30b1b6dfb19883fdd5ad20e4b53e45eb7f939e3e"}},".specify/workflows/speckit/workflow.yml":{"size":2216,"mtime_ns":1787160407462626700,"indexed_at_ns":1787189324996696100,"word_count":276},".specify/workflows/workflow-registry.json":{"size":381,"mtime_ns":1787189272250379800,"indexed_at_ns":1787189325030509700,"word_count":34,"hashes":{".specify/workflows/workflow-registry.json":"2c5bf7f4ba03ddf54945cd64d4740301036c18ebea47448d93ff428c771eff3d"}},".agents/rules/graphify.md":{"size":947,"mtime_ns":1787189347444181700,"indexed_at_ns":1787189352246818600,"word_count":127,"hashes":{".agents/rules/graphify.md":"e55792958648fb69255e3ce3f71a8fcead36307c34b2d67feda9ac650ac61803"}},".agents/workflows/graphify.md":{"size":239,"mtime_ns":1787189347444181700,"indexed_at_ns":1787189352301037700,"word_count":37,"hashes":{".agents/workflows/graphify.md":"d92622463299d313da48e2cdbebf79d7ea24ffaf2ae2de2a1714be8ee42b22b3"}},"specs/001-multilingual-entity-classifier/checklists/requirements.md":{"size":1897,"mtime_ns":1787193985655018100,"indexed_at_ns":1787194002726038300,"word_count":258,"hashes":{"specs/001-multilingual-entity-classifier/checklists/requirements.md":"277036c8add1bae5eeae6da5595cf66405670d33f9d4842784b1c5581cef62d0"}},"specs/001-multilingual-entity-classifier/spec.md":{"size":10753,"mtime_ns":1787194850510689300,"indexed_at_ns":1787194930726970700,"word_count":1423,"hashes":{"specs/001-multilingual-entity-classifier/spec.md":"f136d1d2e6a539072ea238be9d0e918dbc32eb89555ffd37e9b84579064e7799"}},"specs/001-multilingual-entity-classifier/contracts/cli-contract.md":{"size":1808,"mtime_ns":1787194605824187100,"indexed_at_ns":1787194638410863000,"word_count":281,"hashes":{"specs/001-multilingual-entity-classifier/contracts/cli-contract.md":"894670a7228b93a2202203ac532aa0d415bd1921272b61a8d07e951a417bc75c"}},"specs/001-multilingual-entity-classifier/data-model.md":{"size":5137,"mtime_ns":1787194591677816000,"indexed_at_ns":1787194638411601100,"word_count":524,"hashes":{"specs/001-multilingual-entity-classifier/data-model.md":"89ecf2e55508b53ba208d011a76868294f0ff3cab87a217e7ed73c19edfbd9f6"}},"specs/001-multilingual-entity-classifier/plan.md":{"size":6215,"mtime_ns":1787194897854106700,"indexed_at_ns":1787194930724386200,"word_count":782,"hashes":{"specs/001-multilingual-entity-classifier/plan.md":"d37d1c5f3bffc4dad289ad128024ab6dffb409b06f49e96fc5a2fd2a735472a5"}},"specs/001-multilingual-entity-classifier/quickstart.md":{"size":3235,"mtime_ns":1787194877439851000,"indexed_at_ns":1787194930725082000,"word_count":339,"hashes":{"specs/001-multilingual-entity-classifier/quickstart.md":"816060813a37d728ceed955aa829d7fa4f80862f0932133cd5293bdbfdbd40db"}},"specs/001-multilingual-entity-classifier/research.md":{"size":4059,"mtime_ns":1787194581004019000,"indexed_at_ns":1787194638413783100,"word_count":509,"hashes":{"specs/001-multilingual-entity-classifier/research.md":"d4b61795fb09da693ead647d4c05e8f44699c36e9f43b47e808e09a2f970d996"}},"specs/001-multilingual-entity-classifier/tasks.md":{"size":6951,"mtime_ns":1787196452595599000,"indexed_at_ns":1787196460266934400,"word_count":874,"hashes":{"specs/001-multilingual-entity-classifier/tasks.md":"7a33202595cf192baf702d3d8e169ea8db59ca0f2fecb471594f7f3c48417082"}},"specs/001-multilingual-entity-classifier/checklists/poc-readiness.md":{"size":4154,"mtime_ns":1787195218247525200,"indexed_at_ns":1787195224690016000,"word_count":546,"hashes":{"specs/001-multilingual-entity-classifier/checklists/poc-readiness.md":"6da9d16dcd60e927f892c69aa05945e99840b6dc824f93ea2686f12801e81a8a"}},"classify.py":{"size":6177,"mtime_ns":1787320064017746100,"indexed_at_ns":1787320231273770400,"word_count":487,"hashes":{"classify.py":"7cd254b1387ac478a48c65d3e098818499b4f3628a1c228a83b608d97d834efa"}},"examples/content_northvolt_de.md":{"size":530,"mtime_ns":1787195963813740900,"indexed_at_ns":1787196460246681400,"word_count":57,"hashes":{"examples/content_northvolt_de.md":"5708f5dac050fea9c5e4fbdee40910cbb4c4be0efc9c3212f7cf2a7a034eb91d"}},"examples/content_presal_pt.md":{"size":506,"mtime_ns":1787195950024799800,"indexed_at_ns":1787196460247532700,"word_count":72,"hashes":{"examples/content_presal_pt.md":"ef8c7d61a4d721f7d702fa608274da920476be3a4f7bfe6e4f603abba12a133f"}},"examples/content_tangential_es.md":{"size":414,"mtime_ns":1787195975527150700,"indexed_at_ns":1787196460248387000,"word_count":60,"hashes":{"examples/content_tangential_es.md":"d02c405931b0752377a2ba10cbffe4d664713e33c3b6a8fbdd36b4a75b30f11b"}},"examples/ecp_apple.json":{"size":723,"mtime_ns":1787195969757856700,"indexed_at_ns":1787196460143672700,"word_count":68,"hashes":{"examples/ecp_apple.json":"166fb76e5d0d181835dd636450b6828565c2baafcb21228313bcea3c850d9a92"}},"examples/ecp_petrobras.json":{"size":714,"mtime_ns":1787195944394575600,"indexed_at_ns":1787196460144504800,"word_count":62,"hashes":{"examples/ecp_petrobras.json":"5dd24cf4d5cb9f636f3a1c2511eeaa152be0511b80974a4f36d5d68aded046db"}},"examples/ecp_volkswagen.json":{"size":720,"mtime_ns":1787195955456870500,"indexed_at_ns":1787196460145217300,"word_count":56,"hashes":{"examples/ecp_volkswagen.json":"3d3866179c67e332ad5aa46f5d15eeb4de3fa829d1cc21ccf73cc7f3a7eb32c5"}},"pyproject.toml":{"size":762,"mtime_ns":1787264482850924600,"indexed_at_ns":1787264516414577000,"word_count":86,"hashes":{"pyproject.toml":"ab0b0276581056a63d591237beb2e4e8fe3a4441c06963a847dd1f74b569dd88"}},"requirements.txt":{"size":333,"mtime_ns":1787317345925397200,"indexed_at_ns":1787317709341206400,"word_count":30},"src/__init__.py":{"size":83,"mtime_ns":1787195832559486000,"indexed_at_ns":1787196460146819200,"word_count":9,"hashes":{"src/__init__.py":"81c4eae46f05fd529d4f81f2d318c2b4e3af282f140963e9c5c876690bb1ca74"}},"src/adapters/__init__.py":{"size":73,"mtime_ns":1787195842271676800,"indexed_at_ns":1787196460147577400,"word_count":9,"hashes":{"src/adapters/__init__.py":"f4dcecfaeea2ae0852fd9836bfb4f9b2a9bedd60057157064e6d3fed4a8c1bd7"}},"src/adapters/base.py":{"size":907,"mtime_ns":1787264412243760700,"indexed_at_ns":1787264516431216000,"word_count":95,"hashes":{"src/adapters/base.py":"39d8678210517983b9fe9bfa26a1990c1f4f63195651da2a180d3bb73db51a1e"}},"src/adapters/embeddings.py":{"size":1399,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516432540300,"word_count":139,"hashes":{"src/adapters/embeddings.py":"acf74e38373f16e923350dbcf514b2958215391024c8abed3b8a621b0e69bd61"}},"src/adapters/llm.py":{"size":4784,"mtime_ns":1787320047035288600,"indexed_at_ns":1787320231298517500,"word_count":390,"hashes":{"src/adapters/llm.py":"de938021593301aa420b3175a71e7bd1581649917e30018282a6504505922d57"}},"src/classifier.py":{"size":10840,"mtime_ns":1787320047036288700,"indexed_at_ns":1787320231299266400,"word_count":911,"hashes":{"src/classifier.py":"4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c"}},"src/language.py":{"size":10957,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516435249300,"word_count":887,"hashes":{"src/language.py":"75d8e6444528450b5d11eee5b51965c98525070bb65eb0edabc996701a4c5075"}},"src/models.py":{"size":5959,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516436265800,"word_count":487,"hashes":{"src/models.py":"260513e4539e617b4123ac5b5352cb6ce7caf3a5dfba08badf6390bf60784ac9"}},"src/parser.py":{"size":2654,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516437222700,"word_count":299,"hashes":{"src/parser.py":"a789a6ba02724ad75604dcc56991e8b7989558abe673d4701242012723954407"}},"tests/__init__.py":{"size":69,"mtime_ns":1787195847518641200,"indexed_at_ns":1787196460153585600,"word_count":8,"hashes":{"tests/__init__.py":"2acdae7d2696c23d5391ed343046cffa11b82f3f0d7d85767dacf0e762a955d1"}},"tests/fixtures/benchmark_24/de/contextual.md":{"size":144,"mtime_ns":1787196180779459400,"indexed_at_ns":1787196460268138600,"word_count":17,"hashes":{"tests/fixtures/benchmark_24/de/contextual.md":"b6a18c4bef2defe99773d3ba43137148d25b42ac27562b10b73ccdee1a49f203"}},"tests/fixtures/benchmark_24/de/contextual_expected.json":{"size":136,"mtime_ns":1787196187032823100,"indexed_at_ns":1787196460154321700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/contextual_expected.json":"cb741ed9bef3359a41d5c031ad213d4320c5b8fe3f8579e497ee9b1eda0ed478"}},"tests/fixtures/benchmark_24/de/direct.md":{"size":148,"mtime_ns":1787196169572812500,"indexed_at_ns":1787196460269192500,"word_count":16,"hashes":{"tests/fixtures/benchmark_24/de/direct.md":"67f375d26d8424655b76d5650c656b4af79b9964d52f2d24049e1f4de6545c9b"}},"tests/fixtures/benchmark_24/de/direct_expected.json":{"size":132,"mtime_ns":1787196175168070900,"indexed_at_ns":1787196460155004400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/direct_expected.json":"5301a39d31b365266b529ce9823145381241f8876af1ec21f0a9c27c9bdc80fa"}},"tests/fixtures/benchmark_24/de/ecp.json":{"size":579,"mtime_ns":1787196164027193900,"indexed_at_ns":1787196460155664300,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/de/ecp.json":"061fc3a9468d2baaaf2b3e8355d08d23261a9a7adc484cb06b45646eacba46fc"}},"tests/fixtures/benchmark_24/de/not_related.md":{"size":137,"mtime_ns":1787196204093781400,"indexed_at_ns":1787196460270056100,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/not_related.md":"4904b694b45a2058614a4e4350046eee042c4bbd7bcd6b88c56408ee3aebd81d"}},"tests/fixtures/benchmark_24/de/not_related_expected.json":{"size":129,"mtime_ns":1787196209729787600,"indexed_at_ns":1787196460156391600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/not_related_expected.json":"730fa882c1f3b8a7c0e2d3da9af55ee57ad7425a8b304c11f54e01899c740952"}},"tests/fixtures/benchmark_24/de/tangential.md":{"size":150,"mtime_ns":1787196193187087300,"indexed_at_ns":1787196460270857700,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/tangential.md":"8207068977006dafa7c9c4459bd996b5c124972d25f1015a589d3b06d0999613"}},"tests/fixtures/benchmark_24/de/tangential_expected.json":{"size":128,"mtime_ns":1787196198703847300,"indexed_at_ns":1787196460157130400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/tangential_expected.json":"82dea5e55d7586c4e7005755e3da4f44560238733094876047de51e854d41d92"}},"tests/fixtures/benchmark_24/en/contextual.md":{"size":148,"mtime_ns":1787196066427405900,"indexed_at_ns":1787196460271878300,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/en/contextual.md":"258a9f1ae01dae52955c1f45cb176e7d981a72ba869c33232c8c295f4816acc0"}},"tests/fixtures/benchmark_24/en/contextual_expected.json":{"size":136,"mtime_ns":1787196073211713100,"indexed_at_ns":1787196460158457500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/contextual_expected.json":"70605f9d8901d4c4b99d9fda1f30bc114cb0b65893579f77a1f9d50f62c1e3fc"}},"tests/fixtures/benchmark_24/en/direct.md":{"size":155,"mtime_ns":1787196054149613200,"indexed_at_ns":1787196460272766400,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/en/direct.md":"c7e0b093c386ccf19d9d7cbef4763dfb665213a7a245093af43529b1eaff8266"}},"tests/fixtures/benchmark_24/en/direct_expected.json":{"size":132,"mtime_ns":1787196059966736300,"indexed_at_ns":1787196460159526700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/direct_expected.json":"0b803b2ad37388be7ef4ea1d164db22c9fd784bcb9be6f56627d412f1f9299bc"}},"tests/fixtures/benchmark_24/en/ecp.json":{"size":594,"mtime_ns":1787197123717795600,"indexed_at_ns":1787197157494285900,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/en/ecp.json":"601423ac1e0b0e2bb7a0151ac87f5bdfd32450d90a022eaf9ef030338e0b4893"}},"tests/fixtures/benchmark_24/en/not_related.md":{"size":146,"mtime_ns":1787196350333465500,"indexed_at_ns":1787196460273595300,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/en/not_related.md":"2fa405b123733c5a9b5beba8c646b886b27e212cff55496a9fe7d6208ddfb11c"}},"tests/fixtures/benchmark_24/en/not_related_expected.json":{"size":129,"mtime_ns":1787196104521133100,"indexed_at_ns":1787196460161344300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/not_related_expected.json":"cb046b055b5c72d8146b6035a935211d60fb0b313ef819576bb8e7048d55f468"}},"tests/fixtures/benchmark_24/en/tangential.md":{"size":147,"mtime_ns":1787196082730266300,"indexed_at_ns":1787196460274648200,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/en/tangential.md":"793acebc11e5d6c17872d56881c8fe99cb187116c38fa4b2647d28fe3063a61e"}},"tests/fixtures/benchmark_24/en/tangential_expected.json":{"size":128,"mtime_ns":1787196089699545000,"indexed_at_ns":1787196460162151700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/tangential_expected.json":"d5b1a4dc64246838a066f73c41f0e33dcd59636e61d6c0842a3728247e536aff"}},"tests/fixtures/benchmark_24/es/contextual.md":{"size":167,"mtime_ns":1787196129959491900,"indexed_at_ns":1787196460275850900,"word_count":22,"hashes":{"tests/fixtures/benchmark_24/es/contextual.md":"d45ef46752e2093455e35cbf97076f943ab2be736c9bc4580607960b9d068731"}},"tests/fixtures/benchmark_24/es/contextual_expected.json":{"size":136,"mtime_ns":1787196135705341100,"indexed_at_ns":1787196460162957600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/contextual_expected.json":"083f7153df08f93f595782eb2959e8505ac4bda4daaf6634c7a11d444c1ba6b0"}},"tests/fixtures/benchmark_24/es/direct.md":{"size":179,"mtime_ns":1787196118640588800,"indexed_at_ns":1787196460276716800,"word_count":29,"hashes":{"tests/fixtures/benchmark_24/es/direct.md":"f6e282a68830d5518285b0cda510fe57fa844cc6322979604a427797f07fdbd7"}},"tests/fixtures/benchmark_24/es/direct_expected.json":{"size":132,"mtime_ns":1787196124282103900,"indexed_at_ns":1787196460163727400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/direct_expected.json":"fb96e4ae9e2e1603b9ac4d31b6984b31d814b3f31a8a3ca03c52c1ffa4199471"}},"tests/fixtures/benchmark_24/es/ecp.json":{"size":590,"mtime_ns":1787196110761765400,"indexed_at_ns":1787196460164509700,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/es/ecp.json":"09cad55a4cc5a8c04b9898dee21c28b0d40561fcdd8ff012fe4de96616c05f7f"}},"tests/fixtures/benchmark_24/es/not_related.md":{"size":148,"mtime_ns":1787196152611035900,"indexed_at_ns":1787196460277631800,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/not_related.md":"1b8a7f7a6852c9ec33fc34513ab479bd5edba48762a0801f7982e48adcb0089b"}},"tests/fixtures/benchmark_24/es/not_related_expected.json":{"size":129,"mtime_ns":1787196158098444000,"indexed_at_ns":1787196460165309300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/not_related_expected.json":"01645746a62894e6448895d9bf5eac394e94e54711d7f519d2ed14d8b8957487"}},"tests/fixtures/benchmark_24/es/tangential.md":{"size":141,"mtime_ns":1787196141436479100,"indexed_at_ns":1787196460278451000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/tangential.md":"41888c762fdc38fb9d5a6dc39373ac2e38331ba4520535088efef8943ea40e49"}},"tests/fixtures/benchmark_24/es/tangential_expected.json":{"size":128,"mtime_ns":1787196147026058000,"indexed_at_ns":1787196460166503400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/tangential_expected.json":"aac2bd9ab5946710c62dc0a8daf8b1481462bed081e11db4558c08ef917fcf81"}},"tests/fixtures/benchmark_24/fr/contextual.md":{"size":167,"mtime_ns":1787196288415259700,"indexed_at_ns":1787196460279288100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/fr/contextual.md":"8a36d5737429e743ffbdc8c6ae78bcc9410915e048056dbd1fb4d3d493ac7ec6"}},"tests/fixtures/benchmark_24/fr/contextual_expected.json":{"size":136,"mtime_ns":1787196295706997200,"indexed_at_ns":1787196460167650500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/contextual_expected.json":"4a155288609fc5c935a39a633d7185109629871380b88af1c367922e44abe900"}},"tests/fixtures/benchmark_24/fr/direct.md":{"size":160,"mtime_ns":1787196277020128300,"indexed_at_ns":1787196460280073100,"word_count":20,"hashes":{"tests/fixtures/benchmark_24/fr/direct.md":"f218d9c8ada6c31e813c41bcb5e6a081a1df526022b907795065c0f845480077"}},"tests/fixtures/benchmark_24/fr/direct_expected.json":{"size":132,"mtime_ns":1787196282775093400,"indexed_at_ns":1787196460168573600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/direct_expected.json":"b93c2059a731e06a164fe1331e1c7ff01fb741f728c8aa1df151ee51bc993268"}},"tests/fixtures/benchmark_24/fr/ecp.json":{"size":600,"mtime_ns":1787197131861351500,"indexed_at_ns":1787197157506006100,"word_count":50,"hashes":{"tests/fixtures/benchmark_24/fr/ecp.json":"f2e7f9eafa1fd24514541868c83db90b69784d5faf4e8d039d79d11597b51428"}},"tests/fixtures/benchmark_24/fr/not_related.md":{"size":181,"mtime_ns":1787196312472120100,"indexed_at_ns":1787196460280811500,"word_count":30,"hashes":{"tests/fixtures/benchmark_24/fr/not_related.md":"475984d25541d876b7d9e3e8f7cff7b3db2bc1489c25d6612b911da6d2b2af8e"}},"tests/fixtures/benchmark_24/fr/not_related_expected.json":{"size":129,"mtime_ns":1787196317906240800,"indexed_at_ns":1787196460170379300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/not_related_expected.json":"31b3104faa21c2a417399fdd85d077d1c58fe74ee33fd41b0942580be6f81267"}},"tests/fixtures/benchmark_24/fr/tangential.md":{"size":158,"mtime_ns":1787196301225610200,"indexed_at_ns":1787196460281594400,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/fr/tangential.md":"7f6c6ab84d2a26675f9f16fb23d45cf1e97b3ff5e28fb98df6aeaa2368d2c305"}},"tests/fixtures/benchmark_24/fr/tangential_expected.json":{"size":128,"mtime_ns":1787196306729905200,"indexed_at_ns":1787196460171141500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/tangential_expected.json":"cc117a22ba73be1b308d377767ca0ae8da8e5889ccdaa430893b3ae70a58c9ca"}},"tests/fixtures/benchmark_24/it/contextual.md":{"size":150,"mtime_ns":1787196234462201200,"indexed_at_ns":1787196460283346800,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/it/contextual.md":"045391f6f676add7e1ae9391419ef65442259ab90f9cacb5caca4d468d292017"}},"tests/fixtures/benchmark_24/it/contextual_expected.json":{"size":136,"mtime_ns":1787196240055631300,"indexed_at_ns":1787196460171870600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/contextual_expected.json":"b2b4b297f43e5af1cda526e259acede43a31b552c0321bee1ce1c72572cec557"}},"tests/fixtures/benchmark_24/it/direct.md":{"size":145,"mtime_ns":1787196221664473400,"indexed_at_ns":1787196460284281100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/direct.md":"d54bad27d944692fa7f00a036f882d1c0e42d189241822adcae86edf73a444da"}},"tests/fixtures/benchmark_24/it/direct_expected.json":{"size":132,"mtime_ns":1787196228986408600,"indexed_at_ns":1787196460172673300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/direct_expected.json":"f94e71dc4b78c0646190ff288f08dab46c67f2356b8b75cc515c28af7c9c423c"}},"tests/fixtures/benchmark_24/it/ecp.json":{"size":529,"mtime_ns":1787196215715634300,"indexed_at_ns":1787196460173452600,"word_count":45,"hashes":{"tests/fixtures/benchmark_24/it/ecp.json":"bcbd12d3057368618b006c24f384341f91349c713d10a3028d3eb4afada32de6"}},"tests/fixtures/benchmark_24/it/not_related.md":{"size":153,"mtime_ns":1787196259362992300,"indexed_at_ns":1787196460285099000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/not_related.md":"bca227c7b17fd4404e5ca1d082b848981c1da28d0b657df1e025c03056387f13"}},"tests/fixtures/benchmark_24/it/not_related_expected.json":{"size":129,"mtime_ns":1787196265318256200,"indexed_at_ns":1787196460174468400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/not_related_expected.json":"d007ac531224ad0834e9a8807582d0e047524be4c30fffdd1a19a51dba36d85d"}},"tests/fixtures/benchmark_24/it/tangential.md":{"size":155,"mtime_ns":1787196245918356300,"indexed_at_ns":1787196460285993500,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/tangential.md":"a78a886f11462033c996a20b629e13c6bb55d4e08ffed20601cd4ea877b9db09"}},"tests/fixtures/benchmark_24/it/tangential_expected.json":{"size":128,"mtime_ns":1787196252898853500,"indexed_at_ns":1787196460175957500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/tangential_expected.json":"18872f6fe4cbd71812566494e88bd97633d696f732b3b5bad871f81076703f74"}},"tests/fixtures/benchmark_24/pt/contextual.md":{"size":125,"mtime_ns":1787196014201071400,"indexed_at_ns":1787196460286845200,"word_count":18,"hashes":{"tests/fixtures/benchmark_24/pt/contextual.md":"e9ea12885a5c68822f96691e543b55885afba3d00a9e0fa65837bd88e559f157"}},"tests/fixtures/benchmark_24/pt/contextual_expected.json":{"size":136,"mtime_ns":1787196019487136800,"indexed_at_ns":1787196460176915600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/contextual_expected.json":"34145a845a7f6b155bf42c028bb0c6d8d43ed5cd0b1d179c089b1e621fecd08f"}},"tests/fixtures/benchmark_24/pt/direct.md":{"size":140,"mtime_ns":1787196003236562000,"indexed_at_ns":1787196460287899900,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/pt/direct.md":"150182b9c1352163cb136c19141b85b3f0323e7eaa0cd023fce1dfef0de63d29"}},"tests/fixtures/benchmark_24/pt/direct_expected.json":{"size":132,"mtime_ns":1787196008785189600,"indexed_at_ns":1787196460177800600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/direct_expected.json":"a9c666394db6a6e2fcd503d8cf67549531ee9e70eb73b1edb2b6a2443316cbf2"}},"tests/fixtures/benchmark_24/pt/ecp.json":{"size":507,"mtime_ns":1787195997549710300,"indexed_at_ns":1787196460178615000,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/pt/ecp.json":"cec78c3ed8d2ec311d079239922a10a35a7fc9c382d8886fec81c6322d2a70ac"}},"tests/fixtures/benchmark_24/pt/not_related.md":{"size":124,"mtime_ns":1787196036724084200,"indexed_at_ns":1787196460288769500,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/pt/not_related.md":"3af103a7f0df8e93c6154157e9903dc7fc10d64fa69dd7c2b08d4f68b99b1972"}},"tests/fixtures/benchmark_24/pt/not_related_expected.json":{"size":129,"mtime_ns":1787196042201218800,"indexed_at_ns":1787196460179403700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/not_related_expected.json":"d5ce36bca028f31ba472e325993610eb82f98e1a8f84fa770bf92aa7158ce954"}},"tests/fixtures/benchmark_24/pt/tangential.md":{"size":140,"mtime_ns":1787196024978861700,"indexed_at_ns":1787196460289652400,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/pt/tangential.md":"77d86f819ccbefe9830a57151354ca47d83e46b3d0e55d0f5139f37a1d9df0b8"}},"tests/fixtures/benchmark_24/pt/tangential_expected.json":{"size":128,"mtime_ns":1787196030395574000,"indexed_at_ns":1787196460180223100,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/tangential_expected.json":"fb977fec8db613f9545c81adffe0295084c6198b5f7c9a85d8901a228de63a51"}},"tests/test_adapters.py":{"size":1166,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516466770300,"word_count":91,"hashes":{"tests/test_adapters.py":"32a9519d5c55012aedaa43a786aff1cec88e7391d186f5d0a54213ca1b204f48"}},"tests/test_benchmark_24.py":{"size":2757,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516468505400,"word_count":257,"hashes":{"tests/test_benchmark_24.py":"7c136ac4d442e47a2f8914303880ce265c2fe49485eb182014fc3e10c06f9e71"}},"tests/test_classifier.py":{"size":3836,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516469349200,"word_count":351,"hashes":{"tests/test_classifier.py":"d3323e05dd21f20686d9293f767ebb2ced206c7b74e7ca89d2ac02c0a4e31282"}},"tests/test_cli.py":{"size":3872,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470059400,"word_count":314,"hashes":{"tests/test_cli.py":"0573d9b13e45413beefac33d86eae94e17dbbf37554120a1fc5720bfb3d67d63"}},"tests/test_language.py":{"size":1929,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516472426100,"word_count":242,"hashes":{"tests/test_language.py":"7f7aae057ecbda26edd747d24241e9cf36f611c71c5d70d0aa308df7d71e0547"}},"tests/test_models.py":{"size":3668,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516473330500,"word_count":306,"hashes":{"tests/test_models.py":"232210770fc690edcc732d940bafe46fcec9bfed7f17e0aa5c60e6cf6635751f"}},"tests/test_adversarial.py":{"size":8429,"mtime_ns":1787264437924228700,"indexed_at_ns":1787264516467613100,"word_count":704,"hashes":{"tests/test_adversarial.py":"3acc7ff372e6b0f1f42dad29d280b835ac51784b1dca8054472287a7355c9386"}},"docs/googlenews_extractor_guia_completo.md":{"size":23200,"mtime_ns":1787264437928228500,"indexed_at_ns":1787264516560203200,"word_count":2292,"hashes":{"docs/googlenews_extractor_guia_completo.md":"dcff19204ab04403030b2339663c0d3c161744f50a53f5254c459a894eb3b3c8"}},"examples/ecp_sao_paulo_futebol_clube.json":{"size":23358,"mtime_ns":1787229477299354200,"indexed_at_ns":1787234770609429300,"word_count":1524,"hashes":{"examples/ecp_sao_paulo_futebol_clube.json":"1af9006669d57f8dc123f0edea0d0fe8aaeb9016e36ec3e0d95023ea26996915"}},"scripts/extract_google_news.py":{"size":14720,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516421445500,"word_count":1314,"hashes":{"scripts/extract_google_news.py":"aa17b59997ab6bb549a918fb1026ddf5a5c5143c75c234895dc32447e2c5b85a"}},"specs/002-google-news-extractor/checklists/readiness.md":{"size":5258,"mtime_ns":1787234305932687100,"indexed_at_ns":1787234770736852100,"word_count":706,"hashes":{"specs/002-google-news-extractor/checklists/readiness.md":"ad4c18a1fe1c6f19f45a043748fe4f195db525afac53ed77905222015ec5230c"}},"specs/002-google-news-extractor/checklists/requirements.md":{"size":1144,"mtime_ns":1787232386676398600,"indexed_at_ns":1787234770737689600,"word_count":158,"hashes":{"specs/002-google-news-extractor/checklists/requirements.md":"d83944755d7f6e43d8c76e032f0047be6f8c4cb2b80dea65e198f57b9c5eccd7"}},"specs/002-google-news-extractor/contracts/cli_contract.md":{"size":2681,"mtime_ns":1787236744313922700,"indexed_at_ns":1787236813512122300,"word_count":424,"hashes":{"specs/002-google-news-extractor/contracts/cli_contract.md":"6b9e3c10becd7b8fa633e409e9a3298ff4b2903dfd5194054c8e41dd0c0c5f23"}},"specs/002-google-news-extractor/data-model.md":{"size":3008,"mtime_ns":1787234040813431800,"indexed_at_ns":1787234770739130200,"word_count":472,"hashes":{"specs/002-google-news-extractor/data-model.md":"78cec846c1173fbdff3c77313ba02c7977365e5ab102df527f90ed7b06e69519"}},"specs/002-google-news-extractor/plan.md":{"size":3947,"mtime_ns":1787236725982522400,"indexed_at_ns":1787236813514970600,"word_count":448,"hashes":{"specs/002-google-news-extractor/plan.md":"57a0a3eb1fd6d7afbe394be62e681a02d7ef26124f4142b9d8b72ea95259a34b"}},"specs/002-google-news-extractor/quickstart.md":{"size":2341,"mtime_ns":1787236764020651300,"indexed_at_ns":1787236813515935900,"word_count":317,"hashes":{"specs/002-google-news-extractor/quickstart.md":"3478a487614358839b3e53c15b05b86a4b850bead9b4142384566e244753bde3"}},"specs/002-google-news-extractor/research.md":{"size":3630,"mtime_ns":1787236785046618200,"indexed_at_ns":1787236813516811500,"word_count":483,"hashes":{"specs/002-google-news-extractor/research.md":"71e796c83a1c293fa380b4f01a2eed810275e4628548e0f8e8b9ecaa90d3ac13"}},"specs/002-google-news-extractor/spec.md":{"size":7506,"mtime_ns":1787236709078315600,"indexed_at_ns":1787236813517705300,"word_count":1096,"hashes":{"specs/002-google-news-extractor/spec.md":"e84b37b25f61ed209d1295f77bf84024ac6c3c818f6b98043204a9f81bff49f0"}},"specs/002-google-news-extractor/tasks.md":{"size":5315,"mtime_ns":1787236802480804800,"indexed_at_ns":1787236813518644500,"word_count":692,"hashes":{"specs/002-google-news-extractor/tasks.md":"94430da291ad0dc34b1cde7c30f2b8e1ce0c83d35b5e71ab68bd135146c9ef47"}},"tests/test_extract_google_news.py":{"size":12221,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516471687100,"word_count":1114,"hashes":{"tests/test_extract_google_news.py":"5304424b746b871720985cfdd031b0f8895c664bdd9d273b9c1723f445a2276f"}},"scripts/__init__.py":{"size":50,"mtime_ns":1787234973578233800,"indexed_at_ns":1787235018163517900,"word_count":6,"hashes":{"scripts/__init__.py":"f30a694c2114ef6bc58efa1caea7265dde8ef296d92cdb77c8b3e3d1f21af3a5"}},"README.md":{"size":28853,"mtime_ns":1787320219585220400,"indexed_at_ns":1787320231400137800,"word_count":3424,"hashes":{"readme.md":"ed4a59167b17930827b3b2a054b6ddd0dc53bad6c4b091facf2e52f0f4f19d4b"}},"docs/prd_extrator_artigos_nlp.md":{"size":11894,"mtime_ns":1787237774009258300,"indexed_at_ns":1787240513666474800,"word_count":1548,"hashes":{"docs/prd_extrator_artigos_nlp.md":"e10035c73584efc6d043bec17d43388ecbf25b576ca3475d0b9906cbc16fad90"}},"scripts/extract_article_contents.py":{"size":27025,"mtime_ns":1787264465341521500,"indexed_at_ns":1787264516419754800,"word_count":2069,"hashes":{"scripts/extract_article_contents.py":"a76fc087a959496bc2cf4767baaed89628bd945e1aaa8e981be840cf1240f1ba"}},"specs/003-article-content-extractor/checklists/extraction.md":{"size":4716,"mtime_ns":1787239873797626000,"indexed_at_ns":1787240513705426800,"word_count":609,"hashes":{"specs/003-article-content-extractor/checklists/extraction.md":"b8351909b93111f8f1e50f0f100446d3f579d0c11823eba4936c72a617aba5f8"}},"specs/003-article-content-extractor/checklists/requirements.md":{"size":1209,"mtime_ns":1787237950814070500,"indexed_at_ns":1787240513706099200,"word_count":164,"hashes":{"specs/003-article-content-extractor/checklists/requirements.md":"3c770288636c4523897b41c6dad5f2771af2007654d6b5f6b87d74bc9c33d11d"}},"specs/003-article-content-extractor/contracts/cli-contract.md":{"size":2493,"mtime_ns":1787239569056013800,"indexed_at_ns":1787240513706906100,"word_count":390,"hashes":{"specs/003-article-content-extractor/contracts/cli-contract.md":"44c5ec336c210bdd9671a5e852ee750e91f426b87c954b2c52499513cb85168d"}},"specs/003-article-content-extractor/contracts/json-schema.md":{"size":3065,"mtime_ns":1787239578931403200,"indexed_at_ns":1787240513707577900,"word_count":298,"hashes":{"specs/003-article-content-extractor/contracts/json-schema.md":"0cefe7faadd07932717b8c3493914e5367ec6ac50673671aee1f4edc7bde7e37"}},"specs/003-article-content-extractor/data-model.md":{"size":4410,"mtime_ns":1787239558236282500,"indexed_at_ns":1787240513708324600,"word_count":733,"hashes":{"specs/003-article-content-extractor/data-model.md":"651180962cf2a9253cb0a22429947eb3bf552c26be7defce98ef7583cbcd8fbf"}},"specs/003-article-content-extractor/plan.md":{"size":4642,"mtime_ns":1787264323707266000,"indexed_at_ns":1787264516630842500,"word_count":510,"hashes":{"specs/003-article-content-extractor/plan.md":"3ae38a2a907f1aeb6987c647a6290533acde67ef91f590445bdec0e1da5f52be"}},"specs/003-article-content-extractor/quickstart.md":{"size":2210,"mtime_ns":1787239589989665700,"indexed_at_ns":1787240513709638200,"word_count":282,"hashes":{"specs/003-article-content-extractor/quickstart.md":"332c407a9b1c3eafcb874d24f5396f005cde65d4d8e9e643fda95f47f093c544"}},"specs/003-article-content-extractor/research.md":{"size":4220,"mtime_ns":1787239545833014600,"indexed_at_ns":1787240513710259700,"word_count":588,"hashes":{"specs/003-article-content-extractor/research.md":"485f0e63023aa6dc8c4c64b22dd7394c032b7f468fa41632967789c4e269587b"}},"specs/003-article-content-extractor/spec.md":{"size":10428,"mtime_ns":1787264319288323400,"indexed_at_ns":1787264516635570600,"word_count":1515,"hashes":{"specs/003-article-content-extractor/spec.md":"1ad671e31d86c76aedaa27d5d4da839cdf2d602bd17e618310c80bd3747fab78"}},"specs/003-article-content-extractor/tasks.md":{"size":8201,"mtime_ns":1787240464652064400,"indexed_at_ns":1787240513711676500,"word_count":1070,"hashes":{"specs/003-article-content-extractor/tasks.md":"3122914461e8d6017e63900c66fa8935135b5efcc9fca8d64e762ee109602901"}},"tests/test_extract_article_contents.py":{"size":13204,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470977000,"word_count":1039,"hashes":{"tests/test_extract_article_contents.py":"4333ac8911d1cd27964b0bacfa394ee8fe9e068bb2f25f3e0ff5e299564a7b4d"}},"docs/prd_deterministic_content_selection.md":{"size":15516,"mtime_ns":1787264674203828600,"indexed_at_ns":1787272605069414800,"word_count":2047,"hashes":{"docs/prd_deterministic_content_selection.md":"a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b"}},"scripts/select_article_extractor.py":{"size":21658,"mtime_ns":1787274502480126900,"indexed_at_ns":1787310811622526500,"word_count":2097,"hashes":{"scripts/select_article_extractor.py":"027743d36fd728fded28a085abf202e4eab0102bc5517cf4975a094d5df04c3f"}},"specs/004-deterministic-content-selection/checklists/deterministic-selection.md":{"size":4236,"mtime_ns":1787272346869214200,"indexed_at_ns":1787272605178155100,"word_count":566,"hashes":{"specs/004-deterministic-content-selection/checklists/deterministic-selection.md":"937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241"}},"specs/004-deterministic-content-selection/checklists/requirements.md":{"size":1303,"mtime_ns":1787264728720272700,"indexed_at_ns":1787272605179339000,"word_count":175,"hashes":{"specs/004-deterministic-content-selection/checklists/requirements.md":"8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56"}},"specs/004-deterministic-content-selection/contracts/cli-contract.md":{"size":2071,"mtime_ns":1787274329217544500,"indexed_at_ns":1787274399618300500,"word_count":293,"hashes":{"specs/004-deterministic-content-selection/contracts/cli-contract.md":"6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4"}},"specs/004-deterministic-content-selection/contracts/json-schema.md":{"size":1982,"mtime_ns":1787271837732839400,"indexed_at_ns":1787272605181473200,"word_count":195,"hashes":{"specs/004-deterministic-content-selection/contracts/json-schema.md":"db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6"}},"specs/004-deterministic-content-selection/data-model.md":{"size":5498,"mtime_ns":1787271825597039400,"indexed_at_ns":1787272605182487300,"word_count":681,"hashes":{"specs/004-deterministic-content-selection/data-model.md":"5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a"}},"specs/004-deterministic-content-selection/plan.md":{"size":5319,"mtime_ns":1787271850174420500,"indexed_at_ns":1787272605183666400,"word_count":643,"hashes":{"specs/004-deterministic-content-selection/plan.md":"2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f"}},"specs/004-deterministic-content-selection/quickstart.md":{"size":2239,"mtime_ns":1787274502478128000,"indexed_at_ns":1787310811759309400,"word_count":245,"hashes":{"specs/004-deterministic-content-selection/quickstart.md":"7136c34e9fa9c525ff01d65f8c35c2368cace0468b2651e85901195bfb8730a5"}},"specs/004-deterministic-content-selection/research.md":{"size":6915,"mtime_ns":1787274316854443300,"indexed_at_ns":1787274399622900200,"word_count":906,"hashes":{"specs/004-deterministic-content-selection/research.md":"11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427"}},"specs/004-deterministic-content-selection/spec.md":{"size":11807,"mtime_ns":1787274311156486400,"indexed_at_ns":1787274399623530600,"word_count":1619,"hashes":{"specs/004-deterministic-content-selection/spec.md":"7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303"}},"specs/004-deterministic-content-selection/tasks.md":{"size":8181,"mtime_ns":1787272595818614500,"indexed_at_ns":1787272605189230700,"word_count":1024,"hashes":{"specs/004-deterministic-content-selection/tasks.md":"412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887"}},"tests/test_select_article_extractor.py":{"size":24179,"mtime_ns":1787274502480126900,"indexed_at_ns":1787310811669359800,"word_count":2243,"hashes":{"tests/test_select_article_extractor.py":"22eb249629c891e4cd4b2bc09ce17c1e334bc908de3db53539ced305d3bfd287"}},"docs/prd_convert_json_markdown.md":{"size":22478,"mtime_ns":1787315400452784100,"indexed_at_ns":1787317709833244200,"word_count":3252,"hashes":{"docs/prd_convert_json_markdown.md":"d4203d9d5a6b9107bcc8ced682b509b30e7c152293298bcae22c1f96570415fb"}},"scripts/convert_article_to_markdown.py":{"size":21972,"mtime_ns":1787320071280986400,"indexed_at_ns":1787320231279685000,"word_count":2030,"hashes":{"scripts/convert_article_to_markdown.py":"917588aaee4d18fb0dfb2d292b62c1b05ecdfee3f3cd8e13a2e16a9dc281ff73"}},"specs/005-convert-json-markdown/checklists/markdown-conversion.md":{"size":10081,"mtime_ns":1787315812919805400,"indexed_at_ns":1787317709896809600,"word_count":1322,"hashes":{"specs/005-convert-json-markdown/checklists/markdown-conversion.md":"b5d0d4f6da5666dd115bd84f2a963c45da3080bb6d5725066aafab49d765746b"}},"specs/005-convert-json-markdown/checklists/requirements.md":{"size":1339,"mtime_ns":1787315513450848200,"indexed_at_ns":1787317709897553300,"word_count":181,"hashes":{"specs/005-convert-json-markdown/checklists/requirements.md":"702ba88fb2e7c9740d4c83a0c1fd434d5c348b7691f12688a1c00c0ee4956afd"}},"specs/005-convert-json-markdown/contracts/cli-contract.md":{"size":1641,"mtime_ns":1787315656382816000,"indexed_at_ns":1787317709898261700,"word_count":231,"hashes":{"specs/005-convert-json-markdown/contracts/cli-contract.md":"f2c146fd734cceaa4f2268d03c8633153f57d2fd468073a6a4701fbc14b25ef7"}},"specs/005-convert-json-markdown/contracts/markdown-schema.md":{"size":1616,"mtime_ns":1787315662306015400,"indexed_at_ns":1787317709898922500,"word_count":218,"hashes":{"specs/005-convert-json-markdown/contracts/markdown-schema.md":"b28308c2c54a4f569f5e533beb0a2a1ff44614fb28853c2f1aa915e58558c4ab"}},"specs/005-convert-json-markdown/data-model.md":{"size":5828,"mtime_ns":1787315648195198100,"indexed_at_ns":1787317709899563900,"word_count":687,"hashes":{"specs/005-convert-json-markdown/data-model.md":"2eb414a927cb0f39ba466d0870792afd73b719c8baa2fb5fe47020a024f93520"}},"specs/005-convert-json-markdown/plan.md":{"size":6196,"mtime_ns":1787315676826685000,"indexed_at_ns":1787317709900209400,"word_count":723,"hashes":{"specs/005-convert-json-markdown/plan.md":"c4db190f72e59cd2403bbbd7f99b4a4a5713285af478b2c6a7973f6e4a1007a6"}},"specs/005-convert-json-markdown/quickstart.md":{"size":1179,"mtime_ns":1787315668269243000,"indexed_at_ns":1787317709901438900,"word_count":126,"hashes":{"specs/005-convert-json-markdown/quickstart.md":"1481575738d29705da2fb1db54f53a744cdc90a79f00331dde7c351619b4036e"}},"specs/005-convert-json-markdown/research.md":{"size":5982,"mtime_ns":1787315639720415300,"indexed_at_ns":1787317709902236300,"word_count":765,"hashes":{"specs/005-convert-json-markdown/research.md":"66f816e6bda19ec162a55f35d16d5cc230e031e9002d434d69cdf79ca6fcea77"}},"specs/005-convert-json-markdown/spec.md":{"size":15416,"mtime_ns":1787315504210700900,"indexed_at_ns":1787317709902900100,"word_count":2032,"hashes":{"specs/005-convert-json-markdown/spec.md":"6e7faebc853323fb40729b8ea0b0719017c3387e69b4433fc9e4a2448d3efb9c"}},"specs/005-convert-json-markdown/tasks.md":{"size":8664,"mtime_ns":1787317701507180900,"indexed_at_ns":1787317709903569500,"word_count":1107,"hashes":{"specs/005-convert-json-markdown/tasks.md":"9ec3cc4573e6b7e18b68101acfcdd3a838a4f0453ed5a669a1d7f778b98e16d7"}},"tests/fixtures/markdown_conversion/batch_articles_invalid.json":{"size":162,"mtime_ns":1787317425649588100,"indexed_at_ns":1787317709759979900,"word_count":17,"hashes":{"tests/fixtures/markdown_conversion/batch_articles_invalid.json":"37b5ff42ccf176effa7abd142658afa91ea93d9080f51d6300b5e6be8248e22c"}},"tests/fixtures/markdown_conversion/corrupt_json_invalid.json":{"size":84,"mtime_ns":1787317430995160700,"indexed_at_ns":1787317709760596100,"word_count":8,"hashes":{"tests/fixtures/markdown_conversion/corrupt_json_invalid.json":"26317cdd3614f55612321aa9385bbbbd07bda718beb2f86692d1d30266a942c7"}},"tests/fixtures/markdown_conversion/invalid_url_invalid.json":{"size":181,"mtime_ns":1787317453854590700,"indexed_at_ns":1787317709761157600,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/invalid_url_invalid.json":"6641507e5b57acf774f7088c936cd109fd7600ff6f4d43176d27c236ef96d19c"}},"tests/fixtures/markdown_conversion/missing_body_invalid.json":{"size":328,"mtime_ns":1787317440927113900,"indexed_at_ns":1787317709761735000,"word_count":30,"hashes":{"tests/fixtures/markdown_conversion/missing_body_invalid.json":"ff9c5e6910d5b4d09ab14273098f3a5367c1e29ac5fb8782438ff667bee4e524"}},"tests/fixtures/markdown_conversion/missing_extractor_invalid.json":{"size":166,"mtime_ns":1787317435197323100,"indexed_at_ns":1787317709762359200,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/missing_extractor_invalid.json":"cc924af9d02584efa2942cfa2dfa789d63e1d45cac4f85105805657e66ef5e1d"}},"tests/fixtures/markdown_conversion/missing_title_invalid.json":{"size":168,"mtime_ns":1787317446757957200,"indexed_at_ns":1787317709762935000,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/missing_title_invalid.json":"c94b7bf69eab2bb707c2de6dedaeab750c42115b3bc27d4edb9fad543b7d242d"}},"tests/fixtures/markdown_conversion/valid_newspaper4k.json":{"size":1154,"mtime_ns":1787317391619680400,"indexed_at_ns":1787317709763503300,"word_count":113,"hashes":{"tests/fixtures/markdown_conversion/valid_newspaper4k.json":"09bf8517ec513e3c49a7dbb822baca7ed7020bc9cf6fa116f6e01d72f9bf2f49"}},"tests/fixtures/markdown_conversion/valid_newspaper4k.md":{"size":646,"mtime_ns":1787317400974503500,"indexed_at_ns":1787317709931058900,"word_count":67,"hashes":{"tests/fixtures/markdown_conversion/valid_newspaper4k.md":"32a5e4fac2616b5d9ff8859c4e14a76f243c48ce6eedffde51cac9e97b5cd57c"}},"tests/fixtures/markdown_conversion/valid_readability.json":{"size":794,"mtime_ns":1787317412440020900,"indexed_at_ns":1787317709764089400,"word_count":83,"hashes":{"tests/fixtures/markdown_conversion/valid_readability.json":"91e50abb1bf7195d2b6b84ea7dcdebfdb454dec3dead69e8ecc58971e0aabfe1"}},"tests/fixtures/markdown_conversion/valid_readability.md":{"size":455,"mtime_ns":1787317419401926200,"indexed_at_ns":1787317709931788100,"word_count":45,"hashes":{"tests/fixtures/markdown_conversion/valid_readability.md":"05c37379ff5c24c9c875a806c74f362759127986c834a2f069ed4fa64ab1cd30"}},"tests/fixtures/markdown_conversion/valid_trafilatura.json":{"size":1541,"mtime_ns":1787317377645516500,"indexed_at_ns":1787317709764666700,"word_count":140,"hashes":{"tests/fixtures/markdown_conversion/valid_trafilatura.json":"7a4214ab8db9f66674677b410816534645906a327091a2b8c864763f269123b3"}},"tests/fixtures/markdown_conversion/valid_trafilatura.md":{"size":895,"mtime_ns":1787317383505866600,"indexed_at_ns":1787317709932479900,"word_count":86,"hashes":{"tests/fixtures/markdown_conversion/valid_trafilatura.md":"024ca5b2b269152ed2e7afbc719589d6f005d3dd4a50d1a6303c426415313326"}},"tests/test_convert_article_to_markdown.py":{"size":29017,"mtime_ns":1787320111811304100,"indexed_at_ns":1787320231338258700,"word_count":2412,"hashes":{"tests/test_convert_article_to_markdown.py":"fd686fa7c4de15a64578950f4afe48baabea88e7222595c638a52a34a18561a2"}},"examples/ecp_club_atletico_river_plate.json":{"size":3502,"mtime_ns":1787319632493121800,"indexed_at_ns":1787319814380533100,"word_count":318,"hashes":{"examples/ecp_club_atletico_river_plate.json":"f390cba1c421c564ea7577faeab6bbc6ec3ec7bbb120b71ce607430594ae7bc9"}},"tests/test_llm_fallback.py":{"size":11766,"mtime_ns":1787320089212065400,"indexed_at_ns":1787320231347451000,"word_count":961,"hashes":{"tests/test_llm_fallback.py":"ad63f222d84a871c4c2e7ffc7223759b306d96e80a9a4e88eae30f75105cdcdb"}}} \ No newline at end of file +{".agents/skills/graphify/SKILL.md":{"size":41276,"mtime_ns":1787189375574389900,"indexed_at_ns":1787189383574665500,"word_count":5211,"hashes":{".agents/skills/graphify/skill.md":"3f0ba089a04e342e4337913a03515905fe205f57914b53b8eb1ff59dc926a4ea"}},".agents/skills/graphify/references/add-watch.md":{"size":2486,"mtime_ns":1787176247108301100,"indexed_at_ns":1787189352249948700,"word_count":366,"hashes":{".agents/skills/graphify/references/add-watch.md":"bc4c3ac2e736e36fff3e120b2a7967f1f049c6b05ca39db50606b4bb83c768f7"}},".agents/skills/graphify/references/exports.md":{"size":3362,"mtime_ns":1787176247109325900,"indexed_at_ns":1787189352252005200,"word_count":470,"hashes":{".agents/skills/graphify/references/exports.md":"81b09c0ad09d54d52b68755c32544024e290c02f53bdeb283b1b76d7eebc2445"}},".agents/skills/graphify/references/extraction-spec.md":{"size":7960,"mtime_ns":1787176247109325900,"indexed_at_ns":1787189352254091000,"word_count":1038,"hashes":{".agents/skills/graphify/references/extraction-spec.md":"d07c5b2e8224b1006b1a336f77d0af22f637fe8d20166895bf852c32324d851b"}},".agents/skills/graphify/references/github-and-merge.md":{"size":2177,"mtime_ns":1787176247111831300,"indexed_at_ns":1787189352255826900,"word_count":271,"hashes":{".agents/skills/graphify/references/github-and-merge.md":"189cf7c8c51988d23f6ad25dff96855ce0e7336bffa352dedb3867954e702f7b"}},".agents/skills/graphify/references/hooks.md":{"size":1267,"mtime_ns":1787176247112843500,"indexed_at_ns":1787189352257586300,"word_count":193,"hashes":{".agents/skills/graphify/references/hooks.md":"3e7d2df361e7059e921192b1693cc7859e4a2b0474446f8352be5a4624790eaa"}},".agents/skills/graphify/references/query.md":{"size":13456,"mtime_ns":1787176247113897600,"indexed_at_ns":1787189352259619700,"word_count":1763,"hashes":{".agents/skills/graphify/references/query.md":"151ad7ed0ee4aefe411f026261f605a61134cc6247324fe8df3ae1e785321283"}},".agents/skills/graphify/references/transcribe.md":{"size":3173,"mtime_ns":1787176247113897600,"indexed_at_ns":1787189352261502100,"word_count":418,"hashes":{".agents/skills/graphify/references/transcribe.md":"cbbbae90e451d722b39df0df7bc267bb9b7ecb3dd8a9e8be4b40237df053c8d6"}},".agents/skills/graphify/references/update.md":{"size":10425,"mtime_ns":1787176247115420200,"indexed_at_ns":1787189352263334600,"word_count":1196,"hashes":{".agents/skills/graphify/references/update.md":"b209dbb3bb5466e601a530b65925c55c34f040ffcf56d38ea64be9aaf75f92ce"}},".agents/skills/ponytail-audit/SKILL.md":{"size":1693,"mtime_ns":1786995804152832800,"indexed_at_ns":1787189325036907200,"word_count":234,"hashes":{".agents/skills/ponytail-audit/skill.md":"b29dd08e26692c4bdd87b024d43820e2b45527984d9b3330b5fcfc78491aac52"}},".agents/skills/ponytail-debt/SKILL.md":{"size":1747,"mtime_ns":1786995804152832800,"indexed_at_ns":1787189325037560500,"word_count":261,"hashes":{".agents/skills/ponytail-debt/skill.md":"4b8e8de454f0d7d46bce20b3f4b4ea4c5a1eb60691c0d8bef27ef4ded155e4bc"}},".agents/skills/ponytail-gain/SKILL.md":{"size":2023,"mtime_ns":1786995804154227800,"indexed_at_ns":1787189325038161300,"word_count":246,"hashes":{".agents/skills/ponytail-gain/skill.md":"9e15d99db7452555dae0cc55e5c37799e1dc8acaed4eb89c0e9641d3afbb9646"}},".agents/skills/ponytail-help/SKILL.md":{"size":2867,"mtime_ns":1786995804154227800,"indexed_at_ns":1787189325038779900,"word_count":379,"hashes":{".agents/skills/ponytail-help/skill.md":"4b6ba4d12d19068c08b12af63c05b0acc9ce3beed06654065450c0cd6042d9db"}},".agents/skills/ponytail-review/SKILL.md":{"size":2440,"mtime_ns":1786995804155238700,"indexed_at_ns":1787189325039426100,"word_count":339,"hashes":{".agents/skills/ponytail-review/skill.md":"694090b91438cff578931361d36947da438722dd1f9f7460022bb3aa5b18b4de"}},".agents/skills/ponytail/SKILL.md":{"size":6757,"mtime_ns":1786995804156239700,"indexed_at_ns":1787189325040071200,"word_count":1079,"hashes":{".agents/skills/ponytail/skill.md":"64fc6e81a1b2b008fd72f5c9686498e53383e9cb25d518dc81305799e985bf6f"}},".agents/skills/speckit-analyze/SKILL.md":{"size":11642,"mtime_ns":1787189272133064100,"indexed_at_ns":1787189325040713600,"word_count":1569,"hashes":{".agents/skills/speckit-analyze/skill.md":"12f78b5b87a05d7075320de7e7df0fc3890ee915bf5203ef2c397fee48b0d04e"}},".agents/skills/speckit-checklist/SKILL.md":{"size":22277,"mtime_ns":1787189272160379600,"indexed_at_ns":1787189325041377200,"word_count":2981,"hashes":{".agents/skills/speckit-checklist/skill.md":"1b9b592206c499d1c46699ea99fd3795ec31638e3968aa90054d07bff9f26852"}},".agents/skills/speckit-clarify/SKILL.md":{"size":19212,"mtime_ns":1787189272137533000,"indexed_at_ns":1787189325042095600,"word_count":2688,"hashes":{".agents/skills/speckit-clarify/skill.md":"d091faedcb83b3f11a3049a84424f5d66b6bdf181b192a8167c07b94133e617d"}},".agents/skills/speckit-constitution/SKILL.md":{"size":9959,"mtime_ns":1787189272141381400,"indexed_at_ns":1787189325042781900,"word_count":1376,"hashes":{".agents/skills/speckit-constitution/skill.md":"791892a3d87f7bd6ea936f896c5050b183942489d68bfb383c2ba4de8380a901"}},".agents/skills/speckit-converge/SKILL.md":{"size":12639,"mtime_ns":1787189272150381400,"indexed_at_ns":1787189325043428600,"word_count":1798,"hashes":{".agents/skills/speckit-converge/skill.md":"c04c22c94ac9a47d73d547636127b06f38647627a4dbfbc36ae50dd0a95971b3"}},".agents/skills/speckit-implement/SKILL.md":{"size":12703,"mtime_ns":1787189272146373000,"indexed_at_ns":1787189325044057400,"word_count":1691,"hashes":{".agents/skills/speckit-implement/skill.md":"a779bc551abfa24d77556554b4cc0225b3c57bc436956b9cb9aafe306c581945"}},".agents/skills/speckit-plan/SKILL.md":{"size":7857,"mtime_ns":1787189272154380100,"indexed_at_ns":1787189325044689700,"word_count":1083,"hashes":{".agents/skills/speckit-plan/skill.md":"74b5f950130fa658b857d1c81ac052d89277cbe9901c51f01270963c746277b6"}},".agents/skills/speckit-specify/SKILL.md":{"size":18258,"mtime_ns":1787189272165381000,"indexed_at_ns":1787189325045384300,"word_count":2452,"hashes":{".agents/skills/speckit-specify/skill.md":"b86e839509339a9e11a605b6db50fcd3a435511d5cbe1bbbf4f473ac4bdd5447"}},".agents/skills/speckit-tasks/SKILL.md":{"size":10978,"mtime_ns":1787189272169379600,"indexed_at_ns":1787189325046041900,"word_count":1581,"hashes":{".agents/skills/speckit-tasks/skill.md":"69de6853783574ace13eadf7c706a610df2f2584901974b713a51c1576e53339"}},".agents/skills/speckit-taskstoissues/SKILL.md":{"size":7686,"mtime_ns":1787189272172364900,"indexed_at_ns":1787189325046665600,"word_count":1153,"hashes":{".agents/skills/speckit-taskstoissues/skill.md":"fc53c7413cf050b143775a1aeca2773eabb248782a58d599b52d0d232c6c05fd"}},".specify/init-options.json":{"size":174,"mtime_ns":1787189272252382200,"indexed_at_ns":1787189325022221000,"word_count":16,"hashes":{".specify/init-options.json":"b39c8c1030871841dded0aede892fe2d25b36883333777cbab7d7c1c67b36f87"}},".specify/integration.json":{"size":279,"mtime_ns":1787189272181379700,"indexed_at_ns":1787189325023926100,"word_count":24,"hashes":{".specify/integration.json":"d7545650420a2ed3fd6878ad7006b8de79f5e812dd6352c0d86d530db3a12134"}},".specify/integrations/agy.manifest.json":{"size":1299,"mtime_ns":1787189272178366200,"indexed_at_ns":1787189325024675000,"word_count":31,"hashes":{".specify/integrations/agy.manifest.json":"504c42820b8e37a7eb26b328881026982f3a6a71fa16de670c425b35b37f00e4"}},".specify/integrations/speckit.manifest.json":{"size":1536,"mtime_ns":1787189272238379600,"indexed_at_ns":1787189325025369900,"word_count":35,"hashes":{".specify/integrations/speckit.manifest.json":"cc15502df7b241b7ef08785a613f642d69dc561b8b5db2ccba121fcb6d2c1680"}},".specify/memory/.constitution-template.json":{"size":103,"mtime_ns":1787189272257369800,"indexed_at_ns":1787189325026009300,"word_count":6,"hashes":{".specify/memory/.constitution-template.json":"a0f4bf5e5399e118b61e8bae9404743316cea6d0fff4270d8758aeb55525b988"}},".specify/memory/constitution.md":{"size":2346,"mtime_ns":1787189272254379900,"indexed_at_ns":1787189325047314000,"word_count":272,"hashes":{".specify/memory/constitution.md":"51f14d46d5b6abddce28779396666792636c8d9629f0202e84501a5e759267ab"}},".specify/scripts/powershell/check-prerequisites.ps1":{"size":6122,"mtime_ns":1787189272202379800,"indexed_at_ns":1787189325026668000,"word_count":685,"hashes":{".specify/scripts/powershell/check-prerequisites.ps1":"80f1c4dc6817140dea987bb5727d38be754679c7052f1d9a088031536423cb23"}},".specify/scripts/powershell/common.ps1":{"size":34245,"mtime_ns":1787189272206379800,"indexed_at_ns":1787189325027347800,"word_count":3419,"hashes":{".specify/scripts/powershell/common.ps1":"63b253c967802e85ab12e76ac716eca4bb164dde2b9324e08e406d848ec4104b"}},".specify/scripts/powershell/create-new-feature.ps1":{"size":13026,"mtime_ns":1787189272211369000,"indexed_at_ns":1787189325028005300,"word_count":1421,"hashes":{".specify/scripts/powershell/create-new-feature.ps1":"7b4eb36a1fbbbe9a449b5f99de1055b1aad88e775eeb0db3f86e4ff013e6ddd1"}},".specify/scripts/powershell/resolve-template.ps1":{"size":889,"mtime_ns":1787189272214379900,"indexed_at_ns":1787189325028621300,"word_count":86,"hashes":{".specify/scripts/powershell/resolve-template.ps1":"78234a87c584e697a8fda8b18f134914e41465cbb67c1608b81e69860741502c"}},".specify/scripts/powershell/setup-plan.ps1":{"size":2927,"mtime_ns":1787189272218379500,"indexed_at_ns":1787189325029271700,"word_count":325,"hashes":{".specify/scripts/powershell/setup-plan.ps1":"4d5b636734ae78061da3a7675f0af4acfa6b65f7d994d5372c8c051f25bb8966"}},".specify/scripts/powershell/setup-tasks.ps1":{"size":3892,"mtime_ns":1787189272221379900,"indexed_at_ns":1787189325029900900,"word_count":429,"hashes":{".specify/scripts/powershell/setup-tasks.ps1":"5c980d1a41d186b634bc350128c31e5f3074099b996989c0a0d95b22623b2932"}},".specify/templates/checklist-template.md":{"size":2033,"mtime_ns":1787189272223379700,"indexed_at_ns":1787189325047907900,"word_count":271,"hashes":{".specify/templates/checklist-template.md":"6fb0a979b8534e1b3343d1ce6e45f84d32b118e096620bfdeed241dbc1a1da8a"}},".specify/templates/constitution-template.md":{"size":2346,"mtime_ns":1787189272226379800,"indexed_at_ns":1787189325048534600,"word_count":272,"hashes":{".specify/templates/constitution-template.md":"ae22b7c7ecb6ccd516fed25916e465146432c58f1bef904a92b535ac0bbecfcf"}},".specify/templates/plan-template.md":{"size":3682,"mtime_ns":1787189272229368600,"indexed_at_ns":1787189325049160100,"word_count":463,"hashes":{".specify/templates/plan-template.md":"e5cfe5097c5de0add0f0de02b7a5d2cd2470c9a2f24c0e6e15439d274e12abe0"}},".specify/templates/spec-template.md":{"size":4556,"mtime_ns":1787189272231368600,"indexed_at_ns":1787189325049780800,"word_count":629,"hashes":{".specify/templates/spec-template.md":"2734a509d4b2f34ee6258475c4fb2e80a6dbfcbc47c8552df5b6278907529250"}},".specify/templates/tasks-template.md":{"size":9171,"mtime_ns":1787189272234379700,"indexed_at_ns":1787189325050369300,"word_count":1384,"hashes":{".specify/templates/tasks-template.md":"070ed0dfafd8310a243b51cc30b1b6dfb19883fdd5ad20e4b53e45eb7f939e3e"}},".specify/workflows/speckit/workflow.yml":{"size":2216,"mtime_ns":1787160407462626700,"indexed_at_ns":1787189324996696100,"word_count":276},".specify/workflows/workflow-registry.json":{"size":381,"mtime_ns":1787189272250379800,"indexed_at_ns":1787189325030509700,"word_count":34,"hashes":{".specify/workflows/workflow-registry.json":"2c5bf7f4ba03ddf54945cd64d4740301036c18ebea47448d93ff428c771eff3d"}},".agents/rules/graphify.md":{"size":947,"mtime_ns":1787189347444181700,"indexed_at_ns":1787189352246818600,"word_count":127,"hashes":{".agents/rules/graphify.md":"e55792958648fb69255e3ce3f71a8fcead36307c34b2d67feda9ac650ac61803"}},".agents/workflows/graphify.md":{"size":239,"mtime_ns":1787189347444181700,"indexed_at_ns":1787189352301037700,"word_count":37,"hashes":{".agents/workflows/graphify.md":"d92622463299d313da48e2cdbebf79d7ea24ffaf2ae2de2a1714be8ee42b22b3"}},"specs/001-multilingual-entity-classifier/checklists/requirements.md":{"size":1897,"mtime_ns":1787193985655018100,"indexed_at_ns":1787194002726038300,"word_count":258,"hashes":{"specs/001-multilingual-entity-classifier/checklists/requirements.md":"277036c8add1bae5eeae6da5595cf66405670d33f9d4842784b1c5581cef62d0"}},"specs/001-multilingual-entity-classifier/spec.md":{"size":10753,"mtime_ns":1787194850510689300,"indexed_at_ns":1787194930726970700,"word_count":1423,"hashes":{"specs/001-multilingual-entity-classifier/spec.md":"f136d1d2e6a539072ea238be9d0e918dbc32eb89555ffd37e9b84579064e7799"}},"specs/001-multilingual-entity-classifier/contracts/cli-contract.md":{"size":1808,"mtime_ns":1787194605824187100,"indexed_at_ns":1787194638410863000,"word_count":281,"hashes":{"specs/001-multilingual-entity-classifier/contracts/cli-contract.md":"894670a7228b93a2202203ac532aa0d415bd1921272b61a8d07e951a417bc75c"}},"specs/001-multilingual-entity-classifier/data-model.md":{"size":5137,"mtime_ns":1787194591677816000,"indexed_at_ns":1787194638411601100,"word_count":524,"hashes":{"specs/001-multilingual-entity-classifier/data-model.md":"89ecf2e55508b53ba208d011a76868294f0ff3cab87a217e7ed73c19edfbd9f6"}},"specs/001-multilingual-entity-classifier/plan.md":{"size":6215,"mtime_ns":1787194897854106700,"indexed_at_ns":1787194930724386200,"word_count":782,"hashes":{"specs/001-multilingual-entity-classifier/plan.md":"d37d1c5f3bffc4dad289ad128024ab6dffb409b06f49e96fc5a2fd2a735472a5"}},"specs/001-multilingual-entity-classifier/quickstart.md":{"size":3235,"mtime_ns":1787194877439851000,"indexed_at_ns":1787194930725082000,"word_count":339,"hashes":{"specs/001-multilingual-entity-classifier/quickstart.md":"816060813a37d728ceed955aa829d7fa4f80862f0932133cd5293bdbfdbd40db"}},"specs/001-multilingual-entity-classifier/research.md":{"size":4059,"mtime_ns":1787194581004019000,"indexed_at_ns":1787194638413783100,"word_count":509,"hashes":{"specs/001-multilingual-entity-classifier/research.md":"d4b61795fb09da693ead647d4c05e8f44699c36e9f43b47e808e09a2f970d996"}},"specs/001-multilingual-entity-classifier/tasks.md":{"size":6951,"mtime_ns":1787196452595599000,"indexed_at_ns":1787196460266934400,"word_count":874,"hashes":{"specs/001-multilingual-entity-classifier/tasks.md":"7a33202595cf192baf702d3d8e169ea8db59ca0f2fecb471594f7f3c48417082"}},"specs/001-multilingual-entity-classifier/checklists/poc-readiness.md":{"size":4154,"mtime_ns":1787195218247525200,"indexed_at_ns":1787195224690016000,"word_count":546,"hashes":{"specs/001-multilingual-entity-classifier/checklists/poc-readiness.md":"6da9d16dcd60e927f892c69aa05945e99840b6dc824f93ea2686f12801e81a8a"}},"classify.py":{"size":6177,"mtime_ns":1787320064017746100,"indexed_at_ns":1787320231273770400,"word_count":487,"hashes":{"classify.py":"7cd254b1387ac478a48c65d3e098818499b4f3628a1c228a83b608d97d834efa"}},"examples/content_northvolt_de.md":{"size":530,"mtime_ns":1787195963813740900,"indexed_at_ns":1787196460246681400,"word_count":57,"hashes":{"examples/content_northvolt_de.md":"5708f5dac050fea9c5e4fbdee40910cbb4c4be0efc9c3212f7cf2a7a034eb91d"}},"examples/content_presal_pt.md":{"size":506,"mtime_ns":1787195950024799800,"indexed_at_ns":1787196460247532700,"word_count":72,"hashes":{"examples/content_presal_pt.md":"ef8c7d61a4d721f7d702fa608274da920476be3a4f7bfe6e4f603abba12a133f"}},"examples/content_tangential_es.md":{"size":414,"mtime_ns":1787195975527150700,"indexed_at_ns":1787196460248387000,"word_count":60,"hashes":{"examples/content_tangential_es.md":"d02c405931b0752377a2ba10cbffe4d664713e33c3b6a8fbdd36b4a75b30f11b"}},"examples/ecp_apple.json":{"size":723,"mtime_ns":1787195969757856700,"indexed_at_ns":1787196460143672700,"word_count":68,"hashes":{"examples/ecp_apple.json":"166fb76e5d0d181835dd636450b6828565c2baafcb21228313bcea3c850d9a92"}},"examples/ecp_petrobras.json":{"size":714,"mtime_ns":1787195944394575600,"indexed_at_ns":1787196460144504800,"word_count":62,"hashes":{"examples/ecp_petrobras.json":"5dd24cf4d5cb9f636f3a1c2511eeaa152be0511b80974a4f36d5d68aded046db"}},"examples/ecp_volkswagen.json":{"size":720,"mtime_ns":1787195955456870500,"indexed_at_ns":1787196460145217300,"word_count":56,"hashes":{"examples/ecp_volkswagen.json":"3d3866179c67e332ad5aa46f5d15eeb4de3fa829d1cc21ccf73cc7f3a7eb32c5"}},"pyproject.toml":{"size":762,"mtime_ns":1787264482850924600,"indexed_at_ns":1787264516414577000,"word_count":86,"hashes":{"pyproject.toml":"ab0b0276581056a63d591237beb2e4e8fe3a4441c06963a847dd1f74b569dd88"}},"requirements.txt":{"size":333,"mtime_ns":1787317345925397200,"indexed_at_ns":1787317709341206400,"word_count":30},"src/__init__.py":{"size":83,"mtime_ns":1787195832559486000,"indexed_at_ns":1787196460146819200,"word_count":9,"hashes":{"src/__init__.py":"81c4eae46f05fd529d4f81f2d318c2b4e3af282f140963e9c5c876690bb1ca74"}},"src/adapters/__init__.py":{"size":73,"mtime_ns":1787195842271676800,"indexed_at_ns":1787196460147577400,"word_count":9,"hashes":{"src/adapters/__init__.py":"f4dcecfaeea2ae0852fd9836bfb4f9b2a9bedd60057157064e6d3fed4a8c1bd7"}},"src/adapters/base.py":{"size":907,"mtime_ns":1787264412243760700,"indexed_at_ns":1787264516431216000,"word_count":95,"hashes":{"src/adapters/base.py":"39d8678210517983b9fe9bfa26a1990c1f4f63195651da2a180d3bb73db51a1e"}},"src/adapters/embeddings.py":{"size":1399,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516432540300,"word_count":139,"hashes":{"src/adapters/embeddings.py":"acf74e38373f16e923350dbcf514b2958215391024c8abed3b8a621b0e69bd61"}},"src/adapters/llm.py":{"size":8539,"mtime_ns":1787320797248566300,"indexed_at_ns":1787320814815910900,"word_count":845,"hashes":{"src/adapters/llm.py":"37c7075e5b486aeecc47f32dc299635f468f2b3f6a9564902ef4b5355b9d40e7"}},"src/classifier.py":{"size":10840,"mtime_ns":1787320047036288700,"indexed_at_ns":1787320231299266400,"word_count":911,"hashes":{"src/classifier.py":"4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c"}},"src/language.py":{"size":10957,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516435249300,"word_count":887,"hashes":{"src/language.py":"75d8e6444528450b5d11eee5b51965c98525070bb65eb0edabc996701a4c5075"}},"src/models.py":{"size":5959,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516436265800,"word_count":487,"hashes":{"src/models.py":"260513e4539e617b4123ac5b5352cb6ce7caf3a5dfba08badf6390bf60784ac9"}},"src/parser.py":{"size":2654,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516437222700,"word_count":299,"hashes":{"src/parser.py":"a789a6ba02724ad75604dcc56991e8b7989558abe673d4701242012723954407"}},"tests/__init__.py":{"size":69,"mtime_ns":1787195847518641200,"indexed_at_ns":1787196460153585600,"word_count":8,"hashes":{"tests/__init__.py":"2acdae7d2696c23d5391ed343046cffa11b82f3f0d7d85767dacf0e762a955d1"}},"tests/fixtures/benchmark_24/de/contextual.md":{"size":144,"mtime_ns":1787196180779459400,"indexed_at_ns":1787196460268138600,"word_count":17,"hashes":{"tests/fixtures/benchmark_24/de/contextual.md":"b6a18c4bef2defe99773d3ba43137148d25b42ac27562b10b73ccdee1a49f203"}},"tests/fixtures/benchmark_24/de/contextual_expected.json":{"size":136,"mtime_ns":1787196187032823100,"indexed_at_ns":1787196460154321700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/contextual_expected.json":"cb741ed9bef3359a41d5c031ad213d4320c5b8fe3f8579e497ee9b1eda0ed478"}},"tests/fixtures/benchmark_24/de/direct.md":{"size":148,"mtime_ns":1787196169572812500,"indexed_at_ns":1787196460269192500,"word_count":16,"hashes":{"tests/fixtures/benchmark_24/de/direct.md":"67f375d26d8424655b76d5650c656b4af79b9964d52f2d24049e1f4de6545c9b"}},"tests/fixtures/benchmark_24/de/direct_expected.json":{"size":132,"mtime_ns":1787196175168070900,"indexed_at_ns":1787196460155004400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/direct_expected.json":"5301a39d31b365266b529ce9823145381241f8876af1ec21f0a9c27c9bdc80fa"}},"tests/fixtures/benchmark_24/de/ecp.json":{"size":579,"mtime_ns":1787196164027193900,"indexed_at_ns":1787196460155664300,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/de/ecp.json":"061fc3a9468d2baaaf2b3e8355d08d23261a9a7adc484cb06b45646eacba46fc"}},"tests/fixtures/benchmark_24/de/not_related.md":{"size":137,"mtime_ns":1787196204093781400,"indexed_at_ns":1787196460270056100,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/not_related.md":"4904b694b45a2058614a4e4350046eee042c4bbd7bcd6b88c56408ee3aebd81d"}},"tests/fixtures/benchmark_24/de/not_related_expected.json":{"size":129,"mtime_ns":1787196209729787600,"indexed_at_ns":1787196460156391600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/not_related_expected.json":"730fa882c1f3b8a7c0e2d3da9af55ee57ad7425a8b304c11f54e01899c740952"}},"tests/fixtures/benchmark_24/de/tangential.md":{"size":150,"mtime_ns":1787196193187087300,"indexed_at_ns":1787196460270857700,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/tangential.md":"8207068977006dafa7c9c4459bd996b5c124972d25f1015a589d3b06d0999613"}},"tests/fixtures/benchmark_24/de/tangential_expected.json":{"size":128,"mtime_ns":1787196198703847300,"indexed_at_ns":1787196460157130400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/tangential_expected.json":"82dea5e55d7586c4e7005755e3da4f44560238733094876047de51e854d41d92"}},"tests/fixtures/benchmark_24/en/contextual.md":{"size":148,"mtime_ns":1787196066427405900,"indexed_at_ns":1787196460271878300,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/en/contextual.md":"258a9f1ae01dae52955c1f45cb176e7d981a72ba869c33232c8c295f4816acc0"}},"tests/fixtures/benchmark_24/en/contextual_expected.json":{"size":136,"mtime_ns":1787196073211713100,"indexed_at_ns":1787196460158457500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/contextual_expected.json":"70605f9d8901d4c4b99d9fda1f30bc114cb0b65893579f77a1f9d50f62c1e3fc"}},"tests/fixtures/benchmark_24/en/direct.md":{"size":155,"mtime_ns":1787196054149613200,"indexed_at_ns":1787196460272766400,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/en/direct.md":"c7e0b093c386ccf19d9d7cbef4763dfb665213a7a245093af43529b1eaff8266"}},"tests/fixtures/benchmark_24/en/direct_expected.json":{"size":132,"mtime_ns":1787196059966736300,"indexed_at_ns":1787196460159526700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/direct_expected.json":"0b803b2ad37388be7ef4ea1d164db22c9fd784bcb9be6f56627d412f1f9299bc"}},"tests/fixtures/benchmark_24/en/ecp.json":{"size":594,"mtime_ns":1787197123717795600,"indexed_at_ns":1787197157494285900,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/en/ecp.json":"601423ac1e0b0e2bb7a0151ac87f5bdfd32450d90a022eaf9ef030338e0b4893"}},"tests/fixtures/benchmark_24/en/not_related.md":{"size":146,"mtime_ns":1787196350333465500,"indexed_at_ns":1787196460273595300,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/en/not_related.md":"2fa405b123733c5a9b5beba8c646b886b27e212cff55496a9fe7d6208ddfb11c"}},"tests/fixtures/benchmark_24/en/not_related_expected.json":{"size":129,"mtime_ns":1787196104521133100,"indexed_at_ns":1787196460161344300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/not_related_expected.json":"cb046b055b5c72d8146b6035a935211d60fb0b313ef819576bb8e7048d55f468"}},"tests/fixtures/benchmark_24/en/tangential.md":{"size":147,"mtime_ns":1787196082730266300,"indexed_at_ns":1787196460274648200,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/en/tangential.md":"793acebc11e5d6c17872d56881c8fe99cb187116c38fa4b2647d28fe3063a61e"}},"tests/fixtures/benchmark_24/en/tangential_expected.json":{"size":128,"mtime_ns":1787196089699545000,"indexed_at_ns":1787196460162151700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/tangential_expected.json":"d5b1a4dc64246838a066f73c41f0e33dcd59636e61d6c0842a3728247e536aff"}},"tests/fixtures/benchmark_24/es/contextual.md":{"size":167,"mtime_ns":1787196129959491900,"indexed_at_ns":1787196460275850900,"word_count":22,"hashes":{"tests/fixtures/benchmark_24/es/contextual.md":"d45ef46752e2093455e35cbf97076f943ab2be736c9bc4580607960b9d068731"}},"tests/fixtures/benchmark_24/es/contextual_expected.json":{"size":136,"mtime_ns":1787196135705341100,"indexed_at_ns":1787196460162957600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/contextual_expected.json":"083f7153df08f93f595782eb2959e8505ac4bda4daaf6634c7a11d444c1ba6b0"}},"tests/fixtures/benchmark_24/es/direct.md":{"size":179,"mtime_ns":1787196118640588800,"indexed_at_ns":1787196460276716800,"word_count":29,"hashes":{"tests/fixtures/benchmark_24/es/direct.md":"f6e282a68830d5518285b0cda510fe57fa844cc6322979604a427797f07fdbd7"}},"tests/fixtures/benchmark_24/es/direct_expected.json":{"size":132,"mtime_ns":1787196124282103900,"indexed_at_ns":1787196460163727400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/direct_expected.json":"fb96e4ae9e2e1603b9ac4d31b6984b31d814b3f31a8a3ca03c52c1ffa4199471"}},"tests/fixtures/benchmark_24/es/ecp.json":{"size":590,"mtime_ns":1787196110761765400,"indexed_at_ns":1787196460164509700,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/es/ecp.json":"09cad55a4cc5a8c04b9898dee21c28b0d40561fcdd8ff012fe4de96616c05f7f"}},"tests/fixtures/benchmark_24/es/not_related.md":{"size":148,"mtime_ns":1787196152611035900,"indexed_at_ns":1787196460277631800,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/not_related.md":"1b8a7f7a6852c9ec33fc34513ab479bd5edba48762a0801f7982e48adcb0089b"}},"tests/fixtures/benchmark_24/es/not_related_expected.json":{"size":129,"mtime_ns":1787196158098444000,"indexed_at_ns":1787196460165309300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/not_related_expected.json":"01645746a62894e6448895d9bf5eac394e94e54711d7f519d2ed14d8b8957487"}},"tests/fixtures/benchmark_24/es/tangential.md":{"size":141,"mtime_ns":1787196141436479100,"indexed_at_ns":1787196460278451000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/tangential.md":"41888c762fdc38fb9d5a6dc39373ac2e38331ba4520535088efef8943ea40e49"}},"tests/fixtures/benchmark_24/es/tangential_expected.json":{"size":128,"mtime_ns":1787196147026058000,"indexed_at_ns":1787196460166503400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/tangential_expected.json":"aac2bd9ab5946710c62dc0a8daf8b1481462bed081e11db4558c08ef917fcf81"}},"tests/fixtures/benchmark_24/fr/contextual.md":{"size":167,"mtime_ns":1787196288415259700,"indexed_at_ns":1787196460279288100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/fr/contextual.md":"8a36d5737429e743ffbdc8c6ae78bcc9410915e048056dbd1fb4d3d493ac7ec6"}},"tests/fixtures/benchmark_24/fr/contextual_expected.json":{"size":136,"mtime_ns":1787196295706997200,"indexed_at_ns":1787196460167650500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/contextual_expected.json":"4a155288609fc5c935a39a633d7185109629871380b88af1c367922e44abe900"}},"tests/fixtures/benchmark_24/fr/direct.md":{"size":160,"mtime_ns":1787196277020128300,"indexed_at_ns":1787196460280073100,"word_count":20,"hashes":{"tests/fixtures/benchmark_24/fr/direct.md":"f218d9c8ada6c31e813c41bcb5e6a081a1df526022b907795065c0f845480077"}},"tests/fixtures/benchmark_24/fr/direct_expected.json":{"size":132,"mtime_ns":1787196282775093400,"indexed_at_ns":1787196460168573600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/direct_expected.json":"b93c2059a731e06a164fe1331e1c7ff01fb741f728c8aa1df151ee51bc993268"}},"tests/fixtures/benchmark_24/fr/ecp.json":{"size":600,"mtime_ns":1787197131861351500,"indexed_at_ns":1787197157506006100,"word_count":50,"hashes":{"tests/fixtures/benchmark_24/fr/ecp.json":"f2e7f9eafa1fd24514541868c83db90b69784d5faf4e8d039d79d11597b51428"}},"tests/fixtures/benchmark_24/fr/not_related.md":{"size":181,"mtime_ns":1787196312472120100,"indexed_at_ns":1787196460280811500,"word_count":30,"hashes":{"tests/fixtures/benchmark_24/fr/not_related.md":"475984d25541d876b7d9e3e8f7cff7b3db2bc1489c25d6612b911da6d2b2af8e"}},"tests/fixtures/benchmark_24/fr/not_related_expected.json":{"size":129,"mtime_ns":1787196317906240800,"indexed_at_ns":1787196460170379300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/not_related_expected.json":"31b3104faa21c2a417399fdd85d077d1c58fe74ee33fd41b0942580be6f81267"}},"tests/fixtures/benchmark_24/fr/tangential.md":{"size":158,"mtime_ns":1787196301225610200,"indexed_at_ns":1787196460281594400,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/fr/tangential.md":"7f6c6ab84d2a26675f9f16fb23d45cf1e97b3ff5e28fb98df6aeaa2368d2c305"}},"tests/fixtures/benchmark_24/fr/tangential_expected.json":{"size":128,"mtime_ns":1787196306729905200,"indexed_at_ns":1787196460171141500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/tangential_expected.json":"cc117a22ba73be1b308d377767ca0ae8da8e5889ccdaa430893b3ae70a58c9ca"}},"tests/fixtures/benchmark_24/it/contextual.md":{"size":150,"mtime_ns":1787196234462201200,"indexed_at_ns":1787196460283346800,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/it/contextual.md":"045391f6f676add7e1ae9391419ef65442259ab90f9cacb5caca4d468d292017"}},"tests/fixtures/benchmark_24/it/contextual_expected.json":{"size":136,"mtime_ns":1787196240055631300,"indexed_at_ns":1787196460171870600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/contextual_expected.json":"b2b4b297f43e5af1cda526e259acede43a31b552c0321bee1ce1c72572cec557"}},"tests/fixtures/benchmark_24/it/direct.md":{"size":145,"mtime_ns":1787196221664473400,"indexed_at_ns":1787196460284281100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/direct.md":"d54bad27d944692fa7f00a036f882d1c0e42d189241822adcae86edf73a444da"}},"tests/fixtures/benchmark_24/it/direct_expected.json":{"size":132,"mtime_ns":1787196228986408600,"indexed_at_ns":1787196460172673300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/direct_expected.json":"f94e71dc4b78c0646190ff288f08dab46c67f2356b8b75cc515c28af7c9c423c"}},"tests/fixtures/benchmark_24/it/ecp.json":{"size":529,"mtime_ns":1787196215715634300,"indexed_at_ns":1787196460173452600,"word_count":45,"hashes":{"tests/fixtures/benchmark_24/it/ecp.json":"bcbd12d3057368618b006c24f384341f91349c713d10a3028d3eb4afada32de6"}},"tests/fixtures/benchmark_24/it/not_related.md":{"size":153,"mtime_ns":1787196259362992300,"indexed_at_ns":1787196460285099000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/not_related.md":"bca227c7b17fd4404e5ca1d082b848981c1da28d0b657df1e025c03056387f13"}},"tests/fixtures/benchmark_24/it/not_related_expected.json":{"size":129,"mtime_ns":1787196265318256200,"indexed_at_ns":1787196460174468400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/not_related_expected.json":"d007ac531224ad0834e9a8807582d0e047524be4c30fffdd1a19a51dba36d85d"}},"tests/fixtures/benchmark_24/it/tangential.md":{"size":155,"mtime_ns":1787196245918356300,"indexed_at_ns":1787196460285993500,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/tangential.md":"a78a886f11462033c996a20b629e13c6bb55d4e08ffed20601cd4ea877b9db09"}},"tests/fixtures/benchmark_24/it/tangential_expected.json":{"size":128,"mtime_ns":1787196252898853500,"indexed_at_ns":1787196460175957500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/tangential_expected.json":"18872f6fe4cbd71812566494e88bd97633d696f732b3b5bad871f81076703f74"}},"tests/fixtures/benchmark_24/pt/contextual.md":{"size":125,"mtime_ns":1787196014201071400,"indexed_at_ns":1787196460286845200,"word_count":18,"hashes":{"tests/fixtures/benchmark_24/pt/contextual.md":"e9ea12885a5c68822f96691e543b55885afba3d00a9e0fa65837bd88e559f157"}},"tests/fixtures/benchmark_24/pt/contextual_expected.json":{"size":136,"mtime_ns":1787196019487136800,"indexed_at_ns":1787196460176915600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/contextual_expected.json":"34145a845a7f6b155bf42c028bb0c6d8d43ed5cd0b1d179c089b1e621fecd08f"}},"tests/fixtures/benchmark_24/pt/direct.md":{"size":140,"mtime_ns":1787196003236562000,"indexed_at_ns":1787196460287899900,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/pt/direct.md":"150182b9c1352163cb136c19141b85b3f0323e7eaa0cd023fce1dfef0de63d29"}},"tests/fixtures/benchmark_24/pt/direct_expected.json":{"size":132,"mtime_ns":1787196008785189600,"indexed_at_ns":1787196460177800600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/direct_expected.json":"a9c666394db6a6e2fcd503d8cf67549531ee9e70eb73b1edb2b6a2443316cbf2"}},"tests/fixtures/benchmark_24/pt/ecp.json":{"size":507,"mtime_ns":1787195997549710300,"indexed_at_ns":1787196460178615000,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/pt/ecp.json":"cec78c3ed8d2ec311d079239922a10a35a7fc9c382d8886fec81c6322d2a70ac"}},"tests/fixtures/benchmark_24/pt/not_related.md":{"size":124,"mtime_ns":1787196036724084200,"indexed_at_ns":1787196460288769500,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/pt/not_related.md":"3af103a7f0df8e93c6154157e9903dc7fc10d64fa69dd7c2b08d4f68b99b1972"}},"tests/fixtures/benchmark_24/pt/not_related_expected.json":{"size":129,"mtime_ns":1787196042201218800,"indexed_at_ns":1787196460179403700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/not_related_expected.json":"d5ce36bca028f31ba472e325993610eb82f98e1a8f84fa770bf92aa7158ce954"}},"tests/fixtures/benchmark_24/pt/tangential.md":{"size":140,"mtime_ns":1787196024978861700,"indexed_at_ns":1787196460289652400,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/pt/tangential.md":"77d86f819ccbefe9830a57151354ca47d83e46b3d0e55d0f5139f37a1d9df0b8"}},"tests/fixtures/benchmark_24/pt/tangential_expected.json":{"size":128,"mtime_ns":1787196030395574000,"indexed_at_ns":1787196460180223100,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/tangential_expected.json":"fb977fec8db613f9545c81adffe0295084c6198b5f7c9a85d8901a228de63a51"}},"tests/test_adapters.py":{"size":1166,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516466770300,"word_count":91,"hashes":{"tests/test_adapters.py":"32a9519d5c55012aedaa43a786aff1cec88e7391d186f5d0a54213ca1b204f48"}},"tests/test_benchmark_24.py":{"size":2757,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516468505400,"word_count":257,"hashes":{"tests/test_benchmark_24.py":"7c136ac4d442e47a2f8914303880ce265c2fe49485eb182014fc3e10c06f9e71"}},"tests/test_classifier.py":{"size":3836,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516469349200,"word_count":351,"hashes":{"tests/test_classifier.py":"d3323e05dd21f20686d9293f767ebb2ced206c7b74e7ca89d2ac02c0a4e31282"}},"tests/test_cli.py":{"size":3872,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470059400,"word_count":314,"hashes":{"tests/test_cli.py":"0573d9b13e45413beefac33d86eae94e17dbbf37554120a1fc5720bfb3d67d63"}},"tests/test_language.py":{"size":1929,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516472426100,"word_count":242,"hashes":{"tests/test_language.py":"7f7aae057ecbda26edd747d24241e9cf36f611c71c5d70d0aa308df7d71e0547"}},"tests/test_models.py":{"size":3668,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516473330500,"word_count":306,"hashes":{"tests/test_models.py":"232210770fc690edcc732d940bafe46fcec9bfed7f17e0aa5c60e6cf6635751f"}},"tests/test_adversarial.py":{"size":8429,"mtime_ns":1787264437924228700,"indexed_at_ns":1787264516467613100,"word_count":704,"hashes":{"tests/test_adversarial.py":"3acc7ff372e6b0f1f42dad29d280b835ac51784b1dca8054472287a7355c9386"}},"docs/googlenews_extractor_guia_completo.md":{"size":23200,"mtime_ns":1787264437928228500,"indexed_at_ns":1787264516560203200,"word_count":2292,"hashes":{"docs/googlenews_extractor_guia_completo.md":"dcff19204ab04403030b2339663c0d3c161744f50a53f5254c459a894eb3b3c8"}},"examples/ecp_sao_paulo_futebol_clube.json":{"size":23358,"mtime_ns":1787229477299354200,"indexed_at_ns":1787234770609429300,"word_count":1524,"hashes":{"examples/ecp_sao_paulo_futebol_clube.json":"1af9006669d57f8dc123f0edea0d0fe8aaeb9016e36ec3e0d95023ea26996915"}},"scripts/extract_google_news.py":{"size":14720,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516421445500,"word_count":1314,"hashes":{"scripts/extract_google_news.py":"aa17b59997ab6bb549a918fb1026ddf5a5c5143c75c234895dc32447e2c5b85a"}},"specs/002-google-news-extractor/checklists/readiness.md":{"size":5258,"mtime_ns":1787234305932687100,"indexed_at_ns":1787234770736852100,"word_count":706,"hashes":{"specs/002-google-news-extractor/checklists/readiness.md":"ad4c18a1fe1c6f19f45a043748fe4f195db525afac53ed77905222015ec5230c"}},"specs/002-google-news-extractor/checklists/requirements.md":{"size":1144,"mtime_ns":1787232386676398600,"indexed_at_ns":1787234770737689600,"word_count":158,"hashes":{"specs/002-google-news-extractor/checklists/requirements.md":"d83944755d7f6e43d8c76e032f0047be6f8c4cb2b80dea65e198f57b9c5eccd7"}},"specs/002-google-news-extractor/contracts/cli_contract.md":{"size":2681,"mtime_ns":1787236744313922700,"indexed_at_ns":1787236813512122300,"word_count":424,"hashes":{"specs/002-google-news-extractor/contracts/cli_contract.md":"6b9e3c10becd7b8fa633e409e9a3298ff4b2903dfd5194054c8e41dd0c0c5f23"}},"specs/002-google-news-extractor/data-model.md":{"size":3008,"mtime_ns":1787234040813431800,"indexed_at_ns":1787234770739130200,"word_count":472,"hashes":{"specs/002-google-news-extractor/data-model.md":"78cec846c1173fbdff3c77313ba02c7977365e5ab102df527f90ed7b06e69519"}},"specs/002-google-news-extractor/plan.md":{"size":3947,"mtime_ns":1787236725982522400,"indexed_at_ns":1787236813514970600,"word_count":448,"hashes":{"specs/002-google-news-extractor/plan.md":"57a0a3eb1fd6d7afbe394be62e681a02d7ef26124f4142b9d8b72ea95259a34b"}},"specs/002-google-news-extractor/quickstart.md":{"size":2341,"mtime_ns":1787236764020651300,"indexed_at_ns":1787236813515935900,"word_count":317,"hashes":{"specs/002-google-news-extractor/quickstart.md":"3478a487614358839b3e53c15b05b86a4b850bead9b4142384566e244753bde3"}},"specs/002-google-news-extractor/research.md":{"size":3630,"mtime_ns":1787236785046618200,"indexed_at_ns":1787236813516811500,"word_count":483,"hashes":{"specs/002-google-news-extractor/research.md":"71e796c83a1c293fa380b4f01a2eed810275e4628548e0f8e8b9ecaa90d3ac13"}},"specs/002-google-news-extractor/spec.md":{"size":7506,"mtime_ns":1787236709078315600,"indexed_at_ns":1787236813517705300,"word_count":1096,"hashes":{"specs/002-google-news-extractor/spec.md":"e84b37b25f61ed209d1295f77bf84024ac6c3c818f6b98043204a9f81bff49f0"}},"specs/002-google-news-extractor/tasks.md":{"size":5315,"mtime_ns":1787236802480804800,"indexed_at_ns":1787236813518644500,"word_count":692,"hashes":{"specs/002-google-news-extractor/tasks.md":"94430da291ad0dc34b1cde7c30f2b8e1ce0c83d35b5e71ab68bd135146c9ef47"}},"tests/test_extract_google_news.py":{"size":12221,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516471687100,"word_count":1114,"hashes":{"tests/test_extract_google_news.py":"5304424b746b871720985cfdd031b0f8895c664bdd9d273b9c1723f445a2276f"}},"scripts/__init__.py":{"size":50,"mtime_ns":1787234973578233800,"indexed_at_ns":1787235018163517900,"word_count":6,"hashes":{"scripts/__init__.py":"f30a694c2114ef6bc58efa1caea7265dde8ef296d92cdb77c8b3e3d1f21af3a5"}},"README.md":{"size":28853,"mtime_ns":1787320219585220400,"indexed_at_ns":1787320231400137800,"word_count":3424,"hashes":{"readme.md":"ed4a59167b17930827b3b2a054b6ddd0dc53bad6c4b091facf2e52f0f4f19d4b"}},"docs/prd_extrator_artigos_nlp.md":{"size":11894,"mtime_ns":1787237774009258300,"indexed_at_ns":1787240513666474800,"word_count":1548,"hashes":{"docs/prd_extrator_artigos_nlp.md":"e10035c73584efc6d043bec17d43388ecbf25b576ca3475d0b9906cbc16fad90"}},"scripts/extract_article_contents.py":{"size":27025,"mtime_ns":1787264465341521500,"indexed_at_ns":1787264516419754800,"word_count":2069,"hashes":{"scripts/extract_article_contents.py":"a76fc087a959496bc2cf4767baaed89628bd945e1aaa8e981be840cf1240f1ba"}},"specs/003-article-content-extractor/checklists/extraction.md":{"size":4716,"mtime_ns":1787239873797626000,"indexed_at_ns":1787240513705426800,"word_count":609,"hashes":{"specs/003-article-content-extractor/checklists/extraction.md":"b8351909b93111f8f1e50f0f100446d3f579d0c11823eba4936c72a617aba5f8"}},"specs/003-article-content-extractor/checklists/requirements.md":{"size":1209,"mtime_ns":1787237950814070500,"indexed_at_ns":1787240513706099200,"word_count":164,"hashes":{"specs/003-article-content-extractor/checklists/requirements.md":"3c770288636c4523897b41c6dad5f2771af2007654d6b5f6b87d74bc9c33d11d"}},"specs/003-article-content-extractor/contracts/cli-contract.md":{"size":2493,"mtime_ns":1787239569056013800,"indexed_at_ns":1787240513706906100,"word_count":390,"hashes":{"specs/003-article-content-extractor/contracts/cli-contract.md":"44c5ec336c210bdd9671a5e852ee750e91f426b87c954b2c52499513cb85168d"}},"specs/003-article-content-extractor/contracts/json-schema.md":{"size":3065,"mtime_ns":1787239578931403200,"indexed_at_ns":1787240513707577900,"word_count":298,"hashes":{"specs/003-article-content-extractor/contracts/json-schema.md":"0cefe7faadd07932717b8c3493914e5367ec6ac50673671aee1f4edc7bde7e37"}},"specs/003-article-content-extractor/data-model.md":{"size":4410,"mtime_ns":1787239558236282500,"indexed_at_ns":1787240513708324600,"word_count":733,"hashes":{"specs/003-article-content-extractor/data-model.md":"651180962cf2a9253cb0a22429947eb3bf552c26be7defce98ef7583cbcd8fbf"}},"specs/003-article-content-extractor/plan.md":{"size":4642,"mtime_ns":1787264323707266000,"indexed_at_ns":1787264516630842500,"word_count":510,"hashes":{"specs/003-article-content-extractor/plan.md":"3ae38a2a907f1aeb6987c647a6290533acde67ef91f590445bdec0e1da5f52be"}},"specs/003-article-content-extractor/quickstart.md":{"size":2210,"mtime_ns":1787239589989665700,"indexed_at_ns":1787240513709638200,"word_count":282,"hashes":{"specs/003-article-content-extractor/quickstart.md":"332c407a9b1c3eafcb874d24f5396f005cde65d4d8e9e643fda95f47f093c544"}},"specs/003-article-content-extractor/research.md":{"size":4220,"mtime_ns":1787239545833014600,"indexed_at_ns":1787240513710259700,"word_count":588,"hashes":{"specs/003-article-content-extractor/research.md":"485f0e63023aa6dc8c4c64b22dd7394c032b7f468fa41632967789c4e269587b"}},"specs/003-article-content-extractor/spec.md":{"size":10428,"mtime_ns":1787264319288323400,"indexed_at_ns":1787264516635570600,"word_count":1515,"hashes":{"specs/003-article-content-extractor/spec.md":"1ad671e31d86c76aedaa27d5d4da839cdf2d602bd17e618310c80bd3747fab78"}},"specs/003-article-content-extractor/tasks.md":{"size":8201,"mtime_ns":1787240464652064400,"indexed_at_ns":1787240513711676500,"word_count":1070,"hashes":{"specs/003-article-content-extractor/tasks.md":"3122914461e8d6017e63900c66fa8935135b5efcc9fca8d64e762ee109602901"}},"tests/test_extract_article_contents.py":{"size":13204,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470977000,"word_count":1039,"hashes":{"tests/test_extract_article_contents.py":"4333ac8911d1cd27964b0bacfa394ee8fe9e068bb2f25f3e0ff5e299564a7b4d"}},"docs/prd_deterministic_content_selection.md":{"size":15516,"mtime_ns":1787264674203828600,"indexed_at_ns":1787272605069414800,"word_count":2047,"hashes":{"docs/prd_deterministic_content_selection.md":"a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b"}},"scripts/select_article_extractor.py":{"size":21658,"mtime_ns":1787274502480126900,"indexed_at_ns":1787310811622526500,"word_count":2097,"hashes":{"scripts/select_article_extractor.py":"027743d36fd728fded28a085abf202e4eab0102bc5517cf4975a094d5df04c3f"}},"specs/004-deterministic-content-selection/checklists/deterministic-selection.md":{"size":4236,"mtime_ns":1787272346869214200,"indexed_at_ns":1787272605178155100,"word_count":566,"hashes":{"specs/004-deterministic-content-selection/checklists/deterministic-selection.md":"937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241"}},"specs/004-deterministic-content-selection/checklists/requirements.md":{"size":1303,"mtime_ns":1787264728720272700,"indexed_at_ns":1787272605179339000,"word_count":175,"hashes":{"specs/004-deterministic-content-selection/checklists/requirements.md":"8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56"}},"specs/004-deterministic-content-selection/contracts/cli-contract.md":{"size":2071,"mtime_ns":1787274329217544500,"indexed_at_ns":1787274399618300500,"word_count":293,"hashes":{"specs/004-deterministic-content-selection/contracts/cli-contract.md":"6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4"}},"specs/004-deterministic-content-selection/contracts/json-schema.md":{"size":1982,"mtime_ns":1787271837732839400,"indexed_at_ns":1787272605181473200,"word_count":195,"hashes":{"specs/004-deterministic-content-selection/contracts/json-schema.md":"db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6"}},"specs/004-deterministic-content-selection/data-model.md":{"size":5498,"mtime_ns":1787271825597039400,"indexed_at_ns":1787272605182487300,"word_count":681,"hashes":{"specs/004-deterministic-content-selection/data-model.md":"5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a"}},"specs/004-deterministic-content-selection/plan.md":{"size":5319,"mtime_ns":1787271850174420500,"indexed_at_ns":1787272605183666400,"word_count":643,"hashes":{"specs/004-deterministic-content-selection/plan.md":"2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f"}},"specs/004-deterministic-content-selection/quickstart.md":{"size":2239,"mtime_ns":1787274502478128000,"indexed_at_ns":1787310811759309400,"word_count":245,"hashes":{"specs/004-deterministic-content-selection/quickstart.md":"7136c34e9fa9c525ff01d65f8c35c2368cace0468b2651e85901195bfb8730a5"}},"specs/004-deterministic-content-selection/research.md":{"size":6915,"mtime_ns":1787274316854443300,"indexed_at_ns":1787274399622900200,"word_count":906,"hashes":{"specs/004-deterministic-content-selection/research.md":"11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427"}},"specs/004-deterministic-content-selection/spec.md":{"size":11807,"mtime_ns":1787274311156486400,"indexed_at_ns":1787274399623530600,"word_count":1619,"hashes":{"specs/004-deterministic-content-selection/spec.md":"7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303"}},"specs/004-deterministic-content-selection/tasks.md":{"size":8181,"mtime_ns":1787272595818614500,"indexed_at_ns":1787272605189230700,"word_count":1024,"hashes":{"specs/004-deterministic-content-selection/tasks.md":"412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887"}},"tests/test_select_article_extractor.py":{"size":24179,"mtime_ns":1787274502480126900,"indexed_at_ns":1787310811669359800,"word_count":2243,"hashes":{"tests/test_select_article_extractor.py":"22eb249629c891e4cd4b2bc09ce17c1e334bc908de3db53539ced305d3bfd287"}},"docs/prd_convert_json_markdown.md":{"size":22478,"mtime_ns":1787315400452784100,"indexed_at_ns":1787317709833244200,"word_count":3252,"hashes":{"docs/prd_convert_json_markdown.md":"d4203d9d5a6b9107bcc8ced682b509b30e7c152293298bcae22c1f96570415fb"}},"scripts/convert_article_to_markdown.py":{"size":21972,"mtime_ns":1787320071280986400,"indexed_at_ns":1787320231279685000,"word_count":2030,"hashes":{"scripts/convert_article_to_markdown.py":"917588aaee4d18fb0dfb2d292b62c1b05ecdfee3f3cd8e13a2e16a9dc281ff73"}},"specs/005-convert-json-markdown/checklists/markdown-conversion.md":{"size":10081,"mtime_ns":1787315812919805400,"indexed_at_ns":1787317709896809600,"word_count":1322,"hashes":{"specs/005-convert-json-markdown/checklists/markdown-conversion.md":"b5d0d4f6da5666dd115bd84f2a963c45da3080bb6d5725066aafab49d765746b"}},"specs/005-convert-json-markdown/checklists/requirements.md":{"size":1339,"mtime_ns":1787315513450848200,"indexed_at_ns":1787317709897553300,"word_count":181,"hashes":{"specs/005-convert-json-markdown/checklists/requirements.md":"702ba88fb2e7c9740d4c83a0c1fd434d5c348b7691f12688a1c00c0ee4956afd"}},"specs/005-convert-json-markdown/contracts/cli-contract.md":{"size":1641,"mtime_ns":1787315656382816000,"indexed_at_ns":1787317709898261700,"word_count":231,"hashes":{"specs/005-convert-json-markdown/contracts/cli-contract.md":"f2c146fd734cceaa4f2268d03c8633153f57d2fd468073a6a4701fbc14b25ef7"}},"specs/005-convert-json-markdown/contracts/markdown-schema.md":{"size":1616,"mtime_ns":1787315662306015400,"indexed_at_ns":1787317709898922500,"word_count":218,"hashes":{"specs/005-convert-json-markdown/contracts/markdown-schema.md":"b28308c2c54a4f569f5e533beb0a2a1ff44614fb28853c2f1aa915e58558c4ab"}},"specs/005-convert-json-markdown/data-model.md":{"size":5828,"mtime_ns":1787315648195198100,"indexed_at_ns":1787317709899563900,"word_count":687,"hashes":{"specs/005-convert-json-markdown/data-model.md":"2eb414a927cb0f39ba466d0870792afd73b719c8baa2fb5fe47020a024f93520"}},"specs/005-convert-json-markdown/plan.md":{"size":6196,"mtime_ns":1787315676826685000,"indexed_at_ns":1787317709900209400,"word_count":723,"hashes":{"specs/005-convert-json-markdown/plan.md":"c4db190f72e59cd2403bbbd7f99b4a4a5713285af478b2c6a7973f6e4a1007a6"}},"specs/005-convert-json-markdown/quickstart.md":{"size":1179,"mtime_ns":1787315668269243000,"indexed_at_ns":1787317709901438900,"word_count":126,"hashes":{"specs/005-convert-json-markdown/quickstart.md":"1481575738d29705da2fb1db54f53a744cdc90a79f00331dde7c351619b4036e"}},"specs/005-convert-json-markdown/research.md":{"size":5982,"mtime_ns":1787315639720415300,"indexed_at_ns":1787317709902236300,"word_count":765,"hashes":{"specs/005-convert-json-markdown/research.md":"66f816e6bda19ec162a55f35d16d5cc230e031e9002d434d69cdf79ca6fcea77"}},"specs/005-convert-json-markdown/spec.md":{"size":15416,"mtime_ns":1787315504210700900,"indexed_at_ns":1787317709902900100,"word_count":2032,"hashes":{"specs/005-convert-json-markdown/spec.md":"6e7faebc853323fb40729b8ea0b0719017c3387e69b4433fc9e4a2448d3efb9c"}},"specs/005-convert-json-markdown/tasks.md":{"size":8664,"mtime_ns":1787317701507180900,"indexed_at_ns":1787317709903569500,"word_count":1107,"hashes":{"specs/005-convert-json-markdown/tasks.md":"9ec3cc4573e6b7e18b68101acfcdd3a838a4f0453ed5a669a1d7f778b98e16d7"}},"tests/fixtures/markdown_conversion/batch_articles_invalid.json":{"size":162,"mtime_ns":1787317425649588100,"indexed_at_ns":1787317709759979900,"word_count":17,"hashes":{"tests/fixtures/markdown_conversion/batch_articles_invalid.json":"37b5ff42ccf176effa7abd142658afa91ea93d9080f51d6300b5e6be8248e22c"}},"tests/fixtures/markdown_conversion/corrupt_json_invalid.json":{"size":84,"mtime_ns":1787317430995160700,"indexed_at_ns":1787317709760596100,"word_count":8,"hashes":{"tests/fixtures/markdown_conversion/corrupt_json_invalid.json":"26317cdd3614f55612321aa9385bbbbd07bda718beb2f86692d1d30266a942c7"}},"tests/fixtures/markdown_conversion/invalid_url_invalid.json":{"size":181,"mtime_ns":1787317453854590700,"indexed_at_ns":1787317709761157600,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/invalid_url_invalid.json":"6641507e5b57acf774f7088c936cd109fd7600ff6f4d43176d27c236ef96d19c"}},"tests/fixtures/markdown_conversion/missing_body_invalid.json":{"size":328,"mtime_ns":1787317440927113900,"indexed_at_ns":1787317709761735000,"word_count":30,"hashes":{"tests/fixtures/markdown_conversion/missing_body_invalid.json":"ff9c5e6910d5b4d09ab14273098f3a5367c1e29ac5fb8782438ff667bee4e524"}},"tests/fixtures/markdown_conversion/missing_extractor_invalid.json":{"size":166,"mtime_ns":1787317435197323100,"indexed_at_ns":1787317709762359200,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/missing_extractor_invalid.json":"cc924af9d02584efa2942cfa2dfa789d63e1d45cac4f85105805657e66ef5e1d"}},"tests/fixtures/markdown_conversion/missing_title_invalid.json":{"size":168,"mtime_ns":1787317446757957200,"indexed_at_ns":1787317709762935000,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/missing_title_invalid.json":"c94b7bf69eab2bb707c2de6dedaeab750c42115b3bc27d4edb9fad543b7d242d"}},"tests/fixtures/markdown_conversion/valid_newspaper4k.json":{"size":1154,"mtime_ns":1787317391619680400,"indexed_at_ns":1787317709763503300,"word_count":113,"hashes":{"tests/fixtures/markdown_conversion/valid_newspaper4k.json":"09bf8517ec513e3c49a7dbb822baca7ed7020bc9cf6fa116f6e01d72f9bf2f49"}},"tests/fixtures/markdown_conversion/valid_newspaper4k.md":{"size":646,"mtime_ns":1787317400974503500,"indexed_at_ns":1787317709931058900,"word_count":67,"hashes":{"tests/fixtures/markdown_conversion/valid_newspaper4k.md":"32a5e4fac2616b5d9ff8859c4e14a76f243c48ce6eedffde51cac9e97b5cd57c"}},"tests/fixtures/markdown_conversion/valid_readability.json":{"size":794,"mtime_ns":1787317412440020900,"indexed_at_ns":1787317709764089400,"word_count":83,"hashes":{"tests/fixtures/markdown_conversion/valid_readability.json":"91e50abb1bf7195d2b6b84ea7dcdebfdb454dec3dead69e8ecc58971e0aabfe1"}},"tests/fixtures/markdown_conversion/valid_readability.md":{"size":455,"mtime_ns":1787317419401926200,"indexed_at_ns":1787317709931788100,"word_count":45,"hashes":{"tests/fixtures/markdown_conversion/valid_readability.md":"05c37379ff5c24c9c875a806c74f362759127986c834a2f069ed4fa64ab1cd30"}},"tests/fixtures/markdown_conversion/valid_trafilatura.json":{"size":1541,"mtime_ns":1787317377645516500,"indexed_at_ns":1787317709764666700,"word_count":140,"hashes":{"tests/fixtures/markdown_conversion/valid_trafilatura.json":"7a4214ab8db9f66674677b410816534645906a327091a2b8c864763f269123b3"}},"tests/fixtures/markdown_conversion/valid_trafilatura.md":{"size":895,"mtime_ns":1787317383505866600,"indexed_at_ns":1787317709932479900,"word_count":86,"hashes":{"tests/fixtures/markdown_conversion/valid_trafilatura.md":"024ca5b2b269152ed2e7afbc719589d6f005d3dd4a50d1a6303c426415313326"}},"tests/test_convert_article_to_markdown.py":{"size":29017,"mtime_ns":1787320111811304100,"indexed_at_ns":1787320231338258700,"word_count":2412,"hashes":{"tests/test_convert_article_to_markdown.py":"fd686fa7c4de15a64578950f4afe48baabea88e7222595c638a52a34a18561a2"}},"examples/ecp_club_atletico_river_plate.json":{"size":3502,"mtime_ns":1787319632493121800,"indexed_at_ns":1787319814380533100,"word_count":318,"hashes":{"examples/ecp_club_atletico_river_plate.json":"f390cba1c421c564ea7577faeab6bbc6ec3ec7bbb120b71ce607430594ae7bc9"}},"tests/test_llm_fallback.py":{"size":11753,"mtime_ns":1787320797249564800,"indexed_at_ns":1787320814867487800,"word_count":959,"hashes":{"tests/test_llm_fallback.py":"9009157bba0e34fe9c5ece500464da1a07c5087c261f9a4d84946b14af267305"}}} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html index 8cf615b..50bac70 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -66,9 +66,9 @@
1554 nodes · 1970 edges · 168 communities