From cb33dafac1333f44ca864800474e17303f0e408a Mon Sep 17 00:00:00 2001 From: Andre Ferraro Date: Fri, 21 Aug 2026 10:43:48 -0300 Subject: [PATCH] =?UTF-8?q?docs(ecp):=20add=20Club=20Atl=C3=A9tico=20River?= =?UTF-8?q?=20Plate=20ECP=20profile=20and=20update=20classification=20exam?= =?UTF-8?q?ples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 45 +- examples/ecp_club_atletico_river_plate.json | 143 + graphify-out/.graphify_labels.json | 8 +- graphify-out/.graphify_labels.json.sig | 2 +- graphify-out/2026-08-21/.graphify_labels.json | 16 +- graphify-out/2026-08-21/GRAPH_REPORT.md | 105 +- graphify-out/2026-08-21/graph.json | 2382 +++++++++++------ graphify-out/2026-08-21/manifest.json | 18 +- graphify-out/GRAPH_REPORT.md | 14 +- ...f4d1951d6f91a987e0c405c9282cbf805cd52.json | 1 + ...6ad90df6ca4a005fcd0ff9fef7c51690c4268.json | 1 + ...98c3d3e872110694764f069e3ea42096f536d.json | 1 + graphify-out/cache/stat-index.json | 2 +- graphify-out/graph.html | 6 +- graphify-out/graph.json | 1184 ++++---- graphify-out/manifest.json | 18 +- 16 files changed, 2411 insertions(+), 1535 deletions(-) create mode 100644 examples/ecp_club_atletico_river_plate.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/2e519080e4c95ce3108f65e6cb4f4d1951d6f91a987e0c405c9282cbf805cd52.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/54b4604ab8242ffb44f833a3ea76ad90df6ca4a005fcd0ff9fef7c51690c4268.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/7a7b025a66388fe3a6b6102bfeb98c3d3e872110694764f069e3ea42096f536d.json diff --git a/README.md b/README.md index 8913581..ddc7784 100644 --- a/README.md +++ b/README.md @@ -131,36 +131,53 @@ flowchart TD ### Formato do ECP Snapshot e Markdown -#### Exemplo de ECP Snapshot (`ecp_sample.json`): +#### Exemplo de ECP Snapshot Real (`examples/ecp_club_atletico_river_plate.json`): ```json { - "target_entity_id": "ent_river_plate", - "target_name": "River Plate", - "aliases": ["Club Atlético River Plate", "Millonario", "El Más Grande"], - "domain": "sports/football", - "anchors": ["Monumental", "Copa Libertadores", "Marcelo Gallardo", "Copa Sudamericana"], - "negative_anchors": ["Boca Juniors vitória", "Flamengo campeão"], + "target_entity_id": "ecp_river_plate", + "target_name": "Club Atlético River Plate", + "canonical_name": "Club Atlético River Plate", + "domain": "Futebol / Esportes", + "aliases": ["Club Atlético River Plate", "River Plate", "River", "El Millonario", "La Banda", "CARP"], + "anchors": ["Monumental", "Copa Libertadores", "Copa Sudamericana", "Eduardo Coudet", "Nicolás Otamendi"], + "negative_anchors": ["River Plate de Montevideo", "River Plate de Asunción", "Rio da Prata"], "graph_version": "1.0.0", "related_entities": [ { - "entity_id": "ent_gallardo", - "name": "Marcelo Gallardo", - "relation_type": "manager", - "weight": 0.85, - "aliases": ["Muñeco"] + "entity_id": "boca_juniors", + "name": "Club Atlético Boca Juniors", + "relation_type": "RIVAL_OF", + "weight": 0.9, + "aliases": ["Boca Juniors", "Boca", "Xeneize"] + }, + { + "entity_id": "estadio_monumental", + "name": "Estadio Mâs Monumental", + "relation_type": "HOME_VENUE_OF", + "weight": 0.95, + "aliases": ["Monumental", "El Monumental"] } ] } ``` +Perfis de exemplo prontos para uso em `examples/`: +- [`examples/ecp_club_atletico_river_plate.json`](examples/ecp_club_atletico_river_plate.json) (Club Atlético River Plate) +- [`examples/ecp_sao_paulo_futebol_clube.json`](examples/ecp_sao_paulo_futebol_clube.json) (São Paulo FC) + ### Exemplos de Uso CLI ```bash # Classificação Determinística padrão (Tier 1) -python classify.py --ecp tests/fixtures/sample_ecp.json --content tests/fixtures/sample_article.md +python classify.py \ + --ecp examples/ecp_club_atletico_river_plate.json \ + --content out/markdown/meu_artigo_001.md # Salvar resultado em arquivo JSON formatado -python classify.py --ecp ecp.json --content artigo.md --output out/resultado_classificacao.json +python classify.py \ + --ecp examples/ecp_club_atletico_river_plate.json \ + --content out/markdown/meu_artigo_001.md \ + --output out/classification_001.json # Habilitar camadas adicionais (Embeddings e LLM) python classify.py --ecp ecp.json --content artigo.md --enable-embeddings --enable-llm diff --git a/examples/ecp_club_atletico_river_plate.json b/examples/ecp_club_atletico_river_plate.json new file mode 100644 index 0000000..170e39c --- /dev/null +++ b/examples/ecp_club_atletico_river_plate.json @@ -0,0 +1,143 @@ +{ + "target_entity_id": "ecp_river_plate", + "target_name": "Club Atlético River Plate", + "canonical_name": "Club Atlético River Plate", + "domain": "Futebol / Esportes", + "aliases": [ + "Club Atlético River Plate", + "River Plate", + "C.A. River Plate", + "CA River Plate", + "River", + "CARP", + "C.A.R.P.", + "El Millonario", + "Los Millonarios", + "La Banda", + "La Banda Roja", + "El Más Grande", + "Millo", + "El Millo" + ], + "anchors": [ + "fútbol", + "futebol", + "football", + "Copa Libertadores", + "Libertadores", + "Copa Sudamericana", + "Sudamericana", + "Liga Profesional", + "Liga Profesional de Fútbol", + "Primera División", + "Copa Argentina", + "AFA", + "Conmebol", + "Superclásico", + "Monumental", + "Estadio Monumental", + "El Monumental", + "Antonio Vespucio Liberti", + "Núñez", + "River Camp", + "Marcelo Gallardo", + "Gallardo", + "Martín Demichelis", + "Demichelis", + "Eduardo Coudet", + "Chacho Coudet", + "Coudet", + "Enzo Francescoli", + "Francescoli", + "Franco Armani", + "Armani", + "Germán Pezzella", + "Pezzella", + "Nicolás Otamendi", + "Otamendi", + "Ángel Correa", + "Angel Correa", + "Rafael Santos Borré", + "Santos Borré", + "Santiago Beltrán", + "Lucas Martínez Quarta", + "Martínez Quarta", + "Lautaro Rivero", + "Facundo González", + "Tobías Andrada", + "Fausto Vera", + "Aníbal Moreno", + "Tomás Galván", + "Thiago Almada", + "Joaquín Freitas", + "Valentín Lucero", + "Juan Meza", + "Boca Juniors", + "Independiente Santa Fe" + ], + "negative_anchors": [ + "River Plate de Montevideo", + "Club Atlético River Plate (Uruguay)", + "River Plate de Asunción", + "Club River Plate (Asunción)", + "River Plate de Sergipe", + "River Atlético Clube", + "River de Piauí", + "Rio River Plate", + "Rio da Prata", + "Bacia do Rio da Prata", + "Batalha do Rio da Prata", + "Estuário do Rio da Prata" + ], + "graph_version": "1.0.0", + "related_entities": [ + { + "entity_id": "boca_juniors", + "name": "Club Atlético Boca Juniors", + "relation_type": "RIVAL_OF", + "weight": 0.9, + "aliases": ["Boca Juniors", "Boca", "Xeneize"], + "scope": "derby" + }, + { + "entity_id": "estadio_monumental", + "name": "Estadio Mâs Monumental", + "relation_type": "HOME_VENUE_OF", + "weight": 0.95, + "aliases": ["Monumental", "El Monumental", "Estadio Monumental", "Antonio Vespucio Liberti"], + "scope": "venue" + }, + { + "entity_id": "copa_libertadores", + "name": "Copa Libertadores", + "relation_type": "COMPETES_IN", + "weight": 0.85, + "aliases": ["Libertadores", "Conmebol Libertadores"], + "scope": "tournament" + }, + { + "entity_id": "copa_sudamericana", + "name": "Copa Sudamericana", + "relation_type": "COMPETES_IN", + "weight": 0.85, + "aliases": ["Sudamericana", "Conmebol Sudamericana"], + "scope": "tournament" + }, + { + "entity_id": "eduardo_coudet", + "name": "Eduardo Coudet", + "relation_type": "MANAGER_OF", + "weight": 0.8, + "aliases": ["Chacho Coudet", "Coudet"], + "scope": "staff" + }, + { + "entity_id": "marcelo_gallardo", + "name": "Marcelo Gallardo", + "relation_type": "ICONIC_MANAGER_OF", + "weight": 0.8, + "aliases": ["Gallardo", "Muñeco Gallardo"], + "scope": "staff" + } + ] +} diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index 6612580..c50ebb9 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.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/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index e2585f6..2c90b13 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": "779ea305cb4270dc", "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": "0b41ca143bd19d3a", "98": "089ea6a55861c693", "99": "683812f7e5020d43", "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": "bf5dd1f3361b9d31", "132": "67ea4284cbc02c54", "133": "d899cfc86c7a4a27", "134": "ba9464410a9b4168", "135": "5406c193e79cdc9e", "136": "521f5c7b9d566b4d", "137": "9e37828bdd2ba8c5", "138": "ec03c97194c56f91", "139": "f4e6d5dfa30034c5", "140": "b48c7d99e847e352", "141": "1e0330b8757f333e", "142": "f35d75e1194c008d", "143": "4d2ae7190b514a34", "144": "4a98716cabf43f86", "145": "c80d7bdacb7f0aa3", "146": "edc785fd71bb0675", "147": "4c7347f8f86e1fbd", "148": "8ca77cc4fd6fd437", "149": "09850697b717469a", "150": "f4f4ce1a1180ddb1", "151": "e426746f6e9ee15f", "152": "3d72689c6c4d76be", "153": "3eef4100c7957556", "154": "56747bad6345d66b", "155": "a8e7498fa7e257df", "156": "56e7b2355898077f", "157": "f2fc88f7d8214711", "158": "c966f6f8570c8c29", "159": "3846d1135f02ad84", "160": "d19878b60c21c9dc", "161": "f288304e804126ee", "162": "fe285d17e79eaab7", "163": "97e7e26a5ea11e7a", "164": "bc4c32aee32f28c8"} \ 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": "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 diff --git a/graphify-out/2026-08-21/.graphify_labels.json b/graphify-out/2026-08-21/.graphify_labels.json index 697dacd..6612580 100644 --- a/graphify-out/2026-08-21/.graphify_labels.json +++ b/graphify-out/2026-08-21/.graphify_labels.json @@ -98,7 +98,7 @@ "96": "readiness.md", "97": "🧠 TextNLPClassifierApp", "98": "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor", - "99": "sample_rss_xml", + "99": "parametrize", "100": "models.py", "101": "ECPSnapshot", "102": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)", @@ -116,7 +116,7 @@ "114": "JSON Schema Contract: Article Content Multi-Engine Extractor", "115": "PRD — Seleção determinística da biblioteca de extração de conteúdo", "116": "select_article_extractor.py", - "117": "Research & Architectural Decisions: Deterministic Content Selection", + "117": "1. Text Normalization Pipeline", "118": "Tasks: Deterministic Article Content Selection", "119": "select_article_extractor", "120": "process_batch", @@ -148,16 +148,20 @@ "146": "Specification Quality Checklist: Convert Article JSON to Markdown", "147": "CLI Contract: `convert_article_to_markdown.py`", "148": "9. Interface CLI", - "149": "1. Text Normalization Pipeline", + "149": "get_hl_gl_ceid", "150": "13. Estratégia de testes", "151": "6. Contrato de entrada", "152": "assemble_markdown_document", "153": "convert_html_to_markdown", - "154": "remove_duplicate_initial_h1", + "154": "JSON Schema Contract: Deterministic Article Content Selection", "155": "5. Escopo", "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_list_strings_and_deduplication", - "160": "test_validate_url_schemes" + "159": "test_normalize_date_rfc_2822_variants", + "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", + "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 166e4c4..f1fc712 100644 --- a/graphify-out/2026-08-21/GRAPH_REPORT.md +++ b/graphify-out/2026-08-21/GRAPH_REPORT.md @@ -1,11 +1,11 @@ # Graph Report - TextNLPClassifierApp (2026-08-21) ## Corpus Check -- 199 files · ~107,634 words +- 199 files · ~108,365 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1504 nodes · 1860 edges · 161 communities (118 shown, 43 thin omitted) +- 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) - Token cost: 0 input · 0 output @@ -109,7 +109,7 @@ - CLI Contract: Google News Headlines Extractor - 🧠 TextNLPClassifierApp - Extraction Pipeline Checklist: Article Content Multi-Engine Extractor -- sample_rss_xml +- parametrize - models.py - ECPSnapshot - Feature Specification: Multilingual NLP Entity Inherence Classifier (POC) @@ -126,7 +126,7 @@ - JSON Schema Contract: Article Content Multi-Engine Extractor - PRD — Seleção determinística da biblioteca de extração de conteúdo - select_article_extractor.py -- Research & Architectural Decisions: Deterministic Content Selection +- 1. Text Normalization Pipeline - Tasks: Deterministic Article Content Selection - select_article_extractor - process_batch @@ -139,7 +139,6 @@ - Quickstart: Deterministic Article Content Selection - Specification Quality Checklist: Deterministic Content Selection - CLI Interface Contract: Deterministic Article Content Selection -- 004-deterministic-content-selection/spec.md - convert_article_to_markdown.py - 8. Regras funcionais - 12. Critérios de aceite @@ -158,18 +157,22 @@ - Specification Quality Checklist: Convert Article JSON to Markdown - CLI Contract: `convert_article_to_markdown.py` - 9. Interface CLI -- 1. Text Normalization Pipeline +- get_hl_gl_ceid - 13. Estratégia de testes - 6. Contrato de entrada - assemble_markdown_document - convert_html_to_markdown -- remove_duplicate_initial_h1 +- JSON Schema Contract: Deterministic Article Content Selection - 5. Escopo - Los puntajes de River vs. Independiente Santa Fe, por la Copa Sudamericana - TyC Sports - valid_newspaper4k.md - valid_readability.md -- test_normalize_list_strings_and_deduplication -- test_validate_url_schemes +- test_normalize_date_rfc_2822_variants +- 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_scalar_non_string_types ## God Nodes (most connected - your core abstractions) 1. `ECPSnapshot` - 31 edges @@ -181,12 +184,12 @@ 7. `PRD — Conversão de artigo JSON para Markdown` - 16 edges 8. `process_batch()` - 15 edges 9. `8. Regras funcionais` - 15 edges -10. `process_batch()` - 14 edges +10. `resolve_article_metadata()` - 14 edges ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] classify.py → src/models.py -- `test_extract_google_news_orchestration_mocked()` --uses--> `ExtractionResult` [INFERRED] +- `test_e2e_extract_google_news_live_pipeline()` --uses--> `ExtractionResult` [INFERRED] tests/test_extract_google_news.py → scripts/extract_google_news.py - `classifier()` --uses--> `InherenceClassifier` [INFERRED] tests/test_benchmark_24.py → src/classifier.py @@ -198,7 +201,7 @@ ## Import Cycles - None detected. -## Communities (161 total, 43 thin omitted) +## Communities (165 total, 47 thin omitted) ### Community 0 - "Task Planning" Cohesion: 0.07 @@ -353,8 +356,8 @@ 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) ### Community 48 - "test_convert_article_to_markdown.py" -Cohesion: 0.08 -Nodes (23): Suíte de Testes Automatizados para Conversão de Artigo JSON para Markdown.…, Testa decodificação de entidades HTML, colapso de espaços e filtro de…, Testa a matriz determinística de prioridades dos metadados., Validação exata byte a byte da Golden Fixture de Trafilatura., Validação exata byte a byte da Golden Fixture de Newspaper4k., Validação exata byte a byte da Golden Fixture de Readability., Testa geração do arquivo de saída padrão .md., Testa rejeição com código 1 quando a entrada contém a chave articles. (+15 more) +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) ### Community 80 - "test_extract_article_contents.py" Cohesion: 0.06 @@ -365,16 +368,16 @@ Cohesion: 0.08 Nodes (24): 1. Visão geral (arquitetura), 2.1 DTO de entrada (`googlenews_etl/application/dtos/extract_news_dto.py`), 2.2 Value Object de validação (`googlenews_etl/domain/entities/search_query.py`), 2. Entrada, 3.1 O caso de uso (`googlenews_etl/application/use_cases/extract_news_use_case.py`), 3.2 A porta (`googlenews_etl/domain/ports/news_extractor_port.py`), 3.3.1 Inicialização: sessão HTTP com impersonação de browser, 3.3.2 Mapeamento idioma → parâmetros `hl`/`gl` (`_get_hl_gl`) (+16 more) ### Community 82 - "extract_google_news.py" -Cohesion: 0.15 -Nodes (18): extract_google_news(), _fetch_rss_content(), get_hl_gl_ceid(), NewsArticle, _normalize_text_for_comparison(), parse_google_news_rss(), Mapeia idioma e locale para os parâmetros hl, gl e ceid do Google News., Remove pontuação e espaços extras para comparação de redundância. (+10 more) +Cohesion: 0.20 +Nodes (14): extract_google_news(), _fetch_rss_content(), NewsArticle, _normalize_text_for_comparison(), parse_google_news_rss(), Remove pontuação e espaços extras para comparação de redundância., Parseia o XML do RSS do Google News e extrai os itens estruturados., Resolve em paralelo as URLs intermediárias do Google News para os links finais… (+6 more) ### Community 83 - "ExtractionResult" Cohesion: 0.29 -Nodes (5): ExtractionResult, Any, Resultado consolidado da extração., Valida E2E o fluxo completo de busca, parsing e resolução de URLs reais ao vivo., test_e2e_extract_google_news_live_pipeline() +Nodes (5): ExtractionResult, Any, Resultado consolidado da extração., Valida a consolidação do ExtractionResult a partir da busca mockada com URLs…, test_extract_google_news_orchestration_mocked() ### Community 84 - "test_extract_google_news.py" -Cohesion: 0.15 -Nodes (15): Resolve a URL intermediária do Google News para a URL real do veículo., resolve_article_url(), Testes unitários e de integração para o Extrator de Manchetes do Google News.…, Valida fallback gracioso de URL quando não é link do Google News ou em erro., Valida resolução bem-sucedida de URL do Google News para o portal destino., Valida E2E que o decodificador resolve uma URL real do Google News para o…, Valida o mapeamento padrão de idiomas para pares (hl, gl, ceid)., Valida a sobrescrita geográfica quando o argumento locale é especificado. (+7 more) +Cohesion: 0.16 +Nodes (14): Resolve a URL intermediária do Google News para a URL real do veículo., resolve_article_url(), fixture, Testes unitários e de integração para o Extrator de Manchetes do Google News.…, Valida o parsing do feed RSS, higienização de tags HTML e deduplicação., Valida fallback gracioso de URL quando não é link do Google News ou em erro., Valida resolução bem-sucedida de URL do Google News para o portal destino., Valida E2E que o decodificador resolve uma URL real do Google News para o… (+6 more) ### Community 85 - "Implementation Tasks: Google News Headlines Extractor" Cohesion: 0.14 @@ -394,7 +397,7 @@ Nodes (7): Architecture & Pipeline, Documentation (this feature), Implementation ### Community 90 - "SearchQuery" Cohesion: 0.20 -Nodes (6): Value Object com parâmetros de busca validados., SearchQuery, Valida a consolidação do ExtractionResult a partir da busca mockada com URLs…, Valida as regras de negócio e limites de SearchQuery., test_extract_google_news_orchestration_mocked(), test_search_query_validation() +Nodes (6): Value Object com parâmetros de busca validados., SearchQuery, Valida E2E o fluxo completo de busca, parsing e resolução de URLs reais ao vivo., Valida as regras de negócio e limites de SearchQuery., test_e2e_extract_google_news_live_pipeline(), test_search_query_validation() ### Community 91 - "1. Technical Decisions & Tradeoffs" Cohesion: 0.25 @@ -424,17 +427,17 @@ Nodes (45): 1. 🧠 Classificador de Conteúdo e Inerência (NLP / LLM / ECP), 1 Cohesion: 0.05 Nodes (34): 1. Requirement Completeness, 2. Requirement Clarity & Non-Ambiguity, 3. Requirement Consistency & Data Contracts, 4. Scenario & Edge Case Coverage, 5. Non-Functional & Operational Readiness, Extraction Pipeline Checklist: Article Content Multi-Engine Extractor, Notes, Content Quality (+26 more) -### Community 99 - "sample_rss_xml" -Cohesion: 0.67 -Nodes (3): fixture, Fixture que fornece o conteúdo do XML de exemplo para testes offline., sample_rss_xml() +### Community 99 - "parametrize" +Cohesion: 0.22 +Nodes (9): parametrize, Garante aceitação de URLs absolutas com esquema HTTP e HTTPS válidos., Garante rejeição de esquemas não permitidos, URLs relativas e strings vazias., Garante que a ausência de corpo no extrator selecionado NUNCA faça fallback…, Garante que todos os placeholders documentados no PRD sejam descartados…, test_normalize_scalar_placeholders_discarded(), test_resolve_article_body_strict_isolation_all_extractors(), test_validate_url_invalid_schemes() (+1 more) ### Community 100 - "models.py" Cohesion: 0.15 Nodes (17): emit_error(), main(), parse_args(), Namespace, ClassificationError, ErrorCode, MatchedGraphEntity, Enum (+9 more) ### Community 101 - "ECPSnapshot" -Cohesion: 0.22 -Nodes (10): parametrize, ECPSnapshot, Any, classifier(), fixture, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), test_ecp_snapshot_defaults() (+2 more) +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) ### Community 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -492,9 +495,9 @@ Nodes (29): 10. Requisitos não funcionais, 11. Critérios de aceite, 12. Casos Cohesion: 0.14 Nodes (19): ArticleSelectionResult, BatchProcessingResult, break_priority_tie(), calculate_consensus_metrics(), ExtractorCandidate, form_active_set(), main(), parse_args() (+11 more) -### Community 117 - "Research & Architectural Decisions: Deterministic Content Selection" -Cohesion: 0.15 -Nodes (13): 2. 5-Token Shingles & Consensus Metrics, 3. Regras de Decisão, Empate Técnico e Desempate Hierárquico, 4. Estratégia de I/O Não Destrutiva e Escrita Atômica, Context, Context, Context, Decisions, Decisions (+5 more) +### Community 117 - "1. Text Normalization Pipeline" +Cohesion: 0.11 +Nodes (18): 1. Text Normalization Pipeline, 2. 5-Token Shingles & Consensus Metrics, 3. Regras de Decisão, Empate Técnico e Desempate Hierárquico, 4. Estratégia de I/O Não Destrutiva e Escrita Atômica, Alternatives Considered, Context, Context, Context (+10 more) ### Community 118 - "Tasks: Deterministic Article Content Selection" Cohesion: 0.11 @@ -544,13 +547,9 @@ Nodes (5): Content Quality, Feature Readiness, Notes, Requirement Completeness, Cohesion: 0.33 Nodes (5): 1. Command Syntax, 2. Arguments and Flags, 3. Standard Streams (I/O), 4. Exit Codes, CLI Interface Contract: Deterministic Article Content Selection -### Community 130 - "004-deterministic-content-selection/spec.md" -Cohesion: 0.29 -Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: Deterministic Article Content Selection - ### Community 131 - "convert_article_to_markdown.py" -Cohesion: 0.23 -Nodes (15): _get_dict(), normalize_date(), normalize_list(), normalize_scalar(), Any, Interpreta datas ISO 8601 e RFC 2822 preservando fuso horário ou YYYY-MM-DD…, Valida se a URL é absoluta com protocolo http ou https e hostname não vazio., Retorna o dicionário associado à chave ou um dicionário vazio caso não seja… (+7 more) +Cohesion: 0.19 +Nodes (17): _get_dict(), normalize_date(), normalize_list(), normalize_scalar(), Any, Interpreta datas ISO 8601 e RFC 2822 preservando fuso horário ou YYYY-MM-DD…, Valida se a URL é absoluta com protocolo http ou https e hostname não vazio., Retorna o dicionário associado à chave ou um dicionário vazio caso não seja… (+9 more) ### Community 132 - "8. Regras funcionais" Cohesion: 0.13 @@ -565,8 +564,8 @@ Cohesion: 0.17 Nodes (11): 10. Tratamento de erros, 14. Definition of Done, 15. Dependência técnica escolhida, 1. Visão geral, 2. Problema, 3. Objetivo, 4. História do usuário, 7.1 Arquivo (+3 more) ### Community 135 - "resolve_article_body" -Cohesion: 0.17 -Nodes (12): Obtém o corpo do artigo exclusivamente do selected_extractor com fallback…, resolve_article_body(), Garante que falhe se o corpo do extrator selecionado for vazio, sem usar outro…, Garante que Trafilatura use diretamente o campo markdown., Garante que Trafilatura faça fallback para text se markdown estiver vazio., Garante conversão de HTML para Markdown para Newspaper4k., Garante conversão de HTML para Markdown para Readability., test_resolve_article_body_newspaper4k_html_conversion() (+4 more) +Cohesion: 0.20 +Nodes (10): Obtém o corpo do artigo exclusivamente do selected_extractor com fallback…, resolve_article_body(), Testa prioridade trafilatura.markdown sobre trafilatura.text., Testa prioridade newspaper4k.article_html sobre newspaper4k.text., Testa prioridade readability.cleaned_html sobre readability.cleaned_text., Garante erro ao receber selected_extractor ausente ou não reconhecido., test_resolve_article_body_invalid_selected_extractor(), test_resolve_article_body_newspaper4k_primary_and_fallback() (+2 more) ### Community 136 - "Implementation Plan: Convert Article JSON to Markdown" Cohesion: 0.17 @@ -585,8 +584,8 @@ Cohesion: 0.18 Nodes (11): 1. Validação de Entrada, Tipagem & Isolamento de Lotes, 2. Isolamento Estrito de Extrator & Conversão de Conteúdo (HTML/MD), 3. Resolução Determinística de Metadados & Mapeamento de SELECIONADO, 4. Normalização de Escalares, Placeholders & Sanitização de Listas, 5. Normalização de Datas, Fusos & Validação Estrita de URLs, 6. Sanitização Editorial, Tratamento de Imagens & Título Duplicado, 7. Estrutura, Sintaxe do Markdown de Saída & Restrições, 8. Interface CLI, Tratamento de Erros & Atomicidade (+3 more) ### Community 140 - "convert_article" -Cohesion: 0.22 -Nodes (9): clean_body_images(), convert_article(), Path, 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…, Garante remoção de imagens relativas/data: e deduplicação de imagens idênticas., Testa diretamente a função convert_article em Python., test_clean_body_images_and_deduplicate() (+1 more) +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) ### Community 141 - "005-convert-json-markdown/plan.md" Cohesion: 0.33 @@ -606,7 +605,7 @@ Nodes (7): 11. Requisitos não funcionais, RNF-001 — Determinismo, RNF-002 — ### Community 145 - "parse_arguments" Cohesion: 0.29 -Nodes (7): main(), parse_arguments(), Namespace, Configura o parser de argumentos do CLI., Ponto de entrada do CLI., Testa diretamente o parsing de argumentos., test_parse_arguments_direct() +Nodes (7): main(), parse_arguments(), Namespace, Configura o parser de argumentos do CLI., Ponto de entrada do CLI., Testa a chamada direta do parse_arguments., test_parse_arguments_api_direct() ### Community 146 - "Specification Quality Checklist: Convert Article JSON to Markdown" Cohesion: 0.33 @@ -620,9 +619,9 @@ Nodes (5): 1. Script Signature, 2. Command-Line Arguments, 3. Exit Codes, 4. Sta Cohesion: 0.40 Nodes (5): 9.1 Script, 9.2 Argumentos, 9.3 Exemplos, 9.4 Saída do processo, 9. Interface CLI -### Community 149 - "1. Text Normalization Pipeline" -Cohesion: 0.40 -Nodes (5): 1. Text Normalization Pipeline, Alternatives Considered, Context, Decisions, Rationale +### Community 149 - "get_hl_gl_ceid" +Cohesion: 0.25 +Nodes (8): get_hl_gl_ceid(), Mapeia idioma e locale para os parâmetros hl, gl e ceid do Google News., Valida o mapeamento padrão de idiomas para pares (hl, gl, ceid)., Valida a sobrescrita geográfica quando o argumento locale é especificado., Valida fallback dinâmico para idiomas regionais não listados explicitamente., test_get_hl_gl_ceid_default_mappings(), test_get_hl_gl_ceid_dynamic_fallback(), test_get_hl_gl_ceid_with_custom_locale() ### Community 150 - "13. Estratégia de testes" Cohesion: 0.50 @@ -634,15 +633,15 @@ Nodes (4): 6.1 Formato, 6.2 Valores aceitos para `selected_extractor`, 6.3 Campo ### 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 a montagem completa da estrutura de seções do documento Markdown., test_assemble_markdown_document() +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 153 - "convert_html_to_markdown" -Cohesion: 0.50 -Nodes (4): convert_html_to_markdown(), Converte HTML para Markdown usando títulos ATX., Testa diretamente a função convert_html_to_markdown., test_convert_html_to_markdown_basic() +Cohesion: 0.33 +Nodes (6): convert_html_to_markdown(), Converte HTML para Markdown usando títulos ATX, removendo scripts e estilos., Valida conversão de elementos HTML estruturados para Markdown com títulos ATX., Testa conversão de HTML vazio retornando string vazia., test_convert_html_to_markdown_empty_or_whitespace(), test_convert_html_to_markdown_rich_formatting() -### Community 154 - "remove_duplicate_initial_h1" +### Community 154 - "JSON Schema Contract: Deterministic Article Content Selection" 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(), Garante remoção apenas do H1 inicial que for idêntico ao título., test_remove_duplicate_initial_h1() +Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: Deterministic Article Content Selection ### Community 155 - "5. Escopo" Cohesion: 0.67 @@ -651,17 +650,13 @@ Nodes (3): 5.1 Incluído, 5.2 Fora do escopo, 5. Escopo ## 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. -- **43 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **47 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._ -- **Why does `Tasks: Convert Article JSON to Markdown` connect `Tasks: Convert Article JSON to Markdown` to `005-convert-json-markdown/plan.md`?** - _High betweenness centrality (0.004) - this node is a cross-community bridge._ -- **Why does `Research & Architectural Decisions: Deterministic Content Selection` connect `Research & Architectural Decisions: Deterministic Content Selection` to `004-deterministic-content-selection/spec.md`, `1. Text Normalization Pipeline`?** - _High betweenness centrality (0.003) - 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?** @@ -669,4 +664,8 @@ _Questions this graph is uniquely positioned to answer:_ - **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._ \ No newline at end of file + _`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 diff --git a/graphify-out/2026-08-21/graph.json b/graphify-out/2026-08-21/graph.json index a685996..7ee5962 100644 --- a/graphify-out/2026-08-21/graph.json +++ b/graphify-out/2026-08-21/graph.json @@ -524,6 +524,18 @@ "source_file": "tests/test_models.py", "source_location": "L88" }, + { + "id": "src_models_classificationresult_to_dict", + "label": ".to_dict()", + "_callable": true, + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": ".to_dict()", + "source_file": "src/models.py", + "source_location": "L134" + }, { "id": "src_models_ecpsnapshot_from_dict", "label": ".from_dict()", @@ -1278,7 +1290,7 @@ "file_type": "code", "norm_label": "_get_dict()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L219" + "source_location": "L225" }, { "id": "scripts_convert_article_to_markdown_normalize_date", @@ -1326,7 +1338,7 @@ "file_type": "code", "norm_label": "resolve_article_metadata()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L225" + "source_location": "L231" }, { "id": "scripts_convert_article_to_markdown_validate_url", @@ -1341,16 +1353,28 @@ "source_location": "L135" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_date_iso_and_rfc2822", - "label": "test_normalize_date_iso_and_rfc2822()", + "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_date_iso_and_rfc2822()", + "norm_label": "test_normalize_list_empty_and_invalid()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L159" + "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()", + "_callable": true, + "_origin": "ast", + "community": 131, + "community_name": "convert_article_to_markdown.py", + "file_type": "code", + "norm_label": "test_normalize_list_semicolon_and_comma_split()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L85" }, { "id": "scripts_convert_article_to_markdown_resolve_article_body", @@ -1362,67 +1386,55 @@ "file_type": "code", "norm_label": "resolve_article_body()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L161" + "source_location": "L167" }, { - "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_html_conversion", - "label": "test_resolve_article_body_newspaper4k_html_conversion()", + "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", + "label": "test_resolve_article_body_invalid_selected_extractor()", "_callable": true, "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "code", - "norm_label": "test_resolve_article_body_newspaper4k_html_conversion()", + "norm_label": "test_resolve_article_body_invalid_selected_extractor()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L73" + "source_location": "L318" }, { - "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_html_conversion", - "label": "test_resolve_article_body_readability_html_conversion()", + "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", + "label": "test_resolve_article_body_newspaper4k_primary_and_fallback()", "_callable": true, "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "code", - "norm_label": "test_resolve_article_body_readability_html_conversion()", + "norm_label": "test_resolve_article_body_newspaper4k_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L88" + "source_location": "L256" }, { - "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_prohibits_cross_fallback", - "label": "test_resolve_article_body_strict_isolation_prohibits_cross_fallback()", + "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", + "label": "test_resolve_article_body_readability_primary_and_fallback()", "_callable": true, "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "code", - "norm_label": "test_resolve_article_body_strict_isolation_prohibits_cross_fallback()", + "norm_label": "test_resolve_article_body_readability_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L102" + "source_location": "L276" }, { - "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_fallback_text", - "label": "test_resolve_article_body_trafilatura_fallback_text()", + "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", + "label": "test_resolve_article_body_trafilatura_primary_and_fallback()", "_callable": true, "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "code", - "norm_label": "test_resolve_article_body_trafilatura_fallback_text()", + "norm_label": "test_resolve_article_body_trafilatura_primary_and_fallback()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L60" - }, - { - "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_markdown", - "label": "test_resolve_article_body_trafilatura_markdown()", - "_callable": true, - "_origin": "ast", - "community": 135, - "community_name": "resolve_article_body", - "file_type": "code", - "norm_label": "test_resolve_article_body_trafilatura_markdown()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L47" + "source_location": "L239" }, { "id": "scripts_convert_article_to_markdown_clean_body_images", @@ -1434,7 +1446,7 @@ "file_type": "code", "norm_label": "clean_body_images()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L508" + "source_location": "L514" }, { "id": "scripts_convert_article_to_markdown_convert_article", @@ -1446,31 +1458,55 @@ "file_type": "code", "norm_label": "convert_article()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L608" + "source_location": "L614" }, { - "id": "tests_test_convert_article_to_markdown_test_clean_body_images_and_deduplicate", - "label": "test_clean_body_images_and_deduplicate()", + "id": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", + "label": "remove_duplicate_initial_h1()", "_callable": true, "_origin": "ast", "community": 140, "community_name": "convert_article", "file_type": "code", - "norm_label": "test_clean_body_images_and_deduplicate()", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L258" + "norm_label": "remove_duplicate_initial_h1()", + "source_file": "scripts/convert_article_to_markdown.py", + "source_location": "L479" }, { - "id": "tests_test_convert_article_to_markdown_test_convert_article_direct", - "label": "test_convert_article_direct()", + "id": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", + "label": "test_clean_body_images_removes_invalid_and_deduplicates()", "_callable": true, "_origin": "ast", "community": 140, "community_name": "convert_article", "file_type": "code", - "norm_label": "test_convert_article_direct()", + "norm_label": "test_clean_body_images_removes_invalid_and_deduplicates()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L462" + "source_location": "L456" + }, + { + "id": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", + "label": "test_convert_article_api_direct()", + "_callable": true, + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "file_type": "code", + "norm_label": "test_convert_article_api_direct()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L701" + }, + { + "id": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", + "label": "test_remove_duplicate_initial_h1_exact_and_variations()", + "_callable": true, + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "file_type": "code", + "norm_label": "test_remove_duplicate_initial_h1_exact_and_variations()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L439" }, { "id": "scripts_convert_article_to_markdown_main", @@ -1482,7 +1518,7 @@ "file_type": "code", "norm_label": "main()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L690" + "source_location": "L696" }, { "id": "scripts_convert_article_to_markdown_parse_arguments", @@ -1494,19 +1530,67 @@ "file_type": "code", "norm_label": "parse_arguments()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L667" + "source_location": "L673" }, { - "id": "tests_test_convert_article_to_markdown_test_parse_arguments_direct", - "label": "test_parse_arguments_direct()", + "id": "tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", + "label": "test_parse_arguments_api_direct()", "_callable": true, "_origin": "ast", "community": 145, "community_name": "parse_arguments", "file_type": "code", - "norm_label": "test_parse_arguments_direct()", + "norm_label": "test_parse_arguments_api_direct()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L455" + "source_location": "L719" + }, + { + "id": "scripts_extract_google_news_get_hl_gl_ceid", + "label": "get_hl_gl_ceid()", + "_callable": true, + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "code", + "norm_label": "get_hl_gl_ceid()", + "source_file": "scripts/extract_google_news.py", + "source_location": "L107" + }, + { + "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_default_mappings", + "label": "test_get_hl_gl_ceid_default_mappings()", + "_callable": true, + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "code", + "norm_label": "test_get_hl_gl_ceid_default_mappings()", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L37" + }, + { + "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_dynamic_fallback", + "label": "test_get_hl_gl_ceid_dynamic_fallback()", + "_callable": true, + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "code", + "norm_label": "test_get_hl_gl_ceid_dynamic_fallback()", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L78" + }, + { + "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_with_custom_locale", + "label": "test_get_hl_gl_ceid_with_custom_locale()", + "_callable": true, + "_origin": "ast", + "community": 149, + "community_name": "get_hl_gl_ceid", + "file_type": "code", + "norm_label": "test_get_hl_gl_ceid_with_custom_locale()", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L60" }, { "id": "scripts_convert_article_to_markdown_assemble_markdown_document", @@ -1518,19 +1602,19 @@ "file_type": "code", "norm_label": "assemble_markdown_document()", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L540" + "source_location": "L546" }, { - "id": "tests_test_convert_article_to_markdown_test_assemble_markdown_document", - "label": "test_assemble_markdown_document()", + "id": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", + "label": "test_assemble_markdown_document_full_and_minimal()", "_callable": true, "_origin": "ast", "community": 152, "community_name": "assemble_markdown_document", "file_type": "code", - "norm_label": "test_assemble_markdown_document()", + "norm_label": "test_assemble_markdown_document_full_and_minimal()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L274" + "source_location": "L478" }, { "id": "scripts_convert_article_to_markdown_convert_html_to_markdown", @@ -1545,64 +1629,100 @@ "source_location": "L149" }, { - "id": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_basic", - "label": "test_convert_html_to_markdown_basic()", + "id": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", + "label": "test_convert_html_to_markdown_empty_or_whitespace()", "_callable": true, "_origin": "ast", "community": 153, "community_name": "convert_html_to_markdown", "file_type": "code", - "norm_label": "test_convert_html_to_markdown_basic()", + "norm_label": "test_convert_html_to_markdown_empty_or_whitespace()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L447" + "source_location": "L227" }, { - "id": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", - "label": "remove_duplicate_initial_h1()", + "id": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", + "label": "test_convert_html_to_markdown_rich_formatting()", "_callable": true, "_origin": "ast", - "community": 154, - "community_name": "remove_duplicate_initial_h1", + "community": 153, + "community_name": "convert_html_to_markdown", "file_type": "code", - "norm_label": "remove_duplicate_initial_h1()", - "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L473" - }, - { - "id": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1", - "label": "test_remove_duplicate_initial_h1()", - "_callable": true, - "_origin": "ast", - "community": 154, - "community_name": "remove_duplicate_initial_h1", - "file_type": "code", - "norm_label": "test_remove_duplicate_initial_h1()", + "norm_label": "test_convert_html_to_markdown_rich_formatting()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L249" + "source_location": "L197" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_list_strings_and_deduplication", - "label": "test_normalize_list_strings_and_deduplication()", + "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": 159, - "community_name": "test_normalize_list_strings_and_deduplication", + "community_name": "test_normalize_date_rfc_2822_variants", "file_type": "code", - "norm_label": "test_normalize_list_strings_and_deduplication()", + "norm_label": "test_normalize_date_rfc_2822_variants()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L139" + "source_location": "L135" }, { - "id": "tests_test_convert_article_to_markdown_test_validate_url_schemes", - "label": "test_validate_url_schemes()", + "id": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", + "label": "test_normalize_date_invalid_and_placeholders()", "_callable": true, "_origin": "ast", "community": 160, - "community_name": "test_validate_url_schemes", + "community_name": "test_normalize_date_invalid_and_placeholders", "file_type": "code", - "norm_label": "test_validate_url_schemes()", + "norm_label": "test_normalize_date_invalid_and_placeholders()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L175" + "source_location": "L144" + }, + { + "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": 161, + "community_name": "test_metadata_priority_title_all_fallbacks", + "file_type": "code", + "norm_label": "test_metadata_priority_title_all_fallbacks()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L332" + }, + { + "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": 162, + "community_name": "test_metadata_priority_subtitle_omitted_when_equal_to_title", + "file_type": "code", + "norm_label": "test_metadata_priority_subtitle_omitted_when_equal_to_title()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L406" + }, + { + "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": 163, + "community_name": "test_metadata_priority_first_valid_source_no_cross_merging", + "file_type": "code", + "norm_label": "test_metadata_priority_first_valid_source_no_cross_merging()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L421" + }, + { + "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", + "label": "test_normalize_scalar_non_string_types()", + "_callable": true, + "_origin": "ast", + "community": 164, + "community_name": "test_normalize_scalar_non_string_types", + "file_type": "code", + "norm_label": "test_normalize_scalar_non_string_types()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L72" }, { "id": "scripts_extract_google_news_build_parser", @@ -1832,18 +1952,6 @@ "source_file": "src/classifier.py", "source_location": "L44" }, - { - "id": "src_models_classificationresult_to_dict", - "label": ".to_dict()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".to_dict()", - "source_file": "src/models.py", - "source_location": "L134" - }, { "id": "tests_test_adapters_test_classifier_with_adapter_flags", "label": "test_classifier_with_adapter_flags()", @@ -2145,136 +2253,160 @@ "source_location": "L100" }, { - "id": "tests_test_convert_article_to_markdown_test_cli_argument_errors", - "label": "test_cli_argument_errors()", + "id": "tests_test_convert_article_to_markdown_test_cli_default_output_naming", + "label": "test_cli_default_output_naming()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_cli_argument_errors()", + "norm_label": "test_cli_default_output_naming()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L437" + "source_location": "L645" }, { - "id": "tests_test_convert_article_to_markdown_test_cli_atomic_write_preserves_target_on_failure", - "label": "test_cli_atomic_write_preserves_target_on_failure()", + "id": "tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", + "label": "test_cli_exit_codes_and_error_handling()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_cli_atomic_write_preserves_target_on_failure()", + "norm_label": "test_cli_exit_codes_and_error_handling()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L483" + "source_location": "L552" }, { - "id": "tests_test_convert_article_to_markdown_test_cli_corrupt_json", - "label": "test_cli_corrupt_json()", + "id": "tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", + "label": "test_cli_json_root_must_be_object()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_cli_corrupt_json()", + "norm_label": "test_cli_json_root_must_be_object()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L398" + "source_location": "L586" }, { - "id": "tests_test_convert_article_to_markdown_test_cli_default_output_path", - "label": "test_cli_default_output_path()", + "id": "tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", + "label": "test_cli_no_stdout_pollution_and_atomic_preservation()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_cli_default_output_path()", + "norm_label": "test_cli_no_stdout_pollution_and_atomic_preservation()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L361" + "source_location": "L601" }, { - "id": "tests_test_convert_article_to_markdown_test_cli_missing_required_fields", - "label": "test_cli_missing_required_fields()", + "id": "tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", + "label": "test_conversion_determinism_sha256_repeatability()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_cli_missing_required_fields()", + "norm_label": "test_conversion_determinism_sha256_repeatability()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L410" + "source_location": "L528" }, { - "id": "tests_test_convert_article_to_markdown_test_cli_rejection_of_batch_articles_json", - "label": "test_cli_rejection_of_batch_articles_json()", + "id": "tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", + "label": "test_e2e_pipeline_with_real_extracted_selected_json()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_cli_rejection_of_batch_articles_json()", + "norm_label": "test_e2e_pipeline_with_real_extracted_selected_json()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L386" + "source_location": "L672" }, { - "id": "tests_test_convert_article_to_markdown_test_golden_fixture_newspaper4k", - "label": "test_golden_fixture_newspaper4k()", + "id": "tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", + "label": "test_golden_fixtures_byte_level_precision()", "_callable": true, "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_golden_fixture_newspaper4k()", + "norm_label": "test_golden_fixtures_byte_level_precision()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L329" + "source_location": "L511" }, { - "id": "tests_test_convert_article_to_markdown_test_golden_fixture_readability", - "label": "test_golden_fixture_readability()", + "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": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_golden_fixture_readability()", + "norm_label": "test_metadata_priority_original_url_all_fallbacks()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L345" + "source_location": "L371" }, { - "id": "tests_test_convert_article_to_markdown_test_golden_fixture_trafilatura", - "label": "test_golden_fixture_trafilatura()", + "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": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_golden_fixture_trafilatura()", + "norm_label": "test_normalize_date_iso_8601_variants()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L313" + "source_location": "L127" }, { - "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_string_and_placeholders", - "label": "test_normalize_scalar_string_and_placeholders()", + "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": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_normalize_scalar_string_and_placeholders()", + "norm_label": "test_normalize_list_author_url_filtering()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L124" + "source_location": "L96" }, { - "id": "tests_test_convert_article_to_markdown_test_resolve_article_metadata_priority", - "label": "test_resolve_article_metadata_priority()", + "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": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "code", - "norm_label": "test_resolve_article_metadata_priority()", + "norm_label": "test_normalize_list_deduplication_preserves_case_and_order()", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L187" + "source_location": "L109" + }, + { + "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", + "label": "test_normalize_scalar_complex_html_entities()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "test_convert_article_to_markdown.py", + "file_type": "code", + "norm_label": "test_normalize_scalar_complex_html_entities()", + "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", @@ -2756,18 +2888,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L253" }, - { - "id": "scripts_extract_google_news_get_hl_gl_ceid", - "label": "get_hl_gl_ceid()", - "_callable": true, - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "code", - "norm_label": "get_hl_gl_ceid()", - "source_file": "scripts/extract_google_news.py", - "source_location": "L107" - }, { "id": "scripts_extract_google_news_normalize_text_for_comparison", "label": "_normalize_text_for_comparison()", @@ -2804,18 +2924,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L220" }, - { - "id": "tests_test_extract_google_news_test_parse_google_news_rss_with_fixture", - "label": "test_parse_google_news_rss_with_fixture()", - "_callable": true, - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "code", - "norm_label": "test_parse_google_news_rss_with_fixture()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L111" - }, { "id": "tests_test_extract_google_news_test_resolve_articles_urls_batch", "label": "test_resolve_articles_urls_batch()", @@ -2853,16 +2961,16 @@ "source_location": "L73" }, { - "id": "tests_test_extract_google_news_test_e2e_extract_google_news_live_pipeline", - "label": "test_e2e_extract_google_news_live_pipeline()", + "id": "tests_test_extract_google_news_test_extract_google_news_orchestration_mocked", + "label": "test_extract_google_news_orchestration_mocked()", "_callable": true, "_origin": "ast", "community": 83, "community_name": "ExtractionResult", "file_type": "code", - "norm_label": "test_e2e_extract_google_news_live_pipeline()", + "norm_label": "test_extract_google_news_orchestration_mocked()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L302" + "source_location": "L186" }, { "id": "scripts_extract_google_news_resolve_article_url", @@ -2876,6 +2984,18 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L207" }, + { + "id": "tests_test_extract_google_news_sample_rss_xml", + "label": "sample_rss_xml()", + "_callable": true, + "_origin": "ast", + "community": 84, + "community_name": "test_extract_google_news.py", + "file_type": "code", + "norm_label": "sample_rss_xml()", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L32" + }, { "id": "tests_test_extract_google_news_test_e2e_resolve_real_google_news_url", "label": "test_e2e_resolve_real_google_news_url()", @@ -2889,40 +3009,16 @@ "source_location": "L281" }, { - "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_default_mappings", - "label": "test_get_hl_gl_ceid_default_mappings()", + "id": "tests_test_extract_google_news_test_parse_google_news_rss_with_fixture", + "label": "test_parse_google_news_rss_with_fixture()", "_callable": true, "_origin": "ast", "community": 84, "community_name": "test_extract_google_news.py", "file_type": "code", - "norm_label": "test_get_hl_gl_ceid_default_mappings()", + "norm_label": "test_parse_google_news_rss_with_fixture()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L37" - }, - { - "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_dynamic_fallback", - "label": "test_get_hl_gl_ceid_dynamic_fallback()", - "_callable": true, - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "code", - "norm_label": "test_get_hl_gl_ceid_dynamic_fallback()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L78" - }, - { - "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_with_custom_locale", - "label": "test_get_hl_gl_ceid_with_custom_locale()", - "_callable": true, - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "code", - "norm_label": "test_get_hl_gl_ceid_with_custom_locale()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L60" + "source_location": "L111" }, { "id": "tests_test_extract_google_news_test_resolve_article_url_fallback", @@ -2997,16 +3093,16 @@ "source_location": "L40" }, { - "id": "tests_test_extract_google_news_test_extract_google_news_orchestration_mocked", - "label": "test_extract_google_news_orchestration_mocked()", + "id": "tests_test_extract_google_news_test_e2e_extract_google_news_live_pipeline", + "label": "test_e2e_extract_google_news_live_pipeline()", "_callable": true, "_origin": "ast", "community": 90, "community_name": "SearchQuery", "file_type": "code", - "norm_label": "test_extract_google_news_orchestration_mocked()", + "norm_label": "test_e2e_extract_google_news_live_pipeline()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L186" + "source_location": "L302" }, { "id": "tests_test_extract_google_news_test_search_query_validation", @@ -3021,16 +3117,52 @@ "source_location": "L86" }, { - "id": "tests_test_extract_google_news_sample_rss_xml", - "label": "sample_rss_xml()", + "id": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", + "label": "test_normalize_scalar_placeholders_discarded()", "_callable": true, "_origin": "ast", "community": 99, - "community_name": "sample_rss_xml", + "community_name": "parametrize", "file_type": "code", - "norm_label": "sample_rss_xml()", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L32" + "norm_label": "test_normalize_scalar_placeholders_discarded()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L66" + }, + { + "id": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", + "label": "test_resolve_article_body_strict_isolation_all_extractors()", + "_callable": true, + "_origin": "ast", + "community": 99, + "community_name": "parametrize", + "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" + }, + { + "id": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", + "label": "test_validate_url_invalid_schemes()", + "_callable": true, + "_origin": "ast", + "community": 99, + "community_name": "parametrize", + "file_type": "code", + "norm_label": "test_validate_url_invalid_schemes()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L187" + }, + { + "id": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", + "label": "test_validate_url_valid_schemes()", + "_callable": true, + "_origin": "ast", + "community": 99, + "community_name": "parametrize", + "file_type": "code", + "norm_label": "test_validate_url_valid_schemes()", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L167" }, { "id": "specify_templates_tasks_template", @@ -3781,17 +3913,6 @@ "source_file": "tests/test_cli.py", "source_location": "L1" }, - { - "id": "parametrize", - "label": "parametrize", - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "parametrize", - "source_file": "", - "source_location": "" - }, { "id": "src_models_py_any", "label": "Any", @@ -3825,6 +3946,17 @@ "source_file": "", "source_location": "" }, + { + "id": "tests_test_benchmark_24_py_parametrize", + "label": "parametrize", + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": "parametrize", + "source_file": "", + "source_location": "" + }, { "id": "tests_test_benchmark_24_rationale_1", "label": "Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence\u2026", @@ -6094,12 +6226,24 @@ "source_file": "scripts/select_article_extractor.py", "source_location": "L91" }, + { + "id": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", + "label": "1. Text Normalization Pipeline", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "1. text normalization pipeline", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L7" + }, { "id": "specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "label": "2. 5-Token Shingles & Consensus Metrics", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "2. 5-token shingles & consensus metrics", @@ -6111,7 +6255,7 @@ "label": "3. Regras de Decis\u00e3o, Empate T\u00e9cnico e Desempate Hier\u00e1rquico", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "3. regras de decisao, empate tecnico e desempate hierarquico", @@ -6123,19 +6267,43 @@ "label": "4. Estrat\u00e9gia de I/O N\u00e3o Destrutiva e Escrita At\u00f4mica", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "4. estrategia de i/o nao destrutiva e escrita atomica", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L89" }, + { + "id": "specs_004_deterministic_content_selection_research_alternatives_considered", + "label": "Alternatives Considered", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "alternatives considered", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L26" + }, + { + "id": "specs_004_deterministic_content_selection_research_context", + "label": "Context", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "context", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L9" + }, { "id": "specs_004_deterministic_content_selection_research_context_34", "label": "Context", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "context", @@ -6147,7 +6315,7 @@ "label": "Context", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "context", @@ -6159,19 +6327,31 @@ "label": "Context", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "context", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L91" }, + { + "id": "specs_004_deterministic_content_selection_research_decisions", + "label": "Decisions", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "decisions", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L12" + }, { "id": "specs_004_deterministic_content_selection_research_decisions_37", "label": "Decisions", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "decisions", @@ -6183,7 +6363,7 @@ "label": "Decisions", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "decisions", @@ -6195,19 +6375,31 @@ "label": "Decisions", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "decisions", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L94" }, + { + "id": "specs_004_deterministic_content_selection_research_rationale", + "label": "Rationale", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "rationale", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L22" + }, { "id": "specs_004_deterministic_content_selection_research_rationale_106", "label": "Rationale", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "rationale", @@ -6219,7 +6411,7 @@ "label": "Rationale", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "rationale", @@ -6231,7 +6423,7 @@ "label": "Rationale", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "rationale", @@ -6243,7 +6435,7 @@ "label": "Research & Architectural Decisions: Deterministic Content Selection", "_origin": "ast", "community": 117, - "community_name": "Research & Architectural Decisions: Deterministic Content Selection", + "community_name": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "norm_label": "research & architectural decisions: deterministic content selection", @@ -7933,54 +8125,6 @@ "source_file": ".agents/skills/graphify/references/exports.md", "source_location": "L79" }, - { - "id": "specs_004_deterministic_content_selection_contracts_json_schema", - "label": "004-deterministic-content-selection/contracts/json-schema.md", - "_origin": "ast", - "community": 130, - "community_name": "004-deterministic-content-selection/spec.md", - "file_type": "document", - "node_kind": "page", - "norm_label": "004-deterministic-content-selection/contracts/json-schema.md", - "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", - "source_location": "L1" - }, - { - "id": "specs_004_deterministic_content_selection_contracts_json_schema_1_input_json_schema", - "label": "1. Input JSON Schema", - "_origin": "ast", - "community": 130, - "community_name": "004-deterministic-content-selection/spec.md", - "file_type": "document", - "node_kind": "heading", - "norm_label": "1. input json schema", - "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", - "source_location": "L7" - }, - { - "id": "specs_004_deterministic_content_selection_contracts_json_schema_2_output_json_schema", - "label": "2. Output JSON Schema", - "_origin": "ast", - "community": 130, - "community_name": "004-deterministic-content-selection/spec.md", - "file_type": "document", - "node_kind": "heading", - "norm_label": "2. output json schema", - "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", - "source_location": "L52" - }, - { - "id": "specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", - "label": "JSON Schema Contract: Deterministic Article Content Selection", - "_origin": "ast", - "community": 130, - "community_name": "004-deterministic-content-selection/spec.md", - "file_type": "document", - "node_kind": "heading", - "norm_label": "json schema contract: deterministic article content selection", - "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", - "source_location": "L1" - }, { "id": "specs_004_deterministic_content_selection_data_model", "label": "004-deterministic-content-selection/data-model.md", @@ -8098,7 +8242,7 @@ "source_location": "L136" }, { - "id": "scripts_convert_article_to_markdown_rationale_220", + "id": "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", "_origin": "ast", "community": 131, @@ -8106,10 +8250,10 @@ "file_type": "rationale", "norm_label": "retorna o dicionario associado a chave ou um dicionario vazio caso nao seja...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L220" + "source_location": "L226" }, { - "id": "scripts_convert_article_to_markdown_rationale_226", + "id": "scripts_convert_article_to_markdown_rationale_232", "label": "Resolve todos os metadados do artigo seguindo a matriz estrita de prioridades\u2026", "_origin": "ast", "community": 131, @@ -8117,7 +8261,7 @@ "file_type": "rationale", "norm_label": "resolve todos os metadados do artigo seguindo a matriz estrita de prioridades...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L226" + "source_location": "L232" }, { "id": "scripts_convert_article_to_markdown_rationale_41", @@ -8142,15 +8286,26 @@ "source_location": "L57" }, { - "id": "tests_test_convert_article_to_markdown_rationale_160", - "label": "Testa parsing de datas ISO 8601 e RFC 2822 preservando fuso hor\u00e1rio.", + "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 parsing de datas iso 8601 e rfc 2822 preservando fuso horario.", + "norm_label": "testa comportamento com listas vazias, nulas ou contendo apenas placeholders.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L160" + "source_location": "L116" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_86", + "label": "Testa divis\u00e3o por ponto e v\u00edrgula na string e v\u00edrgulas em elementos de lista\u2026", + "_origin": "ast", + "community": 131, + "community_name": "convert_article_to_markdown.py", + "file_type": "rationale", + "norm_label": "testa divisao por ponto e virgula na string e virgulas em elementos de lista...", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L86" }, { "id": "docs_prd_convert_json_markdown_8_regras_funcionais", @@ -8645,7 +8800,7 @@ "source_location": "L1" }, { - "id": "scripts_convert_article_to_markdown_rationale_162", + "id": "scripts_convert_article_to_markdown_rationale_168", "label": "Obt\u00e9m o corpo do artigo exclusivamente do selected_extractor com fallback\u2026", "_origin": "ast", "community": 135, @@ -8653,62 +8808,51 @@ "file_type": "rationale", "norm_label": "obtem o corpo do artigo exclusivamente do selected_extractor com fallback...", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L162" + "source_location": "L168" }, { - "id": "tests_test_convert_article_to_markdown_rationale_103", - "label": "Garante que falhe se o corpo do extrator selecionado for vazio, sem usar outro\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_240", + "label": "Testa prioridade trafilatura.markdown sobre trafilatura.text.", "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "rationale", - "norm_label": "garante que falhe se o corpo do extrator selecionado for vazio, sem usar outro...", + "norm_label": "testa prioridade trafilatura.markdown sobre trafilatura.text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L103" + "source_location": "L240" }, { - "id": "tests_test_convert_article_to_markdown_rationale_48", - "label": "Garante que Trafilatura use diretamente o campo markdown.", + "id": "tests_test_convert_article_to_markdown_rationale_257", + "label": "Testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "rationale", - "norm_label": "garante que trafilatura use diretamente o campo markdown.", + "norm_label": "testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L48" + "source_location": "L257" }, { - "id": "tests_test_convert_article_to_markdown_rationale_61", - "label": "Garante que Trafilatura fa\u00e7a fallback para text se markdown estiver vazio.", + "id": "tests_test_convert_article_to_markdown_rationale_277", + "label": "Testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "rationale", - "norm_label": "garante que trafilatura faca fallback para text se markdown estiver vazio.", + "norm_label": "testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L61" + "source_location": "L277" }, { - "id": "tests_test_convert_article_to_markdown_rationale_74", - "label": "Garante convers\u00e3o de HTML para Markdown para Newspaper4k.", + "id": "tests_test_convert_article_to_markdown_rationale_319", + "label": "Garante erro ao receber selected_extractor ausente ou n\u00e3o reconhecido.", "_origin": "ast", "community": 135, "community_name": "resolve_article_body", "file_type": "rationale", - "norm_label": "garante conversao de html para markdown para newspaper4k.", + "norm_label": "garante erro ao receber selected_extractor ausente ou nao reconhecido.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L74" - }, - { - "id": "tests_test_convert_article_to_markdown_rationale_89", - "label": "Garante convers\u00e3o de HTML para Markdown para Readability.", - "_origin": "ast", - "community": 135, - "community_name": "resolve_article_body", - "file_type": "rationale", - "norm_label": "garante conversao de html para markdown para readability.", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L89" + "source_location": "L319" }, { "id": "specs_005_convert_json_markdown_plan_complexity_tracking", @@ -9400,7 +9544,18 @@ "source_location": "" }, { - "id": "scripts_convert_article_to_markdown_rationale_509", + "id": "scripts_convert_article_to_markdown_rationale_480", + "label": "Remove o primeiro t\u00edtulo H1 do corpo somente quando ele for igual ao t\u00edtulo\u2026", + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "file_type": "rationale", + "norm_label": "remove o primeiro titulo h1 do corpo somente quando ele for igual ao titulo...", + "source_file": "scripts/convert_article_to_markdown.py", + "source_location": "L480" + }, + { + "id": "scripts_convert_article_to_markdown_rationale_515", "label": "Preserva imagens com URL absoluta http/https, remove relativas/data:/vazias e\u2026", "_origin": "ast", "community": 140, @@ -9408,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": "L509" + "source_location": "L515" }, { - "id": "scripts_convert_article_to_markdown_rationale_609", + "id": "scripts_convert_article_to_markdown_rationale_615", "label": "Executa a leitura do JSON, valida\u00e7\u00e3o, convers\u00e3o e escrita at\u00f4mica do arquivo\u2026", "_origin": "ast", "community": 140, @@ -9419,29 +9574,40 @@ "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": "L609" + "source_location": "L615" }, { - "id": "tests_test_convert_article_to_markdown_rationale_259", - "label": "Garante remo\u00e7\u00e3o de imagens relativas/data: e deduplica\u00e7\u00e3o de imagens id\u00eanticas.", + "id": "tests_test_convert_article_to_markdown_rationale_440", + "label": "Testa remo\u00e7\u00e3o de H1 inicial coincidente com t\u00edtulo com varia\u00e7\u00f5es de espa\u00e7os e\u2026", "_origin": "ast", "community": 140, "community_name": "convert_article", "file_type": "rationale", - "norm_label": "garante remocao de imagens relativas/data: e deduplicacao de imagens identicas.", + "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": "L259" + "source_location": "L440" }, { - "id": "tests_test_convert_article_to_markdown_rationale_463", - "label": "Testa diretamente a fun\u00e7\u00e3o convert_article em Python.", + "id": "tests_test_convert_article_to_markdown_rationale_457", + "label": "Valida descarte de data:, relativos e deduplica\u00e7\u00e3o mantendo a primeira\u2026", "_origin": "ast", "community": 140, "community_name": "convert_article", "file_type": "rationale", - "norm_label": "testa diretamente a funcao convert_article em python.", + "norm_label": "valida descarte de data:, relativos e deduplicacao mantendo a primeira...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L463" + "source_location": "L457" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_702", + "label": "Testa a chamada direta da fun\u00e7\u00e3o convert_article em c\u00f3digo Python.", + "_origin": "ast", + "community": 140, + "community_name": "convert_article", + "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" }, { "id": "specs_005_convert_json_markdown_checklists_markdown_conversion", @@ -9851,7 +10017,7 @@ "source_location": "" }, { - "id": "scripts_convert_article_to_markdown_rationale_668", + "id": "scripts_convert_article_to_markdown_rationale_674", "label": "Configura o parser de argumentos do CLI.", "_origin": "ast", "community": 145, @@ -9859,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": "L668" + "source_location": "L674" }, { - "id": "scripts_convert_article_to_markdown_rationale_691", + "id": "scripts_convert_article_to_markdown_rationale_697", "label": "Ponto de entrada do CLI.", "_origin": "ast", "community": 145, @@ -9870,18 +10036,18 @@ "file_type": "rationale", "norm_label": "ponto de entrada do cli.", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L691" + "source_location": "L697" }, { - "id": "tests_test_convert_article_to_markdown_rationale_456", - "label": "Testa diretamente o parsing de argumentos.", + "id": "tests_test_convert_article_to_markdown_rationale_720", + "label": "Testa a chamada direta do parse_arguments.", "_origin": "ast", "community": 145, "community_name": "parse_arguments", "file_type": "rationale", - "norm_label": "testa diretamente o parsing de argumentos.", + "norm_label": "testa a chamada direta do parse_arguments.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L456" + "source_location": "L720" }, { "id": "specs_005_convert_json_markdown_checklists_requirements", @@ -10088,64 +10254,48 @@ "source_location": "L290" }, { - "id": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", - "label": "1. Text Normalization Pipeline", + "id": "scripts_extract_google_news_rationale_108", + "label": "Mapeia idioma e locale para os par\u00e2metros hl, gl e ceid do Google News.", "_origin": "ast", "community": 149, - "community_name": "1. Text Normalization Pipeline", - "file_type": "document", - "node_kind": "heading", - "norm_label": "1. text normalization pipeline", - "source_file": "specs/004-deterministic-content-selection/research.md", - "source_location": "L7" + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "mapeia idioma e locale para os parametros hl, gl e ceid do google news.", + "source_file": "scripts/extract_google_news.py", + "source_location": "L108" }, { - "id": "specs_004_deterministic_content_selection_research_alternatives_considered", - "label": "Alternatives Considered", + "id": "tests_test_extract_google_news_rationale_38", + "label": "Valida o mapeamento padr\u00e3o de idiomas para pares (hl, gl, ceid).", "_origin": "ast", "community": 149, - "community_name": "1. Text Normalization Pipeline", - "file_type": "document", - "node_kind": "heading", - "norm_label": "alternatives considered", - "source_file": "specs/004-deterministic-content-selection/research.md", - "source_location": "L26" + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "valida o mapeamento padrao de idiomas para pares (hl, gl, ceid).", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L38" }, { - "id": "specs_004_deterministic_content_selection_research_context", - "label": "Context", + "id": "tests_test_extract_google_news_rationale_61", + "label": "Valida a sobrescrita geogr\u00e1fica quando o argumento locale \u00e9 especificado.", "_origin": "ast", "community": 149, - "community_name": "1. Text Normalization Pipeline", - "file_type": "document", - "node_kind": "heading", - "norm_label": "context", - "source_file": "specs/004-deterministic-content-selection/research.md", - "source_location": "L9" + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "valida a sobrescrita geografica quando o argumento locale e especificado.", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L61" }, { - "id": "specs_004_deterministic_content_selection_research_decisions", - "label": "Decisions", + "id": "tests_test_extract_google_news_rationale_79", + "label": "Valida fallback din\u00e2mico para idiomas regionais n\u00e3o listados explicitamente.", "_origin": "ast", "community": 149, - "community_name": "1. Text Normalization Pipeline", - "file_type": "document", - "node_kind": "heading", - "norm_label": "decisions", - "source_file": "specs/004-deterministic-content-selection/research.md", - "source_location": "L12" - }, - { - "id": "specs_004_deterministic_content_selection_research_rationale", - "label": "Rationale", - "_origin": "ast", - "community": 149, - "community_name": "1. Text Normalization Pipeline", - "file_type": "document", - "node_kind": "heading", - "norm_label": "rationale", - "source_file": "specs/004-deterministic-content-selection/research.md", - "source_location": "L22" + "community_name": "get_hl_gl_ceid", + "file_type": "rationale", + "norm_label": "valida fallback dinamico para idiomas regionais nao listados explicitamente.", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L79" }, { "id": "specify_templates_plan_template", @@ -10352,7 +10502,7 @@ "source_location": "L61" }, { - "id": "scripts_convert_article_to_markdown_rationale_541", + "id": "scripts_convert_article_to_markdown_rationale_547", "label": "Monta a estrutura final do documento Markdown respeitando a ordem estrita do\u2026", "_origin": "ast", "community": 152, @@ -10360,62 +10510,99 @@ "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": "L541" + "source_location": "L547" }, { - "id": "tests_test_convert_article_to_markdown_rationale_275", - "label": "Testa a montagem completa da estrutura de se\u00e7\u00f5es do documento Markdown.", + "id": "tests_test_convert_article_to_markdown_rationale_479", + "label": "Testa montagem com todos os campos e apenas com campos obrigat\u00f3rios.", "_origin": "ast", "community": 152, "community_name": "assemble_markdown_document", "file_type": "rationale", - "norm_label": "testa a montagem completa da estrutura de secoes do documento markdown.", + "norm_label": "testa montagem com todos os campos e apenas com campos obrigatorios.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L275" + "source_location": "L479" }, { "id": "scripts_convert_article_to_markdown_rationale_150", - "label": "Converte HTML para Markdown usando t\u00edtulos ATX.", + "label": "Converte HTML para Markdown usando t\u00edtulos ATX, removendo scripts e estilos.", "_origin": "ast", "community": 153, "community_name": "convert_html_to_markdown", "file_type": "rationale", - "norm_label": "converte html para markdown usando titulos atx.", + "norm_label": "converte html para markdown usando titulos atx, removendo scripts e estilos.", "source_file": "scripts/convert_article_to_markdown.py", "source_location": "L150" }, { - "id": "tests_test_convert_article_to_markdown_rationale_448", - "label": "Testa diretamente a fun\u00e7\u00e3o convert_html_to_markdown.", + "id": "tests_test_convert_article_to_markdown_rationale_198", + "label": "Valida convers\u00e3o de elementos HTML estruturados para Markdown com t\u00edtulos ATX.", "_origin": "ast", "community": 153, "community_name": "convert_html_to_markdown", "file_type": "rationale", - "norm_label": "testa diretamente a funcao convert_html_to_markdown.", + "norm_label": "valida conversao de elementos html estruturados para markdown com titulos atx.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L448" + "source_location": "L198" }, { - "id": "scripts_convert_article_to_markdown_rationale_474", - "label": "Remove o primeiro t\u00edtulo H1 do corpo somente quando ele for igual ao t\u00edtulo\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_228", + "label": "Testa convers\u00e3o de HTML vazio retornando string vazia.", "_origin": "ast", - "community": 154, - "community_name": "remove_duplicate_initial_h1", + "community": 153, + "community_name": "convert_html_to_markdown", "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": "L474" + "norm_label": "testa conversao de html vazio retornando string vazia.", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L228" }, { - "id": "tests_test_convert_article_to_markdown_rationale_250", - "label": "Garante remo\u00e7\u00e3o apenas do H1 inicial que for id\u00eantico ao t\u00edtulo.", + "id": "specs_004_deterministic_content_selection_contracts_json_schema", + "label": "004-deterministic-content-selection/contracts/json-schema.md", "_origin": "ast", "community": 154, - "community_name": "remove_duplicate_initial_h1", - "file_type": "rationale", - "norm_label": "garante remocao apenas do h1 inicial que for identico ao titulo.", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L250" + "community_name": "JSON Schema Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "page", + "norm_label": "004-deterministic-content-selection/contracts/json-schema.md", + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_json_schema_1_input_json_schema", + "label": "1. Input JSON Schema", + "_origin": "ast", + "community": 154, + "community_name": "JSON Schema Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "1. input json schema", + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L7" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_json_schema_2_output_json_schema", + "label": "2. Output JSON Schema", + "_origin": "ast", + "community": 154, + "community_name": "JSON Schema Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "2. output json schema", + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L52" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", + "label": "JSON Schema Contract: Deterministic Article Content Selection", + "_origin": "ast", + "community": 154, + "community_name": "JSON Schema Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "json schema contract: deterministic article content selection", + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L1" }, { "id": "docs_prd_convert_json_markdown_5_1_inclu\u00eddo", @@ -10538,15 +10725,15 @@ "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_140", - "label": "Testa normaliza\u00e7\u00e3o de listas, separa\u00e7\u00e3o por ponto e v\u00edrgula, deduplica\u00e7\u00e3o e\u2026", + "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", "_origin": "ast", "community": 159, - "community_name": "test_normalize_list_strings_and_deduplication", + "community_name": "test_normalize_date_rfc_2822_variants", "file_type": "rationale", - "norm_label": "testa normalizacao de listas, separacao por ponto e virgula, deduplicacao e...", + "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": "L140" + "source_location": "L136" }, { "id": "agents_skills_ponytail_help_skill", @@ -10649,15 +10836,59 @@ "source_location": "L63" }, { - "id": "tests_test_convert_article_to_markdown_rationale_176", - "label": "Testa valida\u00e7\u00e3o estrita de URLs absolutas com http/https.", + "id": "tests_test_convert_article_to_markdown_rationale_145", + "label": "Garante que datas inv\u00e1lidas ou placeholders retornem None sem lan\u00e7ar exce\u00e7\u00e3o\u2026", "_origin": "ast", "community": 160, - "community_name": "test_validate_url_schemes", + "community_name": "test_normalize_date_invalid_and_placeholders", "file_type": "rationale", - "norm_label": "testa validacao estrita de urls absolutas com http/https.", + "norm_label": "garante que datas invalidas ou placeholders retornem none sem lancar excecao...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L176" + "source_location": "L145" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_333", + "label": "Valida a cadeia de fallback completa para o campo T\u00cdTULO (6 n\u00edveis).", + "_origin": "ast", + "community": 161, + "community_name": "test_metadata_priority_title_all_fallbacks", + "file_type": "rationale", + "norm_label": "valida a cadeia de fallback completa para o campo titulo (6 niveis).", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L333" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_407", + "label": "Garante que subt\u00edtulo id\u00eantico ao t\u00edtulo seja automaticamente omitido (None).", + "_origin": "ast", + "community": 162, + "community_name": "test_metadata_priority_subtitle_omitted_when_equal_to_title", + "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": "L407" + }, + { + "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", + "_origin": "ast", + "community": 163, + "community_name": "test_metadata_priority_first_valid_source_no_cross_merging", + "file_type": "rationale", + "norm_label": "garante que listas de autores/tags usem apenas a primeira fonte valida, sem...", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L422" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_73", + "label": "Valida que entradas n\u00e3o string retornem None de forma segura.", + "_origin": "ast", + "community": 164, + "community_name": "test_normalize_scalar_non_string_types", + "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" }, { "id": "agents_skills_speckit_checklist_skill", @@ -13588,125 +13819,147 @@ "source_location": "L1" }, { - "id": "tests_test_convert_article_to_markdown_rationale_125", - "label": "Testa decodifica\u00e7\u00e3o de entidades HTML, colapso de espa\u00e7os e filtro de\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_110", + "label": "Testa deduplica\u00e7\u00e3o case-insensitive preservando a grafia e ordem da primeira\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa decodificacao de entidades html, colapso de espacos e filtro de...", + "norm_label": "testa deduplicacao case-insensitive preservando a grafia e ordem da primeira...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L125" + "source_location": "L110" }, { - "id": "tests_test_convert_article_to_markdown_rationale_188", - "label": "Testa a matriz determin\u00edstica de prioridades dos metadados.", + "id": "tests_test_convert_article_to_markdown_rationale_128", + "label": "Valida parsing de datas ISO 8601 em m\u00faltiplos formatos e fusos.", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa a matriz deterministica de prioridades dos metadados.", + "norm_label": "valida parsing de datas iso 8601 em multiplos formatos e fusos.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L188" + "source_location": "L128" }, { - "id": "tests_test_convert_article_to_markdown_rationale_314", - "label": "Valida\u00e7\u00e3o exata byte a byte da Golden Fixture de Trafilatura.", + "id": "tests_test_convert_article_to_markdown_rationale_372", + "label": "Valida a cadeia de fallback completa para a URL ORIGINAL (5 n\u00edveis).", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "validacao exata byte a byte da golden fixture de trafilatura.", + "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": "L314" + "source_location": "L372" }, { - "id": "tests_test_convert_article_to_markdown_rationale_330", - "label": "Valida\u00e7\u00e3o exata byte a byte da Golden Fixture de Newspaper4k.", + "id": "tests_test_convert_article_to_markdown_rationale_45", + "label": "Valida decodifica\u00e7\u00e3o de entidades HTML nomeadas e num\u00e9ricas.", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "validacao exata byte a byte da golden fixture de newspaper4k.", + "norm_label": "valida decodificacao de entidades html nomeadas e numericas.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L330" + "source_location": "L45" }, { - "id": "tests_test_convert_article_to_markdown_rationale_346", - "label": "Valida\u00e7\u00e3o exata byte a byte da Golden Fixture de Readability.", + "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.", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "validacao exata byte a byte da golden fixture de readability.", + "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": "L346" + "source_location": "L51" }, { - "id": "tests_test_convert_article_to_markdown_rationale_362", - "label": "Testa gera\u00e7\u00e3o do arquivo de sa\u00edda padr\u00e3o .md.", + "id": "tests_test_convert_article_to_markdown_rationale_512", + "label": "Garante correspond\u00eancia exata byte a byte para Trafilatura, Newspaper4k e\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa geracao do arquivo de saida padrao .md.", + "norm_label": "garante correspondencia exata byte a byte para trafilatura, newspaper4k e...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L362" + "source_location": "L512" }, { - "id": "tests_test_convert_article_to_markdown_rationale_387", - "label": "Testa rejei\u00e7\u00e3o com c\u00f3digo 1 quando a entrada cont\u00e9m a chave articles.", + "id": "tests_test_convert_article_to_markdown_rationale_529", + "label": "Garante que m\u00faltiplas execu\u00e7\u00f5es no mesmo arquivo produzam hashes SHA-256\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa rejeicao com codigo 1 quando a entrada contem a chave articles.", + "norm_label": "garante que multiplas execucoes no mesmo arquivo produzam hashes sha-256...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L387" + "source_location": "L529" }, { - "id": "tests_test_convert_article_to_markdown_rationale_399", - "label": "Testa encerramento com c\u00f3digo 1 para JSON corrompido.", + "id": "tests_test_convert_article_to_markdown_rationale_553", + "label": "Testa toda a matriz de c\u00f3digos de sa\u00edda da CLI (0, 1, 2).", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa encerramento com codigo 1 para json corrompido.", + "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": "L399" + "source_location": "L553" }, { - "id": "tests_test_convert_article_to_markdown_rationale_411", - "label": "Testa falhas com c\u00f3digo 1 para campos obrigat\u00f3rios ausentes.", + "id": "tests_test_convert_article_to_markdown_rationale_587", + "label": "Garante encerramento com c\u00f3digo 1 caso a raiz do JSON seja lista, n\u00famero ou\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa falhas com codigo 1 para campos obrigatorios ausentes.", + "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": "L411" + "source_location": "L587" }, { - "id": "tests_test_convert_article_to_markdown_rationale_438", - "label": "Testa erro de argumentos do argparse (c\u00f3digo 2).", + "id": "tests_test_convert_article_to_markdown_rationale_602", + "label": "Garante que stdout permane\u00e7a limpo e grava\u00e7\u00e3o at\u00f4mica preserve arquivos\u2026", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "testa erro de argumentos do argparse (codigo 2).", + "norm_label": "garante que stdout permaneca limpo e gravacao atomica preserve arquivos...", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L438" + "source_location": "L602" }, { - "id": "tests_test_convert_article_to_markdown_rationale_484", - "label": "Garante que uma falha durante o processamento n\u00e3o altere o arquivo de destino\u2026", + "id": "tests_test_convert_article_to_markdown_rationale_646", + "label": "Garante gera\u00e7\u00e3o autom\u00e1tica de .md quando -o n\u00e3o \u00e9 informado.", "_origin": "ast", "community": 48, "community_name": "test_convert_article_to_markdown.py", "file_type": "rationale", - "norm_label": "garante que uma falha durante o processamento nao altere o arquivo de destino...", + "norm_label": "garante geracao automatica de .md quando -o nao e informado.", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L484" + "source_location": "L646" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_673", + "label": "Valida a convers\u00e3o E2E de um artigo real extra\u00eddo do arquivo\u2026", + "_origin": "ast", + "community": 48, + "community_name": "test_convert_article_to_markdown.py", + "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" }, { "id": "examples_content_northvolt_de", @@ -15499,17 +15752,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L1" }, - { - "id": "scripts_extract_google_news_rationale_108", - "label": "Mapeia idioma e locale para os par\u00e2metros hl, gl e ceid do Google News.", - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "rationale", - "norm_label": "mapeia idioma e locale para os parametros hl, gl e ceid do google news.", - "source_file": "scripts/extract_google_news.py", - "source_location": "L108" - }, { "id": "scripts_extract_google_news_rationale_152", "label": "Remove pontua\u00e7\u00e3o e espa\u00e7os extras para compara\u00e7\u00e3o de redund\u00e2ncia.", @@ -15576,17 +15818,6 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L65" }, - { - "id": "tests_test_extract_google_news_rationale_112", - "label": "Valida o parsing do feed RSS, higieniza\u00e7\u00e3o de tags HTML e deduplica\u00e7\u00e3o.", - "_origin": "ast", - "community": 82, - "community_name": "extract_google_news.py", - "file_type": "rationale", - "norm_label": "valida o parsing do feed rss, higienizacao de tags html e deduplicacao.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L112" - }, { "id": "tests_test_extract_google_news_rationale_162", "label": "Valida a resolu\u00e7\u00e3o concorrente em lote de uma lista de NewsArticle.", @@ -15621,15 +15852,15 @@ "source_location": "L85" }, { - "id": "tests_test_extract_google_news_rationale_303", - "label": "Valida E2E o fluxo completo de busca, parsing e resolu\u00e7\u00e3o de URLs reais ao vivo.", + "id": "tests_test_extract_google_news_rationale_187", + "label": "Valida a consolida\u00e7\u00e3o do ExtractionResult a partir da busca mockada com URLs\u2026", "_origin": "ast", "community": 83, "community_name": "ExtractionResult", "file_type": "rationale", - "norm_label": "valida e2e o fluxo completo de busca, parsing e resolucao de urls reais ao vivo.", + "norm_label": "valida a consolidacao do extractionresult a partir da busca mockada com urls...", "source_file": "tests/test_extract_google_news.py", - "source_location": "L303" + "source_location": "L187" }, { "id": "tests_test_extract_google_news", @@ -15642,6 +15873,17 @@ "source_file": "tests/test_extract_google_news.py", "source_location": "L1" }, + { + "id": "tests_test_extract_google_news_py_fixture", + "label": "fixture", + "_origin": "ast", + "community": 84, + "community_name": "test_extract_google_news.py", + "file_type": "code", + "norm_label": "fixture", + "source_file": "", + "source_location": "" + }, { "id": "scripts_extract_google_news_rationale_208", "label": "Resolve a URL intermedi\u00e1ria do Google News para a URL real do ve\u00edculo.", @@ -15664,6 +15906,17 @@ "source_file": "tests/test_extract_google_news.py", "source_location": "L1" }, + { + "id": "tests_test_extract_google_news_rationale_112", + "label": "Valida o parsing do feed RSS, higieniza\u00e7\u00e3o de tags HTML e deduplica\u00e7\u00e3o.", + "_origin": "ast", + "community": 84, + "community_name": "test_extract_google_news.py", + "file_type": "rationale", + "norm_label": "valida o parsing do feed rss, higienizacao de tags html e deduplicacao.", + "source_file": "tests/test_extract_google_news.py", + "source_location": "L112" + }, { "id": "tests_test_extract_google_news_rationale_139", "label": "Valida fallback gracioso de URL quando n\u00e3o \u00e9 link do Google News ou em erro.", @@ -15698,37 +15951,15 @@ "source_location": "L282" }, { - "id": "tests_test_extract_google_news_rationale_38", - "label": "Valida o mapeamento padr\u00e3o de idiomas para pares (hl, gl, ceid).", + "id": "tests_test_extract_google_news_rationale_33", + "label": "Fixture que fornece o conte\u00fado do XML de exemplo para testes offline.", "_origin": "ast", "community": 84, "community_name": "test_extract_google_news.py", "file_type": "rationale", - "norm_label": "valida o mapeamento padrao de idiomas para pares (hl, gl, ceid).", + "norm_label": "fixture que fornece o conteudo do xml de exemplo para testes offline.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L38" - }, - { - "id": "tests_test_extract_google_news_rationale_61", - "label": "Valida a sobrescrita geogr\u00e1fica quando o argumento locale \u00e9 especificado.", - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "rationale", - "norm_label": "valida a sobrescrita geografica quando o argumento locale e especificado.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L61" - }, - { - "id": "tests_test_extract_google_news_rationale_79", - "label": "Valida fallback din\u00e2mico para idiomas regionais n\u00e3o listados explicitamente.", - "_origin": "ast", - "community": 84, - "community_name": "test_extract_google_news.py", - "file_type": "rationale", - "norm_label": "valida fallback dinamico para idiomas regionais nao listados explicitamente.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L79" + "source_location": "L33" }, { "id": "specs_002_google_news_extractor_tasks_implementation_for_user_story_1", @@ -16405,15 +16636,15 @@ "source_location": "L33" }, { - "id": "tests_test_extract_google_news_rationale_187", - "label": "Valida a consolida\u00e7\u00e3o do ExtractionResult a partir da busca mockada com URLs\u2026", + "id": "tests_test_extract_google_news_rationale_303", + "label": "Valida E2E o fluxo completo de busca, parsing e resolu\u00e7\u00e3o de URLs reais ao vivo.", "_origin": "ast", "community": 90, "community_name": "SearchQuery", "file_type": "rationale", - "norm_label": "valida a consolidacao do extractionresult a partir da busca mockada com urls...", + "norm_label": "valida e2e o fluxo completo de busca, parsing e resolucao de urls reais ao vivo.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L187" + "source_location": "L303" }, { "id": "tests_test_extract_google_news_rationale_87", @@ -17903,26 +18134,59 @@ "source_location": "L49" }, { - "id": "tests_test_extract_google_news_py_fixture", - "label": "fixture", + "id": "tests_test_convert_article_to_markdown_py_parametrize", + "label": "parametrize", "_origin": "ast", "community": 99, - "community_name": "sample_rss_xml", + "community_name": "parametrize", "file_type": "code", - "norm_label": "fixture", + "norm_label": "parametrize", "source_file": "", "source_location": "" }, { - "id": "tests_test_extract_google_news_rationale_33", - "label": "Fixture que fornece o conte\u00fado do XML de exemplo para testes offline.", + "id": "tests_test_convert_article_to_markdown_rationale_168", + "label": "Garante aceita\u00e7\u00e3o de URLs absolutas com esquema HTTP e HTTPS v\u00e1lidos.", "_origin": "ast", "community": 99, - "community_name": "sample_rss_xml", + "community_name": "parametrize", "file_type": "rationale", - "norm_label": "fixture que fornece o conteudo do xml de exemplo para testes offline.", - "source_file": "tests/test_extract_google_news.py", - "source_location": "L33" + "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" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_188", + "label": "Garante rejei\u00e7\u00e3o de esquemas n\u00e3o permitidos, URLs relativas e strings vazias.", + "_origin": "ast", + "community": 99, + "community_name": "parametrize", + "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" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_299", + "label": "Garante que a aus\u00eancia de corpo no extrator selecionado NUNCA fa\u00e7a fallback\u2026", + "_origin": "ast", + "community": 99, + "community_name": "parametrize", + "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" + }, + { + "id": "tests_test_convert_article_to_markdown_rationale_67", + "label": "Garante que todos os placeholders documentados no PRD sejam descartados\u2026", + "_origin": "ast", + "community": 99, + "community_name": "parametrize", + "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" } ], "links": [ @@ -17995,7 +18259,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L632", + "source_location": "L638", "weight": 1.0 }, { @@ -18007,7 +18271,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L633", + "source_location": "L639", "weight": 1.0 }, { @@ -18019,7 +18283,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L636", + "source_location": "L642", "weight": 1.0 }, { @@ -18031,7 +18295,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L637", + "source_location": "L643", "weight": 1.0 }, { @@ -18043,7 +18307,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L640", + "source_location": "L646", "weight": 1.0 }, { @@ -18055,7 +18319,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L693", + "source_location": "L699", "weight": 1.0 }, { @@ -18067,7 +18331,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L698", + "source_location": "L704", "weight": 1.0 }, { @@ -18091,7 +18355,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L490", + "source_location": "L496", "weight": 1.0 }, { @@ -18103,7 +18367,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L191", + "source_location": "L197", "weight": 1.0 }, { @@ -18115,7 +18379,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L230", + "source_location": "L236", "weight": 1.0 }, { @@ -18127,7 +18391,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L251", + "source_location": "L257", "weight": 1.0 }, { @@ -18139,7 +18403,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L276", + "source_location": "L282", "weight": 1.0 }, { @@ -18151,7 +18415,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L325", + "source_location": "L331", "weight": 1.0 }, { @@ -18163,7 +18427,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L346", + "source_location": "L352", "weight": 1.0 }, { @@ -19307,7 +19571,7 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_assemble_markdown_document", + "source": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "target": "scripts_convert_article_to_markdown_assemble_markdown_document", "relation": "calls", "_origin": "ast", @@ -19315,11 +19579,11 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L290", + "source_location": "L494", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_clean_body_images_and_deduplicate", + "source": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "target": "scripts_convert_article_to_markdown_clean_body_images", "relation": "calls", "_origin": "ast", @@ -19327,11 +19591,11 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L267", + "source_location": "L465", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_convert_article_direct", + "source": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", "target": "scripts_convert_article_to_markdown_convert_article", "relation": "calls", "_origin": "ast", @@ -19339,11 +19603,11 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L477", + "source_location": "L713", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_basic", + "source": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "target": "scripts_convert_article_to_markdown_convert_html_to_markdown", "relation": "calls", "_origin": "ast", @@ -19351,131 +19615,23 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L450", + "source_location": "L229", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_normalize_date_iso_and_rfc2822", - "target": "scripts_convert_article_to_markdown_normalize_date", + "source": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", + "target": "scripts_convert_article_to_markdown_convert_html_to_markdown", "relation": "calls", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L162", + "source_location": "L213", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_normalize_list_strings_and_deduplication", - "target": "scripts_convert_article_to_markdown_normalize_list", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L143", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_string_and_placeholders", - "target": "scripts_convert_article_to_markdown_normalize_scalar", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L126", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_parse_arguments_direct", - "target": "scripts_convert_article_to_markdown_parse_arguments", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L457", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1", - "target": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L253", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_html_conversion", - "target": "scripts_convert_article_to_markdown_resolve_article_body", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L82", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_html_conversion", - "target": "scripts_convert_article_to_markdown_resolve_article_body", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L97", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_prohibits_cross_fallback", - "target": "scripts_convert_article_to_markdown_resolve_article_body", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L116", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_fallback_text", - "target": "scripts_convert_article_to_markdown_resolve_article_body", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L69", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_markdown", - "target": "scripts_convert_article_to_markdown_resolve_article_body", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L56", - "weight": 1.0 - }, - { - "source": "tests_test_convert_article_to_markdown_test_resolve_article_metadata_priority", + "source": "tests_test_convert_article_to_markdown_test_metadata_priority_first_valid_source_no_cross_merging", "target": "scripts_convert_article_to_markdown_resolve_article_metadata", "relation": "calls", "_origin": "ast", @@ -19483,11 +19639,263 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L224", + "source_location": "L429", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_test_validate_url_schemes", + "source": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", + "target": "scripts_convert_article_to_markdown_resolve_article_metadata", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L380", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", + "target": "scripts_convert_article_to_markdown_resolve_article_metadata", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L416", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", + "target": "scripts_convert_article_to_markdown_resolve_article_metadata", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L336", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", + "target": "scripts_convert_article_to_markdown_normalize_date", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L146", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_date_iso_8601_variants", + "target": "scripts_convert_article_to_markdown_normalize_date", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L129", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", + "target": "scripts_convert_article_to_markdown_normalize_date", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L137", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_list_author_url_filtering", + "target": "scripts_convert_article_to_markdown_normalize_list", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L105", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", + "target": "scripts_convert_article_to_markdown_normalize_list", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L112", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_list_empty_and_invalid", + "target": "scripts_convert_article_to_markdown_normalize_list", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L117", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_list_semicolon_and_comma_split", + "target": "scripts_convert_article_to_markdown_normalize_list", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L89", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", + "target": "scripts_convert_article_to_markdown_normalize_scalar", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L46", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", + "target": "scripts_convert_article_to_markdown_normalize_scalar", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L74", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", + "target": "scripts_convert_article_to_markdown_normalize_scalar", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L68", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", + "target": "scripts_convert_article_to_markdown_normalize_scalar", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L52", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", + "target": "scripts_convert_article_to_markdown_parse_arguments", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L721", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1_exact_and_variations", + "target": "scripts_convert_article_to_markdown_remove_duplicate_initial_h1", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L445", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", + "target": "scripts_convert_article_to_markdown_resolve_article_body", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L321", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", + "target": "scripts_convert_article_to_markdown_resolve_article_body", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L266", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", + "target": "scripts_convert_article_to_markdown_resolve_article_body", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L286", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", + "target": "scripts_convert_article_to_markdown_resolve_article_body", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L315", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", + "target": "scripts_convert_article_to_markdown_resolve_article_body", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L246", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "target": "scripts_convert_article_to_markdown_validate_url", "relation": "calls", "_origin": "ast", @@ -19495,7 +19903,19 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L177", + "source_location": "L189", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", + "target": "scripts_convert_article_to_markdown_validate_url", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L169", "weight": 1.0 }, { @@ -20616,7 +21036,7 @@ }, { "source": "tests_test_benchmark_24_test_benchmark_case", - "target": "parametrize", + "target": "tests_test_benchmark_24_py_parametrize", "relation": "references", "_origin": "ast", "confidence": "EXTRACTED", @@ -20638,6 +21058,54 @@ "source_location": "L9", "weight": 1.0 }, + { + "source": "tests_test_convert_article_to_markdown_test_normalize_scalar_placeholders_discarded", + "target": "tests_test_convert_article_to_markdown_py_parametrize", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L55", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", + "target": "tests_test_convert_article_to_markdown_py_parametrize", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L297", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", + "target": "tests_test_convert_article_to_markdown_py_parametrize", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L172", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", + "target": "tests_test_convert_article_to_markdown_py_parametrize", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "decorator", + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L158", + "weight": 1.0 + }, { "source": "tests_test_extract_article_contents_sample_input_json", "target": "tests_test_extract_article_contents_py_fixture", @@ -20671,7 +21139,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L540", + "source_location": "L546", "weight": 1.0 }, { @@ -20683,7 +21151,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L219", + "source_location": "L225", "weight": 1.0 }, { @@ -20695,7 +21163,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L161", + "source_location": "L167", "weight": 1.0 }, { @@ -20707,7 +21175,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L225", + "source_location": "L231", "weight": 1.0 }, { @@ -21451,7 +21919,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21463,7 +21931,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21475,7 +21943,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21487,7 +21955,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21499,7 +21967,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21511,7 +21979,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21523,7 +21991,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21535,7 +22003,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21547,7 +22015,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21559,7 +22027,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21571,7 +22039,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -21583,7 +22051,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -22327,7 +22795,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L23", + "source_location": "L20", "weight": 1.0 }, { @@ -22759,7 +23227,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L608", + "source_location": "L614", "weight": 1.0 }, { @@ -22771,7 +23239,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L667", + "source_location": "L673", "weight": 1.0 }, { @@ -27102,7 +27570,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L161", + "source_location": "L167", "weight": 1.0 }, { @@ -27113,7 +27581,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L219", + "source_location": "L225", "weight": 1.0 }, { @@ -27124,7 +27592,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L225", + "source_location": "L231", "weight": 1.0 }, { @@ -27146,7 +27614,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L473", + "source_location": "L479", "weight": 1.0 }, { @@ -27157,7 +27625,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L508", + "source_location": "L514", "weight": 1.0 }, { @@ -27168,7 +27636,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L540", + "source_location": "L546", "weight": 1.0 }, { @@ -27190,7 +27658,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L608", + "source_location": "L614", "weight": 1.0 }, { @@ -27201,7 +27669,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L667", + "source_location": "L673", "weight": 1.0 }, { @@ -27212,7 +27680,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L690", + "source_location": "L696", "weight": 1.0 }, { @@ -34169,62 +34637,73 @@ }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_prohibits_cross_fallback", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L102", + "source_location": "L109", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_string_and_placeholders", + "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": "L124", + "source_location": "L115", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_strings_and_deduplication", + "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": "L139", + "source_location": "L127", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_and_rfc2822", + "target": "tests_test_convert_article_to_markdown_test_normalize_date_rfc_2822_variants", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L159", + "source_location": "L135", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_validate_url_schemes", + "target": "tests_test_convert_article_to_markdown_test_normalize_date_invalid_and_placeholders", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L175", + "source_location": "L144", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_metadata_priority", + "target": "tests_test_convert_article_to_markdown_test_validate_url_valid_schemes", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L167", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", @@ -34235,211 +34714,321 @@ }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1", + "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_rich_formatting", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L249", + "source_location": "L197", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_clean_body_images_and_deduplicate", + "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_empty_or_whitespace", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L258", + "source_location": "L227", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_assemble_markdown_document", + "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_primary_and_fallback", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L274", + "source_location": "L239", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_golden_fixture_trafilatura", + "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_primary_and_fallback", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L313", + "source_location": "L256", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_golden_fixture_newspaper4k", + "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_primary_and_fallback", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L329", + "source_location": "L276", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_golden_fixture_readability", + "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_all_extractors", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L345", + "source_location": "L298", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_cli_default_output_path", + "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_invalid_selected_extractor", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L361", + "source_location": "L318", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_cli_rejection_of_batch_articles_json", + "target": "tests_test_convert_article_to_markdown_test_metadata_priority_title_all_fallbacks", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L386", + "source_location": "L332", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_cli_corrupt_json", + "target": "tests_test_convert_article_to_markdown_test_metadata_priority_original_url_all_fallbacks", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L398", + "source_location": "L371", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_cli_missing_required_fields", + "target": "tests_test_convert_article_to_markdown_test_metadata_priority_subtitle_omitted_when_equal_to_title", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L410", + "source_location": "L406", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_cli_argument_errors", + "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": "L437", + "source_location": "L421", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_basic", + "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": "L447", + "source_location": "L439", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_parse_arguments_direct", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L455", + "source_location": "L44", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_convert_article_direct", + "target": "tests_test_convert_article_to_markdown_test_clean_body_images_removes_invalid_and_deduplicates", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L462", + "source_location": "L456", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_markdown", + "target": "tests_test_convert_article_to_markdown_test_assemble_markdown_document_full_and_minimal", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L47", + "source_location": "L478", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_cli_atomic_write_preserves_target_on_failure", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_whitespace_collapsing", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L483", + "source_location": "L50", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_fallback_text", + "target": "tests_test_convert_article_to_markdown_test_golden_fixtures_byte_level_precision", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L60", + "source_location": "L511", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_html_conversion", + "target": "tests_test_convert_article_to_markdown_test_conversion_determinism_sha256_repeatability", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L73", + "source_location": "L528", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_html_conversion", + "target": "tests_test_convert_article_to_markdown_test_cli_exit_codes_and_error_handling", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L88", + "source_location": "L552", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_cli_json_root_must_be_object", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L586", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_cli_no_stdout_pollution_and_atomic_preservation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L601", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_cli_default_output_naming", + "relation": "contains", + "_origin": "ast", + "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", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_e2e_pipeline_with_real_extracted_selected_json", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L672", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_convert_article_api_direct", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L701", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_parse_arguments_api_direct", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_convert_article_to_markdown.py", + "source_location": "L719", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_non_string_types", + "relation": "contains", + "_origin": "ast", + "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", "weight": 1.0 }, { @@ -35906,36 +36495,36 @@ "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_162", + "source": "scripts_convert_article_to_markdown_rationale_168", "target": "scripts_convert_article_to_markdown_resolve_article_body", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L162", + "source_location": "L168", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_220", + "source": "scripts_convert_article_to_markdown_rationale_226", "target": "scripts_convert_article_to_markdown_get_dict", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L220", + "source_location": "L226", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_226", + "source": "scripts_convert_article_to_markdown_rationale_232", "target": "scripts_convert_article_to_markdown_resolve_article_metadata", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/convert_article_to_markdown.py", - "source_location": "L226", + "source_location": "L232", "weight": 1.0 }, { @@ -35950,36 +36539,36 @@ "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_474", + "source": "scripts_convert_article_to_markdown_rationale_480", "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": "L474", + "source_location": "L480", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_509", + "source": "scripts_convert_article_to_markdown_rationale_515", "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": "L509", + "source_location": "L515", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_541", + "source": "scripts_convert_article_to_markdown_rationale_547", "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": "L541", + "source_location": "L547", "weight": 1.0 }, { @@ -35994,36 +36583,36 @@ "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_609", + "source": "scripts_convert_article_to_markdown_rationale_615", "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": "L609", + "source_location": "L615", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_668", + "source": "scripts_convert_article_to_markdown_rationale_674", "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": "L668", + "source_location": "L674", "weight": 1.0 }, { - "source": "scripts_convert_article_to_markdown_rationale_691", + "source": "scripts_convert_article_to_markdown_rationale_697", "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": "L691", + "source_location": "L697", "weight": 1.0 }, { @@ -36951,63 +37540,74 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_103", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_strict_isolation_prohibits_cross_fallback", + "source": "tests_test_convert_article_to_markdown_rationale_110", + "target": "tests_test_convert_article_to_markdown_test_normalize_list_deduplication_preserves_case_and_order", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L103", + "source_location": "L110", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_125", - "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_string_and_placeholders", + "source": "tests_test_convert_article_to_markdown_rationale_116", + "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": "L125", + "source_location": "L116", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_140", - "target": "tests_test_convert_article_to_markdown_test_normalize_list_strings_and_deduplication", + "source": "tests_test_convert_article_to_markdown_rationale_128", + "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": "L140", + "source_location": "L128", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_160", - "target": "tests_test_convert_article_to_markdown_test_normalize_date_iso_and_rfc2822", + "source": "tests_test_convert_article_to_markdown_rationale_136", + "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": "L160", + "source_location": "L136", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_176", - "target": "tests_test_convert_article_to_markdown_test_validate_url_schemes", + "source": "tests_test_convert_article_to_markdown_rationale_145", + "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": "L176", + "source_location": "L145", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_168", + "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", "weight": 1.0 }, { "source": "tests_test_convert_article_to_markdown_rationale_188", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_metadata_priority", + "target": "tests_test_convert_article_to_markdown_test_validate_url_invalid_schemes", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", @@ -37017,212 +37617,322 @@ "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_250", - "target": "tests_test_convert_article_to_markdown_test_remove_duplicate_initial_h1", + "source": "tests_test_convert_article_to_markdown_rationale_198", + "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": "L250", + "source_location": "L198", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_259", - "target": "tests_test_convert_article_to_markdown_test_clean_body_images_and_deduplicate", + "source": "tests_test_convert_article_to_markdown_rationale_228", + "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": "L259", + "source_location": "L228", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_275", - "target": "tests_test_convert_article_to_markdown_test_assemble_markdown_document", + "source": "tests_test_convert_article_to_markdown_rationale_240", + "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": "L275", + "source_location": "L240", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_314", - "target": "tests_test_convert_article_to_markdown_test_golden_fixture_trafilatura", + "source": "tests_test_convert_article_to_markdown_rationale_257", + "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": "L314", + "source_location": "L257", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_330", - "target": "tests_test_convert_article_to_markdown_test_golden_fixture_newspaper4k", + "source": "tests_test_convert_article_to_markdown_rationale_277", + "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": "L330", + "source_location": "L277", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_346", - "target": "tests_test_convert_article_to_markdown_test_golden_fixture_readability", + "source": "tests_test_convert_article_to_markdown_rationale_299", + "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": "L346", + "source_location": "L299", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_362", - "target": "tests_test_convert_article_to_markdown_test_cli_default_output_path", + "source": "tests_test_convert_article_to_markdown_rationale_319", + "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": "L362", + "source_location": "L319", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_387", - "target": "tests_test_convert_article_to_markdown_test_cli_rejection_of_batch_articles_json", + "source": "tests_test_convert_article_to_markdown_rationale_333", + "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": "L387", + "source_location": "L333", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_399", - "target": "tests_test_convert_article_to_markdown_test_cli_corrupt_json", + "source": "tests_test_convert_article_to_markdown_rationale_372", + "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": "L399", + "source_location": "L372", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_411", - "target": "tests_test_convert_article_to_markdown_test_cli_missing_required_fields", + "source": "tests_test_convert_article_to_markdown_rationale_407", + "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": "L411", + "source_location": "L407", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_438", - "target": "tests_test_convert_article_to_markdown_test_cli_argument_errors", + "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": "L438", + "source_location": "L422", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_448", - "target": "tests_test_convert_article_to_markdown_test_convert_html_to_markdown_basic", + "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": "L448", + "source_location": "L440", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_456", - "target": "tests_test_convert_article_to_markdown_test_parse_arguments_direct", + "source": "tests_test_convert_article_to_markdown_rationale_45", + "target": "tests_test_convert_article_to_markdown_test_normalize_scalar_complex_html_entities", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_convert_article_to_markdown.py", - "source_location": "L456", + "source_location": "L45", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_463", - "target": "tests_test_convert_article_to_markdown_test_convert_article_direct", + "source": "tests_test_convert_article_to_markdown_rationale_457", + "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": "L463", + "source_location": "L457", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_48", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_markdown", + "source": "tests_test_convert_article_to_markdown_rationale_479", + "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": "L48", + "source_location": "L479", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_484", - "target": "tests_test_convert_article_to_markdown_test_cli_atomic_write_preserves_target_on_failure", + "source": "tests_test_convert_article_to_markdown_rationale_51", + "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": "L484", + "source_location": "L51", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_61", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_trafilatura_fallback_text", + "source": "tests_test_convert_article_to_markdown_rationale_512", + "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": "L61", + "source_location": "L512", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_74", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_newspaper4k_html_conversion", + "source": "tests_test_convert_article_to_markdown_rationale_529", + "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": "L74", + "source_location": "L529", "weight": 1.0 }, { - "source": "tests_test_convert_article_to_markdown_rationale_89", - "target": "tests_test_convert_article_to_markdown_test_resolve_article_body_readability_html_conversion", + "source": "tests_test_convert_article_to_markdown_rationale_553", + "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": "L89", + "source_location": "L553", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_587", + "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", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_602", + "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", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_646", + "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", + "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", + "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", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_702", + "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", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_720", + "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", + "weight": 1.0 + }, + { + "source": "tests_test_convert_article_to_markdown_rationale_73", + "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", "weight": 1.0 }, { diff --git a/graphify-out/2026-08-21/manifest.json b/graphify-out/2026-08-21/manifest.json index 6eb3764..15adc53 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": 1787317667.2516665, - "seen": 1787317712.8207479, - "ast_hash": "73b6e2e7ff33db1b991b8470f29ee40f", + "mtime": 1787318406.7167659, + "seen": 1787318418.3361757, + "ast_hash": "d007bb3f3e6ad04e5e63981899f662d6", "semantic_hash": "" }, "scripts/extract_article_contents.py": { @@ -816,15 +816,15 @@ "semantic_hash": "" }, "scripts/convert_article_to_markdown.py": { - "mtime": 1787317631.1342402, - "seen": 1787317712.814934, - "ast_hash": "f2550126b7ff9de09bbbe0ae03acbbca", + "mtime": 1787318308.4358957, + "seen": 1787318418.3304515, + "ast_hash": "ae22787219cc382a19894270753d83d1", "semantic_hash": "" }, "tests/test_convert_article_to_markdown.py": { - "mtime": 1787317613.930905, - "seen": 1787317712.8166668, - "ast_hash": "fc7d1b6d08037a85cf014fa4e8c70a70", + "mtime": 1787318233.6574264, + "seen": 1787318418.3321846, + "ast_hash": "ebc2d3e6b40728ac95f2330c692b9276", "semantic_hash": "" }, "docs/prd_convert_json_markdown.md": { diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index f1fc712..c424036 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,7 +1,7 @@ # Graph Report - TextNLPClassifierApp (2026-08-21) ## Corpus Check -- 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/cache/ast/v0.9.47-s2/2e519080e4c95ce3108f65e6cb4f4d1951d6f91a987e0c405c9282cbf805cd52.json b/graphify-out/cache/ast/v0.9.47-s2/2e519080e4c95ce3108f65e6cb4f4d1951d6f91a987e0c405c9282cbf805cd52.json new file mode 100644 index 0000000..ab7b28d --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/2e519080e4c95ce3108f65e6cb4f4d1951d6f91a987e0c405c9282cbf805cd52.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": "L44", "_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": "L53", "_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": "L84", "_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": "L90", "_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": "L103", "_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": "L114", "_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": "L127", "_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": "L133", "_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": "L145", "_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": "L153", "_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": "L162", "_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": "L185", "_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": "L205", "_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": "L215", "_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": "L245", "_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": "L257", "_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": "L274", "_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": "L294", "_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": "L316", "_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": "L339", "_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": "L353", "_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": "L395", "_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": "L435", "_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": "L450", "_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": "L468", "_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": "L485", "_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": "L507", "_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": "L540", "_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": "L557", "_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": "L581", "_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": "L615", "_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": "L630", "_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": "L674", "_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": "L703", "_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": "L734", "_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": "L754", "_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_45", "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": "L45"}, {"id": "$graphify-root$_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.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L54"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_85", "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": "L85"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_91", "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": "L91"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L104"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_115", "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": "L115"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_128", "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": "L128"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_134", "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": "L134"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_146", "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": "L146"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L154"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L163"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_186", "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": "L186"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_206", "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": "L206"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_216", "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": "L216"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_246", "label": "Testa convers\u00e3o de HTML vazio retornando string vazia.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L246"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_258", "label": "Testa prioridade trafilatura.markdown sobre trafilatura.text.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L258"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_275", "label": "Testa prioridade newspaper4k.article_html sobre newspaper4k.text.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L275"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_295", "label": "Testa prioridade readability.cleaned_html sobre readability.cleaned_text.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L295"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_317", "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": "L317"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_340", "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": "L340"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_354", "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": "L354"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_396", "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": "L396"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_436", "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": "L436"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_451", "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": "L451"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L469"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_486", "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": "L486"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_508", "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": "L508"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_541", "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": "L541"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_558", "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": "L558"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_582", "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": "L582"}, {"id": "$graphify-root$_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", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L616"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_631", "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": "L631"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_675", "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": "L675"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_704", "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": "L704"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_735", "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": "L735"}, {"id": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_755", "label": "Testa a chamada direta do parse_arguments.", "file_type": "rationale", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L755"}], "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": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L18", "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": "L20", "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": "L44", "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": "L53", "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": "L61", "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": "L84", "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": "L90", "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": "L103", "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": "L114", "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": "L127", "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": "L133", "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": "L145", "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": "L153", "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": "L162", "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": "L176", "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": "L185", "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": "L190", "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": "L205", "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": "L215", "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": "L245", "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": "L257", "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": "L274", "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": "L294", "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": "L315", "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": "L316", "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": "L339", "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": "L353", "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": "L395", "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": "L435", "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": "L450", "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": "L468", "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": "L485", "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": "L507", "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": "L540", "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": "L557", "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": "L581", "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": "L615", "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": "L630", "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": "L674", "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": "L703", "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": "L734", "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": "L754", "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_45", "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": "L45", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_54", "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": "L54", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_85", "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": "L85", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_91", "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": "L91", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_104", "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": "L104", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_115", "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": "L115", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_128", "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": "L128", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_134", "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": "L134", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_146", "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": "L146", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_154", "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": "L154", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_163", "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": "L163", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_186", "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": "L186", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_206", "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": "L206", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_216", "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": "L216", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_246", "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": "L246", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_258", "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": "L258", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_275", "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": "L275", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_295", "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": "L295", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_317", "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": "L317", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_340", "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": "L340", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_354", "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": "L354", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_396", "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": "L396", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_436", "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": "L436", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_451", "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": "L451", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_469", "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": "L469", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_486", "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": "L486", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_508", "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": "L508", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_541", "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": "L541", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_558", "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": "L558", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_582", "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": "L582", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_616", "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": "L616", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_631", "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": "L631", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_675", "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": "L675", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_704", "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": "L704", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_735", "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": "L735", "weight": 1.0}, {"source": "$graphify-root$_tests_test_convert_article_to_markdown_rationale_755", "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": "L755", "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": "L47", "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": "L50", "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": "L56", "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": "L86", "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_non_string_types", "callee": "normalize_scalar", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L92", "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_list_semicolon_and_comma_split", "callee": "normalize_list", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L107", "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": "L111", "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": "L123", "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": "L130", "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": "L135", "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_date_iso_8601_variants", "callee": "normalize_date", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L147", "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": "L150", "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": "L155", "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": "L158", "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": "L164", "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_validate_url_valid_schemes", "callee": "validate_url", "is_member_call": false, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L187", "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": "L207", "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": "L231", "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": "L247", "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_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": "L264", "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": "L271", "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": "L284", "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": "L291", "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": "L304", "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": "L312", "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": "L335", "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": "L335"}, {"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": "L336", "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": "L341", "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": "L341"}, {"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": "L342", "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": "L344", "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": "L344"}, {"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": "L345", "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": "L358", "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": "L368", "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": "L376", "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": "L384", "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": "L392", "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": "L404", "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": "L412", "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": "L420", "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": "L431", "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": "L445", "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": "L458", "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": "L474", "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": "L474", "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": "L478", "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": "L482", "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": "L494", "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": "L496", "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": "L523", "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": "L525", "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": "L531", "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_golden_fixtures_byte_level_precision", "callee": "read_text", "is_member_call": true, "source_file": "tests/test_convert_article_to_markdown.py", "source_location": "L544", "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": "L547", "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": "L548"}, {"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": "L553", "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": "L564", "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": "L565"}, {"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": "L570", "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": "L571", "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": "L571", "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": "L571", "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": "L584", "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": "L584"}, {"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": "L588", "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": "L589"}, {"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": "L594", "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": "L597", "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": "L598"}, {"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": "L603", "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": "L606", "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": "L607"}, {"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": "L612", "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": "L619", "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": "L619", "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": "L621", "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": "L622"}, {"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": "L627", "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": "L627", "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": "L633", "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": "L636", "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": "L639"}, {"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": "L653", "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": "L656"}, {"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": "L667", "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": "L670", "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": "L677", "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": "L678", "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": "L687", "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": "L688"}, {"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": "L694", "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": "L695", "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": "L705", "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": "L705"}, {"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": "L706", "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": "L707", "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": "L711", "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": "L711", "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": "L716", "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": "L716", "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": "L719", "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": "L720"}, {"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": "L725", "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": "L727", "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": "L728", "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": "L731", "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": "L737", "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": "L738", "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": "L748", "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": "L750", "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": "L751", "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": "L756", "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": "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}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/54b4604ab8242ffb44f833a3ea76ad90df6ca4a005fcd0ff9fef7c51690c4268.json b/graphify-out/cache/ast/v0.9.47-s2/54b4604ab8242ffb44f833a3ea76ad90df6ca4a005fcd0ff9fef7c51690c4268.json new file mode 100644 index 0000000..2c7ea67 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/54b4604ab8242ffb44f833a3ea76ad90df6ca4a005fcd0ff9fef7c51690c4268.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": "L510"}, {"id": "$graphify-root$_readme_licen\u00e7a", "label": "\ud83d\udcc4 Licen\u00e7a", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L539"}], "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": "L510", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_licen\u00e7a", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L539", "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/7a7b025a66388fe3a6b6102bfeb98c3d3e872110694764f069e3ea42096f536d.json b/graphify-out/cache/ast/v0.9.47-s2/7a7b025a66388fe3a6b6102bfeb98c3d3e872110694764f069e3ea42096f536d.json new file mode 100644 index 0000000..75d632f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/7a7b025a66388fe3a6b6102bfeb98c3d3e872110694764f069e3ea42096f536d.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/stat-index.json b/graphify-out/cache/stat-index.json index 21c62b3..d0391a3 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":27600,"mtime_ns":1787318406716765900,"indexed_at_ns":1787318414451286000,"word_count":3285,"hashes":{"readme.md":"e1a9fb842244feb21c26788183db26c1746051cac95d8594ec056b13ecd3ebeb"}},"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":21902,"mtime_ns":1787318308435895700,"indexed_at_ns":1787318414340653000,"word_count":2026,"hashes":{"scripts/convert_article_to_markdown.py":"36cde38c040c6fbfb15792ad8479c502c6b89b63070bf17120f39dafd6b27475"}},"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":28638,"mtime_ns":1787318233657426400,"indexed_at_ns":1787318414398829800,"word_count":2388,"hashes":{"tests/test_convert_article_to_markdown.py":"93b93b8fe832e887faa7acf1dcd7f8121e7492213ffb20398af13ae520acb58d"}}} \ 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":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 diff --git a/graphify-out/graph.html b/graphify-out/graph.html index 20a3502..69c1e5c 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -66,9 +66,9 @@
1527 nodes · 1899 edges · 165 communities