diff --git a/README.md b/README.md index e3766e6..54fce4f 100644 --- a/README.md +++ b/README.md @@ -501,7 +501,8 @@ TextNLPClassifierApp/ │ ├── test_select_article_extractor.py │ ├── test_convert_article_to_markdown.py # Testes da conversão para Markdown │ ├── test_llm_fallback.py # Testes do Tier 3 LLM Fallback -│ └── test_e2e_text_analysis_pipeline.py # Suíte E2E do Funil de Análise e Fallback +│ ├── test_e2e_text_analysis_pipeline.py # Suíte E2E do Funil de Análise e Fallback +│ └── test_classify_exhaustive_suite.py # Suíte Exaustiva de Casos Felizes/Infelizes (QA Sênior) ├── requirements.txt # Dependências do projeto ├── pyproject.toml # Configurações de ferramentas (pytest, ruff, mypy) └── README.md # Documentação principal @@ -511,12 +512,15 @@ TextNLPClassifierApp/ ## 🧪 Testes e Qualidade de Código -O repositório possui **209 testes automatizados** com 100% de aprovação cobrindo testes unitários, de regressão, de integração, Golden Fixtures exatas, testes de sensibilidade de mutação, testes de fallback para LLM (Tier 3), validações de degradação graciosa e testes End-to-End (E2E) via CLI subprocess: +O repositório possui **247 testes automatizados** com 100% de aprovação cobrindo testes unitários, de regressão, de integração, Golden Fixtures exatas, testes de sensibilidade de mutação, testes de fallback para LLM (Tier 3), validações de degradação graciosa, matriz multilíngue e testes End-to-End (E2E) via CLI subprocess: ```bash -# Executar toda a suíte de testes do projeto (209 testes) +# Executar toda a suíte de testes do projeto (247 testes) pytest -v +# Executar a Suíte Exaustiva de Classificação e Fallback (38 testes) +pytest tests/test_classify_exhaustive_suite.py -v + # Executar a Suíte E2E do Funil de Análise de Texto e Fallback para LLM pytest tests/test_e2e_text_analysis_pipeline.py -v diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index d875389..7c708f5 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.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/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index 6113e92..bdef8c4 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": "d5eb5f4efd73cafb", "46": "57116576996271f5", "47": "0fad42a4989aa7e3", "48": "0237e1e02ee47a27", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6", "80": "6ff8a97e63c9a2f3", "81": "a38f84ae3d895236", "82": "08e48bd11f9714df", "83": "5095122914e83cf5", "84": "1aef305bd7d7d63f", "85": "f8bfd0cfe9e8b478", "86": "410d15a346bd5894", "87": "6b41d288cfd834ab", "88": "5aa6db96312a8811", "89": "80225792bb62ba04", "90": "fd291228c3311f40", "91": "d4579c5b7aa2742a", "92": "7b9ba7c3bff11361", "93": "71cd9c1fa4a857f0", "94": "34cd980be3c32d21", "95": "970093453f3b7d90", "96": "9e96780a2b7c4bd6", "97": "b7c10b0e09caac0b", "98": "089ea6a55861c693", "99": "cb6165a7dc822d29", "100": "7bdb2c6abfbde762", "101": "3e1a3e8ca5030d57", "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": "16f0543249fafdd8", "121": "5396e68ca6c185ad", "122": "d1eeebf358bcab60", "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": "4c30720833331d86", "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": "1e217fe7a21a2501", "166": "85c97dab928b9b1b", "167": "7ab5695391e32126"} \ No newline at end of file +{"0": "36bdb6f09c457f7c", "1": "8c5bf6244cf710c6", "2": "efbcc9c62a3ee78b", "3": "8599153989b07faa", "4": "b5952a1f7fee9f20", "5": "5b8462a3f82d188c", "6": "80f79e9e2011a3e3", "7": "4654167fd211d027", "8": "50acfa00fe353440", "9": "c6d2f770737823f1", "10": "44f2ca451aea24be", "11": "feaac5ab67a8c17a", "12": "b71bd92e5edbf2e0", "13": "219d65ba6d2689e4", "14": "8e30bb8112fd02d1", "15": "03906ab80b99db85", "16": "5d51c60ba1bc2be0", "17": "a1da914f522dcd21", "18": "fbad840891b90569", "19": "0686ff2d6fe29fb3", "20": "060baa9e1924b465", "21": "a5c8f2c3080b8243", "22": "0d76852f1d29eeb1", "23": "6ff68619f2d72924", "24": "3da11675eee7ec46", "25": "a6696589e9556f97", "26": "6c752999e8a4d4b6", "27": "2d4e13ea2111d750", "28": "4b60cb0ee1ac186a", "29": "f56fbca9bb8235ec", "30": "c7beed940704509f", "31": "38be2d254fb31ae8", "32": "ee5596fcf7e7c0b3", "33": "e4d4e0a440bc599f", "34": "c897e49c001acdae", "35": "3aad272a2cf5d495", "36": "0a197439d306b956", "37": "f43acf5c8b1329af", "38": "6775efafc9b33338", "39": "8176a164778526f9", "40": "66b69189c0acc3ff", "41": "0322ff824966a4d8", "42": "784c9e3d336a7f53", "43": "4b8bb6c3f7b64856", "44": "18c0ff3e6225bcb2", "45": "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 diff --git a/graphify-out/2026-08-21/.graphify_labels.json b/graphify-out/2026-08-21/.graphify_labels.json index 622aae7..d875389 100644 --- a/graphify-out/2026-08-21/.graphify_labels.json +++ b/graphify-out/2026-08-21/.graphify_labels.json @@ -99,7 +99,7 @@ "97": "🧠 TextNLPClassifierApp", "98": "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor", "99": "parametrize", - "100": "models.py", + "100": "main", "101": "ECPSnapshot", "102": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)", "103": "4. Requisitos Funcionais (FR)", @@ -151,7 +151,7 @@ "149": "sample_rss_xml", "150": "13. Estratégia de testes", "151": "6. Contrato de entrada", - "152": "InherenceClassifier", + "152": "LLMFallbackAdapter", "153": "convert_html_to_markdown", "154": "JSON Schema Contract: Deterministic Article Content Selection", "155": "5. Escopo", @@ -164,7 +164,7 @@ "162": "test_normalize_date_iso_8601_variants", "163": "test_metadata_priority_original_url_all_fallbacks", "164": "test_normalize_scalar_non_string_types", - "165": ".disambiguate", + "165": "InherenceClassifier", "166": "remove_duplicate_initial_h1", "167": "test_normalize_scalar_whitespace_collapsing" } diff --git a/graphify-out/2026-08-21/GRAPH_REPORT.md b/graphify-out/2026-08-21/GRAPH_REPORT.md index 03fb38d..b7c8458 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 -- 201 files · ~110,615 words +- 202 files · ~112,197 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1554 nodes · 1970 edges · 168 communities (120 shown, 48 thin omitted) -- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 59 edges (avg confidence: 0.95) +- 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) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `31152d50` +- Built from commit: `bae14405` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -110,7 +110,7 @@ - 🧠 TextNLPClassifierApp - Extraction Pipeline Checklist: Article Content Multi-Engine Extractor - parametrize -- models.py +- main - ECPSnapshot - Feature Specification: Multilingual NLP Entity Inherence Classifier (POC) - 4. Requisitos Funcionais (FR) @@ -160,7 +160,7 @@ - sample_rss_xml - 13. Estratégia de testes - 6. Contrato de entrada -- InherenceClassifier +- LLMFallbackAdapter - convert_html_to_markdown - JSON Schema Contract: Deterministic Article Content Selection - 5. Escopo @@ -173,16 +173,16 @@ - test_normalize_date_iso_8601_variants - test_metadata_priority_original_url_all_fallbacks - test_normalize_scalar_non_string_types -- .disambiguate +- InherenceClassifier - remove_duplicate_initial_h1 - test_normalize_scalar_whitespace_collapsing ## God Nodes (most connected - your core abstractions) -1. `ECPSnapshot` - 40 edges -2. `InherenceClassifier` - 29 edges -3. `DecisionCategory` - 28 edges -4. `LLMFallbackAdapter` - 26 edges -5. `ClassificationResult` - 24 edges +1. `ECPSnapshot` - 49 edges +2. `InherenceClassifier` - 36 edges +3. `DecisionCategory` - 35 edges +4. `LLMFallbackAdapter` - 32 edges +5. `ClassificationResult` - 26 edges 6. `select_article_extractor()` - 23 edges 7. `ExtractorName` - 21 edges 8. `PRD — Conversão de artigo JSON para Markdown` - 16 edges @@ -347,12 +347,12 @@ Cohesion: 0.29 Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC) ### Community 45 - "ClassificationResult" -Cohesion: 0.11 -Nodes (17): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., LocalEmbeddingsAdapter (+9 more) +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) ### Community 46 - "test_adversarial.py" -Cohesion: 0.10 -Nodes (19): Any, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC., Run CLI via subprocess with missing target_name and verify error payload., Run CLI via subprocess with corrupted JSON and verify error payload. (+11 more) +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) ### Community 47 - "classifier.py" Cohesion: 0.16 @@ -434,13 +434,13 @@ Nodes (34): 1. Requirement Completeness, 2. Requirement Clarity & Non-Ambiguity, 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 - "models.py" -Cohesion: 0.15 -Nodes (17): emit_error(), main(), parse_args(), Namespace, ClassificationError, ErrorCode, MatchedGraphEntity, Enum (+9 more) +### Community 100 - "main" +Cohesion: 0.17 +Nodes (15): emit_error(), main(), parse_args(), Namespace, ClassificationError, ErrorCode, Enum, str (+7 more) ### Community 101 - "ECPSnapshot" -Cohesion: 0.24 -Nodes (10): ECPSnapshot, classifier(), fixture, parametrize, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), Unit tests for ECP models, schema validation, and structured error handling., test_ecp_snapshot_defaults() (+2 more) +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 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -520,7 +520,7 @@ Nodes (16): detect_language(), extract_words(), normalize_text(), Lightweight mu ### 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 ![alt](url) seja descartada e link…, E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha…, test_e2e_cli_subprocess_real_execution() (+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 ![alt](url) 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) ### Community 123 - "Feature Specification: Deterministic Content Selection" Cohesion: 0.17 @@ -634,9 +634,9 @@ Nodes (4): 13.1 Testes unitários, 13.2 Testes de integração do CLI, 13.3 Caso Cohesion: 0.50 Nodes (4): 6.1 Formato, 6.2 Valores aceitos para `selected_extractor`, 6.3 Campos obrigatórios após a resolução, 6. Contrato de entrada -### Community 152 - "InherenceClassifier" -Cohesion: 0.11 -Nodes (31): LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., InherenceClassifier, Any, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Unit tests for deterministic classification decision logic., test_contextual_inherent() (+23 more) +### Community 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 153 - "convert_html_to_markdown" Cohesion: 0.33 @@ -650,9 +650,9 @@ Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: De Cohesion: 0.67 Nodes (3): 5.1 Incluído, 5.2 Fora do escopo, 5. Escopo -### Community 165 - ".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 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) ### Community 166 - "remove_duplicate_initial_h1" Cohesion: 0.50 @@ -667,16 +667,16 @@ Nodes (4): Remove o primeiro título H1 do corpo somente quando ele for igual ao _Questions this graph is uniquely positioned to answer:_ - **Why does `PRD — Conversão de artigo JSON para Markdown` connect `PRD — Conversão de artigo JSON para Markdown` to `8. Regras funcionais`, `12. Critérios de aceite`, `11. Requisitos não funcionais`, `9. Interface CLI`, `13. Estratégia de testes`, `6. Contrato de entrada`, `5. Escopo`?** - _High betweenness centrality (0.008) - this node is a cross-community bridge._ -- **Why does `Implementation Plan: Convert Article JSON to Markdown` connect `Implementation Plan: Convert Article JSON to Markdown` to `005-convert-json-markdown/plan.md`?** - _High betweenness centrality (0.004) - this node is a cross-community bridge._ + _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._ -- **Are the 10 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?** - _`ECPSnapshot` has 10 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 6 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?** - _`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 18 inferred relationships involving `DecisionCategory` (e.g. with `LLMFallbackAdapter` and `InherenceClassifier`) actually correct?** - _`DecisionCategory` has 18 INFERRED edges - model-reasoned connections that need verification._ +- **Why does `ECPSnapshot` connect `ECPSnapshot` to `main`, `InherenceClassifier`, `ClassificationResult`, `test_adversarial.py`, `classifier.py`, `LLMFallbackAdapter`?** + _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 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 e490d42..1035ca8 100644 --- a/graphify-out/2026-08-21/graph.json +++ b/graphify-out/2026-08-21/graph.json @@ -10,7 +10,7 @@ "_callable_class": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "classificationerror", "source_file": "src/models.py", @@ -23,25 +23,12 @@ "_callable_class": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "errorcode", "source_file": "src/models.py", "source_location": "L18" }, - { - "id": "src_models_matchedgraphentity", - "label": "MatchedGraphEntity", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "matchedgraphentity", - "source_file": "src/models.py", - "source_location": "L114" - }, { "id": "src_models_ecpsnapshot", "label": "ECPSnapshot", @@ -127,11 +114,11 @@ "_callable_class": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "llmfallbackadapter", "source_file": "src/adapters/llm.py", - "source_location": "L17" + "source_location": "L42" }, { "id": "src_classifier_inherenceclassifier", @@ -139,7 +126,7 @@ "_callable": true, "_callable_class": true, "_origin": "ast", - "community": 152, + "community": 165, "community_name": "InherenceClassifier", "file_type": "code", "norm_label": "inherenceclassifier", @@ -152,7 +139,7 @@ "_callable": true, "_callable_class": true, "_origin": "ast", - "community": 152, + "community": 165, "community_name": "InherenceClassifier", "file_type": "code", "norm_label": "decisioncategory", @@ -198,6 +185,19 @@ "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", @@ -386,7 +386,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "emit_error()", "source_file": "classify.py", @@ -398,7 +398,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "main()", "source_file": "classify.py", @@ -410,7 +410,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "parse_args()", "source_file": "classify.py", @@ -422,7 +422,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": ".to_dict()", "source_file": "src/models.py", @@ -434,7 +434,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": ".to_json_str()", "source_file": "src/models.py", @@ -446,7 +446,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": ".to_json_str()", "source_file": "src/models.py", @@ -458,7 +458,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "test_cli_empty_content_file()", "source_file": "tests/test_cli.py", @@ -470,7 +470,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "test_cli_missing_ecp_file()", "source_file": "tests/test_cli.py", @@ -482,7 +482,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "test_cli_missing_required_ecp_field()", "source_file": "tests/test_cli.py", @@ -494,7 +494,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "test_cli_output_file()", "source_file": "tests/test_cli.py", @@ -506,7 +506,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "test_cli_success_stdout()", "source_file": "tests/test_cli.py", @@ -518,12 +518,24 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "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()", + "_callable": true, + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": ".to_dict()", + "source_file": "src/models.py", + "source_location": "L134" + }, { "id": "src_models_ecpsnapshot_from_dict", "label": ".from_dict()", @@ -548,6 +560,18 @@ "source_file": "src/models.py", "source_location": "L105" }, + { + "id": "src_models_relatedentity_from_dict", + "label": ".from_dict()", + "_callable": true, + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": ".from_dict()", + "source_file": "src/models.py", + "source_location": "L37" + }, { "id": "tests_test_benchmark_24_classifier", "label": "classifier()", @@ -572,6 +596,18 @@ "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()", @@ -945,16 +981,16 @@ "source_location": "L595" }, { - "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": 120, "community_name": "process_batch", "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_integration_large_batch_determinism", @@ -1149,16 +1185,16 @@ "source_location": "L106" }, { - "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": 122, "community_name": "test_select_article_extractor.py", "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_generate_shingles_empty", @@ -1532,17 +1568,41 @@ "source_file": "tests/test_extract_google_news.py", "source_location": "L32" }, + { + "id": "src_adapters_llm_llmfallbackadapter_build_prompt", + "label": ".build_prompt()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "LLMFallbackAdapter", + "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": 152, + "community_name": "LLMFallbackAdapter", + "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": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": ".evaluate_similarity()", "source_file": "src/adapters/llm.py", - "source_location": "L34" + "source_location": "L60" }, { "id": "src_adapters_llm_llmfallbackadapter_init", @@ -1550,11 +1610,35 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": ".__init__()", "source_file": "src/adapters/llm.py", - "source_location": "L20" + "source_location": "L45" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_is_available", + "label": ".is_available()", + "_callable": true, + "_origin": "ast", + "community": 152, + "community_name": "LLMFallbackAdapter", + "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", @@ -1562,79 +1646,19 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": ".__init__()", "source_file": "src/classifier.py", "source_location": "L44" }, - { - "id": "tests_test_classifier_test_contextual_inherent", - "label": "test_contextual_inherent()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_contextual_inherent()", - "source_file": "tests/test_classifier.py", - "source_location": "L49" - }, - { - "id": "tests_test_classifier_test_direct_inherent", - "label": "test_direct_inherent()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_direct_inherent()", - "source_file": "tests/test_classifier.py", - "source_location": "L33" - }, - { - "id": "tests_test_classifier_test_negative_anchor_suppression", - "label": "test_negative_anchor_suppression()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_negative_anchor_suppression()", - "source_file": "tests/test_classifier.py", - "source_location": "L91" - }, - { - "id": "tests_test_classifier_test_not_related", - "label": "test_not_related()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_not_related()", - "source_file": "tests/test_classifier.py", - "source_location": "L78" - }, - { - "id": "tests_test_classifier_test_tangential_inherent", - "label": "test_tangential_inherent()", - "_callable": true, - "_origin": "ast", - "community": 152, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_tangential_inherent()", - "source_file": "tests/test_classifier.py", - "source_location": "L64" - }, { "id": "tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "label": "test_classifier_graceful_degradation_when_llm_raises_exception()", "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_classifier_graceful_degradation_when_llm_raises_exception()", "source_file": "tests/test_llm_fallback.py", @@ -1646,7 +1670,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_classifier_skips_tier3_on_clear_direct_inherent_case()", "source_file": "tests/test_llm_fallback.py", @@ -1658,7 +1682,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_classifier_triggers_tier3_on_ambiguous_tangential_case()", "source_file": "tests/test_llm_fallback.py", @@ -1670,7 +1694,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_cli_execution_with_enable_llm_flag()", "source_file": "tests/test_llm_fallback.py", @@ -1682,7 +1706,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_llm_adapter_availability_detection()", "source_file": "tests/test_llm_fallback.py", @@ -1694,7 +1718,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_llm_adapter_build_prompt_structure()", "source_file": "tests/test_llm_fallback.py", @@ -1706,7 +1730,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_llm_adapter_handling_invalid_and_corrupt_responses()", "source_file": "tests/test_llm_fallback.py", @@ -1718,7 +1742,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock()", "source_file": "tests/test_llm_fallback.py", @@ -1730,7 +1754,7 @@ "_callable": true, "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_llm_adapter_parsing_valid_json_response()", "source_file": "tests/test_llm_fallback.py", @@ -1845,52 +1869,172 @@ "source_location": "L91" }, { - "id": "src_adapters_llm_llmfallbackadapter_build_prompt", - "label": ".build_prompt()", + "id": "tests_test_adversarial_test_adversarial_sao_paulo_city_vs_fc", + "label": "test_adversarial_sao_paulo_city_vs_fc()", "_callable": true, "_origin": "ast", "community": 165, - "community_name": ".disambiguate", + "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": ".build_prompt()", - "source_file": "src/adapters/llm.py", - "source_location": "L37" + "norm_label": "test_adversarial_sao_paulo_city_vs_fc()", + "source_file": "tests/test_adversarial.py", + "source_location": "L14" }, { - "id": "src_adapters_llm_llmfallbackadapter_disambiguate", - "label": ".disambiguate()", + "id": "tests_test_classifier_test_contextual_inherent", + "label": "test_contextual_inherent()", "_callable": true, "_origin": "ast", "community": 165, - "community_name": ".disambiguate", + "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": ".disambiguate()", - "source_file": "src/adapters/llm.py", - "source_location": "L123" + "norm_label": "test_contextual_inherent()", + "source_file": "tests/test_classifier.py", + "source_location": "L49" }, { - "id": "src_adapters_llm_llmfallbackadapter_is_available", - "label": ".is_available()", + "id": "tests_test_classifier_test_direct_inherent", + "label": "test_direct_inherent()", "_callable": true, "_origin": "ast", "community": 165, - "community_name": ".disambiguate", + "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": ".is_available()", - "source_file": "src/adapters/llm.py", - "source_location": "L30" + "norm_label": "test_direct_inherent()", + "source_file": "tests/test_classifier.py", + "source_location": "L33" }, { - "id": "src_adapters_llm_llmfallbackadapter_parse_llm_response", - "label": "._parse_llm_response()", + "id": "tests_test_classifier_test_negative_anchor_suppression", + "label": "test_negative_anchor_suppression()", "_callable": true, "_origin": "ast", "community": 165, - "community_name": ".disambiguate", + "community_name": "InherenceClassifier", "file_type": "code", - "norm_label": "._parse_llm_response()", - "source_file": "src/adapters/llm.py", - "source_location": "L146" + "norm_label": "test_negative_anchor_suppression()", + "source_file": "tests/test_classifier.py", + "source_location": "L91" + }, + { + "id": "tests_test_classifier_test_not_related", + "label": "test_not_related()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_not_related()", + "source_file": "tests/test_classifier.py", + "source_location": "L78" + }, + { + "id": "tests_test_classifier_test_tangential_inherent", + "label": "test_tangential_inherent()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_tangential_inherent()", + "source_file": "tests/test_classifier.py", + "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()", + "_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" + }, + { + "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": 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" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "label": "test_funnel_llm_failure_graceful_degradation()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_funnel_llm_failure_graceful_degradation()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L230" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_multilingual_language_detection", + "label": "test_funnel_multilingual_language_detection()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_funnel_multilingual_language_detection()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L279" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "label": "test_funnel_nlp_ambiguity_confirmed_tangential_by_llm()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_funnel_nlp_ambiguity_confirmed_tangential_by_llm()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L195" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "label": "test_funnel_nlp_ambiguity_resolved_by_llm_upgrade()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_funnel_nlp_ambiguity_resolved_by_llm_upgrade()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L159" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_rejection_homonym", + "label": "test_funnel_nlp_deterministic_rejection_homonym()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_funnel_nlp_deterministic_rejection_homonym()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L136" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "label": "test_funnel_nlp_deterministic_success()", + "_callable": true, + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_funnel_nlp_deterministic_success()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L101" }, { "id": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", @@ -2096,6 +2240,18 @@ "source_file": "src/adapters/embeddings.py", "source_location": "L23" }, + { + "id": "src_adapters_llm_load_env_file", + "label": "_load_env_file()", + "_callable": true, + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "code", + "norm_label": "_load_env_file()", + "source_file": "src/adapters/llm.py", + "source_location": "L20" + }, { "id": "tests_test_adapters_test_classifier_with_adapter_flags", "label": "test_classifier_with_adapter_flags()", @@ -2132,42 +2288,6 @@ "source_file": "tests/test_adapters.py", "source_location": "L15" }, - { - "id": "tests_test_models_test_classification_result_serialization", - "label": "test_classification_result_serialization()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": "test_classification_result_serialization()", - "source_file": "tests/test_models.py", - "source_location": "L70" - }, - { - "id": "src_models_classificationresult_to_dict", - "label": ".to_dict()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "test_adversarial.py", - "file_type": "code", - "norm_label": ".to_dict()", - "source_file": "src/models.py", - "source_location": "L134" - }, - { - "id": "src_models_relatedentity_from_dict", - "label": ".from_dict()", - "_callable": true, - "_origin": "ast", - "community": 46, - "community_name": "test_adversarial.py", - "file_type": "code", - "norm_label": ".from_dict()", - "source_file": "src/models.py", - "source_location": "L37" - }, { "id": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", "label": "test_adversarial_apple_fruit_recipe()", @@ -2192,18 +2312,6 @@ "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()", @@ -2264,6 +2372,18 @@ "source_file": "tests/test_classifier.py", "source_location": "L10" }, + { + "id": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", + "label": "ecp_river_plate()", + "_callable": true, + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "code", + "norm_label": "ecp_river_plate()", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L42" + }, { "id": "src_classifier_count_phrase_occurrences", "label": "count_phrase_occurrences()", @@ -3962,7 +4082,7 @@ "label": "classify.py", "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "classify.py", "source_file": "classify.py", @@ -3973,29 +4093,18 @@ "label": "Namespace", "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "namespace", "source_file": "", "source_location": "" }, - { - "id": "src_models", - "label": "models.py", - "_origin": "ast", - "community": 100, - "community_name": "models.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": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "enum", "source_file": "", @@ -4006,7 +4115,7 @@ "label": "str", "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "str", "source_file": "", @@ -4017,34 +4126,34 @@ "label": "test_cli.py", "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "code", "norm_label": "test_cli.py", "source_file": "tests/test_cli.py", "source_location": "L1" }, - { - "id": "src_models_rationale_1", - "label": "Data models and validation schemas for Multilingual NLP Entity Inherence\u2026", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "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_cli_rationale_1", "label": "CLI execution tests covering flags, arguments, stdout, and error handling.", "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "main", "file_type": "rationale", "norm_label": "cli execution tests covering flags, arguments, stdout, and error handling.", "source_file": "tests/test_cli.py", "source_location": "L1" }, + { + "id": "src_models_py_any", + "label": "Any", + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": "any", + "source_file": "", + "source_location": "" + }, { "id": "tests_test_benchmark_24", "label": "test_benchmark_24.py", @@ -7252,6 +7361,17 @@ "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", @@ -7274,17 +7394,6 @@ "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", @@ -7418,15 +7527,15 @@ "source_location": "L50" }, { - "id": "tests_test_select_article_extractor_rationale_531", - "label": "E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha\u2026", + "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": 122, "community_name": "test_select_article_extractor.py", "file_type": "rationale", - "norm_label": "e2e: executa scripts/select_article_extractor.py como subprocesso real na linha...", + "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": "L531" + "source_location": "L609" }, { "id": "specs_004_deterministic_content_selection_spec_assumptions", @@ -10627,73 +10736,84 @@ "label": "Any", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "any", "source_file": "", "source_location": "" }, - { - "id": "tests_test_classifier", - "label": "test_classifier.py", - "_origin": "ast", - "community": 152, - "community_name": "InherenceClassifier", - "file_type": "code", - "norm_label": "test_classifier.py", - "source_file": "tests/test_classifier.py", - "source_location": "L1" - }, { "id": "tests_test_llm_fallback", "label": "test_llm_fallback.py", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "code", "norm_label": "test_llm_fallback.py", "source_file": "tests/test_llm_fallback.py", "source_location": "L1" }, { - "id": "src_adapters_llm_rationale_18", + "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": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", "norm_label": "optional adapter for llm fallback boundary disambiguation.", "source_file": "src/adapters/llm.py", - "source_location": "L18" + "source_location": "L43" }, { - "id": "src_classifier_rationale_42", - "label": "Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /\u2026", + "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": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", - "norm_label": "tier 1 deterministic nlp entity inherence classifier with optional tier 2 /...", - "source_file": "src/classifier.py", - "source_location": "L42" + "norm_label": "returns true if an api key or custom provider function is configured.", + "source_file": "src/adapters/llm.py", + "source_location": "L57" }, { - "id": "tests_test_classifier_rationale_1", - "label": "Unit tests for deterministic classification decision logic.", + "id": "src_adapters_llm_rationale_66", + "label": "Constructs an expert-engineered prompt for multilingual entity inherence\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", - "norm_label": "unit tests for deterministic classification decision logic.", - "source_file": "tests/test_classifier.py", - "source_location": "L1" + "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": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "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", @@ -10704,7 +10824,7 @@ "label": "Valida extra\u00e7\u00e3o de JSON quando a resposta do LLM vem formatada em bloco\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "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", @@ -10715,7 +10835,7 @@ "label": "Valida que respostas corrompidas ou JSONs sem campos obrigat\u00f3rios retornem None\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", "norm_label": "valida que respostas corrompidas ou jsons sem campos obrigatorios retornem none...", "source_file": "tests/test_llm_fallback.py", @@ -10726,7 +10846,7 @@ "label": "Garante que o classificador dispare o Tier 3 LLM para casos amb\u00edguos\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", "norm_label": "garante que o classificador dispare o tier 3 llm para casos ambiguos...", "source_file": "tests/test_llm_fallback.py", @@ -10737,7 +10857,7 @@ "label": "Garante que casos claros (alta confian\u00e7a e alta densidade de \u00e2ncoras) N\u00c3O\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", "norm_label": "garante que casos claros (alta confianca e alta densidade de ancoras) nao...", "source_file": "tests/test_llm_fallback.py", @@ -10748,7 +10868,7 @@ "label": "Garante que se o LLM falhar por erro de rede ou timeout, o classificador\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "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", @@ -10759,7 +10879,7 @@ "label": "Garante que a CLI classify.py aceite e processe a flag --enable-llm sem erros.", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "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", @@ -10770,7 +10890,7 @@ "label": "Valida detec\u00e7\u00e3o de disponibilidade por chave de API ou provider customizado.", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "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", @@ -10781,7 +10901,7 @@ "label": "Valida a montagem do prompt de desambigua\u00e7\u00e3o com metadados do ECP e documento.", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", "norm_label": "valida a montagem do prompt de desambiguacao com metadados do ecp e documento.", "source_file": "tests/test_llm_fallback.py", @@ -10792,7 +10912,7 @@ "label": "Valida o parsing e instancia\u00e7\u00e3o correta do ClassificationResult a partir da\u2026", "_origin": "ast", "community": 152, - "community_name": "InherenceClassifier", + "community_name": "LLMFallbackAdapter", "file_type": "rationale", "norm_label": "valida o parsing e instanciacao correta do classificationresult a partir da...", "source_file": "tests/test_llm_fallback.py", @@ -11166,48 +11286,180 @@ "source_location": "L92" }, { - "id": "src_adapters_llm_rationale_129", - "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", + "id": "tests_test_classifier", + "label": "test_classifier.py", "_origin": "ast", "community": 165, - "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": "L129" + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_classifier.py", + "source_file": "tests/test_classifier.py", + "source_location": "L1" }, { - "id": "src_adapters_llm_rationale_151", - "label": "Parses and validates structured JSON response from LLM.", + "id": "tests_test_e2e_text_analysis_pipeline", + "label": "test_e2e_text_analysis_pipeline.py", "_origin": "ast", "community": 165, - "community_name": ".disambiguate", - "file_type": "rationale", - "norm_label": "parses and validates structured json response from llm.", - "source_file": "src/adapters/llm.py", - "source_location": "L151" + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "test_e2e_text_analysis_pipeline.py", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L1" }, { - "id": "src_adapters_llm_rationale_31", - "label": "Returns True if an API key or custom provider function is configured.", + "id": "tests_test_e2e_text_analysis_pipeline_py_parametrize", + "label": "parametrize", "_origin": "ast", "community": 165, - "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": "L31" + "community_name": "InherenceClassifier", + "file_type": "code", + "norm_label": "parametrize", + "source_file": "", + "source_location": "" }, { - "id": "src_adapters_llm_rationale_40", - "label": "Constructs an expert-engineered prompt for multilingual entity inherence\u2026", + "id": "tests_test_e2e_text_analysis_pipeline_py_path", + "label": "Path", "_origin": "ast", "community": 165, - "community_name": ".disambiguate", + "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", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", "file_type": "rationale", - "norm_label": "constructs an expert-engineered prompt for multilingual entity inherence...", - "source_file": "src/adapters/llm.py", - "source_location": "L40" + "norm_label": "tier 1 deterministic nlp entity inherence classifier with optional tier 2 /...", + "source_file": "src/classifier.py", + "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.", + "_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.", + "source_file": "tests/test_adversarial.py", + "source_location": "L15" + }, + { + "id": "tests_test_classifier_rationale_1", + "label": "Unit tests for deterministic classification decision logic.", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "unit tests for deterministic classification decision logic.", + "source_file": "tests/test_classifier.py", + "source_location": "L1" + }, + { + "id": "tests_test_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", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "suite de testes e2e e de integracao completa para analise de texto e...", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L1" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_102", + "label": "Cen\u00e1rio 1: Artigo com alta densidade de \u00e2ncoras do River Plate. Or\u00e1culo:\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 1: artigo com alta densidade de ancoras do river plate. oraculo:...", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L102" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_137", + "label": "Cen\u00e1rio 2: Artigo sobre a Bacia do Rio da Prata ou clube hom\u00f4nimo do Uruguai.\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 2: artigo sobre a bacia do rio da prata ou clube homonimo do uruguai....", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L137" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_160", + "label": "Cen\u00e1rio 3: Men\u00e7\u00e3o isolada do clube ('River') em contexto com poucas \u00e2ncoras\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 3: mencao isolada do clube ('river') em contexto com poucas ancoras...", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L160" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_196", + "label": "Cen\u00e1rio 4: Men\u00e7\u00e3o metaf\u00f3rica ou tur\u00edstica a um local pr\u00f3ximo. Tier 1\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 4: mencao metaforica ou turistica a um local proximo. tier 1...", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L196" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_231", + "label": "Cen\u00e1rio 5: LLM configurado, caso amb\u00edguo, mas a API externa sofre timeout/500.\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "cenario 5: llm configurado, caso ambiguo, mas a api externa sofre timeout/500....", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L231" + }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_282", + "label": "Garante a identifica\u00e7\u00e3o precisa de idioma e integridade nos 6 idiomas\u2026", + "_origin": "ast", + "community": 165, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "garante a identificacao precisa de idioma e integridade nos 6 idiomas...", + "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", @@ -13752,6 +14004,17 @@ "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", @@ -13851,6 +14114,28 @@ "source_file": "src/adapters/llm.py", "source_location": "L1" }, + { + "id": "src_adapters_llm_rationale_21", + "label": "Carrega vari\u00e1veis do arquivo .env na raiz do projeto se existir.", + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "rationale", + "norm_label": "carrega variaveis do arquivo .env na raiz do projeto se existir.", + "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).", @@ -13862,17 +14147,6 @@ "source_file": "tests/test_adapters.py", "source_location": "L1" }, - { - "id": "src_models_py_any", - "label": "Any", - "_origin": "ast", - "community": 46, - "community_name": "test_adversarial.py", - "file_type": "code", - "norm_label": "any", - "source_file": "", - "source_location": "" - }, { "id": "tests_test_adversarial", "label": "test_adversarial.py", @@ -13895,6 +14169,17 @@ "source_file": "", "source_location": "" }, + { + "id": "tests_test_e2e_text_analysis_pipeline_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_adversarial_rationale_1", "label": "Adversarial and robustness test suite for Multilingual NLP Entity Inherence\u2026", @@ -13928,17 +14213,6 @@ "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.", @@ -13983,6 +14257,17 @@ "source_file": "tests/test_adversarial.py", "source_location": "L69" }, + { + "id": "tests_test_e2e_text_analysis_pipeline_rationale_43", + "label": "Fixture ECP oficial para o Club Atl\u00e9tico River Plate.", + "_origin": "ast", + "community": 46, + "community_name": "test_adversarial.py", + "file_type": "rationale", + "norm_label": "fixture ecp oficial para o club atletico river plate.", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L43" + }, { "id": "src_classifier", "label": "classifier.py", @@ -17839,7 +18124,7 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc4 licenca", "source_file": "README.md", - "source_location": "L543" + "source_location": "L547" }, { "id": "readme_matriz_determin\u00edstica_de_metadados", @@ -17923,7 +18208,7 @@ "node_kind": "heading", "norm_label": "\ud83e\uddea testes e qualidade de codigo", "source_file": "README.md", - "source_location": "L511" + "source_location": "L512" }, { "id": "readme_textnlpclassifierapp", @@ -19383,7 +19668,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/llm.py", - "source_location": "L133", + "source_location": "L159", "weight": 1.0 }, { @@ -19395,7 +19680,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/llm.py", - "source_location": "L136", + "source_location": "L162", "weight": 1.0 }, { @@ -19407,7 +19692,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/llm.py", - "source_location": "L141", + "source_location": "L167", "weight": 1.0 }, { @@ -19419,7 +19704,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/llm.py", - "source_location": "L171", + "source_location": "L239", "weight": 1.0 }, { @@ -19431,7 +19716,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/llm.py", - "source_location": "L180", + "source_location": "L248", "weight": 1.0 }, { @@ -20274,6 +20559,162 @@ "source_location": "L188", "weight": 1.0 }, + { + "source": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L44", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L352", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "target": "src_models_ecpsnapshot", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L358", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "target": "src_models_classificationresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L365", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L239", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L240", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L214", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L215", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L178", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L179", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_rejection_homonym", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L145", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L117", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "target": "src_classifier_inherenceclassifier", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L118", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents_test_cli_main_missing_input_file", "target": "scripts_extract_article_contents_main", @@ -21726,6 +22167,30 @@ "source_location": "L177", "weight": 1.0 }, + { + "source": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", + "target": "tests_test_e2e_text_analysis_pipeline_py_fixture", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_multilingual_language_detection", + "target": "tests_test_e2e_text_analysis_pipeline_py_parametrize", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L256", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents_sample_input_json", "target": "tests_test_extract_article_contents_py_fixture", @@ -22227,7 +22692,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L13", + "source_location": "L16", "weight": 1.0 }, { @@ -22239,7 +22704,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L14", + "source_location": "L17", "weight": 1.0 }, { @@ -22251,7 +22716,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L14", + "source_location": "L17", "weight": 1.0 }, { @@ -22263,7 +22728,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L14", + "source_location": "L17", "weight": 1.0 }, { @@ -22698,6 +23163,78 @@ "source_location": "L21", "weight": 1.0 }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_adapters_llm_llmfallbackadapter", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L24", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_classifier_inherenceclassifier", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L25", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_models_classificationresult", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L26", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_models_decisioncategory", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L26", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_models_ecpsnapshot", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L26", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_models_relatedentity", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L26", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents", "target": "scripts_extract_article_contents_articlecrawler", @@ -23307,7 +23844,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L13", + "source_location": "L16", "weight": 1.0 }, { @@ -23319,7 +23856,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L14", + "source_location": "L17", "weight": 1.0 }, { @@ -23502,6 +24039,42 @@ "source_location": "L21", "weight": 1.0 }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_adapters_llm", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L24", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_classifier", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L25", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "src_models", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L26", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents", "target": "scripts_extract_article_contents", @@ -23799,7 +24372,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/adapters/llm.py", - "source_location": "L37", + "source_location": "L63", "weight": 1.0 }, { @@ -23811,7 +24384,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/adapters/llm.py", - "source_location": "L37", + "source_location": "L63", "weight": 1.0 }, { @@ -23823,7 +24396,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/adapters/llm.py", - "source_location": "L123", + "source_location": "L149", "weight": 1.0 }, { @@ -23838,6 +24411,18 @@ "source_location": "L65", "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", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L293", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents_test_cli_main_missing_input_file", "target": "tests_test_extract_article_contents_py_path", @@ -24087,7 +24672,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "src/adapters/llm.py", - "source_location": "L123", + "source_location": "L149", "weight": 1.0 }, { @@ -28257,7 +28842,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L511", + "source_location": "L512", "weight": 1.0 }, { @@ -28268,7 +28853,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L543", + "source_location": "L547", "weight": 1.0 }, { @@ -34651,6 +35236,17 @@ "source_location": "L13", "weight": 1.0 }, + { + "source": "src_adapters_llm", + "target": "src_adapters_llm_load_env_file", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L20", + "weight": 1.0 + }, { "source": "src_adapters_llm", "target": "src_adapters_llm_llmfallbackadapter", @@ -34659,7 +35255,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L17", + "source_location": "L42", "weight": 1.0 }, { @@ -35795,6 +36391,105 @@ "source_location": "L91", "weight": 1.0 }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L101", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_rejection_homonym", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L136", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L159", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L195", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L230", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_multilingual_language_detection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L279", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_cli_subprocess_end_to_end", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L293", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L347", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline", + "target": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L42", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents", "target": "tests_test_extract_article_contents_test_load_search_json_valid", @@ -36826,7 +37521,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L17", + "source_location": "L42", "weight": 1.0 }, { @@ -37189,7 +37884,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L123", + "source_location": "L149", "weight": 1.0 }, { @@ -37200,7 +37895,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L146", + "source_location": "L214", "weight": 1.0 }, { @@ -37211,7 +37906,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L20", + "source_location": "L45", "weight": 1.0 }, { @@ -37222,7 +37917,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L30", + "source_location": "L56", "weight": 1.0 }, { @@ -37233,7 +37928,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L34", + "source_location": "L60", "weight": 1.0 }, { @@ -37244,7 +37939,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L37", + "source_location": "L63", "weight": 1.0 }, { @@ -38095,58 +38790,69 @@ "weight": 1.0 }, { - "source": "src_adapters_llm_rationale_129", + "source": "src_adapters_llm_rationale_155", "target": "src_adapters_llm_llmfallbackadapter_disambiguate", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L129", + "source_location": "L155", "weight": 1.0 }, { - "source": "src_adapters_llm_rationale_151", + "source": "src_adapters_llm_rationale_21", + "target": "src_adapters_llm_load_env_file", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/adapters/llm.py", + "source_location": "L21", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_rationale_219", "target": "src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L151", + "source_location": "L219", "weight": 1.0 }, { - "source": "src_adapters_llm_rationale_18", + "source": "src_adapters_llm_rationale_43", "target": "src_adapters_llm_llmfallbackadapter", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L18", + "source_location": "L43", "weight": 1.0 }, { - "source": "src_adapters_llm_rationale_31", + "source": "src_adapters_llm_rationale_57", "target": "src_adapters_llm_llmfallbackadapter_is_available", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L31", + "source_location": "L57", "weight": 1.0 }, { - "source": "src_adapters_llm_rationale_40", + "source": "src_adapters_llm_rationale_66", "target": "src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/llm.py", - "source_location": "L40", + "source_location": "L66", "weight": 1.0 }, { @@ -38864,6 +39570,116 @@ "source_location": "L92", "weight": 1.0 }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_1", + "target": "tests_test_e2e_text_analysis_pipeline", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_102", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L102", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_137", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_rejection_homonym", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L137", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_160", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L160", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_196", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L196", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_231", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L231", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_282", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_multilingual_language_detection", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L282", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_294", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_cli_subprocess_end_to_end", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L294", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_348", + "target": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L348", + "weight": 1.0 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_rationale_43", + "target": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L43", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents_rationale_317", "target": "tests_test_extract_article_contents_test_e2e_live_article_extraction", @@ -39998,6 +40814,78 @@ "source_location": "L73", "weight": 0.8 }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L230", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_multilingual_language_detection", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L280", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L195", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L159", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_rejection_homonym", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L136", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "target": "src_models_ecpsnapshot", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "context": "parameter_type", + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L101", + "weight": 0.8 + }, { "source": "classify_main", "target": "src_models_errorcode", @@ -40072,7 +40960,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/llm.py", - "source_location": "L171", + "source_location": "L239", "weight": 0.8 }, { @@ -40083,7 +40971,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/llm.py", - "source_location": "L38", + "source_location": "L64", "weight": 0.8 }, { @@ -40094,7 +40982,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/llm.py", - "source_location": "L38", + "source_location": "L64", "weight": 0.8 }, { @@ -40284,6 +41172,94 @@ "source_location": "L72", "weight": 0.8 }, + { + "source": "tests_test_e2e_text_analysis_pipeline_ecp_river_plate", + "target": "src_models_relatedentity", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L78", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_live_api_execution_if_configured", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L366", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_llm_failure_graceful_degradation", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L246", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_multilingual_language_detection", + "target": "src_classifier_inherenceclassifier", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L283", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_confirmed_tangential_by_llm", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L219", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_ambiguity_resolved_by_llm_upgrade", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L183", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_rejection_homonym", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L148", + "weight": 0.8 + }, + { + "source": "tests_test_e2e_text_analysis_pipeline_test_funnel_nlp_deterministic_success", + "target": "src_models_decisioncategory", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_e2e_text_analysis_pipeline.py", + "source_location": "L122", + "weight": 0.8 + }, { "source": "tests_test_extract_article_contents_test_cli_main_success", "target": "scripts_extract_article_contents_articlecrawler", @@ -40638,5 +41614,5 @@ } ], "hyperedges": [], - "built_at_commit": "31152d503122090f1f4df8de42181495eaa88a58" + "built_at_commit": "bae144055e6b01759e2c90114eba2be372282e50" } \ 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 7a9b7cf..49c9160 100644 --- a/graphify-out/2026-08-21/manifest.json +++ b/graphify-out/2026-08-21/manifest.json @@ -330,9 +330,9 @@ "semantic_hash": "" }, "src/adapters/llm.py": { - "mtime": 1787320797.2485664, - "seen": 1787320818.2953389, - "ast_hash": "a5cd6f66048ee1d443c2c91ae9947a14", + "mtime": 1787321086.752706, + "seen": 1787321205.5144775, + "ast_hash": "21ac74a13ac5dfad7db498b17165f8b3", "semantic_hash": "" }, "src/classifier.py": { @@ -654,9 +654,9 @@ "semantic_hash": "" }, "README.md": { - "mtime": 1787320219.5852203, - "seen": 1787320239.0933797, - "ast_hash": "ce59670fbaebc5e408a30a1009a58d12", + "mtime": 1787321187.0812356, + "seen": 1787321205.5201268, + "ast_hash": "aedfaf7a245288227952a2e28e7e7b13", "semantic_hash": "" }, "scripts/extract_article_contents.py": { @@ -916,5 +916,11 @@ "seen": 1787320818.2967606, "ast_hash": "e5d98de814ceeecd8bd601a7c206e92d", "semantic_hash": "" + }, + "tests/test_e2e_text_analysis_pipeline.py": { + "mtime": 1787321086.751707, + "seen": 1787321205.5156026, + "ast_hash": "3a2d47f2ffcf8371ffdf90bb797b5346", + "semantic_hash": "" } } \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index b7c8458..4e8b1de 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/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 ![alt](url) 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 ![alt](url) 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/cache/ast/v0.9.47-s2/082aae4b64b35cbf2688f5eaadb86f7620565e631721af861536b4e293d1dd4e.json b/graphify-out/cache/ast/v0.9.47-s2/082aae4b64b35cbf2688f5eaadb86f7620565e631721af861536b4e293d1dd4e.json new file mode 100644 index 0000000..0e0ae1c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/082aae4b64b35cbf2688f5eaadb86f7620565e631721af861536b4e293d1dd4e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_src_classifier_py", "label": "classifier.py", "file_type": "code", "source_file": "src/classifier.py", "source_location": "L1"}, {"id": "$graphify-root$_src_classifier_match_phrase_in_text", "label": "match_phrase_in_text()", "file_type": "code", "source_file": "src/classifier.py", "source_location": "L17", "_callable": true}, {"id": "$graphify-root$_src_classifier_count_phrase_occurrences", "label": "count_phrase_occurrences()", "file_type": "code", "source_file": "src/classifier.py", "source_location": "L30", "_callable": true}, {"id": "$graphify-root$_src_classifier_inherenceclassifier", "label": "InherenceClassifier", "file_type": "code", "source_file": "src/classifier.py", "source_location": "L41", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_src_classifier_inherenceclassifier_init", "label": ".__init__()", "file_type": "code", "source_file": "src/classifier.py", "source_location": "L44", "_callable": true}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/classifier.py"}, {"id": "$graphify-root$_src_classifier_inherenceclassifier_classify", "label": ".classify()", "file_type": "code", "source_file": "src/classifier.py", "source_location": "L65", "_callable": true}, {"id": "ecpsnapshot", "label": "ECPSnapshot", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/classifier.py"}, {"id": "classificationresult", "label": "ClassificationResult", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/classifier.py"}, {"id": "$graphify-root$_src_classifier_rationale_1", "label": "Core deterministic classification engine (Tier 1 core).", "file_type": "rationale", "source_file": "src/classifier.py", "source_location": "L1"}, {"id": "$graphify-root$_src_classifier_rationale_18", "label": "Check if a normalized phrase appears in normalized text with word boundary\u2026", "file_type": "rationale", "source_file": "src/classifier.py", "source_location": "L18"}, {"id": "$graphify-root$_src_classifier_rationale_31", "label": "Count occurrences of a phrase in text.", "file_type": "rationale", "source_file": "src/classifier.py", "source_location": "L31"}, {"id": "$graphify-root$_src_classifier_rationale_42", "label": "Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /\u2026", "file_type": "rationale", "source_file": "src/classifier.py", "source_location": "L42"}, {"id": "$graphify-root$_src_classifier_rationale_66", "label": "Classify inherence of content against an ECP snapshot.", "file_type": "rationale", "source_file": "src/classifier.py", "source_location": "L66"}], "edges": [{"source": "$graphify-root$_src_classifier_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "src_language", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "src_parser", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "$graphify-root$_src_classifier_match_phrase_in_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "$graphify-root$_src_classifier_count_phrase_occurrences", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_py", "target": "$graphify-root$_src_classifier_inherenceclassifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier", "target": "$graphify-root$_src_classifier_inherenceclassifier_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L44", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier_init", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L44", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier", "target": "$graphify-root$_src_classifier_inherenceclassifier_classify", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier_classify", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier_classify", "target": "classificationresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier_classify", "target": "$graphify-root$_src_classifier_count_phrase_occurrences", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L86", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier_classify", "target": "$graphify-root$_src_classifier_match_phrase_in_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L94", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_inherenceclassifier_classify", "target": "classificationresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L232", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_rationale_1", "target": "$graphify-root$_src_classifier_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_rationale_18", "target": "$graphify-root$_src_classifier_match_phrase_in_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_rationale_31", "target": "$graphify-root$_src_classifier_count_phrase_occurrences", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_rationale_42", "target": "$graphify-root$_src_classifier_inherenceclassifier", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L42", "weight": 1.0}, {"source": "$graphify-root$_src_classifier_rationale_66", "target": "$graphify-root$_src_classifier_inherenceclassifier_classify", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/classifier.py", "source_location": "L66", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_src_classifier_match_phrase_in_text", "callee": "normalize_text", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L21", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_match_phrase_in_text", "callee": "escape", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L26", "receiver": "re"}, {"caller_nid": "$graphify-root$_src_classifier_match_phrase_in_text", "callee": "search", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L27", "receiver": "re"}, {"caller_nid": "$graphify-root$_src_classifier_count_phrase_occurrences", "callee": "normalize_text", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L34", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_count_phrase_occurrences", "callee": "escape", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L37", "receiver": "re"}, {"caller_nid": "$graphify-root$_src_classifier_count_phrase_occurrences", "callee": "findall", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L38", "receiver": "re"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_init", "callee": "LocalEmbeddingsAdapter", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_init", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L63", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "strip", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L67", "receiver": "content_md"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "ValueError", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L68", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "detect_language", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L71", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "strip_markdown", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L72", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "normalize_text", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L73", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "normalize_text", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "add", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L85", "receiver": "seen_norm_terms"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L88", "receiver": "matched_target_terms"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L95", "receiver": "matched_anchors"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L101", "receiver": "matched_negative_anchors"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/classifier.py", "source_location": "L107"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "get", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L108", "receiver": "rel"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "get", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L109", "receiver": "rel"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "get", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L110", "receiver": "rel"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "get", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L111", "receiver": "rel"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "get", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L112", "receiver": "rel"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "get", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L113", "receiver": "rel"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L129", "receiver": "matched_graph_entities"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L179", "receiver": "warnings"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L204", "receiver": "warnings"}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "extract_evidence_snippets", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L228", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "extract_evidence_snippets", "is_member_call": false, "source_file": "src/classifier.py", "source_location": "L230", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "is_available", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L246", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "disambiguate", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L253", "receiver": null}, {"caller_nid": "$graphify-root$_src_classifier_inherenceclassifier_classify", "callee": "append", "is_member_call": true, "source_file": "src/classifier.py", "source_location": "L257", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/86981cdaa4637b9b8c54e553bb2047856459bef1b76ad86496aa64d28a293005.json b/graphify-out/cache/ast/v0.9.47-s2/86981cdaa4637b9b8c54e553bb2047856459bef1b76ad86496aa64d28a293005.json new file mode 100644 index 0000000..8493453 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/86981cdaa4637b9b8c54e553bb2047856459bef1b76ad86496aa64d28a293005.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_readme_md", "label": "README.md", "file_type": "document", "node_kind": "page", "source_file": "README.md", "source_location": "L1"}, {"id": "$graphify-root$_readme_textnlpclassifierapp", "label": "\ud83e\udde0 TextNLPClassifierApp", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L1"}, {"id": "$graphify-root$_readme_tabela_de_conte\u00fados", "label": "\ud83d\udcd1 Tabela de Conte\u00fados", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L13"}, {"id": "$graphify-root$_readme_vis\u00e3o_geral", "label": "\ud83c\udf1f Vis\u00e3o Geral", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L51"}, {"id": "$graphify-root$_readme_instala\u00e7\u00e3o_e_setup", "label": "\u2699\ufe0f Instala\u00e7\u00e3o e Setup", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L63"}, {"id": "$graphify-root$_readme_1_clonar_o_reposit\u00f3rio_e_criar_ambiente_virtual", "label": "1. Clonar o Reposit\u00f3rio e Criar Ambiente Virtual", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L65"}, {"id": "$graphify-root$_readme_2_instalar_depend\u00eancias", "label": "2. Instalar Depend\u00eancias", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L78"}, {"id": "$graphify-root$_readme_3_baixar_bin\u00e1rios_do_navegador_stealth_camoufox", "label": "3. Baixar Bin\u00e1rios do Navegador Stealth (Camoufox)", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L84"}, {"id": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "label": "1. \ud83e\udde0 Classificador de Conte\u00fado e Iner\u00eancia (NLP / LLM / ECP)", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L94"}, {"id": "$graphify-root$_readme_o_que_\u00e9_e_como_funciona", "label": "O que \u00e9 e Como Funciona", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L96"}, {"id": "$graphify-root$_readme_arquitetura_de_classifica\u00e7\u00e3o_em_3_tiers", "label": "Arquitetura de Classifica\u00e7\u00e3o em 3 Tiers", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L102"}, {"id": "$graphify-root$_readme_categorias_de_decis\u00e3o", "label": "Categorias de Decis\u00e3o", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L123"}, {"id": "$graphify-root$_readme_formato_do_ecp_snapshot_e_markdown", "label": "Formato do ECP Snapshot e Markdown", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L132"}, {"id": "$graphify-root$_readme_exemplo_de_ecp_snapshot_real_examples_ecp_club_atletico_river_plate_json", "label": "Exemplo de ECP Snapshot Real (`examples/ecp_club_atletico_river_plate.json`):", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L134"}, {"id": "$graphify-root$_readme_exemplos_de_uso_cli", "label": "Exemplos de Uso CLI", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L168"}, {"id": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "label": "2. \ud83d\udcf0 Extrator de Manchetes do Google News", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L188"}, {"id": "$graphify-root$_readme_o_que_\u00e9_e_como_funciona_190", "label": "O que \u00e9 e Como Funciona", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L190"}, {"id": "$graphify-root$_readme_diferenciais_t\u00e9cnicos", "label": "Diferenciais T\u00e9cnicos", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L194"}, {"id": "$graphify-root$_readme_argumentos_e_flags_de_linha_de_comando", "label": "Argumentos e Flags de Linha de Comando", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L202"}, {"id": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso", "label": "Exemplos Pr\u00e1ticos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L215"}, {"id": "$graphify-root$_readme_3_extrator_e_parser_multimotor_de_artigos", "label": "3. \ud83d\udcc4 Extrator e Parser Multimotor de Artigos", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L230"}, {"id": "$graphify-root$_readme_vis\u00e3o_geral_e_tr\u00edplice_extra\u00e7\u00e3o", "label": "Vis\u00e3o Geral e Tr\u00edplice Extra\u00e7\u00e3o", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L232"}, {"id": "$graphify-root$_readme_argumentos_e_flags_cli", "label": "Argumentos e Flags CLI", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L242"}, {"id": "$graphify-root$_readme_exemplos_de_uso", "label": "Exemplos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L253"}, {"id": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "label": "4. \ud83c\udfaf Seletor Determin\u00edstico de Conte\u00fado de Artigos", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L268"}, {"id": "$graphify-root$_readme_vis\u00e3o_geral_e_algoritmo_de_consenso_f_1", "label": "Vis\u00e3o Geral e Algoritmo de Consenso ($F_1$)", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L270"}, {"id": "$graphify-root$_readme_pipeline_de_normaliza\u00e7\u00e3o_e_shingles", "label": "Pipeline de Normaliza\u00e7\u00e3o e Shingles", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L299"}, {"id": "$graphify-root$_readme_crit\u00e9rios_de_desempate_t\u00e9cnico_e_resili\u00eancia", "label": "Crit\u00e9rios de Desempate T\u00e9cnico e Resili\u00eancia", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L311"}, {"id": "$graphify-root$_readme_argumentos_e_flags_cli_323", "label": "Argumentos e Flags CLI", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L323"}, {"id": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_332", "label": "Exemplos Pr\u00e1ticos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L332"}, {"id": "$graphify-root$_readme_1_execu\u00e7\u00e3o_padr\u00e3o_autom\u00e1tica", "label": "1. Execu\u00e7\u00e3o Padr\u00e3o Autom\u00e1tica", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L334"}, {"id": "$graphify-root$_readme_2_execu\u00e7\u00e3o_com_modo_verboso", "label": "2. Execu\u00e7\u00e3o com Modo Verboso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L340"}, {"id": "$graphify-root$_readme_3_uso_program\u00e1tico_como_m\u00f3dulo_python", "label": "3. Uso Program\u00e1tico como M\u00f3dulo Python", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L364"}, {"id": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "label": "5. \ud83d\udcdd Conversor de Artigo JSON para Markdown", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L381"}, {"id": "$graphify-root$_readme_vis\u00e3o_geral_e_estrutura_do_documento", "label": "Vis\u00e3o Geral e Estrutura do Documento", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L383"}, {"id": "$graphify-root$_readme_isolamento_estrito_de_extratores_e_fallback", "label": "Isolamento Estrito de Extratores e Fallback", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L410"}, {"id": "$graphify-root$_readme_matriz_determin\u00edstica_de_metadados", "label": "Matriz Determin\u00edstica de Metadados", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L419"}, {"id": "$graphify-root$_readme_sanitiza\u00e7\u00e3o_editorial_e_deduplica\u00e7\u00e3o", "label": "Sanitiza\u00e7\u00e3o Editorial e Deduplica\u00e7\u00e3o", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L435"}, {"id": "$graphify-root$_readme_argumentos_e_flags_cli_442", "label": "Argumentos e Flags CLI", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L442"}, {"id": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_449", "label": "Exemplos Pr\u00e1ticos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L449"}, {"id": "$graphify-root$_readme_1_convers\u00e3o_padr\u00e3o", "label": "1. Convers\u00e3o Padr\u00e3o", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L451"}, {"id": "$graphify-root$_readme_2_convers\u00e3o_com_caminho_de_destino_personalizado", "label": "2. Convers\u00e3o com Caminho de Destino Personalizado", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L457"}, {"id": "$graphify-root$_readme_3_uso_program\u00e1tico_em_python", "label": "3. Uso Program\u00e1tico em Python", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L464"}, {"id": "$graphify-root$_readme_estrutura_do_projeto", "label": "\ud83d\udcc1 Estrutura do Projeto", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L475"}, {"id": "$graphify-root$_readme_testes_e_qualidade_de_c\u00f3digo", "label": "\ud83e\uddea Testes e Qualidade de C\u00f3digo", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L513"}, {"id": "$graphify-root$_readme_licen\u00e7a", "label": "\ud83d\udcc4 Licen\u00e7a", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L551"}], "edges": [{"source": "$graphify-root$_readme_md", "target": "$graphify-root$_readme_textnlpclassifierapp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_tabela_de_conte\u00fados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_vis\u00e3o_geral", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L51", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_instala\u00e7\u00e3o_e_setup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L63", "weight": 1.0}, {"source": "$graphify-root$_readme_instala\u00e7\u00e3o_e_setup", "target": "$graphify-root$_readme_1_clonar_o_reposit\u00f3rio_e_criar_ambiente_virtual", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_readme_instala\u00e7\u00e3o_e_setup", "target": "$graphify-root$_readme_2_instalar_depend\u00eancias", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_readme_instala\u00e7\u00e3o_e_setup", "target": "$graphify-root$_readme_3_baixar_bin\u00e1rios_do_navegador_stealth_camoufox", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L84", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L94", "weight": 1.0}, {"source": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "target": "$graphify-root$_readme_o_que_\u00e9_e_como_funciona", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L96", "weight": 1.0}, {"source": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "target": "$graphify-root$_readme_arquitetura_de_classifica\u00e7\u00e3o_em_3_tiers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L102", "weight": 1.0}, {"source": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "target": "$graphify-root$_readme_categorias_de_decis\u00e3o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L123", "weight": 1.0}, {"source": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "target": "$graphify-root$_readme_formato_do_ecp_snapshot_e_markdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L132", "weight": 1.0}, {"source": "$graphify-root$_readme_formato_do_ecp_snapshot_e_markdown", "target": "$graphify-root$_readme_exemplo_de_ecp_snapshot_real_examples_ecp_club_atletico_river_plate_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L134", "weight": 1.0}, {"source": "$graphify-root$_readme_1_classificador_de_conte\u00fado_e_iner\u00eancia_nlp_llm_ecp", "target": "$graphify-root$_readme_exemplos_de_uso_cli", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L168", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L188", "weight": 1.0}, {"source": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "target": "$graphify-root$_readme_o_que_\u00e9_e_como_funciona_190", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L190", "weight": 1.0}, {"source": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "target": "$graphify-root$_readme_diferenciais_t\u00e9cnicos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L194", "weight": 1.0}, {"source": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "target": "$graphify-root$_readme_argumentos_e_flags_de_linha_de_comando", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L202", "weight": 1.0}, {"source": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "target": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L215", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_3_extrator_e_parser_multimotor_de_artigos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L230", "weight": 1.0}, {"source": "$graphify-root$_readme_3_extrator_e_parser_multimotor_de_artigos", "target": "$graphify-root$_readme_vis\u00e3o_geral_e_tr\u00edplice_extra\u00e7\u00e3o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L232", "weight": 1.0}, {"source": "$graphify-root$_readme_3_extrator_e_parser_multimotor_de_artigos", "target": "$graphify-root$_readme_argumentos_e_flags_cli", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L242", "weight": 1.0}, {"source": "$graphify-root$_readme_3_extrator_e_parser_multimotor_de_artigos", "target": "$graphify-root$_readme_exemplos_de_uso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L253", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L268", "weight": 1.0}, {"source": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "target": "$graphify-root$_readme_vis\u00e3o_geral_e_algoritmo_de_consenso_f_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L270", "weight": 1.0}, {"source": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "target": "$graphify-root$_readme_pipeline_de_normaliza\u00e7\u00e3o_e_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L299", "weight": 1.0}, {"source": "$graphify-root$_readme_md", "target": "$graphify-root$_url_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L304", "weight": 1.0}, {"source": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "target": "$graphify-root$_readme_crit\u00e9rios_de_desempate_t\u00e9cnico_e_resili\u00eancia", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L311", "weight": 1.0}, {"source": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "target": "$graphify-root$_readme_argumentos_e_flags_cli_323", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L323", "weight": 1.0}, {"source": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "target": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_332", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L332", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_332", "target": "$graphify-root$_readme_1_execu\u00e7\u00e3o_padr\u00e3o_autom\u00e1tica", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L334", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_332", "target": "$graphify-root$_readme_2_execu\u00e7\u00e3o_com_modo_verboso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L340", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_332", "target": "$graphify-root$_readme_3_uso_program\u00e1tico_como_m\u00f3dulo_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L364", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L381", "weight": 1.0}, {"source": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "target": "$graphify-root$_readme_vis\u00e3o_geral_e_estrutura_do_documento", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L383", "weight": 1.0}, {"source": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "target": "$graphify-root$_readme_isolamento_estrito_de_extratores_e_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L410", "weight": 1.0}, {"source": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "target": "$graphify-root$_readme_matriz_determin\u00edstica_de_metadados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L419", "weight": 1.0}, {"source": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "target": "$graphify-root$_readme_sanitiza\u00e7\u00e3o_editorial_e_deduplica\u00e7\u00e3o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L435", "weight": 1.0}, {"source": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "target": "$graphify-root$_readme_argumentos_e_flags_cli_442", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L442", "weight": 1.0}, {"source": "$graphify-root$_readme_5_conversor_de_artigo_json_para_markdown", "target": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_449", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L449", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_449", "target": "$graphify-root$_readme_1_convers\u00e3o_padr\u00e3o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L451", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_449", "target": "$graphify-root$_readme_2_convers\u00e3o_com_caminho_de_destino_personalizado", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L457", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_449", "target": "$graphify-root$_readme_3_uso_program\u00e1tico_em_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L464", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_estrutura_do_projeto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L475", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_testes_e_qualidade_de_c\u00f3digo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L513", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_licen\u00e7a", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L551", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/d08660e416b940ea43e9b97e362300da0782a9edd50c9fca1e28f357c827eb5e.json b/graphify-out/cache/ast/v0.9.47-s2/d08660e416b940ea43e9b97e362300da0782a9edd50c9fca1e28f357c827eb5e.json new file mode 100644 index 0000000..a67048d --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/d08660e416b940ea43e9b97e362300da0782a9edd50c9fca1e28f357c827eb5e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "label": "test_classify_exhaustive_suite.py", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L1"}, {"id": "fixture", "label": "fixture", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_classify_exhaustive_suite.py"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "label": "ecp_tech_corp()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L36", "_callable": true}, {"id": "ecpsnapshot", "label": "ECPSnapshot", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_classify_exhaustive_suite.py"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", "label": "test_happy_path_direct_inherent_with_canonical_and_anchors()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L76", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", "label": "test_happy_path_direct_inherent_via_alias_and_acronym()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L92", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L105", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", "label": "test_happy_path_contextual_inherent_via_subsidiary_graph_entity()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L119", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", "label": "test_happy_path_contextual_inherent_via_executive_graph_entity()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L134", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", "label": "test_sad_path_not_related_completely_off_topic()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L152", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L167", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", "label": "test_sad_path_not_related_negative_anchor_dominance()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L183", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L196", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", "label": "test_borderline_tangential_single_passing_mention()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L210", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", "label": "test_borderline_tangential_graph_entity_in_isolation()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L221", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "label": "test_llm_happy_path_upgrade_tangential_to_direct_inherent()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L236", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "label": "test_llm_happy_path_upgrade_tangential_to_contextual_inherent()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L259", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "label": "test_llm_happy_path_confirmation_of_tangential()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L280", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "label": "test_llm_happy_path_rejection_to_not_related()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L301", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L322", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L340", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "label": "test_llm_sad_path_network_timeout_graceful_degradation()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L353", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L369", "_callable": true}, {"id": "$graphify-root$_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()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L385", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "label": "test_llm_sad_path_missing_decision_key_in_json()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L407", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "label": "test_llm_sad_path_unknown_hallucinated_decision_enum()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L419", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "label": "test_llm_resilience_confidence_clipping()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L431", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "label": "test_llm_optimization_clear_case_bypasses_llm()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L453", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "label": "test_llm_provider_openai_client_execution()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L479", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "label": "test_llm_provider_gemini_rest_execution()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L515", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "label": "test_cli_error_ecp_file_does_not_exist()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L567", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_classify_exhaustive_suite.py"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "label": "test_cli_error_ecp_corrupted_json_syntax()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L580", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "label": "test_cli_error_ecp_missing_each_required_field()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L595", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "label": "test_cli_error_content_file_does_not_exist()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L624", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "label": "test_cli_error_empty_and_whitespace_content()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L648", "_callable": true}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "label": "test_cli_output_file_creates_nested_directories()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L676", "_callable": true}, {"id": "parametrize", "label": "parametrize", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_classify_exhaustive_suite.py"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "label": "test_multilingual_matrix_6_languages()", "file_type": "code", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L782", "_callable": true}, {"id": "decisioncategory", "label": "DecisionCategory", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_classify_exhaustive_suite.py"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_1", "label": "Su\u00edte de Testes Exaustiva para o Classificador de Iner\u00eancia (classify.py e\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_77", "label": "Cen\u00e1rio 1.1: Nome can\u00f4nico + m\u00faltiplas \u00e2ncoras tem\u00e1ticas -> DIRECT_INHERENT com\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L77"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_93", "label": "Cen\u00e1rio 1.2: Apenas o alias / sigla 'TCG' \u00e9 mencionado, com \u00e2ncoras do dom\u00ednio.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L93"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_106", "label": "Cen\u00e1rio 1.3: O nome 'TechCorp' aparece 3 vezes no texto, satisfazendo a regra\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L106"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_120", "label": "Cen\u00e1rio 1.4: Men\u00e7\u00e3o da subsidi\u00e1ria 'CloudPlatform Solutions' com \u00e2ncoras de\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L120"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_135", "label": "Cen\u00e1rio 1.5: Men\u00e7\u00e3o ao CEO no grafo + \u00e2ncoras de tecnologia.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L135"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_153", "label": "Cen\u00e1rio 2.1: Conte\u00fado totalmente desvinculado (culin\u00e1ria/jardinagem).", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L153"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_168", "label": "Cen\u00e1rio 2.2: Artigo cita muitas \u00e2ncoras ('cloud', 'software'), mas N\u00c3O cita a\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L168"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_184", "label": "Cen\u00e1rio 2.3: Hom\u00f4nimo 'TechCorp Cal\u00e7ados' dispara \u00e2ncora negativa dominante.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L184"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_197", "label": "Cen\u00e1rio 2.4: 1 \u00e2ncora negativa e 1 positiva -> prioridade de seguran\u00e7a rejeita\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L197"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L211"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_222", "label": "Cen\u00e1rio 3.2: Entidade do grafo mencionada sem contexto de dom\u00ednio -> TANGENTIAL.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L222"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_237", "label": "Cen\u00e1rio 4.1: Caso amb\u00edguo elevado para DIRECT_INHERENT pelo LLM.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L237"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_260", "label": "Cen\u00e1rio 4.2: Caso amb\u00edguo elevado para CONTEXTUAL_INHERENT pelo LLM.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L260"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_281", "label": "Cen\u00e1rio 4.3: LLM confirma categoricamente que a men\u00e7\u00e3o \u00e9 perif\u00e9rica /\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L281"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L302"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L323"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_341", "label": "Cen\u00e1rio 4.6: enable_llm=True mas sem chaves no ambiente -> degrada sem quebrar,\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L341"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L354"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L370"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_386", "label": "Cen\u00e1rio 4.9: LLM retorna texto livre ou JSON quebrado -> parser ignora com\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L386"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_408", "label": "Cen\u00e1rio 4.10: LLM retorna JSON v\u00e1lido mas sem o campo obrigat\u00f3rio 'decision'.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L408"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_420", "label": "Cen\u00e1rio 4.11: LLM alucina uma categoria inexistente (ex: 'SUPER_INHERENT').", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L420"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L432"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_454", "label": "Cen\u00e1rio 4.13: Caso claro de alta densidade N\u00c3O chama LLM mesmo com\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L454"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_480", "label": "Cen\u00e1rio 5.1: Simula execu\u00e7\u00e3o bem-sucedida via cliente OpenAI SDK.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L480"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_516", "label": "Cen\u00e1rio 5.2: Simula execu\u00e7\u00e3o bem-sucedida via API REST do Google Gemini.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L516"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_568", "label": "Cen\u00e1rio 6.1: Caminho de ECP inexistente -> Exit Code 1, error_code:\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L568"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_581", "label": "Cen\u00e1rio 6.2: Arquivo ECP com sintaxe JSON corrompida.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L581"}, {"id": "$graphify-root$_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.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L596"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_625", "label": "Cen\u00e1rio 6.4: Caminho de arquivo Markdown inexistente.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L625"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_649", "label": "Cen\u00e1rio 6.5: Arquivo Markdown vazio ou contendo apenas espa\u00e7os em branco.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L649"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_677", "label": "Cen\u00e1rio 6.6: A flag -o / --output cria diret\u00f3rios aninhados automaticamente.", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L677"}, {"id": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_792", "label": "Garante a precis\u00e3o e robustez do classificador nos 6 idiomas suportados pela\u2026", "file_type": "rationale", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L792"}], "edges": [{"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "classify", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "src_adapters_llm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "src_classifier", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "target": "fixture", "relation": "references", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L35", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L36", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "target": "ecpsnapshot", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L36", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L76", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L76", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L92", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L92", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L105", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L105", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L119", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L119", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L134", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L134", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L152", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L152", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L183", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L183", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L196", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L196", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L210", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L210", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L221", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L221", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L236", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L236", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L259", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L259", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L301", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L301", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L322", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L322", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L340", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L340", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L353", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L353", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L369", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L369", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L385", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L385", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L407", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L407", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L419", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L419", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L431", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L431", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L453", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L453", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L479", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L479", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L515", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L515", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L567", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L567", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L580", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L580", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L595", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L595", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L624", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L624", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L648", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L648", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L676", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L676", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "target": "parametrize", "relation": "references", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L711", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L782", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "target": "decisioncategory", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L782", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "target": "ecpsnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "target": "ecpsnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L793", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_1", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_77", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L77", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_93", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L93", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_106", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_120", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L120", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_135", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L135", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_153", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L153", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_168", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L168", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_184", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L184", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_197", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L197", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_211", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L211", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_222", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L222", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_237", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L237", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_260", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L260", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_281", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L281", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_302", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L302", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_323", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L323", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_341", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L341", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_354", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L354", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_370", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L370", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_386", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L386", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_408", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L408", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_420", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L420", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_432", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L432", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_454", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L454", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_480", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L480", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_516", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L516", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_568", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L568", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_581", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L581", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_596", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L596", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_625", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L625", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_649", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L649", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_677", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L677", "weight": 1.0}, {"source": "$graphify-root$_tests_test_classify_exhaustive_suite_rationale_792", "target": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L792", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "callee": "RelatedEntity", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_ecp_tech_corp", "callee": "RelatedEntity", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L59", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L78", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_with_canonical_and_anchors", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L84", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L94", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_via_alias_and_acronym", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L99", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L107", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_direct_inherent_by_repetition_without_heavy_anchors", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L113", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_subsidiary_graph_entity", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L126", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L136", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_happy_path_contextual_inherent_via_executive_graph_entity", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L141", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L154", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_completely_off_topic", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L160", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_generic_domain_without_target_or_graph", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L174", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_dominance", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L190", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L198", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_sad_path_not_related_negative_anchor_ties_with_positive_anchor", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L200", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L212", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_single_passing_mention", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L214", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L223", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_borderline_tangential_graph_entity_in_isolation", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L225", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L238", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L246", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L247", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_direct_inherent", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L250", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L261", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L269", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L270", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_upgrade_tangential_to_contextual_inherent", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L273", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L282", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L290", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L291", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_confirmation_of_tangential", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L294", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L303", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L311", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L312", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_happy_path_rejection_to_not_related", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L315", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L330", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "callee": "tracking_fn", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L330"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L331", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_llm_disabled_by_default_never_invokes_adapter", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L334", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L343", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L344", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_flag_enabled_without_api_key_or_provider", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L347", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L359", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "callee": "timeout_fn", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L359"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L360", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_network_timeout_graceful_degradation", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L363", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L375", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "callee": "error_500_fn", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L375"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L376", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_http_500_server_error_graceful_degradation", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L379", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L399", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "callee": "make_bad_provider", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L399", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L400", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_malformed_json_and_non_json_strings", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L403", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L409", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L410", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L412", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_missing_decision_key_in_json", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L415", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L421", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L422", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L424", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_sad_path_unknown_hallucinated_decision_enum", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L427", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L447", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "callee": "make_clipping_provider", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L447", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L448", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_resilience_confidence_clipping", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L449", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L461", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "callee": "tracking_fn", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L461"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L462", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_optimization_clear_case_bypasses_llm", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L468", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "MagicMock", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L481", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "MagicMock", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L482", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L483", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "MagicMock", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L492", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "patch", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L495", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L496", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L497", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_openai_client_execution", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L509", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L523", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "MagicMock", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L537", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "encode", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L538", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L538", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "patch", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L541", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L543", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L544", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_llm_provider_gemini_rest_execution", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L556", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L570", "receiver": "content_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "callee": "main", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L572", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "callee": "readouterr", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L575", "receiver": "capsys"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_file_does_not_exist", "callee": "loads", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L576", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L583", "receiver": "bad_ecp"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L585", "receiver": "content_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "callee": "main", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L587", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "callee": "readouterr", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L590", "receiver": "capsys"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_corrupted_json_syntax", "callee": "loads", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L591", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L607", "receiver": "content_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "copy", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L610", "receiver": "base_ecp"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L613", "receiver": "bad_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L613", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "main", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L615", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "readouterr", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L618", "receiver": "capsys"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_ecp_missing_each_required_field", "callee": "loads", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L619", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L627", "receiver": "ecp_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L628", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "callee": "main", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L640", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "callee": "readouterr", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L643", "receiver": "capsys"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_content_file_does_not_exist", "callee": "loads", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L644", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L651", "receiver": "ecp_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L652", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L666", "receiver": "empty_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "callee": "main", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L668", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "callee": "readouterr", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L671", "receiver": "capsys"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_error_empty_and_whitespace_content", "callee": "loads", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L672", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L679", "receiver": "ecp_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L680", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L692", "receiver": "content_file"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "main", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L696", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "exists", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L700", "receiver": "nested_out"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "loads", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L702", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_cli_output_file_creates_nested_directories", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L702", "receiver": "nested_out"}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L800", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_classify_exhaustive_suite_test_multilingual_matrix_6_languages", "callee": "classify", "is_member_call": true, "source_file": "tests/test_classify_exhaustive_suite.py", "source_location": "L801", "receiver": "classifier"}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json index 30831c5..45d9817 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":10840,"mtime_ns":1787320047036288700,"indexed_at_ns":1787320231299266400,"word_count":911,"hashes":{"src/classifier.py":"4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c"}},"src/language.py":{"size":10957,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516435249300,"word_count":887,"hashes":{"src/language.py":"75d8e6444528450b5d11eee5b51965c98525070bb65eb0edabc996701a4c5075"}},"src/models.py":{"size":5959,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516436265800,"word_count":487,"hashes":{"src/models.py":"260513e4539e617b4123ac5b5352cb6ce7caf3a5dfba08badf6390bf60784ac9"}},"src/parser.py":{"size":2654,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516437222700,"word_count":299,"hashes":{"src/parser.py":"a789a6ba02724ad75604dcc56991e8b7989558abe673d4701242012723954407"}},"tests/__init__.py":{"size":69,"mtime_ns":1787195847518641200,"indexed_at_ns":1787196460153585600,"word_count":8,"hashes":{"tests/__init__.py":"2acdae7d2696c23d5391ed343046cffa11b82f3f0d7d85767dacf0e762a955d1"}},"tests/fixtures/benchmark_24/de/contextual.md":{"size":144,"mtime_ns":1787196180779459400,"indexed_at_ns":1787196460268138600,"word_count":17,"hashes":{"tests/fixtures/benchmark_24/de/contextual.md":"b6a18c4bef2defe99773d3ba43137148d25b42ac27562b10b73ccdee1a49f203"}},"tests/fixtures/benchmark_24/de/contextual_expected.json":{"size":136,"mtime_ns":1787196187032823100,"indexed_at_ns":1787196460154321700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/contextual_expected.json":"cb741ed9bef3359a41d5c031ad213d4320c5b8fe3f8579e497ee9b1eda0ed478"}},"tests/fixtures/benchmark_24/de/direct.md":{"size":148,"mtime_ns":1787196169572812500,"indexed_at_ns":1787196460269192500,"word_count":16,"hashes":{"tests/fixtures/benchmark_24/de/direct.md":"67f375d26d8424655b76d5650c656b4af79b9964d52f2d24049e1f4de6545c9b"}},"tests/fixtures/benchmark_24/de/direct_expected.json":{"size":132,"mtime_ns":1787196175168070900,"indexed_at_ns":1787196460155004400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/direct_expected.json":"5301a39d31b365266b529ce9823145381241f8876af1ec21f0a9c27c9bdc80fa"}},"tests/fixtures/benchmark_24/de/ecp.json":{"size":579,"mtime_ns":1787196164027193900,"indexed_at_ns":1787196460155664300,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/de/ecp.json":"061fc3a9468d2baaaf2b3e8355d08d23261a9a7adc484cb06b45646eacba46fc"}},"tests/fixtures/benchmark_24/de/not_related.md":{"size":137,"mtime_ns":1787196204093781400,"indexed_at_ns":1787196460270056100,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/not_related.md":"4904b694b45a2058614a4e4350046eee042c4bbd7bcd6b88c56408ee3aebd81d"}},"tests/fixtures/benchmark_24/de/not_related_expected.json":{"size":129,"mtime_ns":1787196209729787600,"indexed_at_ns":1787196460156391600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/not_related_expected.json":"730fa882c1f3b8a7c0e2d3da9af55ee57ad7425a8b304c11f54e01899c740952"}},"tests/fixtures/benchmark_24/de/tangential.md":{"size":150,"mtime_ns":1787196193187087300,"indexed_at_ns":1787196460270857700,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/tangential.md":"8207068977006dafa7c9c4459bd996b5c124972d25f1015a589d3b06d0999613"}},"tests/fixtures/benchmark_24/de/tangential_expected.json":{"size":128,"mtime_ns":1787196198703847300,"indexed_at_ns":1787196460157130400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/tangential_expected.json":"82dea5e55d7586c4e7005755e3da4f44560238733094876047de51e854d41d92"}},"tests/fixtures/benchmark_24/en/contextual.md":{"size":148,"mtime_ns":1787196066427405900,"indexed_at_ns":1787196460271878300,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/en/contextual.md":"258a9f1ae01dae52955c1f45cb176e7d981a72ba869c33232c8c295f4816acc0"}},"tests/fixtures/benchmark_24/en/contextual_expected.json":{"size":136,"mtime_ns":1787196073211713100,"indexed_at_ns":1787196460158457500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/contextual_expected.json":"70605f9d8901d4c4b99d9fda1f30bc114cb0b65893579f77a1f9d50f62c1e3fc"}},"tests/fixtures/benchmark_24/en/direct.md":{"size":155,"mtime_ns":1787196054149613200,"indexed_at_ns":1787196460272766400,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/en/direct.md":"c7e0b093c386ccf19d9d7cbef4763dfb665213a7a245093af43529b1eaff8266"}},"tests/fixtures/benchmark_24/en/direct_expected.json":{"size":132,"mtime_ns":1787196059966736300,"indexed_at_ns":1787196460159526700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/direct_expected.json":"0b803b2ad37388be7ef4ea1d164db22c9fd784bcb9be6f56627d412f1f9299bc"}},"tests/fixtures/benchmark_24/en/ecp.json":{"size":594,"mtime_ns":1787197123717795600,"indexed_at_ns":1787197157494285900,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/en/ecp.json":"601423ac1e0b0e2bb7a0151ac87f5bdfd32450d90a022eaf9ef030338e0b4893"}},"tests/fixtures/benchmark_24/en/not_related.md":{"size":146,"mtime_ns":1787196350333465500,"indexed_at_ns":1787196460273595300,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/en/not_related.md":"2fa405b123733c5a9b5beba8c646b886b27e212cff55496a9fe7d6208ddfb11c"}},"tests/fixtures/benchmark_24/en/not_related_expected.json":{"size":129,"mtime_ns":1787196104521133100,"indexed_at_ns":1787196460161344300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/not_related_expected.json":"cb046b055b5c72d8146b6035a935211d60fb0b313ef819576bb8e7048d55f468"}},"tests/fixtures/benchmark_24/en/tangential.md":{"size":147,"mtime_ns":1787196082730266300,"indexed_at_ns":1787196460274648200,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/en/tangential.md":"793acebc11e5d6c17872d56881c8fe99cb187116c38fa4b2647d28fe3063a61e"}},"tests/fixtures/benchmark_24/en/tangential_expected.json":{"size":128,"mtime_ns":1787196089699545000,"indexed_at_ns":1787196460162151700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/tangential_expected.json":"d5b1a4dc64246838a066f73c41f0e33dcd59636e61d6c0842a3728247e536aff"}},"tests/fixtures/benchmark_24/es/contextual.md":{"size":167,"mtime_ns":1787196129959491900,"indexed_at_ns":1787196460275850900,"word_count":22,"hashes":{"tests/fixtures/benchmark_24/es/contextual.md":"d45ef46752e2093455e35cbf97076f943ab2be736c9bc4580607960b9d068731"}},"tests/fixtures/benchmark_24/es/contextual_expected.json":{"size":136,"mtime_ns":1787196135705341100,"indexed_at_ns":1787196460162957600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/contextual_expected.json":"083f7153df08f93f595782eb2959e8505ac4bda4daaf6634c7a11d444c1ba6b0"}},"tests/fixtures/benchmark_24/es/direct.md":{"size":179,"mtime_ns":1787196118640588800,"indexed_at_ns":1787196460276716800,"word_count":29,"hashes":{"tests/fixtures/benchmark_24/es/direct.md":"f6e282a68830d5518285b0cda510fe57fa844cc6322979604a427797f07fdbd7"}},"tests/fixtures/benchmark_24/es/direct_expected.json":{"size":132,"mtime_ns":1787196124282103900,"indexed_at_ns":1787196460163727400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/direct_expected.json":"fb96e4ae9e2e1603b9ac4d31b6984b31d814b3f31a8a3ca03c52c1ffa4199471"}},"tests/fixtures/benchmark_24/es/ecp.json":{"size":590,"mtime_ns":1787196110761765400,"indexed_at_ns":1787196460164509700,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/es/ecp.json":"09cad55a4cc5a8c04b9898dee21c28b0d40561fcdd8ff012fe4de96616c05f7f"}},"tests/fixtures/benchmark_24/es/not_related.md":{"size":148,"mtime_ns":1787196152611035900,"indexed_at_ns":1787196460277631800,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/not_related.md":"1b8a7f7a6852c9ec33fc34513ab479bd5edba48762a0801f7982e48adcb0089b"}},"tests/fixtures/benchmark_24/es/not_related_expected.json":{"size":129,"mtime_ns":1787196158098444000,"indexed_at_ns":1787196460165309300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/not_related_expected.json":"01645746a62894e6448895d9bf5eac394e94e54711d7f519d2ed14d8b8957487"}},"tests/fixtures/benchmark_24/es/tangential.md":{"size":141,"mtime_ns":1787196141436479100,"indexed_at_ns":1787196460278451000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/tangential.md":"41888c762fdc38fb9d5a6dc39373ac2e38331ba4520535088efef8943ea40e49"}},"tests/fixtures/benchmark_24/es/tangential_expected.json":{"size":128,"mtime_ns":1787196147026058000,"indexed_at_ns":1787196460166503400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/tangential_expected.json":"aac2bd9ab5946710c62dc0a8daf8b1481462bed081e11db4558c08ef917fcf81"}},"tests/fixtures/benchmark_24/fr/contextual.md":{"size":167,"mtime_ns":1787196288415259700,"indexed_at_ns":1787196460279288100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/fr/contextual.md":"8a36d5737429e743ffbdc8c6ae78bcc9410915e048056dbd1fb4d3d493ac7ec6"}},"tests/fixtures/benchmark_24/fr/contextual_expected.json":{"size":136,"mtime_ns":1787196295706997200,"indexed_at_ns":1787196460167650500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/contextual_expected.json":"4a155288609fc5c935a39a633d7185109629871380b88af1c367922e44abe900"}},"tests/fixtures/benchmark_24/fr/direct.md":{"size":160,"mtime_ns":1787196277020128300,"indexed_at_ns":1787196460280073100,"word_count":20,"hashes":{"tests/fixtures/benchmark_24/fr/direct.md":"f218d9c8ada6c31e813c41bcb5e6a081a1df526022b907795065c0f845480077"}},"tests/fixtures/benchmark_24/fr/direct_expected.json":{"size":132,"mtime_ns":1787196282775093400,"indexed_at_ns":1787196460168573600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/direct_expected.json":"b93c2059a731e06a164fe1331e1c7ff01fb741f728c8aa1df151ee51bc993268"}},"tests/fixtures/benchmark_24/fr/ecp.json":{"size":600,"mtime_ns":1787197131861351500,"indexed_at_ns":1787197157506006100,"word_count":50,"hashes":{"tests/fixtures/benchmark_24/fr/ecp.json":"f2e7f9eafa1fd24514541868c83db90b69784d5faf4e8d039d79d11597b51428"}},"tests/fixtures/benchmark_24/fr/not_related.md":{"size":181,"mtime_ns":1787196312472120100,"indexed_at_ns":1787196460280811500,"word_count":30,"hashes":{"tests/fixtures/benchmark_24/fr/not_related.md":"475984d25541d876b7d9e3e8f7cff7b3db2bc1489c25d6612b911da6d2b2af8e"}},"tests/fixtures/benchmark_24/fr/not_related_expected.json":{"size":129,"mtime_ns":1787196317906240800,"indexed_at_ns":1787196460170379300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/not_related_expected.json":"31b3104faa21c2a417399fdd85d077d1c58fe74ee33fd41b0942580be6f81267"}},"tests/fixtures/benchmark_24/fr/tangential.md":{"size":158,"mtime_ns":1787196301225610200,"indexed_at_ns":1787196460281594400,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/fr/tangential.md":"7f6c6ab84d2a26675f9f16fb23d45cf1e97b3ff5e28fb98df6aeaa2368d2c305"}},"tests/fixtures/benchmark_24/fr/tangential_expected.json":{"size":128,"mtime_ns":1787196306729905200,"indexed_at_ns":1787196460171141500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/tangential_expected.json":"cc117a22ba73be1b308d377767ca0ae8da8e5889ccdaa430893b3ae70a58c9ca"}},"tests/fixtures/benchmark_24/it/contextual.md":{"size":150,"mtime_ns":1787196234462201200,"indexed_at_ns":1787196460283346800,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/it/contextual.md":"045391f6f676add7e1ae9391419ef65442259ab90f9cacb5caca4d468d292017"}},"tests/fixtures/benchmark_24/it/contextual_expected.json":{"size":136,"mtime_ns":1787196240055631300,"indexed_at_ns":1787196460171870600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/contextual_expected.json":"b2b4b297f43e5af1cda526e259acede43a31b552c0321bee1ce1c72572cec557"}},"tests/fixtures/benchmark_24/it/direct.md":{"size":145,"mtime_ns":1787196221664473400,"indexed_at_ns":1787196460284281100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/direct.md":"d54bad27d944692fa7f00a036f882d1c0e42d189241822adcae86edf73a444da"}},"tests/fixtures/benchmark_24/it/direct_expected.json":{"size":132,"mtime_ns":1787196228986408600,"indexed_at_ns":1787196460172673300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/direct_expected.json":"f94e71dc4b78c0646190ff288f08dab46c67f2356b8b75cc515c28af7c9c423c"}},"tests/fixtures/benchmark_24/it/ecp.json":{"size":529,"mtime_ns":1787196215715634300,"indexed_at_ns":1787196460173452600,"word_count":45,"hashes":{"tests/fixtures/benchmark_24/it/ecp.json":"bcbd12d3057368618b006c24f384341f91349c713d10a3028d3eb4afada32de6"}},"tests/fixtures/benchmark_24/it/not_related.md":{"size":153,"mtime_ns":1787196259362992300,"indexed_at_ns":1787196460285099000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/not_related.md":"bca227c7b17fd4404e5ca1d082b848981c1da28d0b657df1e025c03056387f13"}},"tests/fixtures/benchmark_24/it/not_related_expected.json":{"size":129,"mtime_ns":1787196265318256200,"indexed_at_ns":1787196460174468400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/not_related_expected.json":"d007ac531224ad0834e9a8807582d0e047524be4c30fffdd1a19a51dba36d85d"}},"tests/fixtures/benchmark_24/it/tangential.md":{"size":155,"mtime_ns":1787196245918356300,"indexed_at_ns":1787196460285993500,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/tangential.md":"a78a886f11462033c996a20b629e13c6bb55d4e08ffed20601cd4ea877b9db09"}},"tests/fixtures/benchmark_24/it/tangential_expected.json":{"size":128,"mtime_ns":1787196252898853500,"indexed_at_ns":1787196460175957500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/tangential_expected.json":"18872f6fe4cbd71812566494e88bd97633d696f732b3b5bad871f81076703f74"}},"tests/fixtures/benchmark_24/pt/contextual.md":{"size":125,"mtime_ns":1787196014201071400,"indexed_at_ns":1787196460286845200,"word_count":18,"hashes":{"tests/fixtures/benchmark_24/pt/contextual.md":"e9ea12885a5c68822f96691e543b55885afba3d00a9e0fa65837bd88e559f157"}},"tests/fixtures/benchmark_24/pt/contextual_expected.json":{"size":136,"mtime_ns":1787196019487136800,"indexed_at_ns":1787196460176915600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/contextual_expected.json":"34145a845a7f6b155bf42c028bb0c6d8d43ed5cd0b1d179c089b1e621fecd08f"}},"tests/fixtures/benchmark_24/pt/direct.md":{"size":140,"mtime_ns":1787196003236562000,"indexed_at_ns":1787196460287899900,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/pt/direct.md":"150182b9c1352163cb136c19141b85b3f0323e7eaa0cd023fce1dfef0de63d29"}},"tests/fixtures/benchmark_24/pt/direct_expected.json":{"size":132,"mtime_ns":1787196008785189600,"indexed_at_ns":1787196460177800600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/direct_expected.json":"a9c666394db6a6e2fcd503d8cf67549531ee9e70eb73b1edb2b6a2443316cbf2"}},"tests/fixtures/benchmark_24/pt/ecp.json":{"size":507,"mtime_ns":1787195997549710300,"indexed_at_ns":1787196460178615000,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/pt/ecp.json":"cec78c3ed8d2ec311d079239922a10a35a7fc9c382d8886fec81c6322d2a70ac"}},"tests/fixtures/benchmark_24/pt/not_related.md":{"size":124,"mtime_ns":1787196036724084200,"indexed_at_ns":1787196460288769500,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/pt/not_related.md":"3af103a7f0df8e93c6154157e9903dc7fc10d64fa69dd7c2b08d4f68b99b1972"}},"tests/fixtures/benchmark_24/pt/not_related_expected.json":{"size":129,"mtime_ns":1787196042201218800,"indexed_at_ns":1787196460179403700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/not_related_expected.json":"d5ce36bca028f31ba472e325993610eb82f98e1a8f84fa770bf92aa7158ce954"}},"tests/fixtures/benchmark_24/pt/tangential.md":{"size":140,"mtime_ns":1787196024978861700,"indexed_at_ns":1787196460289652400,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/pt/tangential.md":"77d86f819ccbefe9830a57151354ca47d83e46b3d0e55d0f5139f37a1d9df0b8"}},"tests/fixtures/benchmark_24/pt/tangential_expected.json":{"size":128,"mtime_ns":1787196030395574000,"indexed_at_ns":1787196460180223100,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/tangential_expected.json":"fb977fec8db613f9545c81adffe0295084c6198b5f7c9a85d8901a228de63a51"}},"tests/test_adapters.py":{"size":1166,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516466770300,"word_count":91,"hashes":{"tests/test_adapters.py":"32a9519d5c55012aedaa43a786aff1cec88e7391d186f5d0a54213ca1b204f48"}},"tests/test_benchmark_24.py":{"size":2757,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516468505400,"word_count":257,"hashes":{"tests/test_benchmark_24.py":"7c136ac4d442e47a2f8914303880ce265c2fe49485eb182014fc3e10c06f9e71"}},"tests/test_classifier.py":{"size":3836,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516469349200,"word_count":351,"hashes":{"tests/test_classifier.py":"d3323e05dd21f20686d9293f767ebb2ced206c7b74e7ca89d2ac02c0a4e31282"}},"tests/test_cli.py":{"size":3872,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470059400,"word_count":314,"hashes":{"tests/test_cli.py":"0573d9b13e45413beefac33d86eae94e17dbbf37554120a1fc5720bfb3d67d63"}},"tests/test_language.py":{"size":1929,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516472426100,"word_count":242,"hashes":{"tests/test_language.py":"7f7aae057ecbda26edd747d24241e9cf36f611c71c5d70d0aa308df7d71e0547"}},"tests/test_models.py":{"size":3668,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516473330500,"word_count":306,"hashes":{"tests/test_models.py":"232210770fc690edcc732d940bafe46fcec9bfed7f17e0aa5c60e6cf6635751f"}},"tests/test_adversarial.py":{"size":8429,"mtime_ns":1787264437924228700,"indexed_at_ns":1787264516467613100,"word_count":704,"hashes":{"tests/test_adversarial.py":"3acc7ff372e6b0f1f42dad29d280b835ac51784b1dca8054472287a7355c9386"}},"docs/googlenews_extractor_guia_completo.md":{"size":23200,"mtime_ns":1787264437928228500,"indexed_at_ns":1787264516560203200,"word_count":2292,"hashes":{"docs/googlenews_extractor_guia_completo.md":"dcff19204ab04403030b2339663c0d3c161744f50a53f5254c459a894eb3b3c8"}},"examples/ecp_sao_paulo_futebol_clube.json":{"size":23358,"mtime_ns":1787229477299354200,"indexed_at_ns":1787234770609429300,"word_count":1524,"hashes":{"examples/ecp_sao_paulo_futebol_clube.json":"1af9006669d57f8dc123f0edea0d0fe8aaeb9016e36ec3e0d95023ea26996915"}},"scripts/extract_google_news.py":{"size":14720,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516421445500,"word_count":1314,"hashes":{"scripts/extract_google_news.py":"aa17b59997ab6bb549a918fb1026ddf5a5c5143c75c234895dc32447e2c5b85a"}},"specs/002-google-news-extractor/checklists/readiness.md":{"size":5258,"mtime_ns":1787234305932687100,"indexed_at_ns":1787234770736852100,"word_count":706,"hashes":{"specs/002-google-news-extractor/checklists/readiness.md":"ad4c18a1fe1c6f19f45a043748fe4f195db525afac53ed77905222015ec5230c"}},"specs/002-google-news-extractor/checklists/requirements.md":{"size":1144,"mtime_ns":1787232386676398600,"indexed_at_ns":1787234770737689600,"word_count":158,"hashes":{"specs/002-google-news-extractor/checklists/requirements.md":"d83944755d7f6e43d8c76e032f0047be6f8c4cb2b80dea65e198f57b9c5eccd7"}},"specs/002-google-news-extractor/contracts/cli_contract.md":{"size":2681,"mtime_ns":1787236744313922700,"indexed_at_ns":1787236813512122300,"word_count":424,"hashes":{"specs/002-google-news-extractor/contracts/cli_contract.md":"6b9e3c10becd7b8fa633e409e9a3298ff4b2903dfd5194054c8e41dd0c0c5f23"}},"specs/002-google-news-extractor/data-model.md":{"size":3008,"mtime_ns":1787234040813431800,"indexed_at_ns":1787234770739130200,"word_count":472,"hashes":{"specs/002-google-news-extractor/data-model.md":"78cec846c1173fbdff3c77313ba02c7977365e5ab102df527f90ed7b06e69519"}},"specs/002-google-news-extractor/plan.md":{"size":3947,"mtime_ns":1787236725982522400,"indexed_at_ns":1787236813514970600,"word_count":448,"hashes":{"specs/002-google-news-extractor/plan.md":"57a0a3eb1fd6d7afbe394be62e681a02d7ef26124f4142b9d8b72ea95259a34b"}},"specs/002-google-news-extractor/quickstart.md":{"size":2341,"mtime_ns":1787236764020651300,"indexed_at_ns":1787236813515935900,"word_count":317,"hashes":{"specs/002-google-news-extractor/quickstart.md":"3478a487614358839b3e53c15b05b86a4b850bead9b4142384566e244753bde3"}},"specs/002-google-news-extractor/research.md":{"size":3630,"mtime_ns":1787236785046618200,"indexed_at_ns":1787236813516811500,"word_count":483,"hashes":{"specs/002-google-news-extractor/research.md":"71e796c83a1c293fa380b4f01a2eed810275e4628548e0f8e8b9ecaa90d3ac13"}},"specs/002-google-news-extractor/spec.md":{"size":7506,"mtime_ns":1787236709078315600,"indexed_at_ns":1787236813517705300,"word_count":1096,"hashes":{"specs/002-google-news-extractor/spec.md":"e84b37b25f61ed209d1295f77bf84024ac6c3c818f6b98043204a9f81bff49f0"}},"specs/002-google-news-extractor/tasks.md":{"size":5315,"mtime_ns":1787236802480804800,"indexed_at_ns":1787236813518644500,"word_count":692,"hashes":{"specs/002-google-news-extractor/tasks.md":"94430da291ad0dc34b1cde7c30f2b8e1ce0c83d35b5e71ab68bd135146c9ef47"}},"tests/test_extract_google_news.py":{"size":12221,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516471687100,"word_count":1114,"hashes":{"tests/test_extract_google_news.py":"5304424b746b871720985cfdd031b0f8895c664bdd9d273b9c1723f445a2276f"}},"scripts/__init__.py":{"size":50,"mtime_ns":1787234973578233800,"indexed_at_ns":1787235018163517900,"word_count":6,"hashes":{"scripts/__init__.py":"f30a694c2114ef6bc58efa1caea7265dde8ef296d92cdb77c8b3e3d1f21af3a5"}},"README.md":{"size":29114,"mtime_ns":1787321187081235700,"indexed_at_ns":1787321202258211500,"word_count":3458,"hashes":{"readme.md":"709add8aa1447aa75a94d7fb2770ae3addf315f8e6afb8c9008578467fbc8273"}},"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"}}} \ 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":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 diff --git a/graphify-out/graph.html b/graphify-out/graph.html index e827ff5..c60f4ae 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -63,12 +63,12 @@
-
1579 nodes · 2030 edges · 168 communities
+
1651 nodes · 2220 edges · 170 communities