diff --git a/README.md b/README.md index ddc7784..04a2c18 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ flowchart TD * **Tier 1 (Determinístico / NLP Leve)**: Análise de frequência de termos, detecção de âncoras temáticas no primeiro terço do documento, contagem de aliases e penalização por âncoras negativas. * **Tier 2 (Vetorial / Embeddings)** *(Opcional: `--enable-embeddings`)*: Projeção vetorial e cálculo de cosseno entre o perfil da entidade e os parágrafos do documento. -* **Tier 3 (LLM Fallback)** *(Opcional: `--enable-llm`)*: Consulta a modelo de linguagem para desambiguação de casos limiares e sutilezas semânticas. +* **Tier 3 (LLM Fallback)** *(Opcional: `--enable-llm`)*: Adaptador de desambiguação inteligente (`src/adapters/llm.py`) acionado exclusivamente para casos limiares e ambíguos (ex: menção isolada `TANGENTIAL` ou confiança `< 0.60`). Casos claros não chamam o LLM para economizar custos e latência; em caso de falha de conexão com a API, degrada graciosamente mantendo o resultado do Tier 1 com aviso registrado em `warnings`. ### Categorias de Decisão @@ -499,7 +499,8 @@ TextNLPClassifierApp/ │ ├── test_extract_google_news.py │ ├── test_extract_article_contents.py │ ├── test_select_article_extractor.py -│ └── test_convert_article_to_markdown.py # Testes da conversão para Markdown +│ ├── test_convert_article_to_markdown.py # Testes da conversão para Markdown +│ └── test_llm_fallback.py # Testes do Tier 3 LLM Fallback ├── requirements.txt # Dependências do projeto ├── pyproject.toml # Configurações de ferramentas (pytest, ruff, mypy) └── README.md # Documentação principal @@ -509,12 +510,15 @@ TextNLPClassifierApp/ ## 🧪 Testes e Qualidade de Código -O repositório possui **187 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 e testes End-to-End (E2E) via CLI subprocess: +O repositório possui **196 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) e testes End-to-End (E2E) via CLI subprocess: ```bash -# Executar toda a suíte de testes do projeto (187 testes) +# Executar toda a suíte de testes do projeto (196 testes) pytest -v +# Executar os testes do Fallback para LLM (Tier 3) +pytest tests/test_llm_fallback.py -v + # Executar os testes de Conversão de Artigo para Markdown (67 testes) pytest tests/test_convert_article_to_markdown.py -v @@ -531,7 +535,7 @@ pytest tests/test_extract_google_news.py -v ruff check . # Verificação estática de tipos com Mypy -mypy scripts/convert_article_to_markdown.py +mypy src/ scripts/ tests/ ``` --- diff --git a/classify.py b/classify.py index b77e8f8..043989a 100644 --- a/classify.py +++ b/classify.py @@ -98,7 +98,7 @@ def main(argv: list[str] | None = None) -> int: try: args = parse_args(argv) except SystemExit as e: - return int(e.code) + return int(e.code) if isinstance(e.code, int) else 2 ecp_path = Path(args.ecp) content_path = Path(args.content) diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index c50ebb9..86b7751 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.graphify_labels.json @@ -45,7 +45,7 @@ "43": "2. Basic CLI Usage Examples", "44": "2. Standard Streams & Exit Codes", "45": "ClassificationResult", - "46": "InherenceClassifier", + "46": "test_adversarial.py", "47": "classifier.py", "48": "test_convert_article_to_markdown.py", "49": "content_northvolt_de.md", @@ -151,7 +151,7 @@ "149": "get_hl_gl_ceid", "150": "13. Estratégia de testes", "151": "6. Contrato de entrada", - "152": "assemble_markdown_document", + "152": "InherenceClassifier", "153": "convert_html_to_markdown", "154": "JSON Schema Contract: Deterministic Article Content Selection", "155": "5. Escopo", @@ -163,5 +163,8 @@ "161": "test_normalize_list_deduplication_preserves_case_and_order", "162": "test_normalize_date_iso_8601_variants", "163": "test_metadata_priority_original_url_all_fallbacks", - "164": "test_normalize_scalar_non_string_types" + "164": "test_normalize_scalar_non_string_types", + "165": "LLMFallbackAdapter", + "166": "remove_duplicate_initial_h1", + "167": "test_normalize_scalar_whitespace_collapsing" } diff --git a/graphify-out/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index 2c90b13..ef5c792 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": "0e7fcc21c22f118e", "46": "58f3596265f5f902", "47": "4de4f30d96344790", "48": "41da3f4214d41862", "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": "b4fe3d520c1fee9a", "100": "8c97d8c400895e15", "101": "55faed4f78d00dd4", "102": "6aa00d5a83295f11", "103": "f58668f5b10ccdeb", "104": "4ec787414cc6f50b", "105": "1cf3077fd45d874a", "106": "edcd5d9bb3c4b00f", "107": "37f2f47110fe3eaa", "108": "b7ad5abb1da8cf8d", "109": "cb48a9c4f54efa38", "110": "f6dd36fd7f3edbe5", "111": "2925b620f0b1fd17", "112": "d8b3099917c3b711", "113": "3bb61caa0302c804", "114": "0d4f1d08dd056bb9", "115": "4ac2dcddeec2ff11", "116": "07da9aae9668f573", "117": "196f63e0c4536d30", "118": "ade84262e3cfac12", "119": "ebe4e5e0c42c613f", "120": "27256931b19a2867", "121": "5396e68ca6c185ad", "122": "aa8a1de55696b666", "123": "96618c9a362af46c", "124": "83f104cbb62fd03e", "125": "6db738fb27190349", "126": "6a087a22cbcef972", "127": "85fd71a0cad8d3a5", "128": "22dd4feed96c4229", "129": "c4d2f60f532e6f16", "130": "f6b0aa8a1568926b", "131": "633a2029dd2fc8e8", "132": "67ea4284cbc02c54", "133": "d899cfc86c7a4a27", "134": "ba9464410a9b4168", "135": "0b1a09562254038e", "136": "521f5c7b9d566b4d", "137": "9e37828bdd2ba8c5", "138": "ec03c97194c56f91", "139": "f4e6d5dfa30034c5", "140": "94280631e0d38796", "141": "1e0330b8757f333e", "142": "f35d75e1194c008d", "143": "4d2ae7190b514a34", "144": "4a98716cabf43f86", "145": "0270e11190087cea", "146": "edc785fd71bb0675", "147": "4c7347f8f86e1fbd", "148": "8ca77cc4fd6fd437", "149": "09850697b717469a", "150": "f4f4ce1a1180ddb1", "151": "e426746f6e9ee15f", "152": "3f9db1282dfb2a7e", "153": "fc1af7f79936134a", "154": "56747bad6345d66b", "155": "a8e7498fa7e257df", "156": "56e7b2355898077f", "157": "f2fc88f7d8214711", "158": "c966f6f8570c8c29", "159": "dd0e66a92d9d67a8", "160": "bf44eb423b3a9ac2", "161": "c8ca209168c5125d", "162": "ec7a7324fb6c3680", "163": "6c6e3486c0ffb834", "164": "4bc6f88cad2f1d07"} \ No newline at end of file +{"0": "36bdb6f09c457f7c", "1": "8c5bf6244cf710c6", "2": "efbcc9c62a3ee78b", "3": "8599153989b07faa", "4": "b5952a1f7fee9f20", "5": "5b8462a3f82d188c", "6": "80f79e9e2011a3e3", "7": "4654167fd211d027", "8": "50acfa00fe353440", "9": "c6d2f770737823f1", "10": "44f2ca451aea24be", "11": "feaac5ab67a8c17a", "12": "b71bd92e5edbf2e0", "13": "219d65ba6d2689e4", "14": "8e30bb8112fd02d1", "15": "03906ab80b99db85", "16": "5d51c60ba1bc2be0", "17": "a1da914f522dcd21", "18": "fbad840891b90569", "19": "0686ff2d6fe29fb3", "20": "060baa9e1924b465", "21": "a5c8f2c3080b8243", "22": "0d76852f1d29eeb1", "23": "6ff68619f2d72924", "24": "3da11675eee7ec46", "25": "a6696589e9556f97", "26": "6c752999e8a4d4b6", "27": "2d4e13ea2111d750", "28": "4b60cb0ee1ac186a", "29": "f56fbca9bb8235ec", "30": "c7beed940704509f", "31": "38be2d254fb31ae8", "32": "ee5596fcf7e7c0b3", "33": "e4d4e0a440bc599f", "34": "c897e49c001acdae", "35": "3aad272a2cf5d495", "36": "0a197439d306b956", "37": "f43acf5c8b1329af", "38": "6775efafc9b33338", "39": "8176a164778526f9", "40": "66b69189c0acc3ff", "41": "0322ff824966a4d8", "42": "784c9e3d336a7f53", "43": "4b8bb6c3f7b64856", "44": "18c0ff3e6225bcb2", "45": "b18defdea7d53e37", "46": "54c0fceb01591230", "47": "0fad42a4989aa7e3", "48": "0237e1e02ee47a27", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6", "80": "6ff8a97e63c9a2f3", "81": "a38f84ae3d895236", "82": "dc6ddc157a3b9efb", "83": "a05140495d7a0353", "84": "24ca89fec34df075", "85": "f8bfd0cfe9e8b478", "86": "410d15a346bd5894", "87": "6b41d288cfd834ab", "88": "5aa6db96312a8811", "89": "80225792bb62ba04", "90": "e18a0a239fe528ba", "91": "d4579c5b7aa2742a", "92": "7b9ba7c3bff11361", "93": "71cd9c1fa4a857f0", "94": "34cd980be3c32d21", "95": "970093453f3b7d90", "96": "9e96780a2b7c4bd6", "97": "b7c10b0e09caac0b", "98": "089ea6a55861c693", "99": "cb6165a7dc822d29", "100": "8c97d8c400895e15", "101": "bd22248d0516e5d4", "102": "6aa00d5a83295f11", "103": "f58668f5b10ccdeb", "104": "4ec787414cc6f50b", "105": "1cf3077fd45d874a", "106": "edcd5d9bb3c4b00f", "107": "37f2f47110fe3eaa", "108": "b7ad5abb1da8cf8d", "109": "cb48a9c4f54efa38", "110": "f6dd36fd7f3edbe5", "111": "2925b620f0b1fd17", "112": "d8b3099917c3b711", "113": "3bb61caa0302c804", "114": "0d4f1d08dd056bb9", "115": "4ac2dcddeec2ff11", "116": "07da9aae9668f573", "117": "196f63e0c4536d30", "118": "ade84262e3cfac12", "119": "ebe4e5e0c42c613f", "120": "27256931b19a2867", "121": "5396e68ca6c185ad", "122": "aa8a1de55696b666", "123": "96618c9a362af46c", "124": "83f104cbb62fd03e", "125": "6db738fb27190349", "126": "6a087a22cbcef972", "127": "85fd71a0cad8d3a5", "128": "22dd4feed96c4229", "129": "c4d2f60f532e6f16", "130": "f6b0aa8a1568926b", "131": "142d0db70bad18fe", "132": "67ea4284cbc02c54", "133": "d899cfc86c7a4a27", "134": "ba9464410a9b4168", "135": "0d496a12149eca27", "136": "521f5c7b9d566b4d", "137": "9e37828bdd2ba8c5", "138": "ec03c97194c56f91", "139": "f4e6d5dfa30034c5", "140": "d9b47fa423cf0748", "141": "1e0330b8757f333e", "142": "f35d75e1194c008d", "143": "4d2ae7190b514a34", "144": "4a98716cabf43f86", "145": "56b2431193739c38", "146": "edc785fd71bb0675", "147": "4c7347f8f86e1fbd", "148": "8ca77cc4fd6fd437", "149": "09850697b717469a", "150": "f4f4ce1a1180ddb1", "151": "e426746f6e9ee15f", "152": "756d0fd1d69866c1", "153": "a3593e6f45bafb20", "154": "56747bad6345d66b", "155": "a8e7498fa7e257df", "156": "56e7b2355898077f", "157": "f2fc88f7d8214711", "158": "c966f6f8570c8c29", "159": "5f6094aa385f3bfe", "160": "2834e7d59672e756", "161": "cc6e436d94fd0033", "162": "64f33a2fc8969cd2", "163": "26ac1c0a00eabce1", "164": "cdcea44a6805ae55", "165": "5faccba309eb478d", "166": "85c97dab928b9b1b", "167": "7ab5695391e32126"} \ No newline at end of file diff --git a/graphify-out/2026-08-21/.graphify_labels.json b/graphify-out/2026-08-21/.graphify_labels.json index 6612580..c50ebb9 100644 --- a/graphify-out/2026-08-21/.graphify_labels.json +++ b/graphify-out/2026-08-21/.graphify_labels.json @@ -158,10 +158,10 @@ "156": "Los puntajes de River vs. Independiente Santa Fe, por la Copa Sudamericana - TyC Sports", "157": "valid_newspaper4k.md", "158": "valid_readability.md", - "159": "test_normalize_date_rfc_2822_variants", + "159": "test_normalize_list_author_url_filtering", "160": "test_normalize_date_invalid_and_placeholders", - "161": "test_metadata_priority_title_all_fallbacks", - "162": "test_metadata_priority_subtitle_omitted_when_equal_to_title", - "163": "test_metadata_priority_first_valid_source_no_cross_merging", + "161": "test_normalize_list_deduplication_preserves_case_and_order", + "162": "test_normalize_date_iso_8601_variants", + "163": "test_metadata_priority_original_url_all_fallbacks", "164": "test_normalize_scalar_non_string_types" } diff --git a/graphify-out/2026-08-21/GRAPH_REPORT.md b/graphify-out/2026-08-21/GRAPH_REPORT.md index f1fc712..c424036 100644 --- a/graphify-out/2026-08-21/GRAPH_REPORT.md +++ b/graphify-out/2026-08-21/GRAPH_REPORT.md @@ -1,7 +1,7 @@ # Graph Report - TextNLPClassifierApp (2026-08-21) ## Corpus Check -- 199 files · ~108,365 words +- 200 files · ~108,772 words - Verdict: corpus is large enough that graph structure adds value. ## Summary @@ -10,7 +10,7 @@ - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `64dfd842` +- Built from commit: `926a6b8c` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -167,11 +167,11 @@ - Los puntajes de River vs. Independiente Santa Fe, por la Copa Sudamericana - TyC Sports - valid_newspaper4k.md - valid_readability.md -- test_normalize_date_rfc_2822_variants +- test_normalize_list_author_url_filtering - test_normalize_date_invalid_and_placeholders -- test_metadata_priority_title_all_fallbacks -- test_metadata_priority_subtitle_omitted_when_equal_to_title -- test_metadata_priority_first_valid_source_no_cross_merging +- test_normalize_list_deduplication_preserves_case_and_order +- test_normalize_date_iso_8601_variants +- test_metadata_priority_original_url_all_fallbacks - test_normalize_scalar_non_string_types ## God Nodes (most connected - your core abstractions) @@ -357,7 +357,7 @@ Nodes (16): count_phrase_occurrences(), match_phrase_in_text(), Core determinist ### Community 48 - "test_convert_article_to_markdown.py" Cohesion: 0.07 -Nodes (27): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa deduplicação case-insensitive preservando a grafia e ordem da primeira…, Valida parsing de datas ISO 8601 em múltiplos formatos e fusos., Valida a cadeia de fallback completa para a URL ORIGINAL (5 níveis)., Valida decodificação de entidades HTML nomeadas e numéricas., Valida colapso de tabs, quebras de linha e espaços múltiplos em um único espaço., Garante correspondência exata byte a byte para Trafilatura, Newspaper4k e…, Garante que múltiplas execuções no mesmo arquivo produzam hashes SHA-256… (+19 more) +Nodes (27): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa comportamento com listas vazias, nulas ou contendo apenas placeholders., Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabeçalhos…, Valida a cadeia de fallback completa para o campo TÍTULO (6 níveis)., Garante que subtítulo idêntico ao título seja automaticamente omitido (None)., Valida decodificação de entidades HTML nomeadas e numéricas., Garante que listas de autores/tags usem apenas a primeira fonte válida, sem…, Garante correspondência exata byte a byte para Trafilatura, Newspaper4k e… (+19 more) ### Community 80 - "test_extract_article_contents.py" Cohesion: 0.06 diff --git a/graphify-out/2026-08-21/graph.json b/graphify-out/2026-08-21/graph.json index 7ee5962..a942618 100644 --- a/graphify-out/2026-08-21/graph.json +++ b/graphify-out/2026-08-21/graph.json @@ -1352,18 +1352,6 @@ "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L135" }, - { - "id": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", - "label": "test_normalize_list_empty_and_invalid()", - "_callable": true, - "_origin": "ast", - "community": 131, - "community_name": "convert_article_to_markdown.py", - "file_type": "code", - "norm_label": "test_normalize_list_empty_and_invalid()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L115" - }, { "id": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "label": "test_normalize_list_semicolon_and_comma_split()", @@ -1374,7 +1362,19 @@ "file_type": "code", "norm_label": "test_normalize_list_semicolon_and_comma_split()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L85" + "source_location": "L103" + }, + { + "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", + "label": "test_normalize_scalar_whitespace_collapsing()", + "_callable": true, + "_origin": "ast", + "community": 131, + "community_name": "convert_article_to_markdown.py", + "file_type": "code", + "norm_label": "test_normalize_scalar_whitespace_collapsing()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L53" }, { "id": "scripts_convert_article_to_markdown_resolve_article_body", @@ -1398,7 +1398,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_invalid_selected_extractor()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L318" + "source_location": "L339" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", @@ -1410,7 +1410,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_newspaper4k_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L256" + "source_location": "L274" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", @@ -1422,7 +1422,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_readability_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L276" + "source_location": "L294" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", @@ -1434,7 +1434,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_trafilatura_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L239" + "source_location": "L257" }, { "id": "scripts_convert_article_to_markdown_clean_body_images", @@ -1446,7 +1446,7 @@ "file_type": "code", "norm_label": "clean_body_images()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L514" + "source_location": "L518" }, { "id": "scripts_convert_article_to_markdown_convert_article", @@ -1458,7 +1458,7 @@ "file_type": "code", "norm_label": "convert_article()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L614" + "source_location": "L618" }, { "id": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", @@ -1470,7 +1470,7 @@ "file_type": "code", "norm_label": "remove_duplicate_initial_h1()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L479" + "source_location": "L483" }, { "id": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", @@ -1482,7 +1482,7 @@ "file_type": "code", "norm_label": "test_clean_body_images_removes_invalid_and_deduplicates()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L456" + "source_location": "L485" }, { "id": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", @@ -1494,7 +1494,7 @@ "file_type": "code", "norm_label": "test_convert_article_api_direct()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L701" + "source_location": "L734" }, { "id": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", @@ -1506,7 +1506,7 @@ "file_type": "code", "norm_label": "test_remove_duplicate_initial_h1_exact_and_variations()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L439" + "source_location": "L468" }, { "id": "scripts_convert_article_to_markdown_main", @@ -1518,7 +1518,7 @@ "file_type": "code", "norm_label": "main()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L696" + "source_location": "L700" }, { "id": "scripts_convert_article_to_markdown_parse_arguments", @@ -1530,7 +1530,7 @@ "file_type": "code", "norm_label": "parse_arguments()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L673" + "source_location": "L677" }, { "id": "tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", @@ -1542,7 +1542,7 @@ "file_type": "code", "norm_label": "test_parse_arguments_api_direct()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L719" + "source_location": "L754" }, { "id": "scripts_extract_google_news_get_hl_gl_ceid", @@ -1602,7 +1602,7 @@ "file_type": "code", "norm_label": "assemble_markdown_document()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L546" + "source_location": "L550" }, { "id": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", @@ -1614,7 +1614,7 @@ "file_type": "code", "norm_label": "test_assemble_markdown_document_full_and_minimal()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L478" + "source_location": "L507" }, { "id": "scripts_convert_article_to_markdown_convert_html_to_markdown", @@ -1638,7 +1638,7 @@ "file_type": "code", "norm_label": "test_convert_html_to_markdown_empty_or_whitespace()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L227" + "source_location": "L245" }, { "id": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", @@ -1650,19 +1650,19 @@ "file_type": "code", "norm_label": "test_convert_html_to_markdown_rich_formatting()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L197" + "source_location": "L215" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", - "label": "test_normalize_date_rfc_2822_variants()", + "id": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", + "label": "test_normalize_list_author_url_filtering()", "_callable": true, "_origin": "ast", "community": 159, - "community_name": "test_normalize_date_rfc_2822_variants", + "community_name": "test_normalize_list_author_url_filtering", "file_type": "code", - "norm_label": "test_normalize_date_rfc_2822_variants()", + "norm_label": "test_normalize_list_author_url_filtering()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L135" + "source_location": "L114" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", @@ -1674,43 +1674,43 @@ "file_type": "code", "norm_label": "test_normalize_date_invalid_and_placeholders()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L144" + "source_location": "L162" }, { - "id": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", - "label": "test_metadata_priority_title_all_fallbacks()", + "id": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", + "label": "test_normalize_list_deduplication_preserves_case_and_order()", "_callable": true, "_origin": "ast", "community": 161, - "community_name": "test_metadata_priority_title_all_fallbacks", + "community_name": "test_normalize_list_deduplication_preserves_case_and_order", "file_type": "code", - "norm_label": "test_metadata_priority_title_all_fallbacks()", + "norm_label": "test_normalize_list_deduplication_preserves_case_and_order()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L332" + "source_location": "L127" }, { - "id": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", - "label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", + "id": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", + "label": "test_normalize_date_iso_8601_variants()", "_callable": true, "_origin": "ast", "community": 162, - "community_name": "test_metadata_priority_subtitle_omitted_when_equal_to_title", + "community_name": "test_normalize_date_iso_8601_variants", "file_type": "code", - "norm_label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", + "norm_label": "test_normalize_date_iso_8601_variants()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L406" + "source_location": "L145" }, { - "id": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", - "label": "test_metadata_priority_first_valid_source_no_cross_merging()", + "id": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", + "label": "test_metadata_priority_original_url_all_fallbacks()", "_callable": true, "_origin": "ast", "community": 163, - "community_name": "test_metadata_priority_first_valid_source_no_cross_merging", + "community_name": "test_metadata_priority_original_url_all_fallbacks", "file_type": "code", - "norm_label": "test_metadata_priority_first_valid_source_no_cross_merging()", + "norm_label": "test_metadata_priority_original_url_all_fallbacks()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L421" + "source_location": "L395" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", @@ -1722,7 +1722,7 @@ "file_type": "code", "norm_label": "test_normalize_scalar_non_string_types()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L72" + "source_location": "L90" }, { "id": "scripts_extract_google_news_build_parser", @@ -2262,7 +2262,7 @@ "file_type": "code", "norm_label": "test_cli_default_output_naming()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L645" + "source_location": "L674" }, { "id": "tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", @@ -2274,7 +2274,7 @@ "file_type": "code", "norm_label": "test_cli_exit_codes_and_error_handling()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L552" + "source_location": "L581" }, { "id": "tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", @@ -2286,7 +2286,7 @@ "file_type": "code", "norm_label": "test_cli_json_root_must_be_object()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L586" + "source_location": "L615" }, { "id": "tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", @@ -2298,7 +2298,7 @@ "file_type": "code", "norm_label": "test_cli_no_stdout_pollution_and_atomic_preservation()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L601" + "source_location": "L630" }, { "id": "tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", @@ -2310,7 +2310,7 @@ "file_type": "code", "norm_label": "test_conversion_determinism_sha256_repeatability()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L528" + "source_location": "L557" }, { "id": "tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", @@ -2322,7 +2322,7 @@ "file_type": "code", "norm_label": "test_e2e_pipeline_with_real_extracted_selected_json()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L672" + "source_location": "L703" }, { "id": "tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", @@ -2334,55 +2334,67 @@ "file_type": "code", "norm_label": "test_golden_fixtures_byte_level_precision()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L511" + "source_location": "L540" }, { - "id": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", - "label": "test_metadata_priority_original_url_all_fallbacks()", + "id": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", + "label": "test_metadata_priority_first_valid_source_no_cross_merging()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_metadata_priority_original_url_all_fallbacks()", + "norm_label": "test_metadata_priority_first_valid_source_no_cross_merging()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L371" + "source_location": "L450" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", - "label": "test_normalize_date_iso_8601_variants()", + "id": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", + "label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_date_iso_8601_variants()", + "norm_label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L127" + "source_location": "L435" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", - "label": "test_normalize_list_author_url_filtering()", + "id": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", + "label": "test_metadata_priority_title_all_fallbacks()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_list_author_url_filtering()", + "norm_label": "test_metadata_priority_title_all_fallbacks()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L96" + "source_location": "L353" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", - "label": "test_normalize_list_deduplication_preserves_case_and_order()", + "id": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", + "label": "test_normalize_date_rfc_2822_variants()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_list_deduplication_preserves_case_and_order()", + "norm_label": "test_normalize_date_rfc_2822_variants()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L109" + "source_location": "L153" + }, + { + "id": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", + "label": "test_normalize_list_empty_and_invalid()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "test_convert_article_to_markdown.py", + "file_type": "code", + "norm_label": "test_normalize_list_empty_and_invalid()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L133" }, { "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", @@ -2396,18 +2408,6 @@ "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L44" }, - { - "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", - "label": "test_normalize_scalar_whitespace_collapsing()", - "_callable": true, - "_origin": "ast", - "community": 48, - "community_name": "test_convert_article_to_markdown.py", - "file_type": "code", - "norm_label": "test_normalize_scalar_whitespace_collapsing()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L50" - }, { "id": "scripts_extract_article_contents_articlecrawler_close", "label": ".close()", @@ -3126,7 +3126,7 @@ "file_type": "code", "norm_label": "test_normalize_scalar_placeholders_discarded()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L66" + "source_location": "L84" }, { "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", @@ -3138,7 +3138,7 @@ "file_type": "code", "norm_label": "test_resolve_article_body_strict_isolation_all_extractors()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L298" + "source_location": "L316" }, { "id": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", @@ -3150,7 +3150,7 @@ "file_type": "code", "norm_label": "test_validate_url_invalid_schemes()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L187" + "source_location": "L205" }, { "id": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", @@ -3162,7 +3162,7 @@ "file_type": "code", "norm_label": "test_validate_url_valid_schemes()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L167" + "source_location": "L185" }, { "id": "specify_templates_tasks_template", @@ -8286,18 +8286,7 @@ "source_location": "L57" }, { - "id": "tests_test_convert_article_to_markdown_rationale_116", - "label": "Testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", - "_origin": "ast", - "community": 131, - "community_name": "convert_article_to_markdown.py", - "file_type": "rationale", - "norm_label": "testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L116" - }, - { - "id": "tests_test_convert_article_to_markdown_rationale_86", + "id": "tests_test_convert_article_to_markdown_rationale_104", "label": "Testa divis\u00e3o por ponto e v\u00edrgula na string e v\u00edrgulas em elementos de lista\u2026", "_origin": "ast", "community": 131, @@ -8305,7 +8294,18 @@ "file_type": "rationale", "norm_label": "testa divisao por ponto e virgula na string e virgulas em elementos de lista...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L86" + "source_location": "L104" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_54", + "label": "Valida colapso de tabs, quebras de linha e espa\u00e7os m\u00faltiplos em um \u00fanico espa\u00e7o.", + "_origin": "ast", + "community": 131, + "community_name": "convert_article_to_markdown.py", + "file_type": "rationale", + "norm_label": "valida colapso de tabs, quebras de linha e espacos multiplos em um unico espaco.", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L54" }, { "id": "docs_prd_convert_json_markdown_8_regras_funcionais", @@ -8811,7 +8811,7 @@ "source_location": "L168" }, { - "id": "tests_test_convert_article_to_markdown_rationale_240", + "id": "tests_test_convert_article_to_markdown_rationale_258", "label": "Testa prioridade trafilatura.markdown sobre trafilatura.text.", "_origin": "ast", "community": 135, @@ -8819,10 +8819,10 @@ "file_type": "rationale", "norm_label": "testa prioridade trafilatura.markdown sobre trafilatura.text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L240" + "source_location": "L258" }, { - "id": "tests_test_convert_article_to_markdown_rationale_257", + "id": "tests_test_convert_article_to_markdown_rationale_275", "label": "Testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "_origin": "ast", "community": 135, @@ -8830,10 +8830,10 @@ "file_type": "rationale", "norm_label": "testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L257" + "source_location": "L275" }, { - "id": "tests_test_convert_article_to_markdown_rationale_277", + "id": "tests_test_convert_article_to_markdown_rationale_295", "label": "Testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "_origin": "ast", "community": 135, @@ -8841,10 +8841,10 @@ "file_type": "rationale", "norm_label": "testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L277" + "source_location": "L295" }, { - "id": "tests_test_convert_article_to_markdown_rationale_319", + "id": "tests_test_convert_article_to_markdown_rationale_340", "label": "Garante erro ao receber selected_extractor ausente ou n\u00e3o reconhecido.", "_origin": "ast", "community": 135, @@ -8852,7 +8852,7 @@ "file_type": "rationale", "norm_label": "garante erro ao receber selected_extractor ausente ou nao reconhecido.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L319" + "source_location": "L340" }, { "id": "specs_005_convert_json_markdown_plan_complexity_tracking", @@ -9544,7 +9544,7 @@ "source_location": "" }, { - "id": "scripts_convert_article_to_markdown_rationale_480", + "id": "scripts_convert_article_to_markdown_rationale_484", "label": "Remove o primeiro t\u00edtulo H1 do corpo somente quando ele for igual ao t\u00edtulo\u2026", "_origin": "ast", "community": 140, @@ -9552,10 +9552,10 @@ "file_type": "rationale", "norm_label": "remove o primeiro titulo h1 do corpo somente quando ele for igual ao titulo...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L480" + "source_location": "L484" }, { - "id": "scripts_convert_article_to_markdown_rationale_515", + "id": "scripts_convert_article_to_markdown_rationale_519", "label": "Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e\u2026", "_origin": "ast", "community": 140, @@ -9563,10 +9563,10 @@ "file_type": "rationale", "norm_label": "preserva imagens com url absoluta http/https, remove relativas/data:/vazias e...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L515" + "source_location": "L519" }, { - "id": "scripts_convert_article_to_markdown_rationale_615", + "id": "scripts_convert_article_to_markdown_rationale_619", "label": "Executa a leitura do JSON, valida\u00e7\u00e3o, convers\u00e3o e escrita at\u00f4mica do arquivo\u2026", "_origin": "ast", "community": 140, @@ -9574,10 +9574,10 @@ "file_type": "rationale", "norm_label": "executa a leitura do json, validacao, conversao e escrita atomica do arquivo...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L615" + "source_location": "L619" }, { - "id": "tests_test_convert_article_to_markdown_rationale_440", + "id": "tests_test_convert_article_to_markdown_rationale_469", "label": "Testa remo\u00e7\u00e3o de H1 inicial coincidente com t\u00edtulo com varia\u00e7\u00f5es de espa\u00e7os e\u2026", "_origin": "ast", "community": 140, @@ -9585,10 +9585,10 @@ "file_type": "rationale", "norm_label": "testa remocao de h1 inicial coincidente com titulo com variacoes de espacos e...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L440" + "source_location": "L469" }, { - "id": "tests_test_convert_article_to_markdown_rationale_457", + "id": "tests_test_convert_article_to_markdown_rationale_486", "label": "Valida descarte de data:, relativos e deduplica\u00e7\u00e3o mantendo a primeira\u2026", "_origin": "ast", "community": 140, @@ -9596,10 +9596,10 @@ "file_type": "rationale", "norm_label": "valida descarte de data:, relativos e deduplicacao mantendo a primeira...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L457" + "source_location": "L486" }, { - "id": "tests_test_convert_article_to_markdown_rationale_702", + "id": "tests_test_convert_article_to_markdown_rationale_735", "label": "Testa a chamada direta da fun\u00e7\u00e3o convert_article em c\u00f3digo Python.", "_origin": "ast", "community": 140, @@ -9607,7 +9607,7 @@ "file_type": "rationale", "norm_label": "testa a chamada direta da funcao convert_article em codigo python.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L702" + "source_location": "L735" }, { "id": "specs_005_convert_json_markdown_checklists_markdown_conversion", @@ -10017,7 +10017,7 @@ "source_location": "" }, { - "id": "scripts_convert_article_to_markdown_rationale_674", + "id": "scripts_convert_article_to_markdown_rationale_678", "label": "Configura o parser de argumentos do CLI.", "_origin": "ast", "community": 145, @@ -10025,10 +10025,10 @@ "file_type": "rationale", "norm_label": "configura o parser de argumentos do cli.", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L674" + "source_location": "L678" }, { - "id": "scripts_convert_article_to_markdown_rationale_697", + "id": "scripts_convert_article_to_markdown_rationale_701", "label": "Ponto de entrada do CLI.", "_origin": "ast", "community": 145, @@ -10036,10 +10036,10 @@ "file_type": "rationale", "norm_label": "ponto de entrada do cli.", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L697" + "source_location": "L701" }, { - "id": "tests_test_convert_article_to_markdown_rationale_720", + "id": "tests_test_convert_article_to_markdown_rationale_755", "label": "Testa a chamada direta do parse_arguments.", "_origin": "ast", "community": 145, @@ -10047,7 +10047,7 @@ "file_type": "rationale", "norm_label": "testa a chamada direta do parse_arguments.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L720" + "source_location": "L755" }, { "id": "specs_005_convert_json_markdown_checklists_requirements", @@ -10502,7 +10502,7 @@ "source_location": "L61" }, { - "id": "scripts_convert_article_to_markdown_rationale_547", + "id": "scripts_convert_article_to_markdown_rationale_551", "label": "Monta a estrutura final do documento Markdown respeitando a ordem estrita do\u2026", "_origin": "ast", "community": 152, @@ -10510,10 +10510,10 @@ "file_type": "rationale", "norm_label": "monta a estrutura final do documento markdown respeitando a ordem estrita do...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L547" + "source_location": "L551" }, { - "id": "tests_test_convert_article_to_markdown_rationale_479", + "id": "tests_test_convert_article_to_markdown_rationale_508", "label": "Testa montagem com todos os campos e apenas com campos obrigat\u00f3rios.", "_origin": "ast", "community": 152, @@ -10521,7 +10521,7 @@ "file_type": "rationale", "norm_label": "testa montagem com todos os campos e apenas com campos obrigatorios.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L479" + "source_location": "L508" }, { "id": "scripts_convert_article_to_markdown_rationale_150", @@ -10535,7 +10535,7 @@ "source_location": "L150" }, { - "id": "tests_test_convert_article_to_markdown_rationale_198", + "id": "tests_test_convert_article_to_markdown_rationale_216", "label": "Valida convers\u00e3o de elementos HTML estruturados para Markdown com t\u00edtulos ATX.", "_origin": "ast", "community": 153, @@ -10543,10 +10543,10 @@ "file_type": "rationale", "norm_label": "valida conversao de elementos html estruturados para markdown com titulos atx.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L198" + "source_location": "L216" }, { - "id": "tests_test_convert_article_to_markdown_rationale_228", + "id": "tests_test_convert_article_to_markdown_rationale_246", "label": "Testa convers\u00e3o de HTML vazio retornando string vazia.", "_origin": "ast", "community": 153, @@ -10554,7 +10554,7 @@ "file_type": "rationale", "norm_label": "testa conversao de html vazio retornando string vazia.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L228" + "source_location": "L246" }, { "id": "specs_004_deterministic_content_selection_contracts_json_schema", @@ -10725,15 +10725,15 @@ "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_136", - "label": "Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabe\u00e7alhos\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_115", + "label": "Garante que URLs em campos de autor sejam estritamente descartadas.", "_origin": "ast", "community": 159, - "community_name": "test_normalize_date_rfc_2822_variants", + "community_name": "test_normalize_list_author_url_filtering", "file_type": "rationale", - "norm_label": "valida parsing de datas no formato rfc 2822 (usado em feeds rss e cabecalhos...", + "norm_label": "garante que urls em campos de autor sejam estritamente descartadas.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L136" + "source_location": "L115" }, { "id": "agents_skills_ponytail_help_skill", @@ -10836,7 +10836,7 @@ "source_location": "L63" }, { - "id": "tests_test_convert_article_to_markdown_rationale_145", + "id": "tests_test_convert_article_to_markdown_rationale_163", "label": "Garante que datas inv\u00e1lidas ou placeholders retornem None sem lan\u00e7ar exce\u00e7\u00e3o\u2026", "_origin": "ast", "community": 160, @@ -10844,43 +10844,43 @@ "file_type": "rationale", "norm_label": "garante que datas invalidas ou placeholders retornem none sem lancar excecao...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L145" + "source_location": "L163" }, { - "id": "tests_test_convert_article_to_markdown_rationale_333", - "label": "Valida a cadeia de fallback completa para o campo T\u00cdTULO (6 n\u00edveis).", + "id": "tests_test_convert_article_to_markdown_rationale_128", + "label": "Testa deduplica\u00e7\u00e3o case-insensitive preservando a grafia e ordem da primeira\u2026", "_origin": "ast", "community": 161, - "community_name": "test_metadata_priority_title_all_fallbacks", + "community_name": "test_normalize_list_deduplication_preserves_case_and_order", "file_type": "rationale", - "norm_label": "valida a cadeia de fallback completa para o campo titulo (6 niveis).", + "norm_label": "testa deduplicacao case-insensitive preservando a grafia e ordem da primeira...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L333" + "source_location": "L128" }, { - "id": "tests_test_convert_article_to_markdown_rationale_407", - "label": "Garante que subt\u00edtulo id\u00eantico ao t\u00edtulo seja automaticamente omitido (None).", + "id": "tests_test_convert_article_to_markdown_rationale_146", + "label": "Valida parsing de datas ISO 8601 em m\u00faltiplos formatos e fusos.", "_origin": "ast", "community": 162, - "community_name": "test_metadata_priority_subtitle_omitted_when_equal_to_title", + "community_name": "test_normalize_date_iso_8601_variants", "file_type": "rationale", - "norm_label": "garante que subtitulo identico ao titulo seja automaticamente omitido (none).", + "norm_label": "valida parsing de datas iso 8601 em multiplos formatos e fusos.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L407" + "source_location": "L146" }, { - "id": "tests_test_convert_article_to_markdown_rationale_422", - "label": "Garante que listas de autores/tags usem apenas a primeira fonte v\u00e1lida, sem\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_396", + "label": "Valida a cadeia de fallback completa para a URL ORIGINAL (5 n\u00edveis).", "_origin": "ast", "community": 163, - "community_name": "test_metadata_priority_first_valid_source_no_cross_merging", + "community_name": "test_metadata_priority_original_url_all_fallbacks", "file_type": "rationale", - "norm_label": "garante que listas de autores/tags usem apenas a primeira fonte valida, sem...", + "norm_label": "valida a cadeia de fallback completa para a url original (5 niveis).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L422" + "source_location": "L396" }, { - "id": "tests_test_convert_article_to_markdown_rationale_73", + "id": "tests_test_convert_article_to_markdown_rationale_91", "label": "Valida que entradas n\u00e3o string retornem None de forma segura.", "_origin": "ast", "community": 164, @@ -10888,7 +10888,7 @@ "file_type": "rationale", "norm_label": "valida que entradas nao string retornem none de forma segura.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L73" + "source_location": "L91" }, { "id": "agents_skills_speckit_checklist_skill", @@ -13819,37 +13819,48 @@ "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_110", - "label": "Testa deduplica\u00e7\u00e3o case-insensitive preservando a grafia e ordem da primeira\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_134", + "label": "Testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa deduplicacao case-insensitive preservando a grafia e ordem da primeira...", + "norm_label": "testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L110" + "source_location": "L134" }, { - "id": "tests_test_convert_article_to_markdown_rationale_128", - "label": "Valida parsing de datas ISO 8601 em m\u00faltiplos formatos e fusos.", + "id": "tests_test_convert_article_to_markdown_rationale_154", + "label": "Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabe\u00e7alhos\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "valida parsing de datas iso 8601 em multiplos formatos e fusos.", + "norm_label": "valida parsing de datas no formato rfc 2822 (usado em feeds rss e cabecalhos...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L128" + "source_location": "L154" }, { - "id": "tests_test_convert_article_to_markdown_rationale_372", - "label": "Valida a cadeia de fallback completa para a URL ORIGINAL (5 n\u00edveis).", + "id": "tests_test_convert_article_to_markdown_rationale_354", + "label": "Valida a cadeia de fallback completa para o campo T\u00cdTULO (6 n\u00edveis).", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "valida a cadeia de fallback completa para a url original (5 niveis).", + "norm_label": "valida a cadeia de fallback completa para o campo titulo (6 niveis).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L372" + "source_location": "L354" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_436", + "label": "Garante que subt\u00edtulo id\u00eantico ao t\u00edtulo seja automaticamente omitido (None).", + "_origin": "ast", + "community": 48, + "community_name": "test_convert_article_to_markdown.py", + "file_type": "rationale", + "norm_label": "garante que subtitulo identico ao titulo seja automaticamente omitido (none).", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L436" }, { "id": "tests_test_convert_article_to_markdown_rationale_45", @@ -13863,18 +13874,18 @@ "source_location": "L45" }, { - "id": "tests_test_convert_article_to_markdown_rationale_51", - "label": "Valida colapso de tabs, quebras de linha e espa\u00e7os m\u00faltiplos em um \u00fanico espa\u00e7o.", + "id": "tests_test_convert_article_to_markdown_rationale_451", + "label": "Garante que listas de autores/tags usem apenas a primeira fonte v\u00e1lida, sem\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "valida colapso de tabs, quebras de linha e espacos multiplos em um unico espaco.", + "norm_label": "garante que listas de autores/tags usem apenas a primeira fonte valida, sem...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L51" + "source_location": "L451" }, { - "id": "tests_test_convert_article_to_markdown_rationale_512", + "id": "tests_test_convert_article_to_markdown_rationale_541", "label": "Garante correspond\u00eancia exata byte a byte para Trafilatura, Newspaper4k e\u2026", "_origin": "ast", "community": 48, @@ -13882,10 +13893,10 @@ "file_type": "rationale", "norm_label": "garante correspondencia exata byte a byte para trafilatura, newspaper4k e...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L512" + "source_location": "L541" }, { - "id": "tests_test_convert_article_to_markdown_rationale_529", + "id": "tests_test_convert_article_to_markdown_rationale_558", "label": "Garante que m\u00faltiplas execu\u00e7\u00f5es no mesmo arquivo produzam hashes SHA-256\u2026", "_origin": "ast", "community": 48, @@ -13893,10 +13904,10 @@ "file_type": "rationale", "norm_label": "garante que multiplas execucoes no mesmo arquivo produzam hashes sha-256...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L529" + "source_location": "L558" }, { - "id": "tests_test_convert_article_to_markdown_rationale_553", + "id": "tests_test_convert_article_to_markdown_rationale_582", "label": "Testa toda a matriz de c\u00f3digos de sa\u00edda da CLI (0, 1, 2).", "_origin": "ast", "community": 48, @@ -13904,10 +13915,10 @@ "file_type": "rationale", "norm_label": "testa toda a matriz de codigos de saida da cli (0, 1, 2).", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L553" + "source_location": "L582" }, { - "id": "tests_test_convert_article_to_markdown_rationale_587", + "id": "tests_test_convert_article_to_markdown_rationale_616", "label": "Garante encerramento com c\u00f3digo 1 caso a raiz do JSON seja lista, n\u00famero ou\u2026", "_origin": "ast", "community": 48, @@ -13915,10 +13926,10 @@ "file_type": "rationale", "norm_label": "garante encerramento com codigo 1 caso a raiz do json seja lista, numero ou...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L587" + "source_location": "L616" }, { - "id": "tests_test_convert_article_to_markdown_rationale_602", + "id": "tests_test_convert_article_to_markdown_rationale_631", "label": "Garante que stdout permane\u00e7a limpo e grava\u00e7\u00e3o at\u00f4mica preserve arquivos\u2026", "_origin": "ast", "community": 48, @@ -13926,10 +13937,10 @@ "file_type": "rationale", "norm_label": "garante que stdout permaneca limpo e gravacao atomica preserve arquivos...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L602" + "source_location": "L631" }, { - "id": "tests_test_convert_article_to_markdown_rationale_646", + "id": "tests_test_convert_article_to_markdown_rationale_675", "label": "Garante gera\u00e7\u00e3o autom\u00e1tica de .md quando -o n\u00e3o \u00e9 informado.", "_origin": "ast", "community": 48, @@ -13937,10 +13948,10 @@ "file_type": "rationale", "norm_label": "garante geracao automatica de .md quando -o nao e informado.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L646" + "source_location": "L675" }, { - "id": "tests_test_convert_article_to_markdown_rationale_673", + "id": "tests_test_convert_article_to_markdown_rationale_704", "label": "Valida a convers\u00e3o E2E de um artigo real extra\u00eddo do arquivo\u2026", "_origin": "ast", "community": 48, @@ -13948,18 +13959,7 @@ "file_type": "rationale", "norm_label": "valida a conversao e2e de um artigo real extraido do arquivo...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L673" - }, - { - "id": "tests_test_convert_article_to_markdown_rationale_97", - "label": "Garante que URLs em campos de autor sejam estritamente descartadas.", - "_origin": "ast", - "community": 48, - "community_name": "test_convert_article_to_markdown.py", - "file_type": "rationale", - "norm_label": "garante que urls em campos de autor sejam estritamente descartadas.", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L97" + "source_location": "L704" }, { "id": "examples_content_northvolt_de", @@ -17171,7 +17171,7 @@ "node_kind": "heading", "norm_label": "1. conversao padrao", "source_file": "README.md", - "source_location": "L434" + "source_location": "L451" }, { "id": "readme_1_execu\u00e7\u00e3o_padr\u00e3o_autom\u00e1tica", @@ -17183,7 +17183,7 @@ "node_kind": "heading", "norm_label": "1. execucao padrao automatica", "source_file": "README.md", - "source_location": "L317" + "source_location": "L334" }, { "id": "readme_2_convers\u00e3o_com_caminho_de_destino_personalizado", @@ -17195,7 +17195,7 @@ "node_kind": "heading", "norm_label": "2. conversao com caminho de destino personalizado", "source_file": "README.md", - "source_location": "L440" + "source_location": "L457" }, { "id": "readme_2_execu\u00e7\u00e3o_com_modo_verboso", @@ -17207,7 +17207,7 @@ "node_kind": "heading", "norm_label": "2. execucao com modo verboso", "source_file": "README.md", - "source_location": "L323" + "source_location": "L340" }, { "id": "readme_2_extrator_de_manchetes_do_google_news", @@ -17219,7 +17219,7 @@ "node_kind": "heading", "norm_label": "2. \ud83d\udcf0 extrator de manchetes do google news", "source_file": "README.md", - "source_location": "L171" + "source_location": "L188" }, { "id": "readme_2_instalar_depend\u00eancias", @@ -17255,7 +17255,7 @@ "node_kind": "heading", "norm_label": "3. \ud83d\udcc4 extrator e parser multimotor de artigos", "source_file": "README.md", - "source_location": "L213" + "source_location": "L230" }, { "id": "readme_3_uso_program\u00e1tico_como_m\u00f3dulo_python", @@ -17267,7 +17267,7 @@ "node_kind": "heading", "norm_label": "3. uso programatico como modulo python", "source_file": "README.md", - "source_location": "L347" + "source_location": "L364" }, { "id": "readme_3_uso_program\u00e1tico_em_python", @@ -17279,7 +17279,7 @@ "node_kind": "heading", "norm_label": "3. uso programatico em python", "source_file": "README.md", - "source_location": "L447" + "source_location": "L464" }, { "id": "readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", @@ -17291,7 +17291,7 @@ "node_kind": "heading", "norm_label": "4. \ud83c\udfaf seletor deterministico de conteudo de artigos", "source_file": "README.md", - "source_location": "L251" + "source_location": "L268" }, { "id": "readme_5_conversor_de_artigo_json_para_markdown", @@ -17303,7 +17303,7 @@ "node_kind": "heading", "norm_label": "5. \ud83d\udcdd conversor de artigo json para markdown", "source_file": "README.md", - "source_location": "L364" + "source_location": "L381" }, { "id": "readme_argumentos_e_flags_cli", @@ -17315,10 +17315,10 @@ "node_kind": "heading", "norm_label": "argumentos e flags cli", "source_file": "README.md", - "source_location": "L225" + "source_location": "L242" }, { - "id": "readme_argumentos_e_flags_cli_306", + "id": "readme_argumentos_e_flags_cli_323", "label": "Argumentos e Flags CLI", "_origin": "ast", "community": 97, @@ -17327,10 +17327,10 @@ "node_kind": "heading", "norm_label": "argumentos e flags cli", "source_file": "README.md", - "source_location": "L306" + "source_location": "L323" }, { - "id": "readme_argumentos_e_flags_cli_425", + "id": "readme_argumentos_e_flags_cli_442", "label": "Argumentos e Flags CLI", "_origin": "ast", "community": 97, @@ -17339,7 +17339,7 @@ "node_kind": "heading", "norm_label": "argumentos e flags cli", "source_file": "README.md", - "source_location": "L425" + "source_location": "L442" }, { "id": "readme_argumentos_e_flags_de_linha_de_comando", @@ -17351,7 +17351,7 @@ "node_kind": "heading", "norm_label": "argumentos e flags de linha de comando", "source_file": "README.md", - "source_location": "L185" + "source_location": "L202" }, { "id": "readme_arquitetura_de_classifica\u00e7\u00e3o_em_3_tiers", @@ -17387,7 +17387,7 @@ "node_kind": "heading", "norm_label": "criterios de desempate tecnico e resiliencia", "source_file": "README.md", - "source_location": "L294" + "source_location": "L311" }, { "id": "readme_diferenciais_t\u00e9cnicos", @@ -17399,7 +17399,7 @@ "node_kind": "heading", "norm_label": "diferenciais tecnicos", "source_file": "README.md", - "source_location": "L177" + "source_location": "L194" }, { "id": "readme_estrutura_do_projeto", @@ -17411,17 +17411,17 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc1 estrutura do projeto", "source_file": "README.md", - "source_location": "L458" + "source_location": "L475" }, { - "id": "readme_exemplo_de_ecp_snapshot_ecp_sample_json", - "label": "Exemplo de ECP Snapshot (`ecp_sample.json`):", + "id": "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`):", "_origin": "ast", "community": 97, "community_name": "\ud83e\udde0 TextNLPClassifierApp", "file_type": "document", "node_kind": "heading", - "norm_label": "exemplo de ecp snapshot (`ecp_sample.json`):", + "norm_label": "exemplo de ecp snapshot real (`examples/ecp_club_atletico_river_plate.json`):", "source_file": "README.md", "source_location": "L134" }, @@ -17435,7 +17435,7 @@ "node_kind": "heading", "norm_label": "exemplos de uso", "source_file": "README.md", - "source_location": "L236" + "source_location": "L253" }, { "id": "readme_exemplos_de_uso_cli", @@ -17447,7 +17447,7 @@ "node_kind": "heading", "norm_label": "exemplos de uso cli", "source_file": "README.md", - "source_location": "L156" + "source_location": "L168" }, { "id": "readme_exemplos_pr\u00e1ticos_de_uso", @@ -17459,10 +17459,10 @@ "node_kind": "heading", "norm_label": "exemplos praticos de uso", "source_file": "README.md", - "source_location": "L198" + "source_location": "L215" }, { - "id": "readme_exemplos_pr\u00e1ticos_de_uso_315", + "id": "readme_exemplos_pr\u00e1ticos_de_uso_332", "label": "Exemplos Pr\u00e1ticos de Uso", "_origin": "ast", "community": 97, @@ -17471,10 +17471,10 @@ "node_kind": "heading", "norm_label": "exemplos praticos de uso", "source_file": "README.md", - "source_location": "L315" + "source_location": "L332" }, { - "id": "readme_exemplos_pr\u00e1ticos_de_uso_432", + "id": "readme_exemplos_pr\u00e1ticos_de_uso_449", "label": "Exemplos Pr\u00e1ticos de Uso", "_origin": "ast", "community": 97, @@ -17483,7 +17483,7 @@ "node_kind": "heading", "norm_label": "exemplos praticos de uso", "source_file": "README.md", - "source_location": "L432" + "source_location": "L449" }, { "id": "readme_formato_do_ecp_snapshot_e_markdown", @@ -17519,7 +17519,7 @@ "node_kind": "heading", "norm_label": "isolamento estrito de extratores e fallback", "source_file": "README.md", - "source_location": "L393" + "source_location": "L410" }, { "id": "readme_licen\u00e7a", @@ -17531,7 +17531,7 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc4 licenca", "source_file": "README.md", - "source_location": "L522" + "source_location": "L539" }, { "id": "readme_matriz_determin\u00edstica_de_metadados", @@ -17543,7 +17543,7 @@ "node_kind": "heading", "norm_label": "matriz deterministica de metadados", "source_file": "README.md", - "source_location": "L402" + "source_location": "L419" }, { "id": "readme_o_que_\u00e9_e_como_funciona", @@ -17558,7 +17558,7 @@ "source_location": "L96" }, { - "id": "readme_o_que_\u00e9_e_como_funciona_173", + "id": "readme_o_que_\u00e9_e_como_funciona_190", "label": "O que \u00e9 e Como Funciona", "_origin": "ast", "community": 97, @@ -17567,7 +17567,7 @@ "node_kind": "heading", "norm_label": "o que e e como funciona", "source_file": "README.md", - "source_location": "L173" + "source_location": "L190" }, { "id": "readme_pipeline_de_normaliza\u00e7\u00e3o_e_shingles", @@ -17579,7 +17579,7 @@ "node_kind": "heading", "norm_label": "pipeline de normalizacao e shingles", "source_file": "README.md", - "source_location": "L282" + "source_location": "L299" }, { "id": "readme_sanitiza\u00e7\u00e3o_editorial_e_deduplica\u00e7\u00e3o", @@ -17591,7 +17591,7 @@ "node_kind": "heading", "norm_label": "sanitizacao editorial e deduplicacao", "source_file": "README.md", - "source_location": "L418" + "source_location": "L435" }, { "id": "readme_tabela_de_conte\u00fados", @@ -17615,7 +17615,7 @@ "node_kind": "heading", "norm_label": "\ud83e\uddea testes e qualidade de codigo", "source_file": "README.md", - "source_location": "L493" + "source_location": "L510" }, { "id": "readme_textnlpclassifierapp", @@ -17651,7 +17651,7 @@ "node_kind": "heading", "norm_label": "visao geral e algoritmo de consenso ($f_1$)", "source_file": "README.md", - "source_location": "L253" + "source_location": "L270" }, { "id": "readme_vis\u00e3o_geral_e_estrutura_do_documento", @@ -17663,7 +17663,7 @@ "node_kind": "heading", "norm_label": "visao geral e estrutura do documento", "source_file": "README.md", - "source_location": "L366" + "source_location": "L383" }, { "id": "readme_vis\u00e3o_geral_e_tr\u00edplice_extra\u00e7\u00e3o", @@ -17675,7 +17675,7 @@ "node_kind": "heading", "norm_label": "visao geral e triplice extracao", "source_file": "README.md", - "source_location": "L215" + "source_location": "L232" }, { "id": "specs_003_article_content_extractor_checklists_extraction", @@ -18145,7 +18145,7 @@ "source_location": "" }, { - "id": "tests_test_convert_article_to_markdown_rationale_168", + "id": "tests_test_convert_article_to_markdown_rationale_186", "label": "Garante aceita\u00e7\u00e3o de URLs absolutas com esquema HTTP e HTTPS v\u00e1lidos.", "_origin": "ast", "community": 99, @@ -18153,10 +18153,10 @@ "file_type": "rationale", "norm_label": "garante aceitacao de urls absolutas com esquema http e https validos.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L168" + "source_location": "L186" }, { - "id": "tests_test_convert_article_to_markdown_rationale_188", + "id": "tests_test_convert_article_to_markdown_rationale_206", "label": "Garante rejei\u00e7\u00e3o de esquemas n\u00e3o permitidos, URLs relativas e strings vazias.", "_origin": "ast", "community": 99, @@ -18164,10 +18164,10 @@ "file_type": "rationale", "norm_label": "garante rejeicao de esquemas nao permitidos, urls relativas e strings vazias.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L188" + "source_location": "L206" }, { - "id": "tests_test_convert_article_to_markdown_rationale_299", + "id": "tests_test_convert_article_to_markdown_rationale_317", "label": "Garante que a aus\u00eancia de corpo no extrator selecionado NUNCA fa\u00e7a fallback\u2026", "_origin": "ast", "community": 99, @@ -18175,10 +18175,10 @@ "file_type": "rationale", "norm_label": "garante que a ausencia de corpo no extrator selecionado nunca faca fallback...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L299" + "source_location": "L317" }, { - "id": "tests_test_convert_article_to_markdown_rationale_67", + "id": "tests_test_convert_article_to_markdown_rationale_85", "label": "Garante que todos os placeholders documentados no PRD sejam descartados\u2026", "_origin": "ast", "community": 99, @@ -18186,7 +18186,7 @@ "file_type": "rationale", "norm_label": "garante que todos os placeholders documentados no prd sejam descartados...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L67" + "source_location": "L85" } ], "links": [ @@ -18259,7 +18259,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L638", + "source_location": "L642", "weight": 1.0 }, { @@ -18271,7 +18271,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L639", + "source_location": "L643", "weight": 1.0 }, { @@ -18283,7 +18283,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L642", + "source_location": "L646", "weight": 1.0 }, { @@ -18295,7 +18295,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L643", + "source_location": "L647", "weight": 1.0 }, { @@ -18307,7 +18307,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L646", + "source_location": "L650", "weight": 1.0 }, { @@ -18319,7 +18319,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L699", + "source_location": "L703", "weight": 1.0 }, { @@ -18331,7 +18331,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L704", + "source_location": "L708", "weight": 1.0 }, { @@ -18355,7 +18355,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L496", + "source_location": "L500", "weight": 1.0 }, { @@ -18391,7 +18391,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L257", + "source_location": "L259", "weight": 1.0 }, { @@ -18403,7 +18403,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L282", + "source_location": "L284", "weight": 1.0 }, { @@ -18415,7 +18415,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L331", + "source_location": "L335", "weight": 1.0 }, { @@ -18427,7 +18427,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L352", + "source_location": "L356", "weight": 1.0 }, { @@ -19579,7 +19579,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L494", + "source_location": "L523", "weight": 1.0 }, { @@ -19591,7 +19591,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L465", + "source_location": "L494", "weight": 1.0 }, { @@ -19603,7 +19603,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L713", + "source_location": "L748", "weight": 1.0 }, { @@ -19615,7 +19615,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L229", + "source_location": "L247", "weight": 1.0 }, { @@ -19627,7 +19627,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L213", + "source_location": "L231", "weight": 1.0 }, { @@ -19639,7 +19639,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L429", + "source_location": "L458", "weight": 1.0 }, { @@ -19651,7 +19651,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L380", + "source_location": "L404", "weight": 1.0 }, { @@ -19663,7 +19663,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L416", + "source_location": "L445", "weight": 1.0 }, { @@ -19675,7 +19675,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L336", + "source_location": "L358", "weight": 1.0 }, { @@ -19687,7 +19687,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L146", + "source_location": "L164", "weight": 1.0 }, { @@ -19699,7 +19699,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L129", + "source_location": "L147", "weight": 1.0 }, { @@ -19711,7 +19711,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L137", + "source_location": "L155", "weight": 1.0 }, { @@ -19723,7 +19723,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L105", + "source_location": "L123", "weight": 1.0 }, { @@ -19735,7 +19735,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L112", + "source_location": "L130", "weight": 1.0 }, { @@ -19747,7 +19747,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L117", + "source_location": "L135", "weight": 1.0 }, { @@ -19759,7 +19759,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L89", + "source_location": "L107", "weight": 1.0 }, { @@ -19771,7 +19771,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L46", + "source_location": "L47", "weight": 1.0 }, { @@ -19783,7 +19783,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L74", + "source_location": "L92", "weight": 1.0 }, { @@ -19795,7 +19795,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L68", + "source_location": "L86", "weight": 1.0 }, { @@ -19807,7 +19807,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L52", + "source_location": "L56", "weight": 1.0 }, { @@ -19819,7 +19819,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L721", + "source_location": "L756", "weight": 1.0 }, { @@ -19831,7 +19831,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L445", + "source_location": "L474", "weight": 1.0 }, { @@ -19843,7 +19843,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L321", + "source_location": "L342", "weight": 1.0 }, { @@ -19855,7 +19855,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L266", + "source_location": "L284", "weight": 1.0 }, { @@ -19867,7 +19867,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L286", + "source_location": "L304", "weight": 1.0 }, { @@ -19879,7 +19879,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L315", + "source_location": "L336", "weight": 1.0 }, { @@ -19891,7 +19891,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L246", + "source_location": "L264", "weight": 1.0 }, { @@ -19903,7 +19903,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L189", + "source_location": "L207", "weight": 1.0 }, { @@ -19915,7 +19915,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L169", + "source_location": "L187", "weight": 1.0 }, { @@ -21067,7 +21067,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L55", + "source_location": "L61", "weight": 1.0 }, { @@ -21079,7 +21079,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L297", + "source_location": "L315", "weight": 1.0 }, { @@ -21091,7 +21091,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L172", + "source_location": "L190", "weight": 1.0 }, { @@ -21103,7 +21103,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L158", + "source_location": "L176", "weight": 1.0 }, { @@ -21139,7 +21139,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L546", + "source_location": "L550", "weight": 1.0 }, { @@ -23227,7 +23227,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L614", + "source_location": "L618", "weight": 1.0 }, { @@ -23239,7 +23239,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L673", + "source_location": "L677", "weight": 1.0 }, { @@ -27086,7 +27086,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L156", + "source_location": "L168", "weight": 1.0 }, { @@ -27102,13 +27102,13 @@ }, { "source": "readme_2_extrator_de_manchetes_do_google_news", - "target": "readme_o_que_\u00e9_e_como_funciona_173", + "target": "readme_o_que_\u00e9_e_como_funciona_190", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L173", + "source_location": "L190", "weight": 1.0 }, { @@ -27119,7 +27119,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L177", + "source_location": "L194", "weight": 1.0 }, { @@ -27130,7 +27130,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L185", + "source_location": "L202", "weight": 1.0 }, { @@ -27141,7 +27141,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L198", + "source_location": "L215", "weight": 1.0 }, { @@ -27152,7 +27152,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L215", + "source_location": "L232", "weight": 1.0 }, { @@ -27163,7 +27163,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L225", + "source_location": "L242", "weight": 1.0 }, { @@ -27174,7 +27174,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L236", + "source_location": "L253", "weight": 1.0 }, { @@ -27185,7 +27185,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L253", + "source_location": "L270", "weight": 1.0 }, { @@ -27196,7 +27196,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L282", + "source_location": "L299", "weight": 1.0 }, { @@ -27207,29 +27207,29 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L294", + "source_location": "L311", "weight": 1.0 }, { "source": "readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", - "target": "readme_argumentos_e_flags_cli_306", + "target": "readme_argumentos_e_flags_cli_323", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L306", + "source_location": "L323", "weight": 1.0 }, { "source": "readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", - "target": "readme_exemplos_pr\u00e1ticos_de_uso_315", + "target": "readme_exemplos_pr\u00e1ticos_de_uso_332", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L315", + "source_location": "L332", "weight": 1.0 }, { @@ -27240,7 +27240,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L366", + "source_location": "L383", "weight": 1.0 }, { @@ -27251,7 +27251,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L393", + "source_location": "L410", "weight": 1.0 }, { @@ -27262,7 +27262,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L402", + "source_location": "L419", "weight": 1.0 }, { @@ -27273,100 +27273,100 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L418", + "source_location": "L435", "weight": 1.0 }, { "source": "readme_5_conversor_de_artigo_json_para_markdown", - "target": "readme_argumentos_e_flags_cli_425", + "target": "readme_argumentos_e_flags_cli_442", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L425", + "source_location": "L442", "weight": 1.0 }, { "source": "readme_5_conversor_de_artigo_json_para_markdown", - "target": "readme_exemplos_pr\u00e1ticos_de_uso_432", + "target": "readme_exemplos_pr\u00e1ticos_de_uso_449", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L432", + "source_location": "L449", "weight": 1.0 }, { - "source": "readme_exemplos_pr\u00e1ticos_de_uso_315", + "source": "readme_exemplos_pr\u00e1ticos_de_uso_332", "target": "readme_1_execu\u00e7\u00e3o_padr\u00e3o_autom\u00e1tica", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L317", + "source_location": "L334", "weight": 1.0 }, { - "source": "readme_exemplos_pr\u00e1ticos_de_uso_315", + "source": "readme_exemplos_pr\u00e1ticos_de_uso_332", "target": "readme_2_execu\u00e7\u00e3o_com_modo_verboso", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L323", + "source_location": "L340", "weight": 1.0 }, { - "source": "readme_exemplos_pr\u00e1ticos_de_uso_315", + "source": "readme_exemplos_pr\u00e1ticos_de_uso_332", "target": "readme_3_uso_program\u00e1tico_como_m\u00f3dulo_python", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L347", + "source_location": "L364", "weight": 1.0 }, { - "source": "readme_exemplos_pr\u00e1ticos_de_uso_432", + "source": "readme_exemplos_pr\u00e1ticos_de_uso_449", "target": "readme_1_convers\u00e3o_padr\u00e3o", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L434", + "source_location": "L451", "weight": 1.0 }, { - "source": "readme_exemplos_pr\u00e1ticos_de_uso_432", + "source": "readme_exemplos_pr\u00e1ticos_de_uso_449", "target": "readme_2_convers\u00e3o_com_caminho_de_destino_personalizado", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L440", + "source_location": "L457", "weight": 1.0 }, { - "source": "readme_exemplos_pr\u00e1ticos_de_uso_432", + "source": "readme_exemplos_pr\u00e1ticos_de_uso_449", "target": "readme_3_uso_program\u00e1tico_em_python", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L447", + "source_location": "L464", "weight": 1.0 }, { "source": "readme_formato_do_ecp_snapshot_e_markdown", - "target": "readme_exemplo_de_ecp_snapshot_ecp_sample_json", + "target": "readme_exemplo_de_ecp_snapshot_real_examples_ecp_club_atletico_river_plate_json", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", @@ -27427,7 +27427,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L171", + "source_location": "L188", "weight": 1.0 }, { @@ -27438,7 +27438,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L213", + "source_location": "L230", "weight": 1.0 }, { @@ -27449,7 +27449,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L251", + "source_location": "L268", "weight": 1.0 }, { @@ -27460,7 +27460,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L364", + "source_location": "L381", "weight": 1.0 }, { @@ -27471,18 +27471,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L458", - "weight": 1.0 - }, - { - "source": "readme_textnlpclassifierapp", - "target": "readme_testes_e_qualidade_de_c\u00f3digo", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "README.md", - "source_location": "L493", + "source_location": "L475", "weight": 1.0 }, { @@ -27496,6 +27485,17 @@ "source_location": "L51", "weight": 1.0 }, + { + "source": "readme_textnlpclassifierapp", + "target": "readme_testes_e_qualidade_de_c\u00f3digo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "README.md", + "source_location": "L510", + "weight": 1.0 + }, { "source": "readme_textnlpclassifierapp", "target": "readme_licen\u00e7a", @@ -27504,7 +27504,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L522", + "source_location": "L539", "weight": 1.0 }, { @@ -27614,7 +27614,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L479", + "source_location": "L483", "weight": 1.0 }, { @@ -27625,7 +27625,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L514", + "source_location": "L518", "weight": 1.0 }, { @@ -27636,7 +27636,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L546", + "source_location": "L550", "weight": 1.0 }, { @@ -27658,7 +27658,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L614", + "source_location": "L618", "weight": 1.0 }, { @@ -27669,7 +27669,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L673", + "source_location": "L677", "weight": 1.0 }, { @@ -27680,7 +27680,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L696", + "source_location": "L700", "weight": 1.0 }, { @@ -34635,6 +34635,28 @@ "source_location": "L85", "weight": 1.0 }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L103", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L114", + "weight": 1.0 + }, { "source": "tests_test_convert_article_to_markdown", "target": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", @@ -34643,31 +34665,31 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L109", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L115", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L127", "weight": 1.0 }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L133", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L145", + "weight": 1.0 + }, { "source": "tests_test_convert_article_to_markdown", "target": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", @@ -34676,7 +34698,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L135", + "source_location": "L153", "weight": 1.0 }, { @@ -34687,7 +34709,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L144", + "source_location": "L162", "weight": 1.0 }, { @@ -34698,7 +34720,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L167", + "source_location": "L185", "weight": 1.0 }, { @@ -34709,7 +34731,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L187", + "source_location": "L205", "weight": 1.0 }, { @@ -34720,7 +34742,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L197", + "source_location": "L215", "weight": 1.0 }, { @@ -34731,7 +34753,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L227", + "source_location": "L245", "weight": 1.0 }, { @@ -34742,7 +34764,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L239", + "source_location": "L257", "weight": 1.0 }, { @@ -34753,7 +34775,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L256", + "source_location": "L274", "weight": 1.0 }, { @@ -34764,7 +34786,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L276", + "source_location": "L294", "weight": 1.0 }, { @@ -34775,7 +34797,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L298", + "source_location": "L316", "weight": 1.0 }, { @@ -34786,7 +34808,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L318", + "source_location": "L339", "weight": 1.0 }, { @@ -34797,7 +34819,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L332", + "source_location": "L353", "weight": 1.0 }, { @@ -34808,7 +34830,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L371", + "source_location": "L395", "weight": 1.0 }, { @@ -34819,29 +34841,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L406", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L421", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L439", + "source_location": "L435", "weight": 1.0 }, { @@ -34855,6 +34855,28 @@ "source_location": "L44", "weight": 1.0 }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L450", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L468", + "weight": 1.0 + }, { "source": "tests_test_convert_article_to_markdown", "target": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", @@ -34863,7 +34885,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L456", + "source_location": "L485", "weight": 1.0 }, { @@ -34874,7 +34896,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L478", + "source_location": "L507", "weight": 1.0 }, { @@ -34885,7 +34907,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L50", + "source_location": "L53", "weight": 1.0 }, { @@ -34896,7 +34918,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L511", + "source_location": "L540", "weight": 1.0 }, { @@ -34907,7 +34929,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L528", + "source_location": "L557", "weight": 1.0 }, { @@ -34918,7 +34940,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L552", + "source_location": "L581", "weight": 1.0 }, { @@ -34929,7 +34951,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L586", + "source_location": "L615", "weight": 1.0 }, { @@ -34940,7 +34962,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L601", + "source_location": "L630", "weight": 1.0 }, { @@ -34951,18 +34973,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L645", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L66", + "source_location": "L674", "weight": 1.0 }, { @@ -34973,7 +34984,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L672", + "source_location": "L703", "weight": 1.0 }, { @@ -34984,7 +34995,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L701", + "source_location": "L734", "weight": 1.0 }, { @@ -34995,7 +35006,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L719", + "source_location": "L754", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L84", "weight": 1.0 }, { @@ -35006,29 +35028,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L72", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L85", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L96", + "source_location": "L90", "weight": 1.0 }, { @@ -36539,36 +36539,36 @@ "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_480", + "source": "scripts_convert_article_to_markdown_rationale_484", "target": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L480", + "source_location": "L484", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_515", + "source": "scripts_convert_article_to_markdown_rationale_519", "target": "scripts_convert_article_to_markdown_clean_body_images", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L515", + "source_location": "L519", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_547", + "source": "scripts_convert_article_to_markdown_rationale_551", "target": "scripts_convert_article_to_markdown_assemble_markdown_document", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L547", + "source_location": "L551", "weight": 1.0 }, { @@ -36583,36 +36583,36 @@ "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_615", + "source": "scripts_convert_article_to_markdown_rationale_619", "target": "scripts_convert_article_to_markdown_convert_article", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L615", + "source_location": "L619", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_674", + "source": "scripts_convert_article_to_markdown_rationale_678", "target": "scripts_convert_article_to_markdown_parse_arguments", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L674", + "source_location": "L678", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_697", + "source": "scripts_convert_article_to_markdown_rationale_701", "target": "scripts_convert_article_to_markdown_main", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L697", + "source_location": "L701", "weight": 1.0 }, { @@ -37540,30 +37540,30 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_110", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", + "source": "tests_test_convert_article_to_markdown_rationale_104", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L110", + "source_location": "L104", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_116", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", + "source": "tests_test_convert_article_to_markdown_rationale_115", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L116", + "source_location": "L115", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown_rationale_128", - "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", @@ -37573,179 +37573,179 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_136", + "source": "tests_test_convert_article_to_markdown_rationale_134", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L134", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_146", + "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L146", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_154", "target": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L136", + "source_location": "L154", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_145", + "source": "tests_test_convert_article_to_markdown_rationale_163", "target": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L145", + "source_location": "L163", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_168", + "source": "tests_test_convert_article_to_markdown_rationale_186", "target": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L168", + "source_location": "L186", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_188", + "source": "tests_test_convert_article_to_markdown_rationale_206", "target": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L188", + "source_location": "L206", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_198", + "source": "tests_test_convert_article_to_markdown_rationale_216", "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L198", + "source_location": "L216", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_228", + "source": "tests_test_convert_article_to_markdown_rationale_246", "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L228", + "source_location": "L246", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_240", + "source": "tests_test_convert_article_to_markdown_rationale_258", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L240", + "source_location": "L258", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_257", + "source": "tests_test_convert_article_to_markdown_rationale_275", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L257", + "source_location": "L275", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_277", + "source": "tests_test_convert_article_to_markdown_rationale_295", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L277", + "source_location": "L295", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_299", + "source": "tests_test_convert_article_to_markdown_rationale_317", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L299", + "source_location": "L317", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_319", + "source": "tests_test_convert_article_to_markdown_rationale_340", "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L319", + "source_location": "L340", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_333", + "source": "tests_test_convert_article_to_markdown_rationale_354", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L333", + "source_location": "L354", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_372", + "source": "tests_test_convert_article_to_markdown_rationale_396", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L372", + "source_location": "L396", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_407", + "source": "tests_test_convert_article_to_markdown_rationale_436", "target": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L407", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_422", - "target": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L422", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_440", - "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L440", + "source_location": "L436", "weight": 1.0 }, { @@ -37760,179 +37760,179 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_457", + "source": "tests_test_convert_article_to_markdown_rationale_451", + "target": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L451", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_469", + "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L469", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_486", "target": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L457", + "source_location": "L486", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_479", + "source": "tests_test_convert_article_to_markdown_rationale_508", "target": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L479", + "source_location": "L508", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_51", + "source": "tests_test_convert_article_to_markdown_rationale_54", "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_512", + "source": "tests_test_convert_article_to_markdown_rationale_541", "target": "tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L512", + "source_location": "L541", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_529", + "source": "tests_test_convert_article_to_markdown_rationale_558", "target": "tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L529", + "source_location": "L558", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_553", + "source": "tests_test_convert_article_to_markdown_rationale_582", "target": "tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L553", + "source_location": "L582", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_587", + "source": "tests_test_convert_article_to_markdown_rationale_616", "target": "tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L587", + "source_location": "L616", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_602", + "source": "tests_test_convert_article_to_markdown_rationale_631", "target": "tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L602", + "source_location": "L631", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_646", + "source": "tests_test_convert_article_to_markdown_rationale_675", "target": "tests_test_convert_article_to_markdown_test_cli_default_output_naming", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L646", + "source_location": "L675", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_67", - "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L67", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_673", + "source": "tests_test_convert_article_to_markdown_rationale_704", "target": "tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L673", + "source_location": "L704", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_702", + "source": "tests_test_convert_article_to_markdown_rationale_735", "target": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L702", + "source_location": "L735", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_720", + "source": "tests_test_convert_article_to_markdown_rationale_755", "target": "tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L720", + "source_location": "L755", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_73", + "source": "tests_test_convert_article_to_markdown_rationale_85", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L85", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_91", "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L73", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_86", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L86", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_rationale_97", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L97", + "source_location": "L91", "weight": 1.0 }, { @@ -39511,5 +39511,5 @@ } ], "hyperedges": [], - "built_at_commit": "64dfd842de80916bec38f69ba41ab3f730e52425" + "built_at_commit": "926a6b8cfc50c59412b40a9462d3ec533e852375" } \ 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 15adc53..0ae9de8 100644 --- a/graphify-out/2026-08-21/manifest.json +++ b/graphify-out/2026-08-21/manifest.json @@ -654,9 +654,9 @@ "semantic_hash": "" }, "README.md": { - "mtime": 1787318406.7167659, - "seen": 1787318418.3361757, - "ast_hash": "d007bb3f3e6ad04e5e63981899f662d6", + "mtime": 1787319775.4204426, + "seen": 1787319817.9012172, + "ast_hash": "f809a191cb40e8a0367c748b9c8d3e84", "semantic_hash": "" }, "scripts/extract_article_contents.py": { @@ -816,15 +816,15 @@ "semantic_hash": "" }, "scripts/convert_article_to_markdown.py": { - "mtime": 1787318308.4358957, - "seen": 1787318418.3304515, - "ast_hash": "ae22787219cc382a19894270753d83d1", + "mtime": 1787318905.723034, + "seen": 1787319817.895658, + "ast_hash": "b58fbd8b426de464df2c269c32831583", "semantic_hash": "" }, "tests/test_convert_article_to_markdown.py": { - "mtime": 1787318233.6574264, - "seen": 1787318418.3321846, - "ast_hash": "ebc2d3e6b40728ac95f2330c692b9276", + "mtime": 1787318905.723034, + "seen": 1787319817.8974621, + "ast_hash": "95c041594afec14ed25bc237b7ff8b89", "semantic_hash": "" }, "docs/prd_convert_json_markdown.md": { diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index c424036..0533968 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 -- 200 files · ~108,772 words +- 201 files · ~110,162 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1527 nodes · 1899 edges · 165 communities (118 shown, 47 thin omitted) -- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 51 edges (avg confidence: 0.95) +- 1554 nodes · 1970 edges · 168 communities (120 shown, 48 thin omitted) +- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 59 edges (avg confidence: 0.95) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `926a6b8c` +- Built from commit: `cb33dafa` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -57,7 +57,7 @@ - 2. Basic CLI Usage Examples - 2. Standard Streams & Exit Codes - ClassificationResult -- InherenceClassifier +- test_adversarial.py - classifier.py - test_convert_article_to_markdown.py - content_northvolt_de.md @@ -160,7 +160,7 @@ - get_hl_gl_ceid - 13. Estratégia de testes - 6. Contrato de entrada -- assemble_markdown_document +- InherenceClassifier - convert_html_to_markdown - JSON Schema Contract: Deterministic Article Content Selection - 5. Escopo @@ -173,35 +173,38 @@ - test_normalize_date_iso_8601_variants - test_metadata_priority_original_url_all_fallbacks - test_normalize_scalar_non_string_types +- LLMFallbackAdapter +- remove_duplicate_initial_h1 +- test_normalize_scalar_whitespace_collapsing ## God Nodes (most connected - your core abstractions) -1. `ECPSnapshot` - 31 edges -2. `InherenceClassifier` - 25 edges -3. `select_article_extractor()` - 23 edges -4. `ExtractorName` - 21 edges -5. `DecisionCategory` - 17 edges -6. `ClassificationResult` - 17 edges -7. `PRD — Conversão de artigo JSON para Markdown` - 16 edges -8. `process_batch()` - 15 edges -9. `8. Regras funcionais` - 15 edges -10. `resolve_article_metadata()` - 14 edges +1. `ECPSnapshot` - 40 edges +2. `InherenceClassifier` - 29 edges +3. `DecisionCategory` - 28 edges +4. `LLMFallbackAdapter` - 26 edges +5. `ClassificationResult` - 24 edges +6. `select_article_extractor()` - 23 edges +7. `ExtractorName` - 21 edges +8. `PRD — Conversão de artigo JSON para Markdown` - 16 edges +9. `process_batch()` - 15 edges +10. `8. Regras funcionais` - 15 edges ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] classify.py → src/models.py - `test_e2e_extract_google_news_live_pipeline()` --uses--> `ExtractionResult` [INFERRED] tests/test_extract_google_news.py → scripts/extract_google_news.py +- `test_llm_adapter_interface()` --calls--> `LLMFallbackAdapter` [EXTRACTED] + tests/test_adapters.py → src/adapters/llm.py - `classifier()` --uses--> `InherenceClassifier` [INFERRED] tests/test_benchmark_24.py → src/classifier.py -- `test_classification_result_serialization()` --uses--> `DecisionCategory` [INFERRED] - tests/test_models.py → src/models.py -- `petrobras_ecp()` --uses--> `ECPSnapshot` [INFERRED] - tests/test_classifier.py → src/models.py +- `test_adversarial_apple_fruit_recipe()` --uses--> `DecisionCategory` [INFERRED] + tests/test_adversarial.py → src/models.py ## Import Cycles - None detected. -## Communities (165 total, 47 thin omitted) +## Communities (168 total, 48 thin omitted) ### Community 0 - "Task Planning" Cohesion: 0.07 @@ -344,20 +347,20 @@ Cohesion: 0.29 Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC) ### Community 45 - "ClassificationResult" -Cohesion: 0.09 -Nodes (19): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., LocalEmbeddingsAdapter (+11 more) +Cohesion: 0.11 +Nodes (17): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., LocalEmbeddingsAdapter (+9 more) -### Community 46 - "InherenceClassifier" -Cohesion: 0.12 -Nodes (27): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier., DecisionCategory, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC. (+19 more) +### Community 46 - "test_adversarial.py" +Cohesion: 0.10 +Nodes (19): Any, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC., Run CLI via subprocess with missing target_name and verify error payload., Run CLI via subprocess with corrupted JSON and verify error payload. (+11 more) ### Community 47 - "classifier.py" Cohesion: 0.16 -Nodes (16): count_phrase_occurrences(), match_phrase_in_text(), Core deterministic classification engine (Tier 1 core)., Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., extract_evidence_snippets(), extract_sentences() (+8 more) +Nodes (15): count_phrase_occurrences(), match_phrase_in_text(), Core deterministic classification engine (Tier 1 core)., Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., extract_evidence_snippets(), extract_sentences() (+7 more) ### Community 48 - "test_convert_article_to_markdown.py" -Cohesion: 0.07 -Nodes (27): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa comportamento com listas vazias, nulas ou contendo apenas placeholders., Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabeçalhos…, Valida a cadeia de fallback completa para o campo TÍTULO (6 níveis)., Garante que subtítulo idêntico ao título seja automaticamente omitido (None)., Valida decodificação de entidades HTML nomeadas e numéricas., Garante que listas de autores/tags usem apenas a primeira fonte válida, sem…, Garante correspondência exata byte a byte para Trafilatura, Newspaper4k e… (+19 more) +Cohesion: 0.08 +Nodes (25): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa divisão por ponto e vírgula na string e vírgulas em elementos de lista…, Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabeçalhos…, Valida a cadeia de fallback completa para o campo TÍTULO (6 níveis)., Garante que subtítulo idêntico ao título seja automaticamente omitido (None)., Valida decodificação de entidades HTML nomeadas e numéricas., Garante correspondência exata byte a byte para Trafilatura, Newspaper4k e…, Garante que múltiplas execuções no mesmo arquivo produzam hashes SHA-256… (+17 more) ### Community 80 - "test_extract_article_contents.py" Cohesion: 0.06 @@ -436,8 +439,8 @@ Cohesion: 0.15 Nodes (17): emit_error(), main(), parse_args(), Namespace, ClassificationError, ErrorCode, MatchedGraphEntity, Enum (+9 more) ### Community 101 - "ECPSnapshot" -Cohesion: 0.20 -Nodes (10): ECPSnapshot, Any, classifier(), fixture, parametrize, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), test_ecp_snapshot_defaults() (+2 more) +Cohesion: 0.24 +Nodes (10): ECPSnapshot, classifier(), fixture, parametrize, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), Unit tests for ECP models, schema validation, and structured error handling., test_ecp_snapshot_defaults() (+2 more) ### Community 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -585,7 +588,7 @@ Nodes (11): 1. Validação de Entrada, Tipagem & Isolamento de Lotes, 2. Isolame ### Community 140 - "convert_article" Cohesion: 0.15 -Nodes (13): clean_body_images(), convert_article(), Path, Remove o primeiro título H1 do corpo somente quando ele for igual ao título…, Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e…, Executa a leitura do JSON, validação, conversão e escrita atômica do arquivo…, remove_duplicate_initial_h1(), Testa remoção de H1 inicial coincidente com título com variações de espaços e… (+5 more) +Nodes (13): assemble_markdown_document(), clean_body_images(), convert_article(), Path, Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e…, Monta a estrutura final do documento Markdown respeitando a ordem estrita do…, Executa a leitura do JSON, validação, conversão e escrita atômica do arquivo…, Valida descarte de data:, relativos e deduplicação mantendo a primeira… (+5 more) ### Community 141 - "005-convert-json-markdown/plan.md" Cohesion: 0.33 @@ -631,9 +634,9 @@ Nodes (4): 13.1 Testes unitários, 13.2 Testes de integração do CLI, 13.3 Caso Cohesion: 0.50 Nodes (4): 6.1 Formato, 6.2 Valores aceitos para `selected_extractor`, 6.3 Campos obrigatórios após a resolução, 6. Contrato de entrada -### Community 152 - "assemble_markdown_document" -Cohesion: 0.50 -Nodes (4): assemble_markdown_document(), Monta a estrutura final do documento Markdown respeitando a ordem estrita do…, Testa montagem com todos os campos e apenas com campos obrigatórios., test_assemble_markdown_document_full_and_minimal() +### Community 152 - "InherenceClassifier" +Cohesion: 0.14 +Nodes (24): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier with optional Tier 2 /…, DecisionCategory, Unit tests for deterministic classification decision logic., test_contextual_inherent(), test_direct_inherent(), test_negative_anchor_suppression(), test_not_related() (+16 more) ### Community 153 - "convert_html_to_markdown" Cohesion: 0.33 @@ -647,25 +650,33 @@ Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: De Cohesion: 0.67 Nodes (3): 5.1 Incluído, 5.2 Fora do escopo, 5. Escopo +### Community 165 - "LLMFallbackAdapter" +Cohesion: 0.13 +Nodes (11): LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Returns True if an API key or custom provider function is configured., Constructs a structured disambiguation prompt for the LLM., Executes LLM fallback for ambiguous boundary cases. Returns a refined…, Parses and validates structured JSON response from LLM., Any, Valida detecção de disponibilidade por chave de API ou provider customizado. (+3 more) + +### Community 166 - "remove_duplicate_initial_h1" +Cohesion: 0.50 +Nodes (4): Remove o primeiro título H1 do corpo somente quando ele for igual ao título…, remove_duplicate_initial_h1(), Testa remoção de H1 inicial coincidente com título com variações de espaços e…, test_remove_duplicate_initial_h1_exact_and_variations() + ## Knowledge Gaps - **696 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+691 more) These have ≤1 connection - possible missing edges or undocumented components. -- **47 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **48 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ - **Why does `PRD — Conversão de artigo JSON para Markdown` connect `PRD — Conversão de artigo JSON para Markdown` to `8. Regras funcionais`, `12. Critérios de aceite`, `11. Requisitos não funcionais`, `9. Interface CLI`, `13. Estratégia de testes`, `6. Contrato de entrada`, `5. Escopo`?** - _High betweenness centrality (0.007) - this node is a cross-community bridge._ + _High betweenness centrality (0.008) - this node is a cross-community bridge._ +- **Why does `Implementation Plan: Convert Article JSON to Markdown` connect `Implementation Plan: Convert Article JSON to Markdown` to `005-convert-json-markdown/plan.md`?** + _High betweenness centrality (0.004) - this node is a cross-community bridge._ +- **Why does `Tasks: Convert Article JSON to Markdown` connect `Tasks: Convert Article JSON to Markdown` to `005-convert-json-markdown/plan.md`?** + _High betweenness centrality (0.004) - this node is a cross-community bridge._ - **Are the 10 inferred relationships involving `ECPSnapshot` (e.g. with `main()` and `BaseNLPAdapter`) actually correct?** _`ECPSnapshot` has 10 INFERRED edges - model-reasoned connections that need verification._ - **Are the 6 inferred relationships involving `InherenceClassifier` (e.g. with `LocalEmbeddingsAdapter` and `LLMFallbackAdapter`) actually correct?** _`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 12 inferred relationships involving `ExtractorName` (e.g. with `test_article_1_regression_technical_tie_markdown_images()` and `test_ct_001_three_candidates_clear_winner()`) actually correct?** - _`ExtractorName` has 12 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 10 inferred relationships involving `DecisionCategory` (e.g. with `InherenceClassifier` and `test_adversarial_apple_fruit_recipe()`) actually correct?** - _`DecisionCategory` has 10 INFERRED edges - model-reasoned connections that need verification._ -- **What connects `text-nlp-classifier`, `MatchedGraphEntity`, `graphify` to the rest of the system?** - _696 weakly-connected nodes found - possible documentation gaps or missing edges._ -- **Should `Task Planning` be split into smaller, more focused modules?** - _Cohesion score 0.07407407407407407 - nodes in this community are weakly interconnected._ \ No newline at end of file +- **Are the 18 inferred relationships involving `DecisionCategory` (e.g. with `LLMFallbackAdapter` and `InherenceClassifier`) actually correct?** + _`DecisionCategory` has 18 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 4 inferred relationships involving `LLMFallbackAdapter` (e.g. with `ClassificationResult` and `DecisionCategory`) actually correct?** + _`LLMFallbackAdapter` has 4 INFERRED edges - model-reasoned connections that need verification._ \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c.json b/graphify-out/cache/ast/v0.9.47-s2/4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c.json new file mode 100644 index 0000000..0e0ae1c --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c.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/7cd254b1387ac478a48c65d3e098818499b4f3628a1c228a83b608d97d834efa.json b/graphify-out/cache/ast/v0.9.47-s2/7cd254b1387ac478a48c65d3e098818499b4f3628a1c228a83b608d97d834efa.json new file mode 100644 index 0000000..9591f10 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/7cd254b1387ac478a48c65d3e098818499b4f3628a1c228a83b608d97d834efa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_classify_py", "label": "classify.py", "file_type": "code", "source_file": "classify.py", "source_location": "L1"}, {"id": "$graphify-root$_classify_parse_args", "label": "parse_args()", "file_type": "code", "source_file": "classify.py", "source_location": "L27", "_callable": true}, {"id": "namespace", "label": "Namespace", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/classify.py"}, {"id": "$graphify-root$_classify_emit_error", "label": "emit_error()", "file_type": "code", "source_file": "classify.py", "source_location": "L72", "_callable": true}, {"id": "errorcode", "label": "ErrorCode", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/classify.py"}, {"id": "$graphify-root$_classify_main", "label": "main()", "file_type": "code", "source_file": "classify.py", "source_location": "L97", "_callable": true}], "edges": [{"source": "$graphify-root$_classify_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "src", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "src_classifier", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "$graphify-root$_classify_parse_args", "relation": "contains", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L27", "weight": 1.0}, {"source": "$graphify-root$_classify_parse_args", "target": "namespace", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L27", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "$graphify-root$_classify_emit_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L72", "weight": 1.0}, {"source": "$graphify-root$_classify_emit_error", "target": "errorcode", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L72", "weight": 1.0}, {"source": "$graphify-root$_classify_py", "target": "$graphify-root$_classify_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L97", "weight": 1.0}, {"source": "$graphify-root$_classify_main", "target": "$graphify-root$_classify_parse_args", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L99", "weight": 1.0}, {"source": "$graphify-root$_classify_main", "target": "$graphify-root$_classify_emit_error", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "classify.py", "source_location": "L108", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_classify_parse_args", "callee": "ArgumentParser", "is_member_call": true, "source_file": "classify.py", "source_location": "L28", "receiver": "argparse"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "classify.py", "source_location": "L32", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L34"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "classify.py", "source_location": "L38", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L40"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "classify.py", "source_location": "L44", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L47"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "classify.py", "source_location": "L51", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "classify.py", "source_location": "L57", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "classify.py", "source_location": "L63", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_parse_args", "callee": "parse_args", "is_member_call": true, "source_file": "classify.py", "source_location": "L69", "receiver": "parser"}, {"caller_nid": "$graphify-root$_classify_emit_error", "callee": "ClassificationError", "is_member_call": false, "source_file": "classify.py", "source_location": "L78", "receiver": null}, {"caller_nid": "$graphify-root$_classify_emit_error", "callee": "to_json_str", "is_member_call": true, "source_file": "classify.py", "source_location": "L83", "receiver": "err"}, {"caller_nid": "$graphify-root$_classify_emit_error", "callee": "Path", "is_member_call": false, "source_file": "classify.py", "source_location": "L87", "receiver": null}, {"caller_nid": "$graphify-root$_classify_emit_error", "callee": "mkdir", "is_member_call": true, "source_file": "classify.py", "source_location": "L88", "receiver": null}, {"caller_nid": "$graphify-root$_classify_emit_error", "callee": "write_text", "is_member_call": true, "source_file": "classify.py", "source_location": "L89", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_classify_emit_error", "callee": "write", "is_member_call": true, "source_file": "classify.py", "source_location": "L93", "receiver": null}, {"caller_nid": "$graphify-root$_classify_main", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L101"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "Path", "is_member_call": false, "source_file": "classify.py", "source_location": "L103", "receiver": null}, {"caller_nid": "$graphify-root$_classify_main", "callee": "Path", "is_member_call": false, "source_file": "classify.py", "source_location": "L104", "receiver": null}, {"caller_nid": "$graphify-root$_classify_main", "callee": "is_file", "is_member_call": true, "source_file": "classify.py", "source_location": "L107", "receiver": "ecp_path"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "read_text", "is_member_call": true, "source_file": "classify.py", "source_location": "L116", "receiver": "ecp_path"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L121"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "from_json_str", "is_member_call": true, "source_file": "classify.py", "source_location": "L126", "receiver": "ECPSnapshot"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L128"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "is_file", "is_member_call": true, "source_file": "classify.py", "source_location": "L144", "receiver": "content_path"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "read_text", "is_member_call": true, "source_file": "classify.py", "source_location": "L153", "receiver": "content_path"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L158"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "strip", "is_member_call": true, "source_file": "classify.py", "source_location": "L162", "receiver": "content_raw"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "strip", "is_member_call": true, "source_file": "classify.py", "source_location": "L166", "receiver": "content_raw"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "classify.py", "source_location": "L171", "receiver": null}, {"caller_nid": "$graphify-root$_classify_main", "callee": "classify", "is_member_call": true, "source_file": "classify.py", "source_location": "L177", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L181"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L189"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "to_json_str", "is_member_call": true, "source_file": "classify.py", "source_location": "L193", "receiver": "result"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "Path", "is_member_call": false, "source_file": "classify.py", "source_location": "L198", "receiver": null}, {"caller_nid": "$graphify-root$_classify_main", "callee": "mkdir", "is_member_call": true, "source_file": "classify.py", "source_location": "L199", "receiver": null}, {"caller_nid": "$graphify-root$_classify_main", "callee": "write_text", "is_member_call": true, "source_file": "classify.py", "source_location": "L200", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "classify.py", "source_location": "L205"}, {"caller_nid": "$graphify-root$_classify_main", "callee": "write", "is_member_call": true, "source_file": "classify.py", "source_location": "L208", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/917588aaee4d18fb0dfb2d292b62c1b05ecdfee3f3cd8e13a2e16a9dc281ff73.json b/graphify-out/cache/ast/v0.9.47-s2/917588aaee4d18fb0dfb2d292b62c1b05ecdfee3f3cd8e13a2e16a9dc281ff73.json new file mode 100644 index 0000000..75d632f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/917588aaee4d18fb0dfb2d292b62c1b05ecdfee3f3cd8e13a2e16a9dc281ff73.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_scripts_convert_article_to_markdown_py", "label": "convert_article_to_markdown.py", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L1"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "label": "normalize_scalar()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L40", "_callable": true}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/convert_article_to_markdown.py"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "label": "normalize_list()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L56", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "label": "normalize_date()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L104", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "label": "validate_url()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L135", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "label": "convert_html_to_markdown()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L149", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "label": "resolve_article_body()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L167", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "label": "_get_dict()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L225", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "label": "resolve_article_metadata()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L231", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "label": "remove_duplicate_initial_h1()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L483", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_clean_body_images", "label": "clean_body_images()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L518", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "label": "assemble_markdown_document()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L550", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "label": "convert_article()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L618", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/convert_article_to_markdown.py"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "label": "parse_arguments()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L677", "_callable": true}, {"id": "namespace", "label": "Namespace", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/convert_article_to_markdown.py"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_main", "label": "main()", "file_type": "code", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L700", "_callable": true}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_41", "label": "Decodifica entidades HTML, remove espa\u00e7os no in\u00edcio/fim, colapsa espa\u00e7os\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L41"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_57", "label": "Normaliza listas ou strings separadas por ponto e v\u00edrgula, descartando\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L57"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_105", "label": "Interpreta datas ISO 8601 e RFC 2822 preservando fuso hor\u00e1rio ou YYYY-MM-DD\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L105"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_136", "label": "Valida se a URL \u00e9 absoluta com protocolo http ou https e hostname n\u00e3o vazio.", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L136"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_150", "label": "Converte HTML para Markdown usando t\u00edtulos ATX, removendo scripts e estilos.", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L150"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_168", "label": "Obt\u00e9m o corpo do artigo exclusivamente do selected_extractor com fallback\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L168"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_226", "label": "Retorna o dicion\u00e1rio associado \u00e0 chave ou um dicion\u00e1rio vazio caso n\u00e3o seja\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L226"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_232", "label": "Resolve todos os metadados do artigo seguindo a matriz estrita de prioridades\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L232"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_484", "label": "Remove o primeiro t\u00edtulo H1 do corpo somente quando ele for igual ao t\u00edtulo\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L484"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_519", "label": "Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L519"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_551", "label": "Monta a estrutura final do documento Markdown respeitando a ordem estrita do\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L551"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_619", "label": "Executa a leitura do JSON, valida\u00e7\u00e3o, convers\u00e3o e escrita at\u00f4mica do arquivo\u2026", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L619"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_678", "label": "Configura o parser de argumentos do CLI.", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L678"}, {"id": "$graphify-root$_scripts_convert_article_to_markdown_rationale_701", "label": "Ponto de entrada do CLI.", "file_type": "rationale", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L701"}], "edges": [{"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "datetime", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "email_utils", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "html", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "urllib_parse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "markdownify", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L104", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L104", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L135", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L135", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L149", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L225", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L225", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L225", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L231", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L231", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L231", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L483", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_clean_body_images", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L518", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L550", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L550", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L618", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L618", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "path", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L618", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "path", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L618", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L677", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "target": "namespace", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L677", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_py", "target": "$graphify-root$_scripts_convert_article_to_markdown_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L700", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L85", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L137", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "target": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L197", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L236", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L259", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L284", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L335", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L356", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L500", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L642", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L643", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L646", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "$graphify-root$_scripts_convert_article_to_markdown_clean_body_images", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L647", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "target": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L650", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_main", "target": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L703", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_main", "target": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L708", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_41", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_57", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L57", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_105", "target": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L105", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_136", "target": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L136", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_150", "target": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L150", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_168", "target": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L168", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_226", "target": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L226", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_232", "target": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L232", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_484", "target": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L484", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_519", "target": "$graphify-root$_scripts_convert_article_to_markdown_clean_body_images", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L519", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_551", "target": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L551", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_619", "target": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L619", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_678", "target": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L678", "weight": 1.0}, {"source": "$graphify-root$_scripts_convert_article_to_markdown_rationale_701", "target": "$graphify-root$_scripts_convert_article_to_markdown_main", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L701", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L45"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L47", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "callee": "unescape", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L47", "receiver": "html"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "callee": "sub", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L50", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_scalar", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L51", "receiver": "collapsed"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "list", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L65"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L67"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "extend", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L70", "receiver": "raw_items"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "split", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L70", "receiver": "item"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "extend", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L73", "receiver": "raw_items"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "split", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L73", "receiver": "item"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L75", "receiver": "raw_items"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L76"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "extend", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L77", "receiver": "raw_items"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "split", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L77", "receiver": "value"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L89", "receiver": "norm"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "startswith", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L91", "receiver": "norm_lower"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "startswith", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L92", "receiver": "norm_lower"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "startswith", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L93", "receiver": "norm_lower"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L96", "receiver": "norm"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "add", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L98", "receiver": "seen_lower"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_list", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L99", "receiver": "normalized_items"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L108"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L110", "receiver": "value"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L111", "receiver": "s"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "match", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L115", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "fromisoformat", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L120", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "isoformat", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L121", "receiver": "dt"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L122"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "TypeError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L122"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "parsedate_to_datetime", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L127", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "isoformat", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L128", "receiver": "dt"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L129"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_normalize_date", "callee": "TypeError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L129"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "callee": "urlparse", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L141", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_validate_url", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L142", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L151"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L151", "receiver": "html_content"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "callee": "sub", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L154", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "callee": "markdownify", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L160", "receiver": "markdownify"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_html_to_markdown", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L164", "receiver": "md"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L172", "receiver": "article"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L174", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L176", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "VALID_EXTRACTORS", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L176"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L179", "receiver": "article"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L180"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L181", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L186", "receiver": "extractor_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L187"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L187", "receiver": "primary"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L188", "receiver": "primary"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L190", "receiver": "extractor_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L191"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L191", "receiver": "fallback"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L192", "receiver": "fallback"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L195", "receiver": "extractor_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L196"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L196", "receiver": "primary"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L201", "receiver": "extractor_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L202"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L202", "receiver": "fallback"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L203", "receiver": "fallback"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L206", "receiver": "extractor_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L207"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L207", "receiver": "primary"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L212", "receiver": "extractor_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L213"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L213", "receiver": "fallback"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L214", "receiver": "fallback"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L216", "receiver": "body"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L217", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_body", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L222", "receiver": "body"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L227", "receiver": "data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_get_dict", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L228"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L235", "receiver": "article"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L245", "receiver": "title_candidates"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L245", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "extend", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L247", "receiver": "title_candidates"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L249", "receiver": "input_meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L250", "receiver": "article"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L251", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L252", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L253", "receiver": "readability"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L265", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L270", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L272", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L275", "receiver": "input_meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L276", "receiver": "article"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L278", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L279", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L290", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L297", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L299", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L303", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L304", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L305", "receiver": "input_meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L313", "receiver": "val"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L313", "receiver": "resolved_title"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L320", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L322", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L324", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L328", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L329", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L330", "receiver": "readability"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L343", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L345", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L349", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L350", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L351", "receiver": "input_meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L364", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L366", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "urlparse", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L368", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L372", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L373", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L374", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L386", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L389", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L401", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L403", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L407", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L408", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L409", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L420", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L421", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L433", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L435", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L439", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L440", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L452", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L454", "receiver": "sel_data"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L458", "receiver": "newspaper"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_resolve_article_metadata", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L459", "receiver": "trafilatura"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "splitlines", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L491", "receiver": "body"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L495", "receiver": "line"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "startswith", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L498", "receiver": "stripped"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L499", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L502", "receiver": "norm_h1"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "lower", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L502", "receiver": "norm_title"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "pop", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L510", "receiver": "lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L512", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "pop", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L513", "receiver": "lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_remove_duplicate_initial_h1", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L515", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_clean_body_images", "callee": "sub", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L546", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_clean_body_images", "callee": "replace_image", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L546"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L563", "receiver": "sections"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L566", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L567", "receiver": "sections"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L571", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L572", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L572", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L573", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L574", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L575", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L576", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L577", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L578", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L578", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L579", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L580", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L580", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L581", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L582", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L582", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L583", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L584", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L585", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L586", "receiver": "meta_lines"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L589", "receiver": "sections"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L589", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "get", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L592", "receiver": "meta"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L593", "receiver": "sections"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L596", "receiver": "sections"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "append", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L599", "receiver": "sections"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L599", "receiver": "body"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L602", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "replace", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L606", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "replace", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L606", "receiver": "raw_doc"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "rstrip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L608", "receiver": "line"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "split", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L608", "receiver": "raw_doc"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "join", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L609", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "sub", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L611", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_assemble_markdown_document", "callee": "strip", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L613", "receiver": "formatted_doc"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "exists", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L622", "receiver": "input_path"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "is_file", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L622", "receiver": "input_path"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "FileNotFoundError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L623", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "read_text", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L626", "receiver": "input_path"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "loads", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L627", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L629", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L631", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L633"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L634", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L637", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "with_suffix", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L654", "receiver": "input_path"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "mkdir", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L659", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "write_text", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L664", "receiver": "temp_file"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "replace", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L665", "receiver": "temp_file"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "exists", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L667", "receiver": "temp_file"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "unlink", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L669", "receiver": "temp_file"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_convert_article", "callee": "IOError", "is_member_call": false, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L672", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "callee": "ArgumentParser", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L679", "receiver": "argparse"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L682", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "callee": "Path", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L686"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L689", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "callee": "Path", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L693"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_parse_arguments", "callee": "parse_args", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L697", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L705"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "write", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L709", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "FileNotFoundError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L711"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L711"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "IOError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L711"}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "write", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L712", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "write", "is_member_call": true, "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L715", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_convert_article_to_markdown_main", "callee": "e", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L715"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/ad63f222d84a871c4c2e7ffc7223759b306d96e80a9a4e88eae30f75105cdcdb.json b/graphify-out/cache/ast/v0.9.47-s2/ad63f222d84a871c4c2e7ffc7223759b306d96e80a9a4e88eae30f75105cdcdb.json new file mode 100644 index 0000000..a284284 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/ad63f222d84a871c4c2e7ffc7223759b306d96e80a9a4e88eae30f75105cdcdb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_llm_fallback_py", "label": "test_llm_fallback.py", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "label": "test_llm_adapter_availability_detection()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L31", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "label": "test_llm_adapter_build_prompt_structure()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L48", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "label": "test_llm_adapter_parsing_valid_json_response()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L78", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "label": "test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L118", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "label": "test_llm_adapter_handling_invalid_and_corrupt_responses()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L149", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "label": "test_classifier_triggers_tier3_on_ambiguous_tangential_case()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L190", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "label": "test_classifier_skips_tier3_on_clear_direct_inherent_case()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L224", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "label": "test_classifier_graceful_degradation_when_llm_raises_exception()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L255", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "label": "test_cli_execution_with_enable_llm_flag()", "file_type": "code", "source_file": "tests/test_llm_fallback.py", "source_location": "L289", "_callable": true}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_1", "label": "Su\u00edte de Testes para o Adaptador de Fallback para LLM (Tier 3) do Classificador\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_32", "label": "Valida detec\u00e7\u00e3o de disponibilidade por chave de API ou provider customizado.", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L32"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_49", "label": "Valida a montagem do prompt de desambigua\u00e7\u00e3o com metadados do ECP e documento.", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L49"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_79", "label": "Valida o parsing e instancia\u00e7\u00e3o correta do ClassificationResult a partir da\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L79"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_119", "label": "Valida extra\u00e7\u00e3o de JSON quando a resposta do LLM vem formatada em bloco\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L119"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_150", "label": "Valida que respostas corrompidas ou JSONs sem campos obrigat\u00f3rios retornem None\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L150"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_191", "label": "Garante que o classificador dispare o Tier 3 LLM para casos amb\u00edguos\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L191"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_225", "label": "Garante que casos claros (alta confian\u00e7a e alta densidade de \u00e2ncoras) N\u00c3O\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L225"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_256", "label": "Garante que se o LLM falhar por erro de rede ou timeout, o classificador\u2026", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L256"}, {"id": "$graphify-root$_tests_test_llm_fallback_rationale_290", "label": "Garante que a CLI classify.py aceite e processe a flag --enable-llm sem erros.", "file_type": "rationale", "source_file": "tests/test_llm_fallback.py", "source_location": "L290"}], "edges": [{"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "src_adapters_llm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "src_classifier", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L48", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L118", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L149", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L190", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L224", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L255", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_py", "target": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L289", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_1", "target": "$graphify-root$_tests_test_llm_fallback_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_32", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_49", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_79", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_119", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L119", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_150", "target": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L150", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_191", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L191", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_225", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L225", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_256", "target": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L256", "weight": 1.0}, {"source": "$graphify-root$_tests_test_llm_fallback_rationale_290", "target": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_llm_fallback.py", "source_location": "L290", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L34", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "is_available", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L35", "receiver": "adapter_empty"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L38", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "is_available", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L39", "receiver": "adapter_with_key"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_availability_detection", "callee": "is_available", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L45", "receiver": "adapter_with_fn"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L50", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L58", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_build_prompt_structure", "callee": "build_prompt", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L71", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L80", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L81", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L89", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L96", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_valid_json_response", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L109", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L122", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L129", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_parsing_json_wrapped_in_markdown_codeblock", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L142", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L159", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L160", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L162", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "make_bad_provider", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L162", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L163", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "ClassificationResult", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L170", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_llm_adapter_handling_invalid_and_corrupt_responses", "callee": "disambiguate", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L182", "receiver": "adapter"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L195", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L196", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L204", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L206", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_triggers_tier3_on_ambiguous_tangential_case", "callee": "classify", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L216", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L235", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "tracking_provider", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_llm_fallback.py", "source_location": "L235"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L236", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L238", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_skips_tier3_on_clear_direct_inherent_case", "callee": "classify", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L248", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "LLMFallbackAdapter", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L264", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "failing_provider", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_llm_fallback.py", "source_location": "L264"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "InherenceClassifier", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L265", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "ECPSnapshot", "is_member_call": false, "source_file": "tests/test_llm_fallback.py", "source_location": "L267", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_classifier_graceful_degradation_when_llm_raises_exception", "callee": "classify", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L276", "receiver": "classifier"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L292", "receiver": "ecp_file"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L293", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L305", "receiver": "content_file"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "run", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L308", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_llm_fallback.py", "source_location": "L311"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "exists", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L324", "receiver": "output_file"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "loads", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L325", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_llm_fallback_test_cli_execution_with_enable_llm_flag", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_llm_fallback.py", "source_location": "L325", "receiver": "output_file"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/de938021593301aa420b3175a71e7bd1581649917e30018282a6504505922d57.json b/graphify-out/cache/ast/v0.9.47-s2/de938021593301aa420b3175a71e7bd1581649917e30018282a6504505922d57.json new file mode 100644 index 0000000..9d43744 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/de938021593301aa420b3175a71e7bd1581649917e30018282a6504505922d57.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_src_adapters_llm_py", "label": "llm.py", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L1"}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "label": "LLMFallbackAdapter", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L17", "_callable": true, "_callable_class": true}, {"id": "basenlpadapter", "label": "BaseNLPAdapter", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/adapters/llm.py"}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "label": ".__init__()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L20", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "label": ".is_available()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L30", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_evaluate_similarity", "label": ".evaluate_similarity()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L34", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "label": ".build_prompt()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L37", "_callable": true}, {"id": "ecpsnapshot", "label": "ECPSnapshot", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/adapters/llm.py"}, {"id": "classificationresult", "label": "ClassificationResult", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/src/adapters/llm.py"}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "label": ".disambiguate()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L52", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "label": "._parse_llm_response()", "file_type": "code", "source_file": "src/adapters/llm.py", "source_location": "L75", "_callable": true}, {"id": "$graphify-root$_src_adapters_llm_rationale_1", "label": "Optional LLM fallback adapter (Tier 3). Disabled by default. Provides fallback\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L1"}, {"id": "$graphify-root$_src_adapters_llm_rationale_18", "label": "Optional adapter for LLM fallback boundary disambiguation.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L18"}, {"id": "$graphify-root$_src_adapters_llm_rationale_31", "label": "Returns True if an API key or custom provider function is configured.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L31"}, {"id": "$graphify-root$_src_adapters_llm_rationale_40", "label": "Constructs a structured disambiguation prompt for the LLM.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L40"}, {"id": "$graphify-root$_src_adapters_llm_rationale_58", "label": "Executes LLM fallback for ambiguous boundary cases. Returns a refined\u2026", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L58"}, {"id": "$graphify-root$_src_adapters_llm_rationale_80", "label": "Parses and validates structured JSON response from LLM.", "file_type": "rationale", "source_file": "src/adapters/llm.py", "source_location": "L80"}], "edges": [{"source": "$graphify-root$_src_adapters_llm_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "src_adapters_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "src_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_py", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "basenlpadapter", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_evaluate_similarity", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "target": "classificationresult", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L52", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "ecpsnapshot", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L52", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "classificationresult", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L52", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "classificationresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L52", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L75", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "target": "classificationresult", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L75", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "target": "classificationresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L75", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L62", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L70", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "target": "classificationresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L109", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_1", "target": "$graphify-root$_src_adapters_llm_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_18", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_31", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_is_available", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_40", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_58", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L58", "weight": 1.0}, {"source": "$graphify-root$_src_adapters_llm_rationale_80", "target": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "src/adapters/llm.py", "source_location": "L80", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_init", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L27", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_build_prompt", "callee": "join", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_disambiguate", "callee": "provider_fn", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L69", "receiver": "self"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L83", "receiver": "raw_response"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "startswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L84", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "startswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L86", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "endswith", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L88", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "strip", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L90", "receiver": "clean_str"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "loads", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L92", "receiver": "json"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "src/adapters/llm.py", "source_location": "L93"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L96", "receiver": "parsed"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "DecisionCategory", "is_member_call": false, "source_file": "src/adapters/llm.py", "source_location": "L100", "receiver": null}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L101", "receiver": "parsed"}, {"caller_nid": "$graphify-root$_src_adapters_llm_llmfallbackadapter_parse_llm_response", "callee": "get", "is_member_call": true, "source_file": "src/adapters/llm.py", "source_location": "L103", "receiver": "parsed"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/ed4a59167b17930827b3b2a054b6ddd0dc53bad6c4b091facf2e52f0f4f19d4b.json b/graphify-out/cache/ast/v0.9.47-s2/ed4a59167b17930827b3b2a054b6ddd0dc53bad6c4b091facf2e52f0f4f19d4b.json new file mode 100644 index 0000000..a632037 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/ed4a59167b17930827b3b2a054b6ddd0dc53bad6c4b091facf2e52f0f4f19d4b.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": "L511"}, {"id": "$graphify-root$_readme_licen\u00e7a", "label": "\ud83d\udcc4 Licen\u00e7a", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L543"}], "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": "L511", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_licen\u00e7a", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L543", "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/fd686fa7c4de15a64578950f4afe48baabea88e7222595c638a52a34a18561a2.json b/graphify-out/cache/ast/v0.9.47-s2/fd686fa7c4de15a64578950f4afe48baabea88e7222595c638a52a34a18561a2.json new file mode 100644 index 0000000..a4fc79e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/fd686fa7c4de15a64578950f4afe48baabea88e7222595c638a52a34a18561a2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_convert_article_to_markdown_py", "label": "test_convert_article_to_markdown.py", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "label": "test_normalize_scalar_complex_html_entities()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L45", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", "label": "test_normalize_scalar_whitespace_collapsing()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L54", "_callable": true}, {"id": "parametrize", "label": "parametrize", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_convert_article_to_markdown.py"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "label": "test_normalize_scalar_placeholders_discarded()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L85", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "label": "test_normalize_scalar_non_string_types()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L91", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "label": "test_normalize_list_semicolon_and_comma_split()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L104", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", "label": "test_normalize_list_author_url_filtering()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L115", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "label": "test_normalize_list_deduplication_preserves_case_and_order()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L128", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "label": "test_normalize_list_empty_and_invalid()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L134", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "label": "test_normalize_date_iso_8601_variants()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L146", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "label": "test_normalize_date_rfc_2822_variants()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L154", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "label": "test_normalize_date_invalid_and_placeholders()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L163", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "label": "test_validate_url_valid_schemes()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L186", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "label": "test_validate_url_invalid_schemes()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L206", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "label": "test_convert_html_to_markdown_rich_formatting()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L216", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "label": "test_convert_html_to_markdown_empty_or_whitespace()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L246", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "label": "test_resolve_article_body_trafilatura_primary_and_fallback()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L258", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "label": "test_resolve_article_body_newspaper4k_primary_and_fallback()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L275", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "label": "test_resolve_article_body_readability_primary_and_fallback()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L295", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "label": "test_resolve_article_body_strict_isolation_all_extractors()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L317", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "label": "test_resolve_article_body_invalid_selected_extractor()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L340", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "label": "test_metadata_priority_title_all_fallbacks()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L354", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "label": "test_metadata_priority_original_url_all_fallbacks()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L396", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L436", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", "label": "test_metadata_priority_first_valid_source_no_cross_merging()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L451", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "label": "test_remove_duplicate_initial_h1_exact_and_variations()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L469", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "label": "test_clean_body_images_removes_invalid_and_deduplicates()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L486", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "label": "test_assemble_markdown_document_full_and_minimal()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L508", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "label": "test_golden_fixtures_byte_level_precision()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L541", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "label": "test_conversion_determinism_sha256_repeatability()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L558", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "label": "test_cli_exit_codes_and_error_handling()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L582", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "label": "test_cli_json_root_must_be_object()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L616", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "label": "test_cli_no_stdout_pollution_and_atomic_preservation()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L631", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "label": "test_cli_default_output_naming()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L675", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "label": "test_e2e_pipeline_with_real_extracted_selected_json()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L704", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "label": "test_convert_article_api_direct()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L735", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "label": "test_parse_arguments_api_direct()", "file_type": "code", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L755", "_callable": true}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_1", "label": "Su\u00edte de Testes Automatizados para Convers\u00e3o de Artigo JSON para Markdown.\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_46", "label": "Valida decodifica\u00e7\u00e3o de entidades HTML nomeadas e num\u00e9ricas.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L46"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_55", "label": "Valida colapso de tabs, quebras de linha e espa\u00e7os m\u00faltiplos em um \u00fanico espa\u00e7o.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L55"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_86", "label": "Garante que todos os placeholders documentados no PRD sejam descartados\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L86"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_92", "label": "Valida que entradas n\u00e3o string retornem None de forma segura.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L92"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_105", "label": "Testa divis\u00e3o por ponto e v\u00edrgula na string e v\u00edrgulas em elementos de lista\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L105"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_116", "label": "Garante que URLs em campos de autor sejam estritamente descartadas.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L116"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_129", "label": "Testa deduplica\u00e7\u00e3o case-insensitive preservando a grafia e ordem da primeira\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L129"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_135", "label": "Testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L135"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_147", "label": "Valida parsing de datas ISO 8601 em m\u00faltiplos formatos e fusos.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L147"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_155", "label": "Valida parsing de datas no formato RFC 2822 (usado em feeds RSS e cabe\u00e7alhos\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L155"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_164", "label": "Garante que datas inv\u00e1lidas ou placeholders retornem None sem lan\u00e7ar exce\u00e7\u00e3o\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L164"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_187", "label": "Garante aceita\u00e7\u00e3o de URLs absolutas com esquema HTTP e HTTPS v\u00e1lidos.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L187"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_207", "label": "Garante rejei\u00e7\u00e3o de esquemas n\u00e3o permitidos, URLs relativas e strings vazias.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L207"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_217", "label": "Valida convers\u00e3o de elementos HTML estruturados para Markdown com t\u00edtulos ATX.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L217"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_247", "label": "Testa convers\u00e3o de HTML vazio retornando string vazia.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L247"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_259", "label": "Testa prioridade trafilatura.markdown sobre trafilatura.text.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L259"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_276", "label": "Testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L276"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_296", "label": "Testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L296"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_318", "label": "Garante que a aus\u00eancia de corpo no extrator selecionado NUNCA fa\u00e7a fallback\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L318"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_341", "label": "Garante erro ao receber selected_extractor ausente ou n\u00e3o reconhecido.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L341"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_355", "label": "Valida a cadeia de fallback completa para o campo T\u00cdTULO (6 n\u00edveis).", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L355"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_397", "label": "Valida a cadeia de fallback completa para a URL ORIGINAL (5 n\u00edveis).", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L397"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_437", "label": "Garante que subt\u00edtulo id\u00eantico ao t\u00edtulo seja automaticamente omitido (None).", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L437"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_452", "label": "Garante que listas de autores/tags usem apenas a primeira fonte v\u00e1lida, sem\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L452"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_470", "label": "Testa remo\u00e7\u00e3o de H1 inicial coincidente com t\u00edtulo com varia\u00e7\u00f5es de espa\u00e7os e\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L470"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_487", "label": "Valida descarte de data:, relativos e deduplica\u00e7\u00e3o mantendo a primeira\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L487"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_509", "label": "Testa montagem com todos os campos e apenas com campos obrigat\u00f3rios.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L509"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_542", "label": "Garante correspond\u00eancia exata byte a byte para Trafilatura, Newspaper4k e\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L542"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_559", "label": "Garante que m\u00faltiplas execu\u00e7\u00f5es no mesmo arquivo produzam hashes SHA-256\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L559"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_583", "label": "Testa toda a matriz de c\u00f3digos de sa\u00edda da CLI (0, 1, 2).", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L583"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_617", "label": "Garante encerramento com c\u00f3digo 1 caso a raiz do JSON seja lista, n\u00famero ou\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L617"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_632", "label": "Garante que stdout permane\u00e7a limpo e grava\u00e7\u00e3o at\u00f4mica preserve arquivos\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L632"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_676", "label": "Garante gera\u00e7\u00e3o autom\u00e1tica de .md quando -o n\u00e3o \u00e9 informado.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L676"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_705", "label": "Valida a convers\u00e3o E2E de um artigo real extra\u00eddo do arquivo\u2026", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L705"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_736", "label": "Testa a chamada direta da fun\u00e7\u00e3o convert_article em c\u00f3digo Python.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L736"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_756", "label": "Testa a chamada direta do parse_arguments.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L756"}], "edges": [{"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "hashlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "scripts_convert_article_to_markdown", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L45", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L54", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "target": "parametrize", "relation": "references", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L62", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L85", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L104", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L115", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L128", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L134", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L146", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L154", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L163", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "target": "parametrize", "relation": "references", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L177", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L186", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "target": "parametrize", "relation": "references", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L191", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L206", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L216", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L246", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L258", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L275", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L295", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "target": "parametrize", "relation": "references", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L316", "weight": 1.0, "context": "decorator"}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L317", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L340", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L354", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L396", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L436", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L451", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L469", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L486", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L508", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L541", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L558", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L582", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L616", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L631", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L675", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L704", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L735", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_py", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L755", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_1", "target": "$graphify-root$_tests_test_convert_article_to_markdown_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_46", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L46", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_55", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L55", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_86", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L86", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_92", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L92", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_105", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L105", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_116", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L116", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_129", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L129", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_135", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L135", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_147", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L147", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_155", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L155", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_164", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_187", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L187", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_207", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L207", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_217", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L217", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_247", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L247", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_259", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L259", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_276", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L276", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_296", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L296", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_318", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L318", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_341", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L341", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_355", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L355", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_397", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L397", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_437", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L437", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_452", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L452", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_470", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L470", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_487", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L487", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_509", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L509", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_542", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L542", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_559", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L559", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_583", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L583", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_617", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L617", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_632", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L632", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_676", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L676", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_705", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L705", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_736", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L736", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_756", "target": "$graphify-root$_tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L756", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L48", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L51", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L57", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L87", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L88", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L93", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L94", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L95", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L96", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L108", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L112", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L124", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L131", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L136", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L138", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L148", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L149", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L151", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L156", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L165", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L167", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L168", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L169", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", "callee": "validate_url", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L188", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "callee": "validate_url", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L208", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "callee": "convert_html_to_markdown", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L232", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "callee": "convert_html_to_markdown", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L248", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "callee": "convert_html_to_markdown", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L249", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "callee": "convert_html_to_markdown", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L250", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L265", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L272", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L285", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L292", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L305", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L313", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "callee": "raises", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L336", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L336"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L337", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "callee": "raises", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L342", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L342"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L343", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "callee": "raises", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L345", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L345"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "callee": "resolve_article_body", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L346", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L359", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L369", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L377", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L385", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L393", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L405", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L413", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L421", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L432", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L446", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", "callee": "resolve_article_metadata", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L459", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "callee": "strip", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L475", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "callee": "remove_duplicate_initial_h1", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L475", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "callee": "remove_duplicate_initial_h1", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L479", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", "callee": "remove_duplicate_initial_h1", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L483", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "callee": "clean_body_images", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L495", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "callee": "count", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L497", "receiver": "cleaned"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "callee": "assemble_markdown_document", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L524", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "callee": "startswith", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L526", "receiver": "doc_min"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "callee": "endswith", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L532", "receiver": "doc_min"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "callee": "endswith", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L533", "receiver": "doc_min"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L545", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L548", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L549"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L554", "receiver": "output_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L565", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L566"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "callee": "read_bytes", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L571", "receiver": "out_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "callee": "add", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L572", "receiver": "hashes"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "callee": "hexdigest", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L572", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "callee": "sha256", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L572", "receiver": "hashlib"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L585", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L585"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L589", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L590"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "lower", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L595", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L598", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L599"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "lower", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L604", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L607", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L608"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "callee": "lower", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L613", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L620", "receiver": "bad_json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L620", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L622", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L623"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "callee": "lower", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L628", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", "callee": "lower", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L628", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L634", "receiver": "target_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L637", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L640"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L654", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L657"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L668", "receiver": "target_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", "callee": "glob", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L671", "receiver": "tmp_path"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L678", "receiver": "sample_file"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L679", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L688", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L689"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "callee": "exists", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L695", "receiver": "expected_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_cli_default_output_naming", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L696", "receiver": "expected_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "Path", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L706", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "__file__", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L706"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "exists", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L707", "receiver": "sample_source"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "skip", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L708", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "loads", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L712", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L712", "receiver": "sample_source"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L717", "receiver": "input_json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L717", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "run", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L720", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "SCRIPT_PATH", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L721"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "exists", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L726", "receiver": "output_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L728", "receiver": "output_md"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "startswith", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L729", "receiver": "md_content"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", "callee": "splitlines", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L732", "receiver": "md_content"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L738", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L739", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "callee": "convert_article", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L749", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "callee": "exists", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L751", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_convert_article_api_direct", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L752", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "callee": "parse_arguments", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L757", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "callee": "Path", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L758", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", "callee": "Path", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L759", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json index d0391a3..a0116f0 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":6143,"mtime_ns":1787264412245764200,"indexed_at_ns":1787264516410989400,"word_count":482,"hashes":{"classify.py":"7fc86ae608bd6656cd4d2d91285ab1857edf96864249e6df308dc5c327b35775"}},"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":1232,"mtime_ns":1787264412243760700,"indexed_at_ns":1787264516433377900,"word_count":135,"hashes":{"src/adapters/llm.py":"084a9de66475aad2eb213ff906128d4094408891bd8ddbbd9f0e5674a1cb6192"}},"src/classifier.py":{"size":9804,"mtime_ns":1787264459052089000,"indexed_at_ns":1787264516434381400,"word_count":820,"hashes":{"src/classifier.py":"d890fd0c6be9bb68eeb459e8a89ed988c075978cc220d923a8b81714563db177"}},"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":28382,"mtime_ns":1787319775420442500,"indexed_at_ns":1787319814502845400,"word_count":3352,"hashes":{"readme.md":"54b4604ab8242ffb44f833a3ea76ad90df6ca4a005fcd0ff9fef7c51690c4268"}},"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":21962,"mtime_ns":1787318905723033800,"indexed_at_ns":1787319814384765100,"word_count":2030,"hashes":{"scripts/convert_article_to_markdown.py":"7a7b025a66388fe3a6b6102bfeb98c3d3e872110694764f069e3ea42096f536d"}},"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":28978,"mtime_ns":1787318905723033800,"indexed_at_ns":1787319814443285500,"word_count":2406,"hashes":{"tests/test_convert_article_to_markdown.py":"2e519080e4c95ce3108f65e6cb4f4d1951d6f91a987e0c405c9282cbf805cd52"}},"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"}}} \ 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":4784,"mtime_ns":1787320047035288600,"indexed_at_ns":1787320231298517500,"word_count":390,"hashes":{"src/adapters/llm.py":"de938021593301aa420b3175a71e7bd1581649917e30018282a6504505922d57"}},"src/classifier.py":{"size":10840,"mtime_ns":1787320047036288700,"indexed_at_ns":1787320231299266400,"word_count":911,"hashes":{"src/classifier.py":"4b498e410ac05185ceb9608d32a69b83fb7ade0f92b4460fdcb50fa47fa6796c"}},"src/language.py":{"size":10957,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516435249300,"word_count":887,"hashes":{"src/language.py":"75d8e6444528450b5d11eee5b51965c98525070bb65eb0edabc996701a4c5075"}},"src/models.py":{"size":5959,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516436265800,"word_count":487,"hashes":{"src/models.py":"260513e4539e617b4123ac5b5352cb6ce7caf3a5dfba08badf6390bf60784ac9"}},"src/parser.py":{"size":2654,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516437222700,"word_count":299,"hashes":{"src/parser.py":"a789a6ba02724ad75604dcc56991e8b7989558abe673d4701242012723954407"}},"tests/__init__.py":{"size":69,"mtime_ns":1787195847518641200,"indexed_at_ns":1787196460153585600,"word_count":8,"hashes":{"tests/__init__.py":"2acdae7d2696c23d5391ed343046cffa11b82f3f0d7d85767dacf0e762a955d1"}},"tests/fixtures/benchmark_24/de/contextual.md":{"size":144,"mtime_ns":1787196180779459400,"indexed_at_ns":1787196460268138600,"word_count":17,"hashes":{"tests/fixtures/benchmark_24/de/contextual.md":"b6a18c4bef2defe99773d3ba43137148d25b42ac27562b10b73ccdee1a49f203"}},"tests/fixtures/benchmark_24/de/contextual_expected.json":{"size":136,"mtime_ns":1787196187032823100,"indexed_at_ns":1787196460154321700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/contextual_expected.json":"cb741ed9bef3359a41d5c031ad213d4320c5b8fe3f8579e497ee9b1eda0ed478"}},"tests/fixtures/benchmark_24/de/direct.md":{"size":148,"mtime_ns":1787196169572812500,"indexed_at_ns":1787196460269192500,"word_count":16,"hashes":{"tests/fixtures/benchmark_24/de/direct.md":"67f375d26d8424655b76d5650c656b4af79b9964d52f2d24049e1f4de6545c9b"}},"tests/fixtures/benchmark_24/de/direct_expected.json":{"size":132,"mtime_ns":1787196175168070900,"indexed_at_ns":1787196460155004400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/direct_expected.json":"5301a39d31b365266b529ce9823145381241f8876af1ec21f0a9c27c9bdc80fa"}},"tests/fixtures/benchmark_24/de/ecp.json":{"size":579,"mtime_ns":1787196164027193900,"indexed_at_ns":1787196460155664300,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/de/ecp.json":"061fc3a9468d2baaaf2b3e8355d08d23261a9a7adc484cb06b45646eacba46fc"}},"tests/fixtures/benchmark_24/de/not_related.md":{"size":137,"mtime_ns":1787196204093781400,"indexed_at_ns":1787196460270056100,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/not_related.md":"4904b694b45a2058614a4e4350046eee042c4bbd7bcd6b88c56408ee3aebd81d"}},"tests/fixtures/benchmark_24/de/not_related_expected.json":{"size":129,"mtime_ns":1787196209729787600,"indexed_at_ns":1787196460156391600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/not_related_expected.json":"730fa882c1f3b8a7c0e2d3da9af55ee57ad7425a8b304c11f54e01899c740952"}},"tests/fixtures/benchmark_24/de/tangential.md":{"size":150,"mtime_ns":1787196193187087300,"indexed_at_ns":1787196460270857700,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/de/tangential.md":"8207068977006dafa7c9c4459bd996b5c124972d25f1015a589d3b06d0999613"}},"tests/fixtures/benchmark_24/de/tangential_expected.json":{"size":128,"mtime_ns":1787196198703847300,"indexed_at_ns":1787196460157130400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/de/tangential_expected.json":"82dea5e55d7586c4e7005755e3da4f44560238733094876047de51e854d41d92"}},"tests/fixtures/benchmark_24/en/contextual.md":{"size":148,"mtime_ns":1787196066427405900,"indexed_at_ns":1787196460271878300,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/en/contextual.md":"258a9f1ae01dae52955c1f45cb176e7d981a72ba869c33232c8c295f4816acc0"}},"tests/fixtures/benchmark_24/en/contextual_expected.json":{"size":136,"mtime_ns":1787196073211713100,"indexed_at_ns":1787196460158457500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/contextual_expected.json":"70605f9d8901d4c4b99d9fda1f30bc114cb0b65893579f77a1f9d50f62c1e3fc"}},"tests/fixtures/benchmark_24/en/direct.md":{"size":155,"mtime_ns":1787196054149613200,"indexed_at_ns":1787196460272766400,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/en/direct.md":"c7e0b093c386ccf19d9d7cbef4763dfb665213a7a245093af43529b1eaff8266"}},"tests/fixtures/benchmark_24/en/direct_expected.json":{"size":132,"mtime_ns":1787196059966736300,"indexed_at_ns":1787196460159526700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/direct_expected.json":"0b803b2ad37388be7ef4ea1d164db22c9fd784bcb9be6f56627d412f1f9299bc"}},"tests/fixtures/benchmark_24/en/ecp.json":{"size":594,"mtime_ns":1787197123717795600,"indexed_at_ns":1787197157494285900,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/en/ecp.json":"601423ac1e0b0e2bb7a0151ac87f5bdfd32450d90a022eaf9ef030338e0b4893"}},"tests/fixtures/benchmark_24/en/not_related.md":{"size":146,"mtime_ns":1787196350333465500,"indexed_at_ns":1787196460273595300,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/en/not_related.md":"2fa405b123733c5a9b5beba8c646b886b27e212cff55496a9fe7d6208ddfb11c"}},"tests/fixtures/benchmark_24/en/not_related_expected.json":{"size":129,"mtime_ns":1787196104521133100,"indexed_at_ns":1787196460161344300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/not_related_expected.json":"cb046b055b5c72d8146b6035a935211d60fb0b313ef819576bb8e7048d55f468"}},"tests/fixtures/benchmark_24/en/tangential.md":{"size":147,"mtime_ns":1787196082730266300,"indexed_at_ns":1787196460274648200,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/en/tangential.md":"793acebc11e5d6c17872d56881c8fe99cb187116c38fa4b2647d28fe3063a61e"}},"tests/fixtures/benchmark_24/en/tangential_expected.json":{"size":128,"mtime_ns":1787196089699545000,"indexed_at_ns":1787196460162151700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/en/tangential_expected.json":"d5b1a4dc64246838a066f73c41f0e33dcd59636e61d6c0842a3728247e536aff"}},"tests/fixtures/benchmark_24/es/contextual.md":{"size":167,"mtime_ns":1787196129959491900,"indexed_at_ns":1787196460275850900,"word_count":22,"hashes":{"tests/fixtures/benchmark_24/es/contextual.md":"d45ef46752e2093455e35cbf97076f943ab2be736c9bc4580607960b9d068731"}},"tests/fixtures/benchmark_24/es/contextual_expected.json":{"size":136,"mtime_ns":1787196135705341100,"indexed_at_ns":1787196460162957600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/contextual_expected.json":"083f7153df08f93f595782eb2959e8505ac4bda4daaf6634c7a11d444c1ba6b0"}},"tests/fixtures/benchmark_24/es/direct.md":{"size":179,"mtime_ns":1787196118640588800,"indexed_at_ns":1787196460276716800,"word_count":29,"hashes":{"tests/fixtures/benchmark_24/es/direct.md":"f6e282a68830d5518285b0cda510fe57fa844cc6322979604a427797f07fdbd7"}},"tests/fixtures/benchmark_24/es/direct_expected.json":{"size":132,"mtime_ns":1787196124282103900,"indexed_at_ns":1787196460163727400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/direct_expected.json":"fb96e4ae9e2e1603b9ac4d31b6984b31d814b3f31a8a3ca03c52c1ffa4199471"}},"tests/fixtures/benchmark_24/es/ecp.json":{"size":590,"mtime_ns":1787196110761765400,"indexed_at_ns":1787196460164509700,"word_count":52,"hashes":{"tests/fixtures/benchmark_24/es/ecp.json":"09cad55a4cc5a8c04b9898dee21c28b0d40561fcdd8ff012fe4de96616c05f7f"}},"tests/fixtures/benchmark_24/es/not_related.md":{"size":148,"mtime_ns":1787196152611035900,"indexed_at_ns":1787196460277631800,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/not_related.md":"1b8a7f7a6852c9ec33fc34513ab479bd5edba48762a0801f7982e48adcb0089b"}},"tests/fixtures/benchmark_24/es/not_related_expected.json":{"size":129,"mtime_ns":1787196158098444000,"indexed_at_ns":1787196460165309300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/not_related_expected.json":"01645746a62894e6448895d9bf5eac394e94e54711d7f519d2ed14d8b8957487"}},"tests/fixtures/benchmark_24/es/tangential.md":{"size":141,"mtime_ns":1787196141436479100,"indexed_at_ns":1787196460278451000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/es/tangential.md":"41888c762fdc38fb9d5a6dc39373ac2e38331ba4520535088efef8943ea40e49"}},"tests/fixtures/benchmark_24/es/tangential_expected.json":{"size":128,"mtime_ns":1787196147026058000,"indexed_at_ns":1787196460166503400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/es/tangential_expected.json":"aac2bd9ab5946710c62dc0a8daf8b1481462bed081e11db4558c08ef917fcf81"}},"tests/fixtures/benchmark_24/fr/contextual.md":{"size":167,"mtime_ns":1787196288415259700,"indexed_at_ns":1787196460279288100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/fr/contextual.md":"8a36d5737429e743ffbdc8c6ae78bcc9410915e048056dbd1fb4d3d493ac7ec6"}},"tests/fixtures/benchmark_24/fr/contextual_expected.json":{"size":136,"mtime_ns":1787196295706997200,"indexed_at_ns":1787196460167650500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/contextual_expected.json":"4a155288609fc5c935a39a633d7185109629871380b88af1c367922e44abe900"}},"tests/fixtures/benchmark_24/fr/direct.md":{"size":160,"mtime_ns":1787196277020128300,"indexed_at_ns":1787196460280073100,"word_count":20,"hashes":{"tests/fixtures/benchmark_24/fr/direct.md":"f218d9c8ada6c31e813c41bcb5e6a081a1df526022b907795065c0f845480077"}},"tests/fixtures/benchmark_24/fr/direct_expected.json":{"size":132,"mtime_ns":1787196282775093400,"indexed_at_ns":1787196460168573600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/direct_expected.json":"b93c2059a731e06a164fe1331e1c7ff01fb741f728c8aa1df151ee51bc993268"}},"tests/fixtures/benchmark_24/fr/ecp.json":{"size":600,"mtime_ns":1787197131861351500,"indexed_at_ns":1787197157506006100,"word_count":50,"hashes":{"tests/fixtures/benchmark_24/fr/ecp.json":"f2e7f9eafa1fd24514541868c83db90b69784d5faf4e8d039d79d11597b51428"}},"tests/fixtures/benchmark_24/fr/not_related.md":{"size":181,"mtime_ns":1787196312472120100,"indexed_at_ns":1787196460280811500,"word_count":30,"hashes":{"tests/fixtures/benchmark_24/fr/not_related.md":"475984d25541d876b7d9e3e8f7cff7b3db2bc1489c25d6612b911da6d2b2af8e"}},"tests/fixtures/benchmark_24/fr/not_related_expected.json":{"size":129,"mtime_ns":1787196317906240800,"indexed_at_ns":1787196460170379300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/not_related_expected.json":"31b3104faa21c2a417399fdd85d077d1c58fe74ee33fd41b0942580be6f81267"}},"tests/fixtures/benchmark_24/fr/tangential.md":{"size":158,"mtime_ns":1787196301225610200,"indexed_at_ns":1787196460281594400,"word_count":25,"hashes":{"tests/fixtures/benchmark_24/fr/tangential.md":"7f6c6ab84d2a26675f9f16fb23d45cf1e97b3ff5e28fb98df6aeaa2368d2c305"}},"tests/fixtures/benchmark_24/fr/tangential_expected.json":{"size":128,"mtime_ns":1787196306729905200,"indexed_at_ns":1787196460171141500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/fr/tangential_expected.json":"cc117a22ba73be1b308d377767ca0ae8da8e5889ccdaa430893b3ae70a58c9ca"}},"tests/fixtures/benchmark_24/it/contextual.md":{"size":150,"mtime_ns":1787196234462201200,"indexed_at_ns":1787196460283346800,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/it/contextual.md":"045391f6f676add7e1ae9391419ef65442259ab90f9cacb5caca4d468d292017"}},"tests/fixtures/benchmark_24/it/contextual_expected.json":{"size":136,"mtime_ns":1787196240055631300,"indexed_at_ns":1787196460171870600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/contextual_expected.json":"b2b4b297f43e5af1cda526e259acede43a31b552c0321bee1ce1c72572cec557"}},"tests/fixtures/benchmark_24/it/direct.md":{"size":145,"mtime_ns":1787196221664473400,"indexed_at_ns":1787196460284281100,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/direct.md":"d54bad27d944692fa7f00a036f882d1c0e42d189241822adcae86edf73a444da"}},"tests/fixtures/benchmark_24/it/direct_expected.json":{"size":132,"mtime_ns":1787196228986408600,"indexed_at_ns":1787196460172673300,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/direct_expected.json":"f94e71dc4b78c0646190ff288f08dab46c67f2356b8b75cc515c28af7c9c423c"}},"tests/fixtures/benchmark_24/it/ecp.json":{"size":529,"mtime_ns":1787196215715634300,"indexed_at_ns":1787196460173452600,"word_count":45,"hashes":{"tests/fixtures/benchmark_24/it/ecp.json":"bcbd12d3057368618b006c24f384341f91349c713d10a3028d3eb4afada32de6"}},"tests/fixtures/benchmark_24/it/not_related.md":{"size":153,"mtime_ns":1787196259362992300,"indexed_at_ns":1787196460285099000,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/not_related.md":"bca227c7b17fd4404e5ca1d082b848981c1da28d0b657df1e025c03056387f13"}},"tests/fixtures/benchmark_24/it/not_related_expected.json":{"size":129,"mtime_ns":1787196265318256200,"indexed_at_ns":1787196460174468400,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/not_related_expected.json":"d007ac531224ad0834e9a8807582d0e047524be4c30fffdd1a19a51dba36d85d"}},"tests/fixtures/benchmark_24/it/tangential.md":{"size":155,"mtime_ns":1787196245918356300,"indexed_at_ns":1787196460285993500,"word_count":23,"hashes":{"tests/fixtures/benchmark_24/it/tangential.md":"a78a886f11462033c996a20b629e13c6bb55d4e08ffed20601cd4ea877b9db09"}},"tests/fixtures/benchmark_24/it/tangential_expected.json":{"size":128,"mtime_ns":1787196252898853500,"indexed_at_ns":1787196460175957500,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/it/tangential_expected.json":"18872f6fe4cbd71812566494e88bd97633d696f732b3b5bad871f81076703f74"}},"tests/fixtures/benchmark_24/pt/contextual.md":{"size":125,"mtime_ns":1787196014201071400,"indexed_at_ns":1787196460286845200,"word_count":18,"hashes":{"tests/fixtures/benchmark_24/pt/contextual.md":"e9ea12885a5c68822f96691e543b55885afba3d00a9e0fa65837bd88e559f157"}},"tests/fixtures/benchmark_24/pt/contextual_expected.json":{"size":136,"mtime_ns":1787196019487136800,"indexed_at_ns":1787196460176915600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/contextual_expected.json":"34145a845a7f6b155bf42c028bb0c6d8d43ed5cd0b1d179c089b1e621fecd08f"}},"tests/fixtures/benchmark_24/pt/direct.md":{"size":140,"mtime_ns":1787196003236562000,"indexed_at_ns":1787196460287899900,"word_count":21,"hashes":{"tests/fixtures/benchmark_24/pt/direct.md":"150182b9c1352163cb136c19141b85b3f0323e7eaa0cd023fce1dfef0de63d29"}},"tests/fixtures/benchmark_24/pt/direct_expected.json":{"size":132,"mtime_ns":1787196008785189600,"indexed_at_ns":1787196460177800600,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/direct_expected.json":"a9c666394db6a6e2fcd503d8cf67549531ee9e70eb73b1edb2b6a2443316cbf2"}},"tests/fixtures/benchmark_24/pt/ecp.json":{"size":507,"mtime_ns":1787195997549710300,"indexed_at_ns":1787196460178615000,"word_count":40,"hashes":{"tests/fixtures/benchmark_24/pt/ecp.json":"cec78c3ed8d2ec311d079239922a10a35a7fc9c382d8886fec81c6322d2a70ac"}},"tests/fixtures/benchmark_24/pt/not_related.md":{"size":124,"mtime_ns":1787196036724084200,"indexed_at_ns":1787196460288769500,"word_count":19,"hashes":{"tests/fixtures/benchmark_24/pt/not_related.md":"3af103a7f0df8e93c6154157e9903dc7fc10d64fa69dd7c2b08d4f68b99b1972"}},"tests/fixtures/benchmark_24/pt/not_related_expected.json":{"size":129,"mtime_ns":1787196042201218800,"indexed_at_ns":1787196460179403700,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/not_related_expected.json":"d5ce36bca028f31ba472e325993610eb82f98e1a8f84fa770bf92aa7158ce954"}},"tests/fixtures/benchmark_24/pt/tangential.md":{"size":140,"mtime_ns":1787196024978861700,"indexed_at_ns":1787196460289652400,"word_count":24,"hashes":{"tests/fixtures/benchmark_24/pt/tangential.md":"77d86f819ccbefe9830a57151354ca47d83e46b3d0e55d0f5139f37a1d9df0b8"}},"tests/fixtures/benchmark_24/pt/tangential_expected.json":{"size":128,"mtime_ns":1787196030395574000,"indexed_at_ns":1787196460180223100,"word_count":10,"hashes":{"tests/fixtures/benchmark_24/pt/tangential_expected.json":"fb977fec8db613f9545c81adffe0295084c6198b5f7c9a85d8901a228de63a51"}},"tests/test_adapters.py":{"size":1166,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516466770300,"word_count":91,"hashes":{"tests/test_adapters.py":"32a9519d5c55012aedaa43a786aff1cec88e7391d186f5d0a54213ca1b204f48"}},"tests/test_benchmark_24.py":{"size":2757,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516468505400,"word_count":257,"hashes":{"tests/test_benchmark_24.py":"7c136ac4d442e47a2f8914303880ce265c2fe49485eb182014fc3e10c06f9e71"}},"tests/test_classifier.py":{"size":3836,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516469349200,"word_count":351,"hashes":{"tests/test_classifier.py":"d3323e05dd21f20686d9293f767ebb2ced206c7b74e7ca89d2ac02c0a4e31282"}},"tests/test_cli.py":{"size":3872,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470059400,"word_count":314,"hashes":{"tests/test_cli.py":"0573d9b13e45413beefac33d86eae94e17dbbf37554120a1fc5720bfb3d67d63"}},"tests/test_language.py":{"size":1929,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516472426100,"word_count":242,"hashes":{"tests/test_language.py":"7f7aae057ecbda26edd747d24241e9cf36f611c71c5d70d0aa308df7d71e0547"}},"tests/test_models.py":{"size":3668,"mtime_ns":1787264437930228400,"indexed_at_ns":1787264516473330500,"word_count":306,"hashes":{"tests/test_models.py":"232210770fc690edcc732d940bafe46fcec9bfed7f17e0aa5c60e6cf6635751f"}},"tests/test_adversarial.py":{"size":8429,"mtime_ns":1787264437924228700,"indexed_at_ns":1787264516467613100,"word_count":704,"hashes":{"tests/test_adversarial.py":"3acc7ff372e6b0f1f42dad29d280b835ac51784b1dca8054472287a7355c9386"}},"docs/googlenews_extractor_guia_completo.md":{"size":23200,"mtime_ns":1787264437928228500,"indexed_at_ns":1787264516560203200,"word_count":2292,"hashes":{"docs/googlenews_extractor_guia_completo.md":"dcff19204ab04403030b2339663c0d3c161744f50a53f5254c459a894eb3b3c8"}},"examples/ecp_sao_paulo_futebol_clube.json":{"size":23358,"mtime_ns":1787229477299354200,"indexed_at_ns":1787234770609429300,"word_count":1524,"hashes":{"examples/ecp_sao_paulo_futebol_clube.json":"1af9006669d57f8dc123f0edea0d0fe8aaeb9016e36ec3e0d95023ea26996915"}},"scripts/extract_google_news.py":{"size":14720,"mtime_ns":1787264437927229800,"indexed_at_ns":1787264516421445500,"word_count":1314,"hashes":{"scripts/extract_google_news.py":"aa17b59997ab6bb549a918fb1026ddf5a5c5143c75c234895dc32447e2c5b85a"}},"specs/002-google-news-extractor/checklists/readiness.md":{"size":5258,"mtime_ns":1787234305932687100,"indexed_at_ns":1787234770736852100,"word_count":706,"hashes":{"specs/002-google-news-extractor/checklists/readiness.md":"ad4c18a1fe1c6f19f45a043748fe4f195db525afac53ed77905222015ec5230c"}},"specs/002-google-news-extractor/checklists/requirements.md":{"size":1144,"mtime_ns":1787232386676398600,"indexed_at_ns":1787234770737689600,"word_count":158,"hashes":{"specs/002-google-news-extractor/checklists/requirements.md":"d83944755d7f6e43d8c76e032f0047be6f8c4cb2b80dea65e198f57b9c5eccd7"}},"specs/002-google-news-extractor/contracts/cli_contract.md":{"size":2681,"mtime_ns":1787236744313922700,"indexed_at_ns":1787236813512122300,"word_count":424,"hashes":{"specs/002-google-news-extractor/contracts/cli_contract.md":"6b9e3c10becd7b8fa633e409e9a3298ff4b2903dfd5194054c8e41dd0c0c5f23"}},"specs/002-google-news-extractor/data-model.md":{"size":3008,"mtime_ns":1787234040813431800,"indexed_at_ns":1787234770739130200,"word_count":472,"hashes":{"specs/002-google-news-extractor/data-model.md":"78cec846c1173fbdff3c77313ba02c7977365e5ab102df527f90ed7b06e69519"}},"specs/002-google-news-extractor/plan.md":{"size":3947,"mtime_ns":1787236725982522400,"indexed_at_ns":1787236813514970600,"word_count":448,"hashes":{"specs/002-google-news-extractor/plan.md":"57a0a3eb1fd6d7afbe394be62e681a02d7ef26124f4142b9d8b72ea95259a34b"}},"specs/002-google-news-extractor/quickstart.md":{"size":2341,"mtime_ns":1787236764020651300,"indexed_at_ns":1787236813515935900,"word_count":317,"hashes":{"specs/002-google-news-extractor/quickstart.md":"3478a487614358839b3e53c15b05b86a4b850bead9b4142384566e244753bde3"}},"specs/002-google-news-extractor/research.md":{"size":3630,"mtime_ns":1787236785046618200,"indexed_at_ns":1787236813516811500,"word_count":483,"hashes":{"specs/002-google-news-extractor/research.md":"71e796c83a1c293fa380b4f01a2eed810275e4628548e0f8e8b9ecaa90d3ac13"}},"specs/002-google-news-extractor/spec.md":{"size":7506,"mtime_ns":1787236709078315600,"indexed_at_ns":1787236813517705300,"word_count":1096,"hashes":{"specs/002-google-news-extractor/spec.md":"e84b37b25f61ed209d1295f77bf84024ac6c3c818f6b98043204a9f81bff49f0"}},"specs/002-google-news-extractor/tasks.md":{"size":5315,"mtime_ns":1787236802480804800,"indexed_at_ns":1787236813518644500,"word_count":692,"hashes":{"specs/002-google-news-extractor/tasks.md":"94430da291ad0dc34b1cde7c30f2b8e1ce0c83d35b5e71ab68bd135146c9ef47"}},"tests/test_extract_google_news.py":{"size":12221,"mtime_ns":1787264437931227400,"indexed_at_ns":1787264516471687100,"word_count":1114,"hashes":{"tests/test_extract_google_news.py":"5304424b746b871720985cfdd031b0f8895c664bdd9d273b9c1723f445a2276f"}},"scripts/__init__.py":{"size":50,"mtime_ns":1787234973578233800,"indexed_at_ns":1787235018163517900,"word_count":6,"hashes":{"scripts/__init__.py":"f30a694c2114ef6bc58efa1caea7265dde8ef296d92cdb77c8b3e3d1f21af3a5"}},"README.md":{"size":28853,"mtime_ns":1787320219585220400,"indexed_at_ns":1787320231400137800,"word_count":3424,"hashes":{"readme.md":"ed4a59167b17930827b3b2a054b6ddd0dc53bad6c4b091facf2e52f0f4f19d4b"}},"docs/prd_extrator_artigos_nlp.md":{"size":11894,"mtime_ns":1787237774009258300,"indexed_at_ns":1787240513666474800,"word_count":1548,"hashes":{"docs/prd_extrator_artigos_nlp.md":"e10035c73584efc6d043bec17d43388ecbf25b576ca3475d0b9906cbc16fad90"}},"scripts/extract_article_contents.py":{"size":27025,"mtime_ns":1787264465341521500,"indexed_at_ns":1787264516419754800,"word_count":2069,"hashes":{"scripts/extract_article_contents.py":"a76fc087a959496bc2cf4767baaed89628bd945e1aaa8e981be840cf1240f1ba"}},"specs/003-article-content-extractor/checklists/extraction.md":{"size":4716,"mtime_ns":1787239873797626000,"indexed_at_ns":1787240513705426800,"word_count":609,"hashes":{"specs/003-article-content-extractor/checklists/extraction.md":"b8351909b93111f8f1e50f0f100446d3f579d0c11823eba4936c72a617aba5f8"}},"specs/003-article-content-extractor/checklists/requirements.md":{"size":1209,"mtime_ns":1787237950814070500,"indexed_at_ns":1787240513706099200,"word_count":164,"hashes":{"specs/003-article-content-extractor/checklists/requirements.md":"3c770288636c4523897b41c6dad5f2771af2007654d6b5f6b87d74bc9c33d11d"}},"specs/003-article-content-extractor/contracts/cli-contract.md":{"size":2493,"mtime_ns":1787239569056013800,"indexed_at_ns":1787240513706906100,"word_count":390,"hashes":{"specs/003-article-content-extractor/contracts/cli-contract.md":"44c5ec336c210bdd9671a5e852ee750e91f426b87c954b2c52499513cb85168d"}},"specs/003-article-content-extractor/contracts/json-schema.md":{"size":3065,"mtime_ns":1787239578931403200,"indexed_at_ns":1787240513707577900,"word_count":298,"hashes":{"specs/003-article-content-extractor/contracts/json-schema.md":"0cefe7faadd07932717b8c3493914e5367ec6ac50673671aee1f4edc7bde7e37"}},"specs/003-article-content-extractor/data-model.md":{"size":4410,"mtime_ns":1787239558236282500,"indexed_at_ns":1787240513708324600,"word_count":733,"hashes":{"specs/003-article-content-extractor/data-model.md":"651180962cf2a9253cb0a22429947eb3bf552c26be7defce98ef7583cbcd8fbf"}},"specs/003-article-content-extractor/plan.md":{"size":4642,"mtime_ns":1787264323707266000,"indexed_at_ns":1787264516630842500,"word_count":510,"hashes":{"specs/003-article-content-extractor/plan.md":"3ae38a2a907f1aeb6987c647a6290533acde67ef91f590445bdec0e1da5f52be"}},"specs/003-article-content-extractor/quickstart.md":{"size":2210,"mtime_ns":1787239589989665700,"indexed_at_ns":1787240513709638200,"word_count":282,"hashes":{"specs/003-article-content-extractor/quickstart.md":"332c407a9b1c3eafcb874d24f5396f005cde65d4d8e9e643fda95f47f093c544"}},"specs/003-article-content-extractor/research.md":{"size":4220,"mtime_ns":1787239545833014600,"indexed_at_ns":1787240513710259700,"word_count":588,"hashes":{"specs/003-article-content-extractor/research.md":"485f0e63023aa6dc8c4c64b22dd7394c032b7f468fa41632967789c4e269587b"}},"specs/003-article-content-extractor/spec.md":{"size":10428,"mtime_ns":1787264319288323400,"indexed_at_ns":1787264516635570600,"word_count":1515,"hashes":{"specs/003-article-content-extractor/spec.md":"1ad671e31d86c76aedaa27d5d4da839cdf2d602bd17e618310c80bd3747fab78"}},"specs/003-article-content-extractor/tasks.md":{"size":8201,"mtime_ns":1787240464652064400,"indexed_at_ns":1787240513711676500,"word_count":1070,"hashes":{"specs/003-article-content-extractor/tasks.md":"3122914461e8d6017e63900c66fa8935135b5efcc9fca8d64e762ee109602901"}},"tests/test_extract_article_contents.py":{"size":13204,"mtime_ns":1787264437929228700,"indexed_at_ns":1787264516470977000,"word_count":1039,"hashes":{"tests/test_extract_article_contents.py":"4333ac8911d1cd27964b0bacfa394ee8fe9e068bb2f25f3e0ff5e299564a7b4d"}},"docs/prd_deterministic_content_selection.md":{"size":15516,"mtime_ns":1787264674203828600,"indexed_at_ns":1787272605069414800,"word_count":2047,"hashes":{"docs/prd_deterministic_content_selection.md":"a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b"}},"scripts/select_article_extractor.py":{"size":21658,"mtime_ns":1787274502480126900,"indexed_at_ns":1787310811622526500,"word_count":2097,"hashes":{"scripts/select_article_extractor.py":"027743d36fd728fded28a085abf202e4eab0102bc5517cf4975a094d5df04c3f"}},"specs/004-deterministic-content-selection/checklists/deterministic-selection.md":{"size":4236,"mtime_ns":1787272346869214200,"indexed_at_ns":1787272605178155100,"word_count":566,"hashes":{"specs/004-deterministic-content-selection/checklists/deterministic-selection.md":"937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241"}},"specs/004-deterministic-content-selection/checklists/requirements.md":{"size":1303,"mtime_ns":1787264728720272700,"indexed_at_ns":1787272605179339000,"word_count":175,"hashes":{"specs/004-deterministic-content-selection/checklists/requirements.md":"8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56"}},"specs/004-deterministic-content-selection/contracts/cli-contract.md":{"size":2071,"mtime_ns":1787274329217544500,"indexed_at_ns":1787274399618300500,"word_count":293,"hashes":{"specs/004-deterministic-content-selection/contracts/cli-contract.md":"6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4"}},"specs/004-deterministic-content-selection/contracts/json-schema.md":{"size":1982,"mtime_ns":1787271837732839400,"indexed_at_ns":1787272605181473200,"word_count":195,"hashes":{"specs/004-deterministic-content-selection/contracts/json-schema.md":"db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6"}},"specs/004-deterministic-content-selection/data-model.md":{"size":5498,"mtime_ns":1787271825597039400,"indexed_at_ns":1787272605182487300,"word_count":681,"hashes":{"specs/004-deterministic-content-selection/data-model.md":"5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a"}},"specs/004-deterministic-content-selection/plan.md":{"size":5319,"mtime_ns":1787271850174420500,"indexed_at_ns":1787272605183666400,"word_count":643,"hashes":{"specs/004-deterministic-content-selection/plan.md":"2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f"}},"specs/004-deterministic-content-selection/quickstart.md":{"size":2239,"mtime_ns":1787274502478128000,"indexed_at_ns":1787310811759309400,"word_count":245,"hashes":{"specs/004-deterministic-content-selection/quickstart.md":"7136c34e9fa9c525ff01d65f8c35c2368cace0468b2651e85901195bfb8730a5"}},"specs/004-deterministic-content-selection/research.md":{"size":6915,"mtime_ns":1787274316854443300,"indexed_at_ns":1787274399622900200,"word_count":906,"hashes":{"specs/004-deterministic-content-selection/research.md":"11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427"}},"specs/004-deterministic-content-selection/spec.md":{"size":11807,"mtime_ns":1787274311156486400,"indexed_at_ns":1787274399623530600,"word_count":1619,"hashes":{"specs/004-deterministic-content-selection/spec.md":"7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303"}},"specs/004-deterministic-content-selection/tasks.md":{"size":8181,"mtime_ns":1787272595818614500,"indexed_at_ns":1787272605189230700,"word_count":1024,"hashes":{"specs/004-deterministic-content-selection/tasks.md":"412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887"}},"tests/test_select_article_extractor.py":{"size":24179,"mtime_ns":1787274502480126900,"indexed_at_ns":1787310811669359800,"word_count":2243,"hashes":{"tests/test_select_article_extractor.py":"22eb249629c891e4cd4b2bc09ce17c1e334bc908de3db53539ced305d3bfd287"}},"docs/prd_convert_json_markdown.md":{"size":22478,"mtime_ns":1787315400452784100,"indexed_at_ns":1787317709833244200,"word_count":3252,"hashes":{"docs/prd_convert_json_markdown.md":"d4203d9d5a6b9107bcc8ced682b509b30e7c152293298bcae22c1f96570415fb"}},"scripts/convert_article_to_markdown.py":{"size":21972,"mtime_ns":1787320071280986400,"indexed_at_ns":1787320231279685000,"word_count":2030,"hashes":{"scripts/convert_article_to_markdown.py":"917588aaee4d18fb0dfb2d292b62c1b05ecdfee3f3cd8e13a2e16a9dc281ff73"}},"specs/005-convert-json-markdown/checklists/markdown-conversion.md":{"size":10081,"mtime_ns":1787315812919805400,"indexed_at_ns":1787317709896809600,"word_count":1322,"hashes":{"specs/005-convert-json-markdown/checklists/markdown-conversion.md":"b5d0d4f6da5666dd115bd84f2a963c45da3080bb6d5725066aafab49d765746b"}},"specs/005-convert-json-markdown/checklists/requirements.md":{"size":1339,"mtime_ns":1787315513450848200,"indexed_at_ns":1787317709897553300,"word_count":181,"hashes":{"specs/005-convert-json-markdown/checklists/requirements.md":"702ba88fb2e7c9740d4c83a0c1fd434d5c348b7691f12688a1c00c0ee4956afd"}},"specs/005-convert-json-markdown/contracts/cli-contract.md":{"size":1641,"mtime_ns":1787315656382816000,"indexed_at_ns":1787317709898261700,"word_count":231,"hashes":{"specs/005-convert-json-markdown/contracts/cli-contract.md":"f2c146fd734cceaa4f2268d03c8633153f57d2fd468073a6a4701fbc14b25ef7"}},"specs/005-convert-json-markdown/contracts/markdown-schema.md":{"size":1616,"mtime_ns":1787315662306015400,"indexed_at_ns":1787317709898922500,"word_count":218,"hashes":{"specs/005-convert-json-markdown/contracts/markdown-schema.md":"b28308c2c54a4f569f5e533beb0a2a1ff44614fb28853c2f1aa915e58558c4ab"}},"specs/005-convert-json-markdown/data-model.md":{"size":5828,"mtime_ns":1787315648195198100,"indexed_at_ns":1787317709899563900,"word_count":687,"hashes":{"specs/005-convert-json-markdown/data-model.md":"2eb414a927cb0f39ba466d0870792afd73b719c8baa2fb5fe47020a024f93520"}},"specs/005-convert-json-markdown/plan.md":{"size":6196,"mtime_ns":1787315676826685000,"indexed_at_ns":1787317709900209400,"word_count":723,"hashes":{"specs/005-convert-json-markdown/plan.md":"c4db190f72e59cd2403bbbd7f99b4a4a5713285af478b2c6a7973f6e4a1007a6"}},"specs/005-convert-json-markdown/quickstart.md":{"size":1179,"mtime_ns":1787315668269243000,"indexed_at_ns":1787317709901438900,"word_count":126,"hashes":{"specs/005-convert-json-markdown/quickstart.md":"1481575738d29705da2fb1db54f53a744cdc90a79f00331dde7c351619b4036e"}},"specs/005-convert-json-markdown/research.md":{"size":5982,"mtime_ns":1787315639720415300,"indexed_at_ns":1787317709902236300,"word_count":765,"hashes":{"specs/005-convert-json-markdown/research.md":"66f816e6bda19ec162a55f35d16d5cc230e031e9002d434d69cdf79ca6fcea77"}},"specs/005-convert-json-markdown/spec.md":{"size":15416,"mtime_ns":1787315504210700900,"indexed_at_ns":1787317709902900100,"word_count":2032,"hashes":{"specs/005-convert-json-markdown/spec.md":"6e7faebc853323fb40729b8ea0b0719017c3387e69b4433fc9e4a2448d3efb9c"}},"specs/005-convert-json-markdown/tasks.md":{"size":8664,"mtime_ns":1787317701507180900,"indexed_at_ns":1787317709903569500,"word_count":1107,"hashes":{"specs/005-convert-json-markdown/tasks.md":"9ec3cc4573e6b7e18b68101acfcdd3a838a4f0453ed5a669a1d7f778b98e16d7"}},"tests/fixtures/markdown_conversion/batch_articles_invalid.json":{"size":162,"mtime_ns":1787317425649588100,"indexed_at_ns":1787317709759979900,"word_count":17,"hashes":{"tests/fixtures/markdown_conversion/batch_articles_invalid.json":"37b5ff42ccf176effa7abd142658afa91ea93d9080f51d6300b5e6be8248e22c"}},"tests/fixtures/markdown_conversion/corrupt_json_invalid.json":{"size":84,"mtime_ns":1787317430995160700,"indexed_at_ns":1787317709760596100,"word_count":8,"hashes":{"tests/fixtures/markdown_conversion/corrupt_json_invalid.json":"26317cdd3614f55612321aa9385bbbbd07bda718beb2f86692d1d30266a942c7"}},"tests/fixtures/markdown_conversion/invalid_url_invalid.json":{"size":181,"mtime_ns":1787317453854590700,"indexed_at_ns":1787317709761157600,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/invalid_url_invalid.json":"6641507e5b57acf774f7088c936cd109fd7600ff6f4d43176d27c236ef96d19c"}},"tests/fixtures/markdown_conversion/missing_body_invalid.json":{"size":328,"mtime_ns":1787317440927113900,"indexed_at_ns":1787317709761735000,"word_count":30,"hashes":{"tests/fixtures/markdown_conversion/missing_body_invalid.json":"ff9c5e6910d5b4d09ab14273098f3a5367c1e29ac5fb8782438ff667bee4e524"}},"tests/fixtures/markdown_conversion/missing_extractor_invalid.json":{"size":166,"mtime_ns":1787317435197323100,"indexed_at_ns":1787317709762359200,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/missing_extractor_invalid.json":"cc924af9d02584efa2942cfa2dfa789d63e1d45cac4f85105805657e66ef5e1d"}},"tests/fixtures/markdown_conversion/missing_title_invalid.json":{"size":168,"mtime_ns":1787317446757957200,"indexed_at_ns":1787317709762935000,"word_count":16,"hashes":{"tests/fixtures/markdown_conversion/missing_title_invalid.json":"c94b7bf69eab2bb707c2de6dedaeab750c42115b3bc27d4edb9fad543b7d242d"}},"tests/fixtures/markdown_conversion/valid_newspaper4k.json":{"size":1154,"mtime_ns":1787317391619680400,"indexed_at_ns":1787317709763503300,"word_count":113,"hashes":{"tests/fixtures/markdown_conversion/valid_newspaper4k.json":"09bf8517ec513e3c49a7dbb822baca7ed7020bc9cf6fa116f6e01d72f9bf2f49"}},"tests/fixtures/markdown_conversion/valid_newspaper4k.md":{"size":646,"mtime_ns":1787317400974503500,"indexed_at_ns":1787317709931058900,"word_count":67,"hashes":{"tests/fixtures/markdown_conversion/valid_newspaper4k.md":"32a5e4fac2616b5d9ff8859c4e14a76f243c48ce6eedffde51cac9e97b5cd57c"}},"tests/fixtures/markdown_conversion/valid_readability.json":{"size":794,"mtime_ns":1787317412440020900,"indexed_at_ns":1787317709764089400,"word_count":83,"hashes":{"tests/fixtures/markdown_conversion/valid_readability.json":"91e50abb1bf7195d2b6b84ea7dcdebfdb454dec3dead69e8ecc58971e0aabfe1"}},"tests/fixtures/markdown_conversion/valid_readability.md":{"size":455,"mtime_ns":1787317419401926200,"indexed_at_ns":1787317709931788100,"word_count":45,"hashes":{"tests/fixtures/markdown_conversion/valid_readability.md":"05c37379ff5c24c9c875a806c74f362759127986c834a2f069ed4fa64ab1cd30"}},"tests/fixtures/markdown_conversion/valid_trafilatura.json":{"size":1541,"mtime_ns":1787317377645516500,"indexed_at_ns":1787317709764666700,"word_count":140,"hashes":{"tests/fixtures/markdown_conversion/valid_trafilatura.json":"7a4214ab8db9f66674677b410816534645906a327091a2b8c864763f269123b3"}},"tests/fixtures/markdown_conversion/valid_trafilatura.md":{"size":895,"mtime_ns":1787317383505866600,"indexed_at_ns":1787317709932479900,"word_count":86,"hashes":{"tests/fixtures/markdown_conversion/valid_trafilatura.md":"024ca5b2b269152ed2e7afbc719589d6f005d3dd4a50d1a6303c426415313326"}},"tests/test_convert_article_to_markdown.py":{"size":29017,"mtime_ns":1787320111811304100,"indexed_at_ns":1787320231338258700,"word_count":2412,"hashes":{"tests/test_convert_article_to_markdown.py":"fd686fa7c4de15a64578950f4afe48baabea88e7222595c638a52a34a18561a2"}},"examples/ecp_club_atletico_river_plate.json":{"size":3502,"mtime_ns":1787319632493121800,"indexed_at_ns":1787319814380533100,"word_count":318,"hashes":{"examples/ecp_club_atletico_river_plate.json":"f390cba1c421c564ea7577faeab6bbc6ec3ec7bbb120b71ce607430594ae7bc9"}},"tests/test_llm_fallback.py":{"size":11766,"mtime_ns":1787320089212065400,"indexed_at_ns":1787320231347451000,"word_count":961,"hashes":{"tests/test_llm_fallback.py":"ad63f222d84a871c4c2e7ffc7223759b306d96e80a9a4e88eae30f75105cdcdb"}}} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html index 69c1e5c..8cf615b 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -63,12 +63,12 @@
-
1527 nodes · 1899 edges · 165 communities
+
1554 nodes · 1970 edges · 168 communities