Files
TextNLPClassifierApp/graphify-out/cache/ast/v0.9.47-s2/3122914461e8d6017e63900c66fa8935135b5efcc9fca8d64e762ee109602901.json
T
andreferraro 6a45368cb0 feat(extractor): implement multi-engine article content extractor
- Added scripts/extract_article_contents.py for batch scraping with stealth Foxcape and triple extraction (Trafilatura, Newspaper4k, Readability)
- Created unit, integration, and E2E test suite in tests/test_extract_article_contents.py (90/90 passing)
- Updated specs/003-article-content-extractor and README.md with usage documentation and CLI contracts
- Passed ruff linting/formatting and mypy type checking cleanly
2026-08-20 19:22:20 -03:00

1 line
13 KiB
JSON

{"nodes": [{"id": "$graphify-root$_specs_003_article_content_extractor_tasks_md", "label": "tasks.md", "file_type": "document", "node_kind": "page", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "label": "Tasks: Article Content Multi-Engine Extractor", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_1_setup_dependencies", "label": "Phase 1: Setup & Dependencies", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L10"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_2_foundational_estruturas_e_modelos_base", "label": "Phase 2: Foundational (Estruturas e Modelos Base)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L19"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_3_user_story_1_extra\u00e7\u00e3o_completa_e_consolidada_de_artigos_em_lote_priority_p1_mvp", "label": "Phase 3: User Story 1 - Extra\u00e7\u00e3o Completa e Consolidada de Artigos em Lote (Priority: P1) \ud83c\udf1f MVP", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L31"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_testes_da_user_story_1_tdd", "label": "Testes da User Story 1 (TDD)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L37"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_implementa\u00e7\u00e3o_da_user_story_1", "label": "Implementa\u00e7\u00e3o da User Story 1", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L43"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_4_user_story_2_resili\u00eancia_e_isolamento_de_falhas_por_artigo_e_motor_priority_p2", "label": "Phase 4: User Story 2 - Resili\u00eancia e Isolamento de Falhas por Artigo e Motor (Priority: P2)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L54"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_testes_da_user_story_2_tdd", "label": "Testes da User Story 2 (TDD)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L60"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_implementa\u00e7\u00e3o_da_user_story_2", "label": "Implementa\u00e7\u00e3o da User Story 2", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L64"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_5_user_story_3_controle_de_execu\u00e7\u00e3o_via_cli_e_feedback_visual_priority_p3", "label": "Phase 5: User Story 3 - Controle de Execu\u00e7\u00e3o via CLI e Feedback Visual (Priority: P3)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L72"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_testes_da_user_story_3_tdd", "label": "Testes da User Story 3 (TDD)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L78"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_implementa\u00e7\u00e3o_da_user_story_3", "label": "Implementa\u00e7\u00e3o da User Story 3", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L82"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_6_polish_valida\u00e7\u00e3o_final", "label": "Phase 6: Polish & Valida\u00e7\u00e3o Final", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L91"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_dependencies_execution_order", "label": "Dependencies & Execution Order", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L102"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_oportunidades_de_execu\u00e7\u00e3o_paralela", "label": "Oportunidades de Execu\u00e7\u00e3o Paralela", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L113"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_implementation_strategy", "label": "Implementation Strategy", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L120"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_mvp_first_user_story_1_only", "label": "MVP First (User Story 1 Only)", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L122"}, {"id": "$graphify-root$_specs_003_article_content_extractor_tasks_entrega_incremental", "label": "Entrega Incremental", "file_type": "document", "node_kind": "heading", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L127"}], "edges": [{"source": "$graphify-root$_specs_003_article_content_extractor_tasks_md", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_1_setup_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_2_foundational_estruturas_e_modelos_base", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_3_user_story_1_extra\u00e7\u00e3o_completa_e_consolidada_de_artigos_em_lote_priority_p1_mvp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_3_user_story_1_extra\u00e7\u00e3o_completa_e_consolidada_de_artigos_em_lote_priority_p1_mvp", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_testes_da_user_story_1_tdd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_3_user_story_1_extra\u00e7\u00e3o_completa_e_consolidada_de_artigos_em_lote_priority_p1_mvp", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_implementa\u00e7\u00e3o_da_user_story_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L43", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_4_user_story_2_resili\u00eancia_e_isolamento_de_falhas_por_artigo_e_motor_priority_p2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L54", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_4_user_story_2_resili\u00eancia_e_isolamento_de_falhas_por_artigo_e_motor_priority_p2", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_testes_da_user_story_2_tdd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L60", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_4_user_story_2_resili\u00eancia_e_isolamento_de_falhas_por_artigo_e_motor_priority_p2", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_implementa\u00e7\u00e3o_da_user_story_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L64", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_5_user_story_3_controle_de_execu\u00e7\u00e3o_via_cli_e_feedback_visual_priority_p3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L72", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_5_user_story_3_controle_de_execu\u00e7\u00e3o_via_cli_e_feedback_visual_priority_p3", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_testes_da_user_story_3_tdd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_5_user_story_3_controle_de_execu\u00e7\u00e3o_via_cli_e_feedback_visual_priority_p3", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_implementa\u00e7\u00e3o_da_user_story_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L82", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_phase_6_polish_valida\u00e7\u00e3o_final", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_dependencies_execution_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L102", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_dependencies_execution_order", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_oportunidades_de_execu\u00e7\u00e3o_paralela", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L113", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_tasks_article_content_multi_engine_extractor", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_implementation_strategy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L120", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_implementation_strategy", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_mvp_first_user_story_1_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L122", "weight": 1.0}, {"source": "$graphify-root$_specs_003_article_content_extractor_tasks_implementation_strategy", "target": "$graphify-root$_specs_003_article_content_extractor_tasks_entrega_incremental", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L127", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}