diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a5dae42 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +OPENAI_API_KEY= +OPENAI_BASE_URL="https://omniroute.app.andreferraro.com/v1" +OPENAI_MODEL="cgpt-web/gpt-5.5" diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index 7c708f5..78b97a3 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": "ECPSnapshot", diff --git a/graphify-out/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index bdef8c4..53a2d8d 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": "943c894b7e96a921", "46": "b30963ae66d7e3c9", "47": "85bec2d6e2b742cf", "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": "8cb2e59dcf557313", "101": "75f2ab420202693e", "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": "3d7cd9541766116e", "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": "73cf7c102ed797ed", "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": "f3f95b2d8f95c75f", "166": "85c97dab928b9b1b", "167": "7ab5695391e32126", "168": "eafca6a072d4f435", "169": "a68dbc0869da4c5e"} \ 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": "943c894b7e96a921", "46": "b30963ae66d7e3c9", "47": "85bec2d6e2b742cf", "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": "8cb2e59dcf557313", "101": "75f2ab420202693e", "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": "3d7cd9541766116e", "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": "73cf7c102ed797ed", "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": "f3f95b2d8f95c75f", "166": "85c97dab928b9b1b", "167": "7ab5695391e32126", "168": "8c55178d04b00f23", "169": "a68dbc0869da4c5e"} \ 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 d875389..7c708f5 100644 --- a/graphify-out/2026-08-21/.graphify_labels.json +++ b/graphify-out/2026-08-21/.graphify_labels.json @@ -46,7 +46,7 @@ "44": "2. Standard Streams & Exit Codes", "45": "ClassificationResult", "46": "test_adversarial.py", - "47": "classifier.py", + "47": "LLMFallbackAdapter", "48": "test_convert_article_to_markdown.py", "49": "content_northvolt_de.md", "50": "content_presal_pt.md", @@ -100,7 +100,7 @@ "98": "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor", "99": "parametrize", "100": "main", - "101": "ECPSnapshot", + "101": "classifier.py", "102": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)", "103": "4. Requisitos Funcionais (FR)", "104": "Tasks: Article Content Multi-Engine Extractor", @@ -120,7 +120,7 @@ "118": "Tasks: Deterministic Article Content Selection", "119": "select_article_extractor", "120": "process_batch", - "121": "detect_language", + "121": "test_models.py", "122": "test_select_article_extractor.py", "123": "Feature Specification: Deterministic Content Selection", "124": "2. Entity Descriptions & Fields", @@ -148,10 +148,10 @@ "146": "Specification Quality Checklist: Convert Article JSON to Markdown", "147": "CLI Contract: `convert_article_to_markdown.py`", "148": "9. Interface CLI", - "149": "sample_rss_xml", + "149": "get_hl_gl_ceid", "150": "13. Estratégia de testes", "151": "6. Contrato de entrada", - "152": "LLMFallbackAdapter", + "152": "ECPSnapshot", "153": "convert_html_to_markdown", "154": "JSON Schema Contract: Deterministic Article Content Selection", "155": "5. Escopo", @@ -166,5 +166,7 @@ "164": "test_normalize_scalar_non_string_types", "165": "InherenceClassifier", "166": "remove_duplicate_initial_h1", - "167": "test_normalize_scalar_whitespace_collapsing" + "167": "test_normalize_scalar_whitespace_collapsing", + "168": ".disambiguate", + "169": "test_funnel_cli_subprocess_end_to_end" } diff --git a/graphify-out/2026-08-21/GRAPH_REPORT.md b/graphify-out/2026-08-21/GRAPH_REPORT.md index b7c8458..4e8b1de 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 -- 202 files · ~112,197 words +- 203 files · ~114,894 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1579 nodes · 2030 edges · 168 communities (120 shown, 48 thin omitted) -- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 73 edges (avg confidence: 0.95) +- 1651 nodes · 2220 edges · 170 communities (122 shown, 48 thin omitted) +- Extraction: 94% EXTRACTED · 6% INFERRED · 0% AMBIGUOUS · INFERRED: 127 edges (avg confidence: 0.95) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `bae14405` +- Built from commit: `a874b98d` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -58,7 +58,7 @@ - 2. Standard Streams & Exit Codes - ClassificationResult - test_adversarial.py -- classifier.py +- LLMFallbackAdapter - test_convert_article_to_markdown.py - content_northvolt_de.md - content_presal_pt.md @@ -111,7 +111,7 @@ - Extraction Pipeline Checklist: Article Content Multi-Engine Extractor - parametrize - main -- ECPSnapshot +- classifier.py - Feature Specification: Multilingual NLP Entity Inherence Classifier (POC) - 4. Requisitos Funcionais (FR) - Tasks: Article Content Multi-Engine Extractor @@ -130,7 +130,7 @@ - Tasks: Deterministic Article Content Selection - select_article_extractor - process_batch -- detect_language +- test_models.py - test_select_article_extractor.py - Feature Specification: Deterministic Content Selection - 2. Entity Descriptions & Fields @@ -157,10 +157,10 @@ - Specification Quality Checklist: Convert Article JSON to Markdown - CLI Contract: `convert_article_to_markdown.py` - 9. Interface CLI -- sample_rss_xml +- get_hl_gl_ceid - 13. Estratégia de testes - 6. Contrato de entrada -- LLMFallbackAdapter +- ECPSnapshot - convert_html_to_markdown - JSON Schema Contract: Deterministic Article Content Selection - 5. Escopo @@ -176,35 +176,37 @@ - InherenceClassifier - remove_duplicate_initial_h1 - test_normalize_scalar_whitespace_collapsing +- .disambiguate +- test_funnel_cli_subprocess_end_to_end ## God Nodes (most connected - your core abstractions) -1. `ECPSnapshot` - 49 edges -2. `InherenceClassifier` - 36 edges -3. `DecisionCategory` - 35 edges -4. `LLMFallbackAdapter` - 32 edges -5. `ClassificationResult` - 26 edges +1. `ECPSnapshot` - 78 edges +2. `InherenceClassifier` - 62 edges +3. `DecisionCategory` - 62 edges +4. `LLMFallbackAdapter` - 48 edges +5. `ClassificationResult` - 29 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 +8. `main()` - 20 edges +9. `PRD — Conversão de artigo JSON para Markdown` - 16 edges +10. `process_batch()` - 15 edges ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] classify.py → src/models.py -- `test_extract_google_news_orchestration_mocked()` --uses--> `ExtractionResult` [INFERRED] +- `main()` --uses--> `ErrorCode` [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_adversarial_apple_fruit_recipe()` --uses--> `DecisionCategory` [INFERRED] - tests/test_adversarial.py → src/models.py ## Import Cycles - None detected. -## Communities (168 total, 48 thin omitted) +## Communities (170 total, 48 thin omitted) ### Community 0 - "Task Planning" Cohesion: 0.07 @@ -348,15 +350,15 @@ Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2 ### Community 45 - "ClassificationResult" Cohesion: 0.10 -Nodes (20): 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 (+12 more) +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) ### Community 46 - "test_adversarial.py" -Cohesion: 0.11 -Nodes (19): 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., Run CLI via subprocess with missing target_name and verify error payload., Run CLI via subprocess with corrupted JSON and verify error payload., Content about apple fruit/culinary recipe against Apple Inc. tech entity., High-weight related entity mentioned in passing without required domain anchors. (+11 more) +Cohesion: 0.10 +Nodes (21): 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., High-weight related entity mentioned in passing without required domain anchors. (+13 more) -### Community 47 - "classifier.py" -Cohesion: 0.16 -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 47 - "LLMFallbackAdapter" +Cohesion: 0.06 +Nodes (43): LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Any, parametrize, Suíte de Testes Exaustiva para o Classificador de Inerência (classify.py e…, Cenário 4.1: Caso ambíguo elevado para DIRECT_INHERENT pelo LLM., Cenário 4.2: Caso ambíguo elevado para CONTEXTUAL_INHERENT pelo LLM., Cenário 4.3: LLM confirma categoricamente que a menção é periférica /… (+35 more) ### Community 48 - "test_convert_article_to_markdown.py" Cohesion: 0.08 @@ -371,16 +373,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.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) +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) ### Community 83 - "ExtractionResult" Cohesion: 0.29 -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() +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() ### Community 84 - "test_extract_google_news.py" -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) +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) ### Community 85 - "Implementation Tasks: Google News Headlines Extractor" Cohesion: 0.14 @@ -400,7 +402,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 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() +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() ### Community 91 - "1. Technical Decisions & Tradeoffs" Cohesion: 0.25 @@ -435,12 +437,12 @@ Cohesion: 0.22 Nodes (9): parametrize, Garante aceitação de URLs absolutas com esquema HTTP e HTTPS válidos., Garante rejeição de esquemas não permitidos, URLs relativas e strings vazias., Garante que a ausência de corpo no extrator selecionado NUNCA faça fallback…, Garante que todos os placeholders documentados no PRD sejam descartados…, test_normalize_scalar_placeholders_discarded(), test_resolve_article_body_strict_isolation_all_extractors(), test_validate_url_invalid_schemes() (+1 more) ### Community 100 - "main" -Cohesion: 0.17 -Nodes (15): emit_error(), main(), parse_args(), Namespace, ClassificationError, ErrorCode, Enum, str (+7 more) +Cohesion: 0.14 +Nodes (20): main(), Path, Cenário 6.1: Caminho de ECP inexistente -> Exit Code 1, error_code:…, Cenário 6.2: Arquivo ECP com sintaxe JSON corrompida., Cenário 6.3: Valida erro para falta de cada um dos campos obrigatórios do ECP., Cenário 6.4: Caminho de arquivo Markdown inexistente., Cenário 6.5: Arquivo Markdown vazio ou contendo apenas espaços em branco., Cenário 6.6: A flag -o / --output cria diretórios aninhados automaticamente. (+12 more) -### Community 101 - "ECPSnapshot" -Cohesion: 0.18 -Nodes (12): ECPSnapshot, Any, 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. (+4 more) +### Community 101 - "classifier.py" +Cohesion: 0.17 +Nodes (12): emit_error(), parse_args(), Namespace, Core deterministic classification engine (Tier 1 core)., ErrorCode, MatchedGraphEntity, Enum, str (+4 more) ### Community 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -514,13 +516,13 @@ Nodes (35): CandidateStatus, extract_candidate_data(), ExtractorName, Any, Enum, Cohesion: 0.11 Nodes (24): atomic_save_json(), process_batch(), Path, Salva dados em JSON de forma atômica utilizando arquivo temporário e rename., Lê o JSON de entrada, valida a estrutura, processa todos os artigos e grava o…, Path, CT-012: A entrada já contém selected_extractor -> Recalcular e substituir…, CT-013: articles está vazio -> Gerar saída válida com articles vazio. (+16 more) -### Community 121 - "detect_language" -Cohesion: 0.19 -Nodes (16): detect_language(), extract_words(), normalize_text(), Lightweight multilingual language detection and text normalization., Normalize text by converting to lowercase and stripping combining diacritical…, Tokenize text into lowercase alphanumeric words., Detect the ISO-639-1 language code of text among supported languages (pt, en,…, Unit tests for language detection and text normalization. (+8 more) +### Community 121 - "test_models.py" +Cohesion: 0.07 +Nodes (37): count_phrase_occurrences(), match_phrase_in_text(), 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., detect_language(), extract_words(), normalize_text() (+29 more) ### Community 122 - "test_select_article_extractor.py" Cohesion: 0.18 -Nodes (16): generate_shingles(), normalize_text(), Executa a normalização determinística para comparação: 1. Decodificar entidades…, Gera conjunto de shingles ordenados de tamanho window_size (padrão 5). - Se…, Suíte de Testes Automatizados para o Seletor Determinístico de Extrator. Cobre…, Garante que marcação de imagem Markdown  seja descartada e link…, E2E: Executa CLI com arquivo inexistente e valida código 1 e mensagem no stderr., test_e2e_cli_subprocess_missing_file() (+8 more) +Nodes (16): generate_shingles(), normalize_text(), Executa a normalização determinística para comparação: 1. Decodificar entidades…, Gera conjunto de shingles ordenados de tamanho window_size (padrão 5). - Se…, Suíte de Testes Automatizados para o Seletor Determinístico de Extrator. Cobre…, Garante que marcação de imagem Markdown  seja descartada e link…, E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha…, test_e2e_cli_subprocess_real_execution() (+8 more) ### Community 123 - "Feature Specification: Deterministic Content Selection" Cohesion: 0.17 @@ -622,9 +624,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 - "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 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 150 - "13. Estratégia de testes" Cohesion: 0.50 @@ -634,9 +636,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 - "LLMFallbackAdapter" -Cohesion: 0.08 -Nodes (26): LLMFallbackAdapter, Executes LLM fallback for ambiguous boundary cases. Returns a refined…, Parses and validates structured JSON response from LLM., Optional adapter for LLM fallback boundary disambiguation., Returns True if an API key or custom provider function is configured., Constructs an expert-engineered prompt for multilingual entity inherence…, Any, Suíte de Testes para o Adaptador de Fallback para LLM (Tier 3) do Classificador… (+18 more) +### Community 152 - "ECPSnapshot" +Cohesion: 0.13 +Nodes (20): ECPSnapshot, parametrize, test_benchmark_case(), Suíte de Testes para o Adaptador de Fallback para LLM (Tier 3) do Classificador…, Valida extração de JSON quando a resposta do LLM vem formatada em bloco…, Valida que respostas corrompidas ou JSONs sem campos obrigatórios retornem None…, Garante que o classificador dispare o Tier 3 LLM para casos ambíguos…, Garante que casos claros (alta confiança e alta densidade de âncoras) NÃO… (+12 more) ### Community 153 - "convert_html_to_markdown" Cohesion: 0.33 @@ -651,13 +653,21 @@ Cohesion: 0.67 Nodes (3): 5.1 Incluído, 5.2 Fora do escopo, 5. Escopo ### Community 165 - "InherenceClassifier" -Cohesion: 0.11 -Nodes (30): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Content about city/state governance of São Paulo against ECP for São Paulo FC., test_adversarial_sao_paulo_city_vs_fc(), Unit tests for deterministic classification decision logic., test_contextual_inherent(), test_direct_inherent() (+22 more) +Cohesion: 0.07 +Nodes (45): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Content about apple fruit/culinary recipe against Apple Inc. tech entity., test_adversarial_apple_fruit_recipe(), Unit tests for deterministic classification decision logic., test_contextual_inherent(), test_direct_inherent() (+37 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() +### Community 168 - ".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 169 - "test_funnel_cli_subprocess_end_to_end" +Cohesion: 0.67 +Nodes (3): Path, Valida o contrato CLI completo classify.py com saída em arquivo JSON e flags…, test_funnel_cli_subprocess_end_to_end() + ## 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. @@ -666,17 +676,17 @@ Nodes (4): Remove o primeiro título H1 do corpo somente quando ele for igual ao ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ +- **Why does `ECPSnapshot` connect `ECPSnapshot` to `main`, `classifier.py`, `InherenceClassifier`, `.disambiguate`, `ClassificationResult`, `test_adversarial.py`, `LLMFallbackAdapter`, `test_models.py`?** + _High betweenness centrality (0.009) - this node is a cross-community bridge._ - **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.006) - 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._ -- **Why does `ECPSnapshot` connect `ECPSnapshot` to `main`, `InherenceClassifier`, `ClassificationResult`, `test_adversarial.py`, `classifier.py`, `LLMFallbackAdapter`?** +- **Why does `InherenceClassifier` connect `InherenceClassifier` to `main`, `classifier.py`, `ClassificationResult`, `test_adversarial.py`, `LLMFallbackAdapter`, `ECPSnapshot`, `test_models.py`?** _High betweenness centrality (0.004) - this node is a cross-community bridge._ -- **Are the 16 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?** - _`ECPSnapshot` has 16 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 7 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?** - _`InherenceClassifier` has 7 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 24 inferred relationships involving `DecisionCategory` (e.g. with `LLMFallbackAdapter` and `InherenceClassifier`) actually correct?** - _`DecisionCategory` has 24 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 42 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?** + _`ECPSnapshot` has 42 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 8 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?** + _`InherenceClassifier` has 8 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 50 inferred relationships involving `DecisionCategory` (e.g. with `LLMFallbackAdapter` and `InherenceClassifier`) actually correct?** + _`DecisionCategory` has 50 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 1035ca8..800bbe1 100644 --- a/graphify-out/2026-08-21/graph.json +++ b/graphify-out/2026-08-21/graph.json @@ -3,44 +3,31 @@ "multigraph": false, "graph": {}, "nodes": [ - { - "id": "src_models_classificationerror", - "label": "ClassificationError", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 100, - "community_name": "main", - "file_type": "code", - "norm_label": "classificationerror", - "source_file": "src/models.py", - "source_location": "L155" - }, { "id": "src_models_errorcode", "label": "ErrorCode", "_callable": true, "_callable_class": true, "_origin": "ast", - "community": 100, - "community_name": "main", + "community": 101, + "community_name": "classifier.py", "file_type": "code", "norm_label": "errorcode", "source_file": "src/models.py", "source_location": "L18" }, { - "id": "src_models_ecpsnapshot", - "label": "ECPSnapshot", + "id": "src_models_matchedgraphentity", + "label": "MatchedGraphEntity", "_callable": true, "_callable_class": true, "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", - "norm_label": "ecpsnapshot", + "norm_label": "matchedgraphentity", "source_file": "src/models.py", - "source_location": "L58" + "source_location": "L114" }, { "id": "scripts_select_article_extractor_articleselectionresult", @@ -108,17 +95,30 @@ "source_location": "L33" }, { - "id": "src_adapters_llm_llmfallbackadapter", - "label": "LLMFallbackAdapter", + "id": "src_models_classificationerror", + "label": "ClassificationError", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "classificationerror", + "source_file": "src/models.py", + "source_location": "L155" + }, + { + "id": "src_models_ecpsnapshot", + "label": "ECPSnapshot", "_callable": true, "_callable_class": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", - "norm_label": "llmfallbackadapter", - "source_file": "src/adapters/llm.py", - "source_location": "L42" + "norm_label": "ecpsnapshot", + "source_file": "src/models.py", + "source_location": "L58" }, { "id": "src_classifier_inherenceclassifier", @@ -185,19 +185,6 @@ "source_file": "src/models.py", "source_location": "L122" }, - { - "id": "src_models_matchedgraphentity", - "label": "MatchedGraphEntity", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": "matchedgraphentity", - "source_file": "src/models.py", - "source_location": "L114" - }, { "id": "src_models_relatedentity", "label": "RelatedEntity", @@ -211,6 +198,19 @@ "source_file": "src/models.py", "source_location": "L27" }, + { + "id": "src_adapters_llm_llmfallbackadapter", + "label": "LLMFallbackAdapter", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "llmfallbackadapter", + "source_file": "src/adapters/llm.py", + "source_location": "L42" + }, { "id": "scripts_extract_article_contents_articlecrawler", "label": "ArticleCrawler", @@ -380,18 +380,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L32" }, - { - "id": "classify_emit_error", - "label": "emit_error()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "main", - "file_type": "code", - "norm_label": "emit_error()", - "source_file": "classify.py", - "source_location": "L72" - }, { "id": "classify_main", "label": "main()", @@ -405,52 +393,76 @@ "source_location": "L97" }, { - "id": "classify_parse_args", - "label": "parse_args()", + "id": "tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", + "label": "test_cli_error_content_file_does_not_exist()", "_callable": true, "_origin": "ast", "community": 100, "community_name": "main", "file_type": "code", - "norm_label": "parse_args()", - "source_file": "classify.py", - "source_location": "L27" + "norm_label": "test_cli_error_content_file_does_not_exist()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L624" }, { - "id": "src_models_classificationerror_to_dict", - "label": ".to_dict()", + "id": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", + "label": "test_cli_error_ecp_corrupted_json_syntax()", "_callable": true, "_origin": "ast", "community": 100, "community_name": "main", "file_type": "code", - "norm_label": ".to_dict()", - "source_file": "src/models.py", - "source_location": "L160" + "norm_label": "test_cli_error_ecp_corrupted_json_syntax()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L580" }, { - "id": "src_models_classificationerror_to_json_str", - "label": ".to_json_str()", + "id": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", + "label": "test_cli_error_ecp_file_does_not_exist()", "_callable": true, "_origin": "ast", "community": 100, "community_name": "main", "file_type": "code", - "norm_label": ".to_json_str()", - "source_file": "src/models.py", - "source_location": "L169" + "norm_label": "test_cli_error_ecp_file_does_not_exist()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L567" }, { - "id": "src_models_classificationresult_to_json_str", - "label": ".to_json_str()", + "id": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", + "label": "test_cli_error_ecp_missing_each_required_field()", "_callable": true, "_origin": "ast", "community": 100, "community_name": "main", "file_type": "code", - "norm_label": ".to_json_str()", - "source_file": "src/models.py", - "source_location": "L150" + "norm_label": "test_cli_error_ecp_missing_each_required_field()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L595" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", + "label": "test_cli_error_empty_and_whitespace_content()", + "_callable": true, + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "code", + "norm_label": "test_cli_error_empty_and_whitespace_content()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L648" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", + "label": "test_cli_output_file_creates_nested_directories()", + "_callable": true, + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "code", + "norm_label": "test_cli_output_file_creates_nested_directories()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L676" }, { "id": "tests_test_cli_test_cli_empty_content_file", @@ -513,64 +525,28 @@ "source_location": "L8" }, { - "id": "tests_test_models_test_classification_error_serialization", - "label": "test_classification_error_serialization()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "main", - "file_type": "code", - "norm_label": "test_classification_error_serialization()", - "source_file": "tests/test_models.py", - "source_location": "L88" - }, - { - "id": "src_models_classificationresult_to_dict", - "label": ".to_dict()", + "id": "classify_emit_error", + "label": "emit_error()", "_callable": true, "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", - "norm_label": ".to_dict()", - "source_file": "src/models.py", - "source_location": "L134" + "norm_label": "emit_error()", + "source_file": "classify.py", + "source_location": "L72" }, { - "id": "src_models_ecpsnapshot_from_dict", - "label": ".from_dict()", + "id": "classify_parse_args", + "label": "parse_args()", "_callable": true, "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", - "norm_label": ".from_dict()", - "source_file": "src/models.py", - "source_location": "L69" - }, - { - "id": "src_models_ecpsnapshot_from_json_str", - "label": ".from_json_str()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": ".from_json_str()", - "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" + "norm_label": "parse_args()", + "source_file": "classify.py", + "source_location": "L27" }, { "id": "tests_test_benchmark_24_classifier", @@ -578,72 +554,12 @@ "_callable": true, "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", "norm_label": "classifier()", "source_file": "tests/test_benchmark_24.py", "source_location": "L23" }, - { - "id": "tests_test_benchmark_24_test_benchmark_case", - "label": "test_benchmark_case()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "test_benchmark_case()", - "source_file": "tests/test_benchmark_24.py", - "source_location": "L28" - }, - { - "id": "tests_test_models_test_classification_result_serialization", - "label": "test_classification_result_serialization()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "test_classification_result_serialization()", - "source_file": "tests/test_models.py", - "source_location": "L70" - }, - { - "id": "tests_test_models_test_ecp_snapshot_defaults", - "label": "test_ecp_snapshot_defaults()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "test_ecp_snapshot_defaults()", - "source_file": "tests/test_models.py", - "source_location": "L45" - }, - { - "id": "tests_test_models_test_ecp_snapshot_missing_required", - "label": "test_ecp_snapshot_missing_required()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "test_ecp_snapshot_missing_required()", - "source_file": "tests/test_models.py", - "source_location": "L59" - }, - { - "id": "tests_test_models_test_ecp_snapshot_valid", - "label": "test_ecp_snapshot_valid()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "test_ecp_snapshot_valid()", - "source_file": "tests/test_models.py", - "source_location": "L15" - }, { "id": "scripts_select_article_extractor_break_priority_tie", "label": "break_priority_tie()", @@ -981,16 +897,16 @@ "source_location": "L595" }, { - "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", - "label": "test_e2e_cli_subprocess_real_execution()", + "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", + "label": "test_e2e_cli_subprocess_missing_file()", "_callable": true, "_origin": "ast", "community": 120, "community_name": "process_batch", "file_type": "code", - "norm_label": "test_e2e_cli_subprocess_real_execution()", + "norm_label": "test_e2e_cli_subprocess_missing_file()", "source_file": "tests/test_select_article_extractor.py", - "source_location": "L530" + "source_location": "L608" }, { "id": "tests_test_select_article_extractor_test_integration_large_batch_determinism", @@ -1028,13 +944,49 @@ "source_file": "tests/test_select_article_extractor.py", "source_location": "L370" }, + { + "id": "src_classifier_count_phrase_occurrences", + "label": "count_phrase_occurrences()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "count_phrase_occurrences()", + "source_file": "src/classifier.py", + "source_location": "L30" + }, + { + "id": "src_classifier_inherenceclassifier_classify", + "label": ".classify()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".classify()", + "source_file": "src/classifier.py", + "source_location": "L65" + }, + { + "id": "src_classifier_match_phrase_in_text", + "label": "match_phrase_in_text()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "match_phrase_in_text()", + "source_file": "src/classifier.py", + "source_location": "L17" + }, { "id": "src_language_detect_language", "label": "detect_language()", "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "detect_language()", "source_file": "src/language.py", @@ -1046,7 +998,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "extract_words()", "source_file": "src/language.py", @@ -1058,19 +1010,127 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "normalize_text()", "source_file": "src/language.py", "source_location": "L462" }, + { + "id": "src_models_classificationerror_to_dict", + "label": ".to_dict()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".to_dict()", + "source_file": "src/models.py", + "source_location": "L160" + }, + { + "id": "src_models_classificationerror_to_json_str", + "label": ".to_json_str()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".to_json_str()", + "source_file": "src/models.py", + "source_location": "L169" + }, + { + "id": "src_models_classificationresult_to_dict", + "label": ".to_dict()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".to_dict()", + "source_file": "src/models.py", + "source_location": "L134" + }, + { + "id": "src_models_classificationresult_to_json_str", + "label": ".to_json_str()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".to_json_str()", + "source_file": "src/models.py", + "source_location": "L150" + }, + { + "id": "src_models_ecpsnapshot_from_dict", + "label": ".from_dict()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".from_dict()", + "source_file": "src/models.py", + "source_location": "L69" + }, + { + "id": "src_models_relatedentity_from_dict", + "label": ".from_dict()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": ".from_dict()", + "source_file": "src/models.py", + "source_location": "L37" + }, + { + "id": "src_parser_extract_evidence_snippets", + "label": "extract_evidence_snippets()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "extract_evidence_snippets()", + "source_file": "src/parser.py", + "source_location": "L50" + }, + { + "id": "src_parser_extract_sentences", + "label": "extract_sentences()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "extract_sentences()", + "source_file": "src/parser.py", + "source_location": "L42" + }, + { + "id": "src_parser_strip_markdown", + "label": "strip_markdown()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "strip_markdown()", + "source_file": "src/parser.py", + "source_location": "L8" + }, { "id": "tests_test_language_test_detect_english", "label": "test_detect_english()", "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_detect_english()", "source_file": "tests/test_language.py", @@ -1082,7 +1142,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_detect_french()", "source_file": "tests/test_language.py", @@ -1094,7 +1154,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_detect_german()", "source_file": "tests/test_language.py", @@ -1106,7 +1166,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_detect_italian()", "source_file": "tests/test_language.py", @@ -1118,7 +1178,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_detect_portuguese()", "source_file": "tests/test_language.py", @@ -1130,7 +1190,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_detect_spanish()", "source_file": "tests/test_language.py", @@ -1142,7 +1202,7 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_empty_language()", "source_file": "tests/test_language.py", @@ -1154,12 +1214,84 @@ "_callable": true, "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_normalize_text()", "source_file": "tests/test_language.py", "source_location": "L6" }, + { + "id": "tests_test_models_test_classification_error_serialization", + "label": "test_classification_error_serialization()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_classification_error_serialization()", + "source_file": "tests/test_models.py", + "source_location": "L88" + }, + { + "id": "tests_test_models_test_ecp_snapshot_defaults", + "label": "test_ecp_snapshot_defaults()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_ecp_snapshot_defaults()", + "source_file": "tests/test_models.py", + "source_location": "L45" + }, + { + "id": "tests_test_models_test_ecp_snapshot_missing_required", + "label": "test_ecp_snapshot_missing_required()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_ecp_snapshot_missing_required()", + "source_file": "tests/test_models.py", + "source_location": "L59" + }, + { + "id": "tests_test_models_test_ecp_snapshot_valid", + "label": "test_ecp_snapshot_valid()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_ecp_snapshot_valid()", + "source_file": "tests/test_models.py", + "source_location": "L15" + }, + { + "id": "tests_test_models_test_extract_evidence_snippets", + "label": "test_extract_evidence_snippets()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_extract_evidence_snippets()", + "source_file": "tests/test_models.py", + "source_location": "L110" + }, + { + "id": "tests_test_models_test_parser_strip_markdown", + "label": "test_parser_strip_markdown()", + "_callable": true, + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_parser_strip_markdown()", + "source_file": "tests/test_models.py", + "source_location": "L100" + }, { "id": "scripts_select_article_extractor_generate_shingles", "label": "generate_shingles()", @@ -1185,16 +1317,16 @@ "source_location": "L106" }, { - "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", - "label": "test_e2e_cli_subprocess_missing_file()", + "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", + "label": "test_e2e_cli_subprocess_real_execution()", "_callable": true, "_origin": "ast", "community": 122, "community_name": "test_select_article_extractor.py", "file_type": "code", - "norm_label": "test_e2e_cli_subprocess_missing_file()", + "norm_label": "test_e2e_cli_subprocess_real_execution()", "source_file": "tests/test_select_article_extractor.py", - "source_location": "L608" + "source_location": "L530" }, { "id": "tests_test_select_article_extractor_test_generate_shingles_empty", @@ -1557,100 +1689,76 @@ "source_location": "L755" }, { - "id": "tests_test_extract_google_news_sample_rss_xml", - "label": "sample_rss_xml()", + "id": "scripts_extract_google_news_get_hl_gl_ceid", + "label": "get_hl_gl_ceid()", "_callable": true, "_origin": "ast", "community": 149, - "community_name": "sample_rss_xml", + "community_name": "get_hl_gl_ceid", "file_type": "code", - "norm_label": "sample_rss_xml()", + "norm_label": "get_hl_gl_ceid()", + "source_file": "scripts/extract_google_news.py", + "source_location": "L107" + }, + { + "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_default_mappings", + "label": "test_get_hl_gl_ceid_default_mappings()", + "_callable": true, + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "code", + "norm_label": "test_get_hl_gl_ceid_default_mappings()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L32" + "source_location": "L37" }, { - "id": "src_adapters_llm_llmfallbackadapter_build_prompt", - "label": ".build_prompt()", + "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_dynamic_fallback", + "label": "test_get_hl_gl_ceid_dynamic_fallback()", "_callable": true, "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", + "community": 149, + "community_name": "get_hl_gl_ceid", "file_type": "code", - "norm_label": ".build_prompt()", - "source_file": "src/adapters/llm.py", - "source_location": "L63" + "norm_label": "test_get_hl_gl_ceid_dynamic_fallback()", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L78" }, { - "id": "src_adapters_llm_llmfallbackadapter_disambiguate", - "label": ".disambiguate()", + "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_with_custom_locale", + "label": "test_get_hl_gl_ceid_with_custom_locale()", "_callable": true, "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", + "community": 149, + "community_name": "get_hl_gl_ceid", "file_type": "code", - "norm_label": ".disambiguate()", - "source_file": "src/adapters/llm.py", - "source_location": "L149" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_evaluate_similarity", - "label": ".evaluate_similarity()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", - "file_type": "code", - "norm_label": ".evaluate_similarity()", - "source_file": "src/adapters/llm.py", + "norm_label": "test_get_hl_gl_ceid_with_custom_locale()", + "source_file": "tests/test_extract_google_news.py", "source_location": "L60" }, { - "id": "src_adapters_llm_llmfallbackadapter_init", - "label": ".__init__()", + "id": "src_models_ecpsnapshot_from_json_str", + "label": ".from_json_str()", "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/adapters/llm.py", - "source_location": "L45" + "norm_label": ".from_json_str()", + "source_file": "src/models.py", + "source_location": "L105" }, { - "id": "src_adapters_llm_llmfallbackadapter_is_available", - "label": ".is_available()", + "id": "tests_test_benchmark_24_test_benchmark_case", + "label": "test_benchmark_case()", "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", - "norm_label": ".is_available()", - "source_file": "src/adapters/llm.py", - "source_location": "L56" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_parse_llm_response", - "label": "._parse_llm_response()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", - "file_type": "code", - "norm_label": "._parse_llm_response()", - "source_file": "src/adapters/llm.py", - "source_location": "L214" - }, - { - "id": "src_classifier_inherenceclassifier_init", - "label": ".__init__()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", - "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/classifier.py", - "source_location": "L44" + "norm_label": "test_benchmark_case()", + "source_file": "tests/test_benchmark_24.py", + "source_location": "L28" }, { "id": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", @@ -1658,7 +1766,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_classifier_graceful_degradation_when_llm_raises_exception()", "source_file": "tests/test_llm_fallback.py", @@ -1670,7 +1778,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_classifier_skips_tier3_on_clear_direct_inherent_case()", "source_file": "tests/test_llm_fallback.py", @@ -1682,7 +1790,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_classifier_triggers_tier3_on_ambiguous_tangential_case()", "source_file": "tests/test_llm_fallback.py", @@ -1694,31 +1802,19 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_cli_execution_with_enable_llm_flag()", "source_file": "tests/test_llm_fallback.py", "source_location": "L291" }, - { - "id": "tests_test_llm_fallback_test_llm_adapter_availability_detection", - "label": "test_llm_adapter_availability_detection()", - "_callable": true, - "_origin": "ast", - "community": 152, - "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": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_llm_adapter_build_prompt_structure()", "source_file": "tests/test_llm_fallback.py", @@ -1730,7 +1826,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_llm_adapter_handling_invalid_and_corrupt_responses()", "source_file": "tests/test_llm_fallback.py", @@ -1742,7 +1838,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock()", "source_file": "tests/test_llm_fallback.py", @@ -1754,7 +1850,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_llm_adapter_parsing_valid_json_response()", "source_file": "tests/test_llm_fallback.py", @@ -1869,16 +1965,16 @@ "source_location": "L91" }, { - "id": "tests_test_adversarial_test_adversarial_sao_paulo_city_vs_fc", - "label": "test_adversarial_sao_paulo_city_vs_fc()", + "id": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", + "label": "test_adversarial_apple_fruit_recipe()", "_callable": true, "_origin": "ast", "community": 165, "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": "test_adversarial_sao_paulo_city_vs_fc()", + "norm_label": "test_adversarial_apple_fruit_recipe()", "source_file": "tests/test_adversarial.py", - "source_location": "L14" + "source_location": "L44" }, { "id": "tests_test_classifier_test_contextual_inherent", @@ -1941,28 +2037,124 @@ "source_location": "L64" }, { - "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_cli_subprocess_end_to_end", - "label": "test_funnel_cli_subprocess_end_to_end()", + "id": "tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", + "label": "test_borderline_tangential_graph_entity_in_isolation()", "_callable": true, "_origin": "ast", "community": 165, "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": "test_funnel_cli_subprocess_end_to_end()", - "source_file": "tests/test_e2e_text_analysis_pipeline.py", - "source_location": "L293" + "norm_label": "test_borderline_tangential_graph_entity_in_isolation()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L221" }, { - "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", - "label": "test_funnel_live_api_execution_if_configured()", + "id": "tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", + "label": "test_borderline_tangential_single_passing_mention()", "_callable": true, "_origin": "ast", "community": 165, "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": "test_funnel_live_api_execution_if_configured()", - "source_file": "tests/test_e2e_text_analysis_pipeline.py", - "source_location": "L347" + "norm_label": "test_borderline_tangential_single_passing_mention()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L210" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", + "label": "test_happy_path_contextual_inherent_via_executive_graph_entity()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_happy_path_contextual_inherent_via_executive_graph_entity()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L134" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", + "label": "test_happy_path_contextual_inherent_via_subsidiary_graph_entity()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_happy_path_contextual_inherent_via_subsidiary_graph_entity()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L119" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", + "label": "test_happy_path_direct_inherent_by_repetition_without_heavy_anchors()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_happy_path_direct_inherent_by_repetition_without_heavy_anchors()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L105" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", + "label": "test_happy_path_direct_inherent_via_alias_and_acronym()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_happy_path_direct_inherent_via_alias_and_acronym()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L92" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", + "label": "test_sad_path_not_related_completely_off_topic()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_sad_path_not_related_completely_off_topic()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L152" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", + "label": "test_sad_path_not_related_generic_domain_without_target_or_graph()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_sad_path_not_related_generic_domain_without_target_or_graph()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L167" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", + "label": "test_sad_path_not_related_negative_anchor_dominance()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_sad_path_not_related_negative_anchor_dominance()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L183" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", + "label": "test_sad_path_not_related_negative_anchor_ties_with_positive_anchor()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_sad_path_not_related_negative_anchor_ties_with_positive_anchor()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L196" }, { "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", @@ -2072,6 +2264,66 @@ "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L54" }, + { + "id": "src_adapters_llm_llmfallbackadapter_build_prompt", + "label": ".build_prompt()", + "_callable": true, + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "code", + "norm_label": ".build_prompt()", + "source_file": "src/adapters/llm.py", + "source_location": "L63" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_disambiguate", + "label": ".disambiguate()", + "_callable": true, + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "code", + "norm_label": ".disambiguate()", + "source_file": "src/adapters/llm.py", + "source_location": "L149" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_is_available", + "label": ".is_available()", + "_callable": true, + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "code", + "norm_label": ".is_available()", + "source_file": "src/adapters/llm.py", + "source_location": "L56" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_parse_llm_response", + "label": "._parse_llm_response()", + "_callable": true, + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "code", + "norm_label": "._parse_llm_response()", + "source_file": "src/adapters/llm.py", + "source_location": "L214" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_cli_subprocess_end_to_end", + "label": "test_funnel_cli_subprocess_end_to_end()", + "_callable": true, + "_origin": "ast", + "community": 169, + "community_name": "test_funnel_cli_subprocess_end_to_end", + "file_type": "code", + "norm_label": "test_funnel_cli_subprocess_end_to_end()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L293" + }, { "id": "scripts_extract_google_news_build_parser", "label": "build_parser()", @@ -2289,16 +2541,16 @@ "source_location": "L15" }, { - "id": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", - "label": "test_adversarial_apple_fruit_recipe()", + "id": "tests_test_models_test_classification_result_serialization", + "label": "test_classification_result_serialization()", "_callable": true, "_origin": "ast", - "community": 46, - "community_name": "test_adversarial.py", + "community": 45, + "community_name": "ClassificationResult", "file_type": "code", - "norm_label": "test_adversarial_apple_fruit_recipe()", - "source_file": "tests/test_adversarial.py", - "source_location": "L44" + "norm_label": "test_classification_result_serialization()", + "source_file": "tests/test_models.py", + "source_location": "L70" }, { "id": "tests_test_adversarial_test_adversarial_related_entity_without_scope_context", @@ -2312,6 +2564,18 @@ "source_file": "tests/test_adversarial.py", "source_location": "L68" }, + { + "id": "tests_test_adversarial_test_adversarial_sao_paulo_city_vs_fc", + "label": "test_adversarial_sao_paulo_city_vs_fc()", + "_callable": true, + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": "test_adversarial_sao_paulo_city_vs_fc()", + "source_file": "tests/test_adversarial.py", + "source_location": "L14" + }, { "id": "tests_test_adversarial_test_adversarial_subprocess_cli_corrupted_json", "label": "test_adversarial_subprocess_cli_corrupted_json()", @@ -2372,6 +2636,18 @@ "source_file": "tests/test_classifier.py", "source_location": "L10" }, + { + "id": "tests_test_classify_exhaustive_suite_ecp_tech_corp", + "label": "ecp_tech_corp()", + "_callable": true, + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": "ecp_tech_corp()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L36" + }, { "id": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", "label": "ecp_river_plate()", @@ -2385,100 +2661,268 @@ "source_location": "L42" }, { - "id": "src_classifier_count_phrase_occurrences", - "label": "count_phrase_occurrences()", + "id": "src_adapters_llm_llmfallbackadapter_evaluate_similarity", + "label": ".evaluate_similarity()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "count_phrase_occurrences()", + "norm_label": ".evaluate_similarity()", + "source_file": "src/adapters/llm.py", + "source_location": "L60" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/adapters/llm.py", + "source_location": "L45" + }, + { + "id": "src_classifier_inherenceclassifier_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": ".__init__()", "source_file": "src/classifier.py", - "source_location": "L30" + "source_location": "L44" }, { - "id": "src_classifier_inherenceclassifier_classify", - "label": ".classify()", + "id": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", + "label": "test_happy_path_direct_inherent_with_canonical_and_anchors()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": ".classify()", - "source_file": "src/classifier.py", - "source_location": "L65" + "norm_label": "test_happy_path_direct_inherent_with_canonical_and_anchors()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L76" }, { - "id": "src_classifier_match_phrase_in_text", - "label": "match_phrase_in_text()", + "id": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "label": "test_llm_happy_path_confirmation_of_tangential()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "match_phrase_in_text()", - "source_file": "src/classifier.py", - "source_location": "L17" + "norm_label": "test_llm_happy_path_confirmation_of_tangential()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L280" }, { - "id": "src_parser_extract_evidence_snippets", - "label": "extract_evidence_snippets()", + "id": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "label": "test_llm_happy_path_rejection_to_not_related()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "extract_evidence_snippets()", - "source_file": "src/parser.py", - "source_location": "L50" + "norm_label": "test_llm_happy_path_rejection_to_not_related()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L301" }, { - "id": "src_parser_extract_sentences", - "label": "extract_sentences()", + "id": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "label": "test_llm_happy_path_upgrade_tangential_to_contextual_inherent()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "extract_sentences()", - "source_file": "src/parser.py", - "source_location": "L42" + "norm_label": "test_llm_happy_path_upgrade_tangential_to_contextual_inherent()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L259" }, { - "id": "src_parser_strip_markdown", - "label": "strip_markdown()", + "id": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "label": "test_llm_happy_path_upgrade_tangential_to_direct_inherent()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "strip_markdown()", - "source_file": "src/parser.py", - "source_location": "L8" + "norm_label": "test_llm_happy_path_upgrade_tangential_to_direct_inherent()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L236" }, { - "id": "tests_test_models_test_extract_evidence_snippets", - "label": "test_extract_evidence_snippets()", + "id": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "label": "test_llm_optimization_clear_case_bypasses_llm()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "test_extract_evidence_snippets()", - "source_file": "tests/test_models.py", - "source_location": "L110" + "norm_label": "test_llm_optimization_clear_case_bypasses_llm()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L453" }, { - "id": "tests_test_models_test_parser_strip_markdown", - "label": "test_parser_strip_markdown()", + "id": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "label": "test_llm_provider_gemini_rest_execution()", "_callable": true, "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "test_parser_strip_markdown()", - "source_file": "tests/test_models.py", - "source_location": "L100" + "norm_label": "test_llm_provider_gemini_rest_execution()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L515" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "label": "test_llm_provider_openai_client_execution()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_provider_openai_client_execution()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L479" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", + "label": "test_llm_resilience_confidence_clipping()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_resilience_confidence_clipping()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L431" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "label": "test_llm_sad_path_flag_enabled_without_api_key_or_provider()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_flag_enabled_without_api_key_or_provider()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L340" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "label": "test_llm_sad_path_http_500_server_error_graceful_degradation()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_http_500_server_error_graceful_degradation()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L369" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "label": "test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L322" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "label": "test_llm_sad_path_malformed_json_and_non_json_strings()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_malformed_json_and_non_json_strings()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L385" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "label": "test_llm_sad_path_missing_decision_key_in_json()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_missing_decision_key_in_json()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L407" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "label": "test_llm_sad_path_network_timeout_graceful_degradation()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_network_timeout_graceful_degradation()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L353" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "label": "test_llm_sad_path_unknown_hallucinated_decision_enum()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_llm_sad_path_unknown_hallucinated_decision_enum()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L419" + }, + { + "id": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "label": "test_multilingual_matrix_6_languages()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_multilingual_matrix_6_languages()", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L782" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "label": "test_funnel_live_api_execution_if_configured()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "test_funnel_live_api_execution_if_configured()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L347" + }, + { + "id": "tests_test_llm_fallback_test_llm_adapter_availability_detection", + "label": "test_llm_adapter_availability_detection()", + "_callable": true, + "_origin": "ast", + "community": 47, + "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_convert_article_to_markdown_test_cli_default_output_naming", @@ -3104,18 +3548,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L253" }, - { - "id": "scripts_extract_google_news_get_hl_gl_ceid", - "label": "get_hl_gl_ceid()", - "_callable": true, - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "code", - "norm_label": "get_hl_gl_ceid()", - "source_file": "scripts/extract_google_news.py", - "source_location": "L107" - }, { "id": "scripts_extract_google_news_normalize_text_for_comparison", "label": "_normalize_text_for_comparison()", @@ -3152,18 +3584,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L220" }, - { - "id": "tests_test_extract_google_news_test_parse_google_news_rss_with_fixture", - "label": "test_parse_google_news_rss_with_fixture()", - "_callable": true, - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "code", - "norm_label": "test_parse_google_news_rss_with_fixture()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L111" - }, { "id": "tests_test_extract_google_news_test_resolve_articles_urls_batch", "label": "test_resolve_articles_urls_batch()", @@ -3201,16 +3621,16 @@ "source_location": "L73" }, { - "id": "tests_test_extract_google_news_test_e2e_extract_google_news_live_pipeline", - "label": "test_e2e_extract_google_news_live_pipeline()", + "id": "tests_test_extract_google_news_test_extract_google_news_orchestration_mocked", + "label": "test_extract_google_news_orchestration_mocked()", "_callable": true, "_origin": "ast", "community": 83, "community_name": "ExtractionResult", "file_type": "code", - "norm_label": "test_e2e_extract_google_news_live_pipeline()", + "norm_label": "test_extract_google_news_orchestration_mocked()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L302" + "source_location": "L186" }, { "id": "scripts_extract_google_news_resolve_article_url", @@ -3224,6 +3644,18 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L207" }, + { + "id": "tests_test_extract_google_news_sample_rss_xml", + "label": "sample_rss_xml()", + "_callable": true, + "_origin": "ast", + "community": 84, + "community_name": "test_extract_google_news.py", + "file_type": "code", + "norm_label": "sample_rss_xml()", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L32" + }, { "id": "tests_test_extract_google_news_test_e2e_resolve_real_google_news_url", "label": "test_e2e_resolve_real_google_news_url()", @@ -3237,40 +3669,16 @@ "source_location": "L281" }, { - "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_default_mappings", - "label": "test_get_hl_gl_ceid_default_mappings()", + "id": "tests_test_extract_google_news_test_parse_google_news_rss_with_fixture", + "label": "test_parse_google_news_rss_with_fixture()", "_callable": true, "_origin": "ast", "community": 84, "community_name": "test_extract_google_news.py", "file_type": "code", - "norm_label": "test_get_hl_gl_ceid_default_mappings()", + "norm_label": "test_parse_google_news_rss_with_fixture()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L37" - }, - { - "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_dynamic_fallback", - "label": "test_get_hl_gl_ceid_dynamic_fallback()", - "_callable": true, - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "code", - "norm_label": "test_get_hl_gl_ceid_dynamic_fallback()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L78" - }, - { - "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_with_custom_locale", - "label": "test_get_hl_gl_ceid_with_custom_locale()", - "_callable": true, - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "code", - "norm_label": "test_get_hl_gl_ceid_with_custom_locale()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L60" + "source_location": "L111" }, { "id": "tests_test_extract_google_news_test_resolve_article_url_fallback", @@ -3345,16 +3753,16 @@ "source_location": "L40" }, { - "id": "tests_test_extract_google_news_test_extract_google_news_orchestration_mocked", - "label": "test_extract_google_news_orchestration_mocked()", + "id": "tests_test_extract_google_news_test_e2e_extract_google_news_live_pipeline", + "label": "test_e2e_extract_google_news_live_pipeline()", "_callable": true, "_origin": "ast", "community": 90, "community_name": "SearchQuery", "file_type": "code", - "norm_label": "test_extract_google_news_orchestration_mocked()", + "norm_label": "test_e2e_extract_google_news_live_pipeline()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L186" + "source_location": "L302" }, { "id": "tests_test_extract_google_news_test_search_query_validation", @@ -4078,46 +4486,13 @@ "source_location": "L11" }, { - "id": "classify", - "label": "classify.py", + "id": "tests_test_classify_exhaustive_suite_py_path", + "label": "Path", "_origin": "ast", "community": 100, "community_name": "main", "file_type": "code", - "norm_label": "classify.py", - "source_file": "classify.py", - "source_location": "L1" - }, - { - "id": "classify_py_namespace", - "label": "Namespace", - "_origin": "ast", - "community": 100, - "community_name": "main", - "file_type": "code", - "norm_label": "namespace", - "source_file": "", - "source_location": "" - }, - { - "id": "src_models_py_enum", - "label": "Enum", - "_origin": "ast", - "community": 100, - "community_name": "main", - "file_type": "code", - "norm_label": "enum", - "source_file": "", - "source_location": "" - }, - { - "id": "src_models_py_str", - "label": "str", - "_origin": "ast", - "community": 100, - "community_name": "main", - "file_type": "code", - "norm_label": "str", + "norm_label": "path", "source_file": "", "source_location": "" }, @@ -4132,6 +4507,72 @@ "source_file": "tests/test_cli.py", "source_location": "L1" }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_568", + "label": "Cen\u00e1rio 6.1: Caminho de ECP inexistente -> Exit Code 1, error_code:\u2026", + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "rationale", + "norm_label": "cenario 6.1: caminho de ecp inexistente -> exit code 1, error_code:...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L568" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_581", + "label": "Cen\u00e1rio 6.2: Arquivo ECP com sintaxe JSON corrompida.", + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "rationale", + "norm_label": "cenario 6.2: arquivo ecp com sintaxe json corrompida.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L581" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_596", + "label": "Cen\u00e1rio 6.3: Valida erro para falta de cada um dos campos obrigat\u00f3rios do ECP.", + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "rationale", + "norm_label": "cenario 6.3: valida erro para falta de cada um dos campos obrigatorios do ecp.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L596" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_625", + "label": "Cen\u00e1rio 6.4: Caminho de arquivo Markdown inexistente.", + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "rationale", + "norm_label": "cenario 6.4: caminho de arquivo markdown inexistente.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L625" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_649", + "label": "Cen\u00e1rio 6.5: Arquivo Markdown vazio ou contendo apenas espa\u00e7os em branco.", + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "rationale", + "norm_label": "cenario 6.5: arquivo markdown vazio ou contendo apenas espacos em branco.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L649" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_677", + "label": "Cen\u00e1rio 6.6: A flag -o / --output cria diret\u00f3rios aninhados automaticamente.", + "_origin": "ast", + "community": 100, + "community_name": "main", + "file_type": "rationale", + "norm_label": "cenario 6.6: a flag -o / --output cria diretorios aninhados automaticamente.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L677" + }, { "id": "tests_test_cli_rationale_1", "label": "CLI execution tests covering flags, arguments, stdout, and error handling.", @@ -4144,13 +4585,68 @@ "source_location": "L1" }, { - "id": "src_models_py_any", - "label": "Any", + "id": "classify", + "label": "classify.py", "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", - "norm_label": "any", + "norm_label": "classify.py", + "source_file": "classify.py", + "source_location": "L1" + }, + { + "id": "classify_py_namespace", + "label": "Namespace", + "_origin": "ast", + "community": 101, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "namespace", + "source_file": "", + "source_location": "" + }, + { + "id": "src_classifier", + "label": "classifier.py", + "_origin": "ast", + "community": 101, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "classifier.py", + "source_file": "src/classifier.py", + "source_location": "L1" + }, + { + "id": "src_models", + "label": "models.py", + "_origin": "ast", + "community": 101, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "models.py", + "source_file": "src/models.py", + "source_location": "L1" + }, + { + "id": "src_models_py_enum", + "label": "Enum", + "_origin": "ast", + "community": 101, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "enum", + "source_file": "", + "source_location": "" + }, + { + "id": "src_models_py_str", + "label": "str", + "_origin": "ast", + "community": 101, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "str", "source_file": "", "source_location": "" }, @@ -4159,7 +4655,7 @@ "label": "test_benchmark_24.py", "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", "norm_label": "test_benchmark_24.py", "source_file": "tests/test_benchmark_24.py", @@ -4170,32 +4666,32 @@ "label": "fixture", "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "code", "norm_label": "fixture", "source_file": "", "source_location": "" }, { - "id": "tests_test_benchmark_24_py_parametrize", - "label": "parametrize", + "id": "src_classifier_rationale_1", + "label": "Core deterministic classification engine (Tier 1 core).", "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "parametrize", - "source_file": "", - "source_location": "" + "community_name": "classifier.py", + "file_type": "rationale", + "norm_label": "core deterministic classification engine (tier 1 core).", + "source_file": "src/classifier.py", + "source_location": "L1" }, { - "id": "tests_test_models", - "label": "test_models.py", + "id": "src_models_rationale_1", + "label": "Data models and validation schemas for Multilingual NLP Entity Inherence\u2026", "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "test_models.py", - "source_file": "tests/test_models.py", + "community_name": "classifier.py", + "file_type": "rationale", + "norm_label": "data models and validation schemas for multilingual nlp entity inherence...", + "source_file": "src/models.py", "source_location": "L1" }, { @@ -4203,23 +4699,12 @@ "label": "Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence\u2026", "_origin": "ast", "community": 101, - "community_name": "ECPSnapshot", + "community_name": "classifier.py", "file_type": "rationale", "norm_label": "controlled 24-case benchmark suite for multilingual nlp entity inherence...", "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", @@ -7361,17 +7846,6 @@ "source_file": "tests/test_select_article_extractor.py", "source_location": "L494" }, - { - "id": "tests_test_select_article_extractor_rationale_531", - "label": "E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha\u2026", - "_origin": "ast", - "community": 120, - "community_name": "process_batch", - "file_type": "rationale", - "norm_label": "e2e: executa scripts/select_article_extractor.py como subprocesso real na linha...", - "source_file": "tests/test_select_article_extractor.py", - "source_location": "L531" - }, { "id": "tests_test_select_article_extractor_rationale_568", "label": "E2E: Executa CLI sem a flag -o e valida cria\u00e7\u00e3o autom\u00e1tica de\u2026", @@ -7394,34 +7868,111 @@ "source_file": "tests/test_select_article_extractor.py", "source_location": "L596" }, + { + "id": "tests_test_select_article_extractor_rationale_609", + "label": "E2E: Executa CLI com arquivo inexistente e valida c\u00f3digo 1 e mensagem no stderr.", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "e2e: executa cli com arquivo inexistente e valida codigo 1 e mensagem no stderr.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L609" + }, { "id": "src_language", "label": "language.py", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "language.py", "source_file": "src/language.py", "source_location": "L1" }, + { + "id": "src_models_py_any", + "label": "Any", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "any", + "source_file": "", + "source_location": "" + }, + { + "id": "src_parser", + "label": "parser.py", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "parser.py", + "source_file": "src/parser.py", + "source_location": "L1" + }, { "id": "tests_test_language", "label": "test_language.py", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "code", "norm_label": "test_language.py", "source_file": "tests/test_language.py", "source_location": "L1" }, + { + "id": "tests_test_models", + "label": "test_models.py", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "code", + "norm_label": "test_models.py", + "source_file": "tests/test_models.py", + "source_location": "L1" + }, + { + "id": "src_classifier_rationale_18", + "label": "Check if a normalized phrase appears in normalized text with word boundary\u2026", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "check if a normalized phrase appears in normalized text with word boundary...", + "source_file": "src/classifier.py", + "source_location": "L18" + }, + { + "id": "src_classifier_rationale_31", + "label": "Count occurrences of a phrase in text.", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "count occurrences of a phrase in text.", + "source_file": "src/classifier.py", + "source_location": "L31" + }, + { + "id": "src_classifier_rationale_66", + "label": "Classify inherence of content against an ECP snapshot.", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "classify inherence of content against an ecp snapshot.", + "source_file": "src/classifier.py", + "source_location": "L66" + }, { "id": "src_language_rationale_1", "label": "Lightweight multilingual language detection and text normalization.", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "rationale", "norm_label": "lightweight multilingual language detection and text normalization.", "source_file": "src/language.py", @@ -7432,7 +7983,7 @@ "label": "Normalize text by converting to lowercase and stripping combining diacritical\u2026", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "rationale", "norm_label": "normalize text by converting to lowercase and stripping combining diacritical...", "source_file": "src/language.py", @@ -7443,7 +7994,7 @@ "label": "Tokenize text into lowercase alphanumeric words.", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "rationale", "norm_label": "tokenize text into lowercase alphanumeric words.", "source_file": "src/language.py", @@ -7454,23 +8005,78 @@ "label": "Detect the ISO-639-1 language code of text among supported languages (pt, en,\u2026", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "rationale", "norm_label": "detect the iso-639-1 language code of text among supported languages (pt, en,...", "source_file": "src/language.py", "source_location": "L478" }, + { + "id": "src_parser_rationale_1", + "label": "Markdown content parser and excerpt extraction utilities.", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "markdown content parser and excerpt extraction utilities.", + "source_file": "src/parser.py", + "source_location": "L1" + }, + { + "id": "src_parser_rationale_43", + "label": "Split text into individual sentences.", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "split text into individual sentences.", + "source_file": "src/parser.py", + "source_location": "L43" + }, + { + "id": "src_parser_rationale_53", + "label": "Extract relevant sentence excerpts from Markdown text that contain any of the\u2026", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "extract relevant sentence excerpts from markdown text that contain any of the...", + "source_file": "src/parser.py", + "source_location": "L53" + }, + { + "id": "src_parser_rationale_9", + "label": "Remove markdown syntax markers (headers, bold, italics, links, code blocks) to\u2026", + "_origin": "ast", + "community": 121, + "community_name": "test_models.py", + "file_type": "rationale", + "norm_label": "remove markdown syntax markers (headers, bold, italics, links, code blocks) to...", + "source_file": "src/parser.py", + "source_location": "L9" + }, { "id": "tests_test_language_rationale_1", "label": "Unit tests for language detection and text normalization.", "_origin": "ast", "community": 121, - "community_name": "detect_language", + "community_name": "test_models.py", "file_type": "rationale", "norm_label": "unit tests for language detection and text normalization.", "source_file": "tests/test_language.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": 121, + "community_name": "test_models.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_select_article_extractor", "label": "test_select_article_extractor.py", @@ -7527,15 +8133,15 @@ "source_location": "L50" }, { - "id": "tests_test_select_article_extractor_rationale_609", - "label": "E2E: Executa CLI com arquivo inexistente e valida c\u00f3digo 1 e mensagem no stderr.", + "id": "tests_test_select_article_extractor_rationale_531", + "label": "E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha\u2026", "_origin": "ast", "community": 122, "community_name": "test_select_article_extractor.py", "file_type": "rationale", - "norm_label": "e2e: executa cli com arquivo inexistente e valida codigo 1 e mensagem no stderr.", + "norm_label": "e2e: executa scripts/select_article_extractor.py como subprocesso real na linha...", "source_file": "tests/test_select_article_extractor.py", - "source_location": "L609" + "source_location": "L531" }, { "id": "specs_004_deterministic_content_selection_spec_assumptions", @@ -10506,26 +11112,48 @@ "source_location": "L290" }, { - "id": "tests_test_extract_google_news_py_fixture", - "label": "fixture", + "id": "scripts_extract_google_news_rationale_108", + "label": "Mapeia idioma e locale para os par\u00e2metros hl, gl e ceid do Google News.", "_origin": "ast", "community": 149, - "community_name": "sample_rss_xml", - "file_type": "code", - "norm_label": "fixture", - "source_file": "", - "source_location": "" + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "mapeia idioma e locale para os parametros hl, gl e ceid do google news.", + "source_file": "scripts/extract_google_news.py", + "source_location": "L108" }, { - "id": "tests_test_extract_google_news_rationale_33", - "label": "Fixture que fornece o conte\u00fado do XML de exemplo para testes offline.", + "id": "tests_test_extract_google_news_rationale_38", + "label": "Valida o mapeamento padr\u00e3o de idiomas para pares (hl, gl, ceid).", "_origin": "ast", "community": 149, - "community_name": "sample_rss_xml", + "community_name": "get_hl_gl_ceid", "file_type": "rationale", - "norm_label": "fixture que fornece o conteudo do xml de exemplo para testes offline.", + "norm_label": "valida o mapeamento padrao de idiomas para pares (hl, gl, ceid).", "source_file": "tests/test_extract_google_news.py", - "source_location": "L33" + "source_location": "L38" + }, + { + "id": "tests_test_extract_google_news_rationale_61", + "label": "Valida a sobrescrita geogr\u00e1fica quando o argumento locale \u00e9 especificado.", + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "valida a sobrescrita geografica quando o argumento locale e especificado.", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L61" + }, + { + "id": "tests_test_extract_google_news_rationale_79", + "label": "Valida fallback din\u00e2mico para idiomas regionais n\u00e3o listados explicitamente.", + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "valida fallback dinamico para idiomas regionais nao listados explicitamente.", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L79" }, { "id": "specify_templates_plan_template", @@ -10732,13 +11360,13 @@ "source_location": "L61" }, { - "id": "src_classifier_py_any", - "label": "Any", + "id": "tests_test_benchmark_24_py_parametrize", + "label": "parametrize", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", - "norm_label": "any", + "norm_label": "parametrize", "source_file": "", "source_location": "" }, @@ -10747,73 +11375,18 @@ "label": "test_llm_fallback.py", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "code", "norm_label": "test_llm_fallback.py", "source_file": "tests/test_llm_fallback.py", "source_location": "L1" }, - { - "id": "src_adapters_llm_rationale_155", - "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", - "_origin": "ast", - "community": 152, - "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": "L155" - }, - { - "id": "src_adapters_llm_rationale_219", - "label": "Parses and validates structured JSON response from LLM.", - "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", - "file_type": "rationale", - "norm_label": "parses and validates structured json response from llm.", - "source_file": "src/adapters/llm.py", - "source_location": "L219" - }, - { - "id": "src_adapters_llm_rationale_43", - "label": "Optional adapter for LLM fallback boundary disambiguation.", - "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", - "file_type": "rationale", - "norm_label": "optional adapter for llm fallback boundary disambiguation.", - "source_file": "src/adapters/llm.py", - "source_location": "L43" - }, - { - "id": "src_adapters_llm_rationale_57", - "label": "Returns True if an API key or custom provider function is configured.", - "_origin": "ast", - "community": 152, - "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": "L57" - }, - { - "id": "src_adapters_llm_rationale_66", - "label": "Constructs an expert-engineered prompt for multilingual entity inherence\u2026", - "_origin": "ast", - "community": 152, - "community_name": "LLMFallbackAdapter", - "file_type": "rationale", - "norm_label": "constructs an expert-engineered prompt for multilingual entity inherence...", - "source_file": "src/adapters/llm.py", - "source_location": "L66" - }, { "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": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "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", @@ -10824,7 +11397,7 @@ "label": "Valida extra\u00e7\u00e3o de JSON quando a resposta do LLM vem formatada em bloco\u2026", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "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", @@ -10835,7 +11408,7 @@ "label": "Valida que respostas corrompidas ou JSONs sem campos obrigat\u00f3rios retornem None\u2026", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "rationale", "norm_label": "valida que respostas corrompidas ou jsons sem campos obrigatorios retornem none...", "source_file": "tests/test_llm_fallback.py", @@ -10846,7 +11419,7 @@ "label": "Garante que o classificador dispare o Tier 3 LLM para casos amb\u00edguos\u2026", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "rationale", "norm_label": "garante que o classificador dispare o tier 3 llm para casos ambiguos...", "source_file": "tests/test_llm_fallback.py", @@ -10857,7 +11430,7 @@ "label": "Garante que casos claros (alta confian\u00e7a e alta densidade de \u00e2ncoras) N\u00c3O\u2026", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "rationale", "norm_label": "garante que casos claros (alta confianca e alta densidade de ancoras) nao...", "source_file": "tests/test_llm_fallback.py", @@ -10868,7 +11441,7 @@ "label": "Garante que se o LLM falhar por erro de rede ou timeout, o classificador\u2026", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "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", @@ -10879,29 +11452,18 @@ "label": "Garante que a CLI classify.py aceite e processe a flag --enable-llm sem erros.", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "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": "L292" }, - { - "id": "tests_test_llm_fallback_rationale_32", - "label": "Valida detec\u00e7\u00e3o de disponibilidade por chave de API ou provider customizado.", - "_origin": "ast", - "community": 152, - "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": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "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", @@ -10912,7 +11474,7 @@ "label": "Valida o parsing e instancia\u00e7\u00e3o correta do ClassificationResult a partir da\u2026", "_origin": "ast", "community": 152, - "community_name": "LLMFallbackAdapter", + "community_name": "ECPSnapshot", "file_type": "rationale", "norm_label": "valida o parsing e instanciacao correta do classificationresult a partir da...", "source_file": "tests/test_llm_fallback.py", @@ -11318,17 +11880,6 @@ "source_file": "", "source_location": "" }, - { - "id": "tests_test_e2e_text_analysis_pipeline_py_path", - "label": "Path", - "_origin": "ast", - "community": 165, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "path", - "source_file": "", - "source_location": "" - }, { "id": "src_classifier_rationale_42", "label": "Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /\u2026", @@ -11341,15 +11892,15 @@ "source_location": "L42" }, { - "id": "tests_test_adversarial_rationale_15", - "label": "Content about city/state governance of S\u00e3o Paulo against ECP for S\u00e3o Paulo FC.", + "id": "tests_test_adversarial_rationale_45", + "label": "Content about apple fruit/culinary recipe against Apple Inc. tech entity.", "_origin": "ast", "community": 165, "community_name": "InherenceClassifier", "file_type": "rationale", - "norm_label": "content about city/state governance of sao paulo against ecp for sao paulo fc.", + "norm_label": "content about apple fruit/culinary recipe against apple inc. tech entity.", "source_file": "tests/test_adversarial.py", - "source_location": "L15" + "source_location": "L45" }, { "id": "tests_test_classifier_rationale_1", @@ -11362,6 +11913,116 @@ "source_file": "tests/test_classifier.py", "source_location": "L1" }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_106", + "label": "Cen\u00e1rio 1.3: O nome 'TechCorp' aparece 3 vezes no texto, satisfazendo a regra\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 1.3: o nome 'techcorp' aparece 3 vezes no texto, satisfazendo a regra...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L106" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_120", + "label": "Cen\u00e1rio 1.4: Men\u00e7\u00e3o da subsidi\u00e1ria 'CloudPlatform Solutions' com \u00e2ncoras de\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 1.4: mencao da subsidiaria 'cloudplatform solutions' com ancoras de...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L120" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_135", + "label": "Cen\u00e1rio 1.5: Men\u00e7\u00e3o ao CEO no grafo + \u00e2ncoras de tecnologia.", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 1.5: mencao ao ceo no grafo + ancoras de tecnologia.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L135" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_153", + "label": "Cen\u00e1rio 2.1: Conte\u00fado totalmente desvinculado (culin\u00e1ria/jardinagem).", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 2.1: conteudo totalmente desvinculado (culinaria/jardinagem).", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L153" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_168", + "label": "Cen\u00e1rio 2.2: Artigo cita muitas \u00e2ncoras ('cloud', 'software'), mas N\u00c3O cita a\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 2.2: artigo cita muitas ancoras ('cloud', 'software'), mas nao cita a...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L168" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_184", + "label": "Cen\u00e1rio 2.3: Hom\u00f4nimo 'TechCorp Cal\u00e7ados' dispara \u00e2ncora negativa dominante.", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 2.3: homonimo 'techcorp calcados' dispara ancora negativa dominante.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L184" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_197", + "label": "Cen\u00e1rio 2.4: 1 \u00e2ncora negativa e 1 positiva -> prioridade de seguran\u00e7a rejeita\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 2.4: 1 ancora negativa e 1 positiva -> prioridade de seguranca rejeita...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L197" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_211", + "label": "Cen\u00e1rio 3.1: Men\u00e7\u00e3o \u00fanica isolada sem \u00e2ncoras tem\u00e1ticas -> TANGENTIAL com baixa\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 3.1: mencao unica isolada sem ancoras tematicas -> tangential com baixa...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L211" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_222", + "label": "Cen\u00e1rio 3.2: Entidade do grafo mencionada sem contexto de dom\u00ednio -> TANGENTIAL.", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 3.2: entidade do grafo mencionada sem contexto de dominio -> tangential.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L222" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_93", + "label": "Cen\u00e1rio 1.2: Apenas o alias / sigla 'TCG' \u00e9 mencionado, com \u00e2ncoras do dom\u00ednio.", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 1.2: apenas o alias / sigla 'tcg' e mencionado, com ancoras do dominio.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L93" + }, { "id": "tests_test_e2e_text_analysis_pipeline_rationale_1", "label": "Su\u00edte de Testes E2E e de Integra\u00e7\u00e3o Completa para An\u00e1lise de Texto e\u2026", @@ -11439,28 +12100,6 @@ "source_file": "tests/test_e2e_text_analysis_pipeline.py", "source_location": "L282" }, - { - "id": "tests_test_e2e_text_analysis_pipeline_rationale_294", - "label": "Valida o contrato CLI completo classify.py com sa\u00edda em arquivo JSON e flags\u2026", - "_origin": "ast", - "community": 165, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "valida o contrato cli completo classify.py com saida em arquivo json e flags...", - "source_file": "tests/test_e2e_text_analysis_pipeline.py", - "source_location": "L294" - }, - { - "id": "tests_test_e2e_text_analysis_pipeline_rationale_348", - "label": "Executa chamada ao vivo contra OpenAI ou Gemini caso OPENAI_API_KEY ou\u2026", - "_origin": "ast", - "community": 165, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "executa chamada ao vivo contra openai ou gemini caso openai_api_key ou...", - "source_file": "tests/test_e2e_text_analysis_pipeline.py", - "source_location": "L348" - }, { "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", @@ -11494,6 +12133,72 @@ "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L55" }, + { + "id": "src_adapters_llm_rationale_155", + "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "rationale", + "norm_label": "executes llm fallback for ambiguous boundary cases. returns a refined...", + "source_file": "src/adapters/llm.py", + "source_location": "L155" + }, + { + "id": "src_adapters_llm_rationale_219", + "label": "Parses and validates structured JSON response from LLM.", + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "rationale", + "norm_label": "parses and validates structured json response from llm.", + "source_file": "src/adapters/llm.py", + "source_location": "L219" + }, + { + "id": "src_adapters_llm_rationale_57", + "label": "Returns True if an API key or custom provider function is configured.", + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "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": "L57" + }, + { + "id": "src_adapters_llm_rationale_66", + "label": "Constructs an expert-engineered prompt for multilingual entity inherence\u2026", + "_origin": "ast", + "community": 168, + "community_name": ".disambiguate", + "file_type": "rationale", + "norm_label": "constructs an expert-engineered prompt for multilingual entity inherence...", + "source_file": "src/adapters/llm.py", + "source_location": "L66" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_py_path", + "label": "Path", + "_origin": "ast", + "community": 169, + "community_name": "test_funnel_cli_subprocess_end_to_end", + "file_type": "code", + "norm_label": "path", + "source_file": "", + "source_location": "" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_294", + "label": "Valida o contrato CLI completo classify.py com sa\u00edda em arquivo JSON e flags\u2026", + "_origin": "ast", + "community": 169, + "community_name": "test_funnel_cli_subprocess_end_to_end", + "file_type": "rationale", + "norm_label": "valida o contrato cli completo classify.py com saida em arquivo json e flags...", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L294" + }, { "id": "agents_skills_speckit_checklist_skill", "label": "speckit-checklist/SKILL.md", @@ -14004,17 +14709,6 @@ "source_file": "src/adapters/llm.py", "source_location": "L1" }, - { - "id": "src_models", - "label": "models.py", - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": "models.py", - "source_file": "src/models.py", - "source_location": "L1" - }, { "id": "tests_test_adapters", "label": "test_adapters.py", @@ -14125,17 +14819,6 @@ "source_file": "src/adapters/llm.py", "source_location": "L21" }, - { - "id": "src_models_rationale_1", - "label": "Data models and validation schemas for Multilingual NLP Entity Inherence\u2026", - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "data models and validation schemas for multilingual nlp entity inherence...", - "source_file": "src/models.py", - "source_location": "L1" - }, { "id": "tests_test_adapters_rationale_1", "label": "Unit tests for optional adapter interfaces (Tier 2 / Tier 3).", @@ -14169,6 +14852,17 @@ "source_file": "", "source_location": "" }, + { + "id": "tests_test_classify_exhaustive_suite_py_fixture", + "label": "fixture", + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": "fixture", + "source_file": "", + "source_location": "" + }, { "id": "tests_test_e2e_text_analysis_pipeline_py_fixture", "label": "fixture", @@ -14213,6 +14907,17 @@ "source_file": "tests/test_adversarial.py", "source_location": "L149" }, + { + "id": "tests_test_adversarial_rationale_15", + "label": "Content about city/state governance of S\u00e3o Paulo against ECP for S\u00e3o Paulo FC.", + "_origin": "ast", + "community": 46, + "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", + "source_location": "L15" + }, { "id": "tests_test_adversarial_rationale_186", "label": "Run CLI via subprocess with missing target_name and verify error payload.", @@ -14235,17 +14940,6 @@ "source_file": "tests/test_adversarial.py", "source_location": "L221" }, - { - "id": "tests_test_adversarial_rationale_45", - "label": "Content about apple fruit/culinary recipe against Apple Inc. tech entity.", - "_origin": "ast", - "community": 46, - "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", - "source_location": "L45" - }, { "id": "tests_test_adversarial_rationale_69", "label": "High-weight related entity mentioned in passing without required domain anchors.", @@ -14269,114 +14963,268 @@ "source_location": "L43" }, { - "id": "src_classifier", - "label": "classifier.py", + "id": "src_classifier_py_any", + "label": "Any", "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "classifier.py", - "source_file": "src/classifier.py", - "source_location": "L1" + "norm_label": "any", + "source_file": "", + "source_location": "" }, { - "id": "src_parser", - "label": "parser.py", + "id": "tests_test_classify_exhaustive_suite", + "label": "test_classify_exhaustive_suite.py", "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "code", - "norm_label": "parser.py", - "source_file": "src/parser.py", + "norm_label": "test_classify_exhaustive_suite.py", + "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L1" }, { - "id": "src_classifier_rationale_1", - "label": "Core deterministic classification engine (Tier 1 core).", + "id": "tests_test_classify_exhaustive_suite_py_parametrize", + "label": "parametrize", "_origin": "ast", "community": 47, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "core deterministic classification engine (tier 1 core).", - "source_file": "src/classifier.py", - "source_location": "L1" + "community_name": "LLMFallbackAdapter", + "file_type": "code", + "norm_label": "parametrize", + "source_file": "", + "source_location": "" }, { - "id": "src_classifier_rationale_18", - "label": "Check if a normalized phrase appears in normalized text with word boundary\u2026", + "id": "src_adapters_llm_rationale_43", + "label": "Optional adapter for LLM fallback boundary disambiguation.", "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", - "norm_label": "check if a normalized phrase appears in normalized text with word boundary...", - "source_file": "src/classifier.py", - "source_location": "L18" - }, - { - "id": "src_classifier_rationale_31", - "label": "Count occurrences of a phrase in text.", - "_origin": "ast", - "community": 47, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "count occurrences of a phrase in text.", - "source_file": "src/classifier.py", - "source_location": "L31" - }, - { - "id": "src_classifier_rationale_66", - "label": "Classify inherence of content against an ECP snapshot.", - "_origin": "ast", - "community": 47, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "classify inherence of content against an ecp snapshot.", - "source_file": "src/classifier.py", - "source_location": "L66" - }, - { - "id": "src_parser_rationale_1", - "label": "Markdown content parser and excerpt extraction utilities.", - "_origin": "ast", - "community": 47, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "markdown content parser and excerpt extraction utilities.", - "source_file": "src/parser.py", - "source_location": "L1" - }, - { - "id": "src_parser_rationale_43", - "label": "Split text into individual sentences.", - "_origin": "ast", - "community": 47, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "split text into individual sentences.", - "source_file": "src/parser.py", + "norm_label": "optional adapter for llm fallback boundary disambiguation.", + "source_file": "src/adapters/llm.py", "source_location": "L43" }, { - "id": "src_parser_rationale_53", - "label": "Extract relevant sentence excerpts from Markdown text that contain any of the\u2026", + "id": "tests_test_classify_exhaustive_suite_rationale_1", + "label": "Su\u00edte de Testes Exaustiva para o Classificador de Iner\u00eancia (classify.py e\u2026", "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", - "norm_label": "extract relevant sentence excerpts from markdown text that contain any of the...", - "source_file": "src/parser.py", - "source_location": "L53" + "norm_label": "suite de testes exaustiva para o classificador de inerencia (classify.py e...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L1" }, { - "id": "src_parser_rationale_9", - "label": "Remove markdown syntax markers (headers, bold, italics, links, code blocks) to\u2026", + "id": "tests_test_classify_exhaustive_suite_rationale_237", + "label": "Cen\u00e1rio 4.1: Caso amb\u00edguo elevado para DIRECT_INHERENT pelo LLM.", "_origin": "ast", "community": 47, - "community_name": "classifier.py", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", - "norm_label": "remove markdown syntax markers (headers, bold, italics, links, code blocks) to...", - "source_file": "src/parser.py", - "source_location": "L9" + "norm_label": "cenario 4.1: caso ambiguo elevado para direct_inherent pelo llm.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L237" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_260", + "label": "Cen\u00e1rio 4.2: Caso amb\u00edguo elevado para CONTEXTUAL_INHERENT pelo LLM.", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.2: caso ambiguo elevado para contextual_inherent pelo llm.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L260" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_281", + "label": "Cen\u00e1rio 4.3: LLM confirma categoricamente que a men\u00e7\u00e3o \u00e9 perif\u00e9rica /\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.3: llm confirma categoricamente que a mencao e periferica /...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L281" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_302", + "label": "Cen\u00e1rio 4.4: LLM identifica hom\u00f4nimo n\u00e3o mapeado nas regras determin\u00edsticas e\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.4: llm identifica homonimo nao mapeado nas regras deterministicas e...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L302" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_323", + "label": "Cen\u00e1rio 4.5: Quando enable_llm=False (padr\u00e3o), o LLM NUNCA \u00e9 chamado mesmo em\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.5: quando enable_llm=false (padrao), o llm nunca e chamado mesmo em...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L323" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_341", + "label": "Cen\u00e1rio 4.6: enable_llm=True mas sem chaves no ambiente -> degrada sem quebrar,\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.6: enable_llm=true mas sem chaves no ambiente -> degrada sem quebrar,...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L341" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_354", + "label": "Cen\u00e1rio 4.7: API do LLM sofre TimeoutError -> ret\u00e9m Tier 1 e registra aviso em\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.7: api do llm sofre timeouterror -> retem tier 1 e registra aviso em...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L354" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_370", + "label": "Cen\u00e1rio 4.8: API do LLM retorna erro 500 / ConnectionError -> ret\u00e9m Tier 1 com\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.8: api do llm retorna erro 500 / connectionerror -> retem tier 1 com...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L370" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_386", + "label": "Cen\u00e1rio 4.9: LLM retorna texto livre ou JSON quebrado -> parser ignora com\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.9: llm retorna texto livre ou json quebrado -> parser ignora com...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L386" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_408", + "label": "Cen\u00e1rio 4.10: LLM retorna JSON v\u00e1lido mas sem o campo obrigat\u00f3rio 'decision'.", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.10: llm retorna json valido mas sem o campo obrigatorio 'decision'.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L408" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_420", + "label": "Cen\u00e1rio 4.11: LLM alucina uma categoria inexistente (ex: 'SUPER_INHERENT').", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.11: llm alucina uma categoria inexistente (ex: 'super_inherent').", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L420" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_432", + "label": "Cen\u00e1rio 4.12: LLM retorna confidence fora do intervalo [0.0, 1.0] -> clippa com\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.12: llm retorna confidence fora do intervalo [0.0, 1.0] -> clippa com...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L432" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_454", + "label": "Cen\u00e1rio 4.13: Caso claro de alta densidade N\u00c3O chama LLM mesmo com\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 4.13: caso claro de alta densidade nao chama llm mesmo com...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L454" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_480", + "label": "Cen\u00e1rio 5.1: Simula execu\u00e7\u00e3o bem-sucedida via cliente OpenAI SDK.", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 5.1: simula execucao bem-sucedida via cliente openai sdk.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L480" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_516", + "label": "Cen\u00e1rio 5.2: Simula execu\u00e7\u00e3o bem-sucedida via API REST do Google Gemini.", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 5.2: simula execucao bem-sucedida via api rest do google gemini.", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L516" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_77", + "label": "Cen\u00e1rio 1.1: Nome can\u00f4nico + m\u00faltiplas \u00e2ncoras tem\u00e1ticas -> DIRECT_INHERENT com\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "cenario 1.1: nome canonico + multiplas ancoras tematicas -> direct_inherent com...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L77" + }, + { + "id": "tests_test_classify_exhaustive_suite_rationale_792", + "label": "Garante a precis\u00e3o e robustez do classificador nos 6 idiomas suportados pela\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "garante a precisao e robustez do classificador nos 6 idiomas suportados pela...", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L792" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_348", + "label": "Executa chamada ao vivo contra OpenAI ou Gemini caso OPENAI_API_KEY ou\u2026", + "_origin": "ast", + "community": 47, + "community_name": "LLMFallbackAdapter", + "file_type": "rationale", + "norm_label": "executa chamada ao vivo contra openai ou gemini caso openai_api_key ou...", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L348" + }, + { + "id": "tests_test_llm_fallback_rationale_32", + "label": "Valida detec\u00e7\u00e3o de disponibilidade por chave de API ou provider customizado.", + "_origin": "ast", + "community": 47, + "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_convert_article_to_markdown", @@ -16323,17 +17171,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L1" }, - { - "id": "scripts_extract_google_news_rationale_108", - "label": "Mapeia idioma e locale para os par\u00e2metros hl, gl e ceid do Google News.", - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "rationale", - "norm_label": "mapeia idioma e locale para os parametros hl, gl e ceid do google news.", - "source_file": "scripts/extract_google_news.py", - "source_location": "L108" - }, { "id": "scripts_extract_google_news_rationale_152", "label": "Remove pontua\u00e7\u00e3o e espa\u00e7os extras para compara\u00e7\u00e3o de redund\u00e2ncia.", @@ -16400,17 +17237,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L65" }, - { - "id": "tests_test_extract_google_news_rationale_112", - "label": "Valida o parsing do feed RSS, higieniza\u00e7\u00e3o de tags HTML e deduplica\u00e7\u00e3o.", - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "rationale", - "norm_label": "valida o parsing do feed rss, higienizacao de tags html e deduplicacao.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L112" - }, { "id": "tests_test_extract_google_news_rationale_162", "label": "Valida a resolu\u00e7\u00e3o concorrente em lote de uma lista de NewsArticle.", @@ -16445,15 +17271,15 @@ "source_location": "L85" }, { - "id": "tests_test_extract_google_news_rationale_303", - "label": "Valida E2E o fluxo completo de busca, parsing e resolu\u00e7\u00e3o de URLs reais ao vivo.", + "id": "tests_test_extract_google_news_rationale_187", + "label": "Valida a consolida\u00e7\u00e3o do ExtractionResult a partir da busca mockada com URLs\u2026", "_origin": "ast", "community": 83, "community_name": "ExtractionResult", "file_type": "rationale", - "norm_label": "valida e2e o fluxo completo de busca, parsing e resolucao de urls reais ao vivo.", + "norm_label": "valida a consolidacao do extractionresult a partir da busca mockada com urls...", "source_file": "tests/test_extract_google_news.py", - "source_location": "L303" + "source_location": "L187" }, { "id": "tests_test_extract_google_news", @@ -16466,6 +17292,17 @@ "source_file": "tests/test_extract_google_news.py", "source_location": "L1" }, + { + "id": "tests_test_extract_google_news_py_fixture", + "label": "fixture", + "_origin": "ast", + "community": 84, + "community_name": "test_extract_google_news.py", + "file_type": "code", + "norm_label": "fixture", + "source_file": "", + "source_location": "" + }, { "id": "scripts_extract_google_news_rationale_208", "label": "Resolve a URL intermedi\u00e1ria do Google News para a URL real do ve\u00edculo.", @@ -16488,6 +17325,17 @@ "source_file": "tests/test_extract_google_news.py", "source_location": "L1" }, + { + "id": "tests_test_extract_google_news_rationale_112", + "label": "Valida o parsing do feed RSS, higieniza\u00e7\u00e3o de tags HTML e deduplica\u00e7\u00e3o.", + "_origin": "ast", + "community": 84, + "community_name": "test_extract_google_news.py", + "file_type": "rationale", + "norm_label": "valida o parsing do feed rss, higienizacao de tags html e deduplicacao.", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L112" + }, { "id": "tests_test_extract_google_news_rationale_139", "label": "Valida fallback gracioso de URL quando n\u00e3o \u00e9 link do Google News ou em erro.", @@ -16522,37 +17370,15 @@ "source_location": "L282" }, { - "id": "tests_test_extract_google_news_rationale_38", - "label": "Valida o mapeamento padr\u00e3o de idiomas para pares (hl, gl, ceid).", + "id": "tests_test_extract_google_news_rationale_33", + "label": "Fixture que fornece o conte\u00fado do XML de exemplo para testes offline.", "_origin": "ast", "community": 84, "community_name": "test_extract_google_news.py", "file_type": "rationale", - "norm_label": "valida o mapeamento padrao de idiomas para pares (hl, gl, ceid).", + "norm_label": "fixture que fornece o conteudo do xml de exemplo para testes offline.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L38" - }, - { - "id": "tests_test_extract_google_news_rationale_61", - "label": "Valida a sobrescrita geogr\u00e1fica quando o argumento locale \u00e9 especificado.", - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "rationale", - "norm_label": "valida a sobrescrita geografica quando o argumento locale e especificado.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L61" - }, - { - "id": "tests_test_extract_google_news_rationale_79", - "label": "Valida fallback din\u00e2mico para idiomas regionais n\u00e3o listados explicitamente.", - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "rationale", - "norm_label": "valida fallback dinamico para idiomas regionais nao listados explicitamente.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L79" + "source_location": "L33" }, { "id": "specs_002_google_news_extractor_tasks_implementation_for_user_story_1", @@ -17229,15 +18055,15 @@ "source_location": "L33" }, { - "id": "tests_test_extract_google_news_rationale_187", - "label": "Valida a consolida\u00e7\u00e3o do ExtractionResult a partir da busca mockada com URLs\u2026", + "id": "tests_test_extract_google_news_rationale_303", + "label": "Valida E2E o fluxo completo de busca, parsing e resolu\u00e7\u00e3o de URLs reais ao vivo.", "_origin": "ast", "community": 90, "community_name": "SearchQuery", "file_type": "rationale", - "norm_label": "valida a consolidacao do extractionresult a partir da busca mockada com urls...", + "norm_label": "valida e2e o fluxo completo de busca, parsing e resolucao de urls reais ao vivo.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L187" + "source_location": "L303" }, { "id": "tests_test_extract_google_news_rationale_87", @@ -18124,7 +18950,7 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc4 licenca", "source_file": "README.md", - "source_location": "L547" + "source_location": "L551" }, { "id": "readme_matriz_determin\u00edstica_de_metadados", @@ -18208,7 +19034,7 @@ "node_kind": "heading", "norm_label": "\ud83e\uddea testes e qualidade de codigo", "source_file": "README.md", - "source_location": "L512" + "source_location": "L513" }, { "id": "readme_textnlpclassifierapp", @@ -20151,6 +20977,594 @@ "source_location": "L65", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite_ecp_tech_corp", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L37", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L223", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L212", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", + "target": "classify_main", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L640", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", + "target": "classify_main", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L587", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", + "target": "classify_main", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L572", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", + "target": "classify_main", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L615", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", + "target": "classify_main", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L668", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", + "target": "classify_main", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L696", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L136", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L121", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L107", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L94", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L78", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L290", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L291", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L311", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L312", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L269", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L270", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L246", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L247", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L461", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L462", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L543", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L544", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L496", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L497", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L447", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L448", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L343", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L344", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L375", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L376", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L330", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L331", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L399", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L400", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L409", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L412", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L359", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L360", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L421", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L424", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L793", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L154", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L169", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L185", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L198", + "weight": 1.0 + }, { "source": "tests_test_cli_test_cli_empty_content_file", "target": "classify_main", @@ -22119,6 +23533,30 @@ "source_location": "L9", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite_ecp_tech_corp", + "target": "tests_test_classify_exhaustive_suite_py_fixture", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L35", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "target": "tests_test_classify_exhaustive_suite_py_parametrize", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L711", + "weight": 1.0 + }, { "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "target": "tests_test_convert_article_to_markdown_py_parametrize", @@ -23007,6 +24445,90 @@ "source_location": "L6", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "classify_main", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L17", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L18", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_classifier_inherenceclassifier", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L19", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_models_classificationresult", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_models_decisioncategory", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_models_ecpsnapshot", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_models_relatedentity", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L20", + "weight": 1.0 + }, { "source": "tests_test_cli", "target": "classify_main", @@ -24015,6 +25537,54 @@ "source_location": "L6", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "classify", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L17", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_adapters_llm", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L18", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_classifier", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L19", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "src_models", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L20", + "weight": 1.0 + }, { "source": "tests_test_cli", "target": "classify", @@ -24411,6 +25981,78 @@ "source_location": "L65", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", + "target": "tests_test_classify_exhaustive_suite_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L624", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", + "target": "tests_test_classify_exhaustive_suite_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L580", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", + "target": "tests_test_classify_exhaustive_suite_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L567", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", + "target": "tests_test_classify_exhaustive_suite_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L595", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", + "target": "tests_test_classify_exhaustive_suite_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L648", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", + "target": "tests_test_classify_exhaustive_suite_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L676", + "weight": 1.0 + }, { "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_cli_subprocess_end_to_end", "target": "tests_test_e2e_text_analysis_pipeline_py_path", @@ -28842,7 +30484,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L512", + "source_location": "L513", "weight": 1.0 }, { @@ -28853,7 +30495,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L547", + "source_location": "L551", "weight": 1.0 }, { @@ -35940,6 +37582,380 @@ "source_location": "L91", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L105", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L119", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L134", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L152", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L167", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L183", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L196", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L210", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L221", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L236", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L259", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L280", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L301", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L322", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L340", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L353", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_ecp_tech_corp", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L36", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L369", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L385", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L407", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L419", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L431", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L453", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L479", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L515", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L567", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L580", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L595", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L624", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L648", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L676", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L76", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L782", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L92", + "weight": 1.0 + }, { "source": "tests_test_cli", "target": "tests_test_cli_test_cli_missing_required_ecp_field", @@ -39152,6 +41168,380 @@ "source_location": "L1", "weight": 1.0 }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_1", + "target": "tests_test_classify_exhaustive_suite", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_106", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L106", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_120", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L120", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_135", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L135", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_153", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L153", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_168", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L168", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_184", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L184", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_197", + "target": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L197", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_211", + "target": "tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L211", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_222", + "target": "tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L222", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_237", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L237", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_260", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L260", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_281", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L281", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_302", + "target": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L302", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_323", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L323", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_341", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L341", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_354", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L354", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_370", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L370", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_386", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L386", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_408", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L408", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_420", + "target": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L420", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_432", + "target": "tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L432", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_454", + "target": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L454", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_480", + "target": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L480", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_516", + "target": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L516", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_568", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L568", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_581", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L581", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_596", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L596", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_625", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L625", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_649", + "target": "tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L649", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_677", + "target": "tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L677", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_77", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L77", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_792", + "target": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L792", + "weight": 1.0 + }, + { + "source": "tests_test_classify_exhaustive_suite_rationale_93", + "target": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L93", + "weight": 1.0 + }, { "source": "tests_test_cli_rationale_1", "target": "tests_test_cli", @@ -40814,6 +43204,330 @@ "source_location": "L73", "weight": 0.8 }, + { + "source": "tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L221", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L210", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L134", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L119", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L105", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L92", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L76", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L280", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L301", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L259", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L236", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L453", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L515", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L479", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L431", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L340", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L369", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L322", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L385", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L407", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L353", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L419", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L789", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L152", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L167", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L183", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L196", + "weight": 0.8 + }, { "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", "target": "src_models_ecpsnapshot", @@ -41172,6 +43886,303 @@ "source_location": "L72", "weight": 0.8 }, + { + "source": "tests_test_classify_exhaustive_suite_ecp_tech_corp", + "target": "src_models_relatedentity", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L51", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L226", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L215", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L142", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L127", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L114", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L100", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L85", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L296", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L317", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L275", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L252", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L470", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L545", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L498", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L349", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L381", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L336", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L404", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L416", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L365", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L428", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", + "target": "src_classifier_inherenceclassifier", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L800", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L161", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L175", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L191", + "weight": 0.8 + }, + { + "source": "tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_classify_exhaustive_suite.py", + "source_location": "L201", + "weight": 0.8 + }, { "source": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", "target": "src_models_relatedentity", @@ -41614,5 +44625,5 @@ } ], "hyperedges": [], - "built_at_commit": "bae144055e6b01759e2c90114eba2be372282e50" + "built_at_commit": "a874b98dac4bd7e25da62c6cb4b0acb92a60f57a" } \ 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 49c9160..d8a220e 100644 --- a/graphify-out/2026-08-21/manifest.json +++ b/graphify-out/2026-08-21/manifest.json @@ -336,9 +336,9 @@ "semantic_hash": "" }, "src/classifier.py": { - "mtime": 1787320047.0362887, - "seen": 1787320239.025866, - "ast_hash": "d6cc674d407a99ab52f6d5156f9b3d8e", + "mtime": 1787321309.8981817, + "seen": 1787321481.1505442, + "ast_hash": "a4e5dafed12aa4eaf096988b2c6a8ae0", "semantic_hash": "" }, "src/language.py": { @@ -654,9 +654,9 @@ "semantic_hash": "" }, "README.md": { - "mtime": 1787321187.0812356, - "seen": 1787321205.5201268, - "ast_hash": "aedfaf7a245288227952a2e28e7e7b13", + "mtime": 1787321467.0542295, + "seen": 1787321481.1561577, + "ast_hash": "0cde8e800125cbba61a1d7de9d9d2c9e", "semantic_hash": "" }, "scripts/extract_article_contents.py": { @@ -922,5 +922,11 @@ "seen": 1787321205.5156026, "ast_hash": "3a2d47f2ffcf8371ffdf90bb797b5346", "semantic_hash": "" + }, + "tests/test_classify_exhaustive_suite.py": { + "mtime": 1787321371.2658408, + "seen": 1787321481.15137, + "ast_hash": "08e3c680d8669b2849a19d73b27b869a", + "semantic_hash": "" } } \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index 4e8b1de..e1209b3 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 -- 203 files · ~114,894 words +- 203 files · ~114,931 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: `a874b98d` +- Built from commit: `2cdd3547` - 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 - ECPSnapshot @@ -196,7 +196,7 @@ classify.py → src/models.py - `main()` --uses--> `ErrorCode` [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 @@ -373,16 +373,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 @@ -402,7 +402,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 @@ -624,9 +624,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 diff --git a/graphify-out/cache/ast/v0.9.47-s2/d99b364e8f1141f2820a99dc36fbf7bd1a3718f48aa15d9e92166e47a3547ea2.json b/graphify-out/cache/ast/v0.9.47-s2/d99b364e8f1141f2820a99dc36fbf7bd1a3718f48aa15d9e92166e47a3547ea2.json new file mode 100644 index 0000000..03b95a6 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/d99b364e8f1141f2820a99dc36fbf7bd1a3718f48aa15d9e92166e47a3547ea2.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_load_env_file", "label": "_load_env_file()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L20", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "label": "LLMFallbackAdapter", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L42", "_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": "L45", "_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": "L56", "_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": "L60", "_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": "L63", "_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": "L149", "_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": "L225", "_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_21", "label": "Carrega vari\u00e1veis do arquivo .env na raiz do projeto se existir.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L21"}, {"id": "$graphify-root$_src_adapters_llm_rationale_43", "label": "Optional adapter for LLM fallback boundary disambiguation.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L43"}, {"id": "$graphify-root$_src_adapters_llm_rationale_57", "label": "Returns True if an API key or custom provider function is configured.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L57"}, {"id": "$graphify-root$_src_adapters_llm_rationale_66", "label": "Constructs an expert-engineered prompt for multilingual entity inherence\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L66"}, {"id": "$graphify-root$_src_adapters_llm_rationale_155", "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L155"}, {"id": "$graphify-root$_src_adapters_llm_rationale_230", "label": "Parses and validates structured JSON response from LLM.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L230"}], "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": "urllib_error", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "urllib_request", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "pathlib", "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": "typing", "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": "src_adapters_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L16", "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": "L17", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "$graphify-root$_src_adapters_llm_load_env_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L20", "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": "L42", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "basenlpadapter", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L42", "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": "L45", "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": "L56", "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": "L60", "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": "L63", "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": "L63", "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": "L63", "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": "L149", "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": "L149", "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": "L149", "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": "L149", "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": "L225", "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": "L225", "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": "L225", "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": "L159", "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": "L162", "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": "L167", "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": "L259", "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_21", "target": "$graphify-root$_src_adapters_llm_load_env_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_43", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L43", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_57", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L57", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_66", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L66", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_155", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L155", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_230", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L230", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "cwd", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L22", "receiver": "Path"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "Path", "is_member_call": false, "source_file": "src/adapters/llm.py", "source_location": "L22", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "__file__", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/adapters/llm.py", "source_location": "L22"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "is_file", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L24", "receiver": "env_file"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "splitlines", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L26", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "read_text", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L26", "receiver": "env_file"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L27", "receiver": "line"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "startswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L28", "receiver": "line"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "split", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L29", "receiver": "line"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L30", "receiver": "key"}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L31", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_load_env_file", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L31", "receiver": "val"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L52", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L53", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L53", "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": "L68", "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": "L71", "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": "L76", "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": "L80", "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": "L81", "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": "L82", "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": "L84", "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": "L103", "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": "L166", "receiver": "self"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "OpenAI", "is_member_call": false, "source_file": "src/adapters/llm.py", "source_location": "L175", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "create", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L178", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "create", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L186", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "append", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L195", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L201", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "encode", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L212", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "dumps", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L212", "receiver": "json"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "urlopen", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L215", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "loads", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L216", "receiver": "json"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "decode", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L216", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "read", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L216", "receiver": "resp"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "append", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L220", "receiver": null}, {"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": "L233", "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": "L234", "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": "L236", "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": "L238", "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": "L240", "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": "L242", "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": "L243"}, {"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": "L246", "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": "L250", "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": "L251", "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": "L253", "receiver": "parsed"}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json index 45d9817..cd910c3 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":11540,"mtime_ns":1787321086752706000,"indexed_at_ns":1787321202151784600,"word_count":1028,"hashes":{"src/adapters/llm.py":"60a6971578bc42a426e2b773deaca465b7c90cc5f2f0cef6619653d2b22a5f46"}},"src/classifier.py":{"size":10811,"mtime_ns":1787321309898181700,"indexed_at_ns":1787321477384579700,"word_count":906,"hashes":{"src/classifier.py":"082aae4b64b35cbf2688f5eaadb86f7620565e631721af861536b4e293d1dd4e"}},"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":29367,"mtime_ns":1787321467054229500,"indexed_at_ns":1787321477491421100,"word_count":3485,"hashes":{"readme.md":"86981cdaa4637b9b8c54e553bb2047856459bef1b76ad86496aa64d28a293005"}},"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"}},"tests/test_e2e_text_analysis_pipeline.py":{"size":14757,"mtime_ns":1787321086751707000,"indexed_at_ns":1787321202196714500,"word_count":1365,"hashes":{"tests/test_e2e_text_analysis_pipeline.py":"a3d2d71fc1d61e05340cff3a6038e44ab616d0e5db0b5e196aab75d797b1d5fe"}},"tests/test_classify_exhaustive_suite.py":{"size":31914,"mtime_ns":1787321371265840800,"indexed_at_ns":1787321477422096800,"word_count":2675,"hashes":{"tests/test_classify_exhaustive_suite.py":"d08660e416b940ea43e9b97e362300da0782a9edd50c9fca1e28f357c827eb5e"}}} \ 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":12091,"mtime_ns":1787321869417629500,"indexed_at_ns":1787322031986400400,"word_count":1065,"hashes":{"src/adapters/llm.py":"d99b364e8f1141f2820a99dc36fbf7bd1a3718f48aa15d9e92166e47a3547ea2"}},"src/classifier.py":{"size":10811,"mtime_ns":1787321309898181700,"indexed_at_ns":1787321477384579700,"word_count":906,"hashes":{"src/classifier.py":"082aae4b64b35cbf2688f5eaadb86f7620565e631721af861536b4e293d1dd4e"}},"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":29367,"mtime_ns":1787321467054229500,"indexed_at_ns":1787321477491421100,"word_count":3485,"hashes":{"readme.md":"86981cdaa4637b9b8c54e553bb2047856459bef1b76ad86496aa64d28a293005"}},"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"}},"tests/test_e2e_text_analysis_pipeline.py":{"size":14757,"mtime_ns":1787321086751707000,"indexed_at_ns":1787321202196714500,"word_count":1365,"hashes":{"tests/test_e2e_text_analysis_pipeline.py":"a3d2d71fc1d61e05340cff3a6038e44ab616d0e5db0b5e196aab75d797b1d5fe"}},"tests/test_classify_exhaustive_suite.py":{"size":31914,"mtime_ns":1787321371265840800,"indexed_at_ns":1787321477422096800,"word_count":2675,"hashes":{"tests/test_classify_exhaustive_suite.py":"d08660e416b940ea43e9b97e362300da0782a9edd50c9fca1e28f357c827eb5e"}}} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html index c60f4ae..401490e 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -66,9 +66,9 @@