feat(runtime): implement single-article consolidation runtime and modularize codebase
This commit is contained in:
@@ -0,0 +1,335 @@
|
||||
{
|
||||
"0": "Task Planning",
|
||||
"1": "Convergence Workflow",
|
||||
"2": "SpecKit Utilities",
|
||||
"3": "Graphify Commands",
|
||||
"4": "speckit-analyze/SKILL.md",
|
||||
"5": "Tasks: Multilingual NLP Entity Inherence Classifier (POC)",
|
||||
"6": "Feature Specification Template",
|
||||
"7": "Graphify Rules",
|
||||
"8": "Implementation Planning",
|
||||
"9": "Feature Specification",
|
||||
"10": "Task Generation",
|
||||
"11": "Project Constitution",
|
||||
"12": "Constitution Template",
|
||||
"13": "Graphify Exports",
|
||||
"14": "Ponytail Configuration",
|
||||
"15": "Implementation Planning Template",
|
||||
"16": "Ponytail Help",
|
||||
"17": "Checklist Generation",
|
||||
"18": "Clarification Workflow",
|
||||
"19": "Implementation Workflow",
|
||||
"20": "Graph Query",
|
||||
"21": "Constitution Workflow",
|
||||
"22": "Feature Branch Creation",
|
||||
"23": "Ponytail Audit",
|
||||
"24": "Ponytail Metrics",
|
||||
"25": "Ponytail Review",
|
||||
"26": "Task Issue Conversion",
|
||||
"27": "Checklist Template",
|
||||
"28": "Graphify Watch Mode",
|
||||
"29": "Graphify Hooks",
|
||||
"30": "Graphify Updates",
|
||||
"31": "Ponytail Debt",
|
||||
"32": "Repository Merge",
|
||||
"33": "Media Transcription",
|
||||
"34": "Extraction Specification",
|
||||
"35": "Prerequisite Checks",
|
||||
"36": "Template Resolution",
|
||||
"37": "Plan Setup",
|
||||
"38": "Task Setup",
|
||||
"39": "Graphify Workflows",
|
||||
"40": "main",
|
||||
"41": "1. Technical Decisions & Tradeoffs",
|
||||
"42": "1. Input Schemas",
|
||||
"43": "2. Basic CLI Usage Examples",
|
||||
"44": "2. Standard Streams & Exit Codes",
|
||||
"45": "ClassificationResult",
|
||||
"46": "ECPSnapshot",
|
||||
"47": "LLMFallbackAdapter",
|
||||
"48": "classifier.py",
|
||||
"49": "content_northvolt_de.md",
|
||||
"50": "content_presal_pt.md",
|
||||
"51": "content_tangential_es.md",
|
||||
"52": "load_schema",
|
||||
"53": "src/__init__.py",
|
||||
"54": "de/contextual.md",
|
||||
"55": "de/direct.md",
|
||||
"56": "de/not_related.md",
|
||||
"57": "de/tangential.md",
|
||||
"58": "en/contextual.md",
|
||||
"59": "en/direct.md",
|
||||
"60": "en/not_related.md",
|
||||
"61": "en/tangential.md",
|
||||
"62": "es/contextual.md",
|
||||
"63": "es/direct.md",
|
||||
"64": "es/not_related.md",
|
||||
"65": "es/tangential.md",
|
||||
"66": "fr/contextual.md",
|
||||
"67": "fr/direct.md",
|
||||
"68": "fr/not_related.md",
|
||||
"69": "fr/tangential.md",
|
||||
"70": "it/contextual.md",
|
||||
"71": "it/direct.md",
|
||||
"72": "it/not_related.md",
|
||||
"73": "it/tangential.md",
|
||||
"74": "pt/contextual.md",
|
||||
"75": "pt/direct.md",
|
||||
"76": "pt/not_related.md",
|
||||
"77": "pt/tangential.md",
|
||||
"78": "tests/__init__.py",
|
||||
"79": "text-nlp-classifier",
|
||||
"80": "test_extract_article_contents.py",
|
||||
"81": "Extrator de Notícias do Google News — Guia Completo de Funcionamento",
|
||||
"82": "extract_google_news.py",
|
||||
"83": "ExtractionResult",
|
||||
"84": "test_extract_google_news.py",
|
||||
"85": "Implementation Tasks: Google News Headlines Extractor",
|
||||
"86": "Feature Specification: Google News Headlines Extractor",
|
||||
"87": "2. Cenários Práticos de Uso",
|
||||
"88": "Implementation Plan: Google News Headlines Extractor",
|
||||
"89": "scripts/__init__.py",
|
||||
"90": "SearchQuery",
|
||||
"91": "1. Technical Decisions & Tradeoffs",
|
||||
"92": "General Readiness Checklist: Google News Headlines Extractor",
|
||||
"93": "1. Entidades de Domínio & DTOs",
|
||||
"94": "Specification Quality Checklist: Google News Headlines Extractor",
|
||||
"95": "CLI Contract: Google News Headlines Extractor",
|
||||
"96": "readiness.md",
|
||||
"97": "5. 📝 Conversor de Artigo JSON para Markdown",
|
||||
"98": "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor",
|
||||
"99": "ModelGatewayClient",
|
||||
"100": "LangfuseRuntimeTracer",
|
||||
"101": "main",
|
||||
"102": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)",
|
||||
"103": "4. Requisitos Funcionais (FR)",
|
||||
"104": "Tasks: Article Content Multi-Engine Extractor",
|
||||
"105": "Tasks: Convert Article JSON to Markdown",
|
||||
"106": "Implementation Plan: Article Content Multi-Engine Extractor",
|
||||
"107": "2. Cenários de Validação",
|
||||
"108": "1. Technical Decisions & Tradeoffs",
|
||||
"109": "Implementation Plan: Multilingual NLP Entity Inherence Classifier (POC)",
|
||||
"110": "POC Readiness & Requirements Quality Checklist: Multilingual NLP Entity Inherence Classifier",
|
||||
"111": "Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier",
|
||||
"112": "CLI Contract: Article Content Multi-Engine Extractor",
|
||||
"113": "001-multilingual-entity-classifier/spec.md",
|
||||
"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": "1. Text Normalization Pipeline",
|
||||
"118": "Tasks: Deterministic Article Content Selection",
|
||||
"119": "select_article_extractor",
|
||||
"120": "process_batch",
|
||||
"121": "detect_language",
|
||||
"122": "test_select_article_extractor.py",
|
||||
"123": "Feature Specification: Deterministic Content Selection",
|
||||
"124": "2. Entity Descriptions & Fields",
|
||||
"125": "Implementation Plan: Deterministic Article Content Selection",
|
||||
"126": "Deterministic Content Selection Checklist: End-to-End Requirements Quality",
|
||||
"127": "Quickstart: Deterministic Article Content Selection",
|
||||
"128": "Specification Quality Checklist: Deterministic Content Selection",
|
||||
"129": "CLI Interface Contract: Deterministic Article Content Selection",
|
||||
"130": "004-deterministic-content-selection/spec.md",
|
||||
"131": "convert_article_to_markdown.py",
|
||||
"132": "8. Regras funcionais",
|
||||
"133": "12. Critérios de aceite",
|
||||
"134": "PRD — Conversão de artigo JSON para Markdown",
|
||||
"135": "resolve_article_body",
|
||||
"136": "Implementation Plan: Convert Article JSON to Markdown",
|
||||
"137": "2. Technical Decisions & Research Findings",
|
||||
"138": "Feature Specification: Convert Article JSON to Markdown",
|
||||
"139": "Markdown Conversion Checklist: End-to-End Requirements Quality",
|
||||
"140": "convert_article",
|
||||
"141": "005-convert-json-markdown/plan.md",
|
||||
"142": "Quickstart: Convert Article JSON to Markdown",
|
||||
"143": "1. Domain Entities & Schemas",
|
||||
"144": "11. Requisitos não funcionais",
|
||||
"145": "parse_arguments",
|
||||
"146": "Specification Quality Checklist: Convert Article JSON to Markdown",
|
||||
"147": "CLI Contract: `convert_article_to_markdown.py`",
|
||||
"148": "9. Interface CLI",
|
||||
"149": "test_convert_article_to_markdown.py",
|
||||
"150": "13. Estratégia de testes",
|
||||
"151": "6. Contrato de entrada",
|
||||
"152": "test_models.py",
|
||||
"153": "convert_html_to_markdown",
|
||||
"154": "properties",
|
||||
"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": "consolidate.py",
|
||||
"160": "config.py",
|
||||
"161": "adapter.py",
|
||||
"162": "validate_and_extract_enrichment",
|
||||
"163": "candidate/parser.py",
|
||||
"164": "hygiene/harness.py",
|
||||
"165": "SanitizedJsonLogger",
|
||||
"166": "remove_duplicate_initial_h1",
|
||||
"167": "CandidateObject",
|
||||
"168": "enum",
|
||||
"169": "Plano de testes e evals — Runtime de consolidação de artigos",
|
||||
"170": "Especificação de prompt, contexto e harness — Runtime",
|
||||
"171": "ExecutionStateMachine",
|
||||
"172": "Implementation Tasks: Article Consolidation and Hygiene Runtime",
|
||||
"173": "🧪 Documentação da Suíte de Testes Automatizados",
|
||||
"174": "properties",
|
||||
"175": "repair-operations.schema.json",
|
||||
"176": "Functional Requirements",
|
||||
"177": "test_equivalence_mapping.py",
|
||||
"178": "enrichment-response.schema.json",
|
||||
"179": "create_manifest_dict",
|
||||
"180": "Catálogo de métricas e KPIs — Runtime de consolidação de artigos",
|
||||
"181": "article_content_hygiene",
|
||||
"182": "SQLiteStore",
|
||||
"183": "Documento de Arquitetura — Runtime de consolidação de artigos",
|
||||
"184": "null",
|
||||
"185": "Runbook de produção — Runtime de consolidação de artigos",
|
||||
"186": "article_content_hygiene",
|
||||
"187": "properties",
|
||||
"188": "properties",
|
||||
"189": "PRD — Runtime de consolidação e higienização de artigos",
|
||||
"190": "required",
|
||||
"191": "properties",
|
||||
"192": "type",
|
||||
"193": "properties",
|
||||
"194": "sqlite_store.py",
|
||||
"195": "check_zero_regex.py",
|
||||
"196": "properties",
|
||||
"197": "runtime-config.schema.json",
|
||||
"198": "properties",
|
||||
"199": "object",
|
||||
"200": "candidates-payload.schema.json",
|
||||
"201": "limits",
|
||||
"202": "langfuse",
|
||||
"203": "string",
|
||||
"204": "type",
|
||||
"205": "CLI Interface Contract: Article Consolidation and Hygiene Runtime",
|
||||
"206": "2. Entity Definitions",
|
||||
"207": "3. Concrete Architectural & Technical Decisions",
|
||||
"208": "Requirements Readiness Checklist: Article Consolidation and Hygiene Runtime",
|
||||
"209": "object",
|
||||
"210": "null",
|
||||
"211": "properties",
|
||||
"212": "calculate_execution_fingerprint",
|
||||
"213": "model_versions",
|
||||
"214": "3. Operational Execution Scenarios",
|
||||
"215": "type",
|
||||
"216": "test_cli_subprocess_pipeline.py",
|
||||
"217": "run_smoke_test",
|
||||
"218": "properties",
|
||||
"219": "paths",
|
||||
"220": "properties",
|
||||
"221": "properties",
|
||||
"222": "properties",
|
||||
"223": "required",
|
||||
"224": "required",
|
||||
"225": "kept_block_ids",
|
||||
"226": "parametrize",
|
||||
"227": "4. 🎯 Seletor Determinístico de Conteúdo de Artigos",
|
||||
"228": "1. Operational Commands",
|
||||
"229": "sqlite",
|
||||
"230": "required",
|
||||
"231": "pricing",
|
||||
"232": "article-input.schema.json",
|
||||
"233": "properties",
|
||||
"234": "enum",
|
||||
"235": "required",
|
||||
"236": "Implementation Plan: Article Consolidation and Hygiene Runtime",
|
||||
"237": "verify_all_11_invariants",
|
||||
"238": "enum",
|
||||
"239": "required",
|
||||
"240": "manifest-output.schema.json",
|
||||
"241": "Prompts Versioned Contract: Article Consolidation and Hygiene Runtime",
|
||||
"242": "6. 🚀 Runtime de Consolidação e Higienização de Artigos (006-article-consolidation-runtime)",
|
||||
"243": "13. Parsing estrutural sem regex",
|
||||
"244": "metadata_candidates",
|
||||
"245": "enum",
|
||||
"246": "required",
|
||||
"247": "enum",
|
||||
"248": "ecp-snapshot.schema.json",
|
||||
"249": "hygiene-response.schema.json",
|
||||
"250": "🧠 TextNLPClassifierApp",
|
||||
"251": "ADR-003 — Usar orquestração explícita em Python, sem LangChain ou LangGraph",
|
||||
"252": "required",
|
||||
"253": "Specification Quality Checklist: Article Consolidation and Hygiene Runtime",
|
||||
"254": "enum",
|
||||
"255": "enum",
|
||||
"256": "1. 🧠 Classificador de Conteúdo e Inerência (NLP / LLM / ECP)",
|
||||
"257": "10. Contrato de saída",
|
||||
"258": "14. Higienização por LLM",
|
||||
"259": "4. Regras mandatórias",
|
||||
"260": "8. Contrato de entrada do artigo",
|
||||
"261": "18. Integração ECP",
|
||||
"262": "7. Orquestração",
|
||||
"263": "ADR-001 — Separar runtime e self-healing",
|
||||
"264": "ADR-002 — Iniciar o runtime após a seleção do extrator",
|
||||
"265": "ADR-004 — Gateway agnóstico com apenas modelos baratos no runtime",
|
||||
"266": "ADR-005 — Proibir regex e palavras-chave manuais em decisões textuais",
|
||||
"267": "ADR-006 — LLM seleciona evidências e propõe reparos, não regenera o artigo",
|
||||
"268": "ADR-007 — Tornar o ECP obrigatório antes de toda saída editorial",
|
||||
"269": "ADR-008 — Langfuse no runtime e Promptfoo no CI",
|
||||
"270": "ADR-009 — Persistir estado em SQLite e saídas no filesystem",
|
||||
"271": "ADR-010 — Produzir resultado estruturado sempre e Markdown condicionalmente",
|
||||
"272": "ADR-011 — Definir SLOs de custo e latência a partir de staging",
|
||||
"273": "7. Checklist de release",
|
||||
"274": "eval_runner.py",
|
||||
"275": "ecp-profile.schema.json",
|
||||
"276": "prompt_versions",
|
||||
"277": "12. Preparação determinística",
|
||||
"278": "15. Pequenos reparos textuais",
|
||||
"279": "9. Contrato do ECP",
|
||||
"280": "15. Higienização extrativa",
|
||||
"281": "16. Pequenos reparos",
|
||||
"282": "20. Model Gateway",
|
||||
"283": "23. Observabilidade",
|
||||
"284": "3. Limites do sistema",
|
||||
"285": "9. Política de dependências",
|
||||
"286": "12. Monitoramento",
|
||||
"287": "14. Reprocessamento",
|
||||
"288": "16. Falha do provider primário",
|
||||
"289": "21. Falha do SQLite",
|
||||
"290": "6. Configuração obrigatória",
|
||||
"291": "build_release_metadata.py",
|
||||
"292": "removal_reasons",
|
||||
"293": "kept_image_ids",
|
||||
"294": "validate_certified_cheap_model",
|
||||
"295": "test_live_e2e_real_api.py",
|
||||
"296": "test_prompts_contract.py",
|
||||
"297": "FaultyMockAdapter",
|
||||
"298": "Release Quality Summary Report",
|
||||
"299": "Comandos e Utilitários CLI",
|
||||
"300": "13. Candidatos e proveniência",
|
||||
"301": "16. Imagens e links",
|
||||
"302": "17. Gate ECP",
|
||||
"303": "18. Enriquecimento",
|
||||
"304": "5. Escopo",
|
||||
"305": "14. Modelo de candidatos",
|
||||
"306": "22. Renderer e arquivos",
|
||||
"307": "Architecture Decision Records — Runtime de consolidação de artigos",
|
||||
"308": "15. Falha de validação de entrada",
|
||||
"309": "17. Falha semântica ou de grounding",
|
||||
"310": "18. Falha do ECP",
|
||||
"311": "20. Falha do Langfuse",
|
||||
"312": "22. Falha de filesystem ou disco",
|
||||
"313": "26. Rollback manual",
|
||||
"314": "ci_check.py",
|
||||
"315": "prepare_reference_20.py",
|
||||
"316": "test_contract_parity.py",
|
||||
"317": "test_zero_regex_enforcement.py",
|
||||
"318": "sample_rss_xml",
|
||||
"319": "runtime/__init__.py",
|
||||
"320": "adapters/__init__.py",
|
||||
"321": "tools/__init__.py",
|
||||
"322": "test_normalize_list_author_url_filtering",
|
||||
"323": "test_normalize_list_deduplication_preserves_case_and_order",
|
||||
"324": "test_normalize_date_iso_8601_variants",
|
||||
"325": "test_normalize_date_invalid_and_placeholders",
|
||||
"326": "test_metadata_priority_original_url_all_fallbacks",
|
||||
"327": "test_normalize_scalar_whitespace_collapsing",
|
||||
"328": "test_normalize_scalar_non_string_types",
|
||||
"329": "2. 📰 Extrator de Manchetes do Google News",
|
||||
"330": "test_concurrency_claims.py",
|
||||
"331": "⚙️ Instalação e Setup",
|
||||
"332": "3. 📄 Extrator e Parser Multimotor de Artigos"
|
||||
}
|
||||
Reference in New Issue
Block a user