From ff7a50e0eb45060aa6435b60bf8c05755250f0d8 Mon Sep 17 00:00:00 2001 From: Andre Ferraro Date: Thu, 20 Aug 2026 22:09:43 -0300 Subject: [PATCH] feat: add deterministic content extractor selector engine with F1 consensus --- README.md | 190 +- docs/prd_deterministic_content_selection.md | 279 + graphify-out/.graphify_labels.json | 28 +- graphify-out/.graphify_labels.json.sig | 2 +- graphify-out/2026-08-20/.graphify_labels.json | 26 +- graphify-out/2026-08-20/GRAPH_REPORT.md | 165 +- graphify-out/2026-08-20/graph.json | 10354 +++++++++++++--- graphify-out/2026-08-20/manifest.json | 222 +- graphify-out/GRAPH_REPORT.md | 169 +- ...ae153bc0eedd913432e3ca833022d394ff427.json | 1 + ...567ba761ec700ff47e424975218bab2713ceb.json | 1 + ...9d66d1f48f287082dcc75409c9b175e7a30dd.json | 1 + ...8ac515e3f012fac265e43a7fb679eb4c01f1f.json | 1 + ...cc0c7a35c490165a78cd21d021263d43add3b.json | 1 + ...432c1b7669343ecbf3b8336a941e5c10931d5.json | 1 + ...61cc3800dfedf827289589380b700a4c40887.json | 1 + ...e8c9ea36bfd0386bad2bfd0e451087d5f7dec.json | 1 + ...4d16e0bb29990fac51f57f76b42702789de8a.json | 1 + ...de98560eb6711c9cd255ee65989007b643d1c.json | 1 + ...387dfd33f79101f157b6cbccbcfabc4ec8775.json | 1 + ...11d61e8efbd1f34b1f608feed7166f6c241f4.json | 1 + ...d4b4012b5ad82b2ed1738261ec6cb15d9f303.json | 1 + ...0453bbbe100152977f488f39161c537903f56.json | 1 + ...441aff79338c4358b881c1bc8f7844b4f8241.json | 1 + ...9833331de5c49ee83bca2cf1f542eb893ae0b.json | 1 + ...ffa150d39296c6712f97d4095ad6075352e15.json | 1 + ...18f460dff21cbfc81770bc5f6f136890ecfd5.json | 1 + ...76be591c320e8c42c9ef9a1098bb764097da6.json | 1 + ...53b27b760b70e94903f463082267669296d27.json | 1 + ...ee701d6fadfa33415d944e8987caf56a8e5c2.json | 1 + graphify-out/cache/stat-index.json | 2 +- graphify-out/graph.html | 8 +- graphify-out/graph.json | 7638 +++++++++++- graphify-out/manifest.json | 84 +- scripts/select_article_extractor.py | 603 + .../checklists/deterministic-selection.md | 54 + .../checklists/requirements.md | 36 + .../contracts/cli-contract.md | 54 + .../contracts/json-schema.md | 80 + .../data-model.md | 137 + .../plan.md | 93 + .../quickstart.md | 66 + .../research.md | 107 + .../spec.md | 135 + .../tasks.md | 148 + tests/test_select_article_extractor.py | 615 + 46 files changed, 18503 insertions(+), 2813 deletions(-) create mode 100644 docs/prd_deterministic_content_selection.md create mode 100644 graphify-out/cache/ast/v0.9.47-s2/11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/16e0382c8b0acaca620bada81dc567ba761ec700ff47e424975218bab2713ceb.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/29b062645f2d57b34075195586c9d66d1f48f287082dcc75409c9b175e7a30dd.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/33763f18c72242a3b8ddc296b18cc0c7a35c490165a78cd21d021263d43add3b.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/391a52f77897cbbe1a555fcf94d432c1b7669343ecbf3b8336a941e5c10931d5.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/5070b45b71c7501f2eeb041c4c5e8c9ea36bfd0386bad2bfd0e451087d5f7dec.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/589a226b68c671e8d3a7fd64ec7de98560eb6711c9cd255ee65989007b643d1c.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/6ad8bcc784b3279a1e471fd3402387dfd33f79101f157b6cbccbcfabc4ec8775.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/bc7efac197e04013ed37c20c66affa150d39296c6712f97d4095ad6075352e15.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/cb68f74508ae41345d6ecaaf83418f460dff21cbfc81770bc5f6f136890ecfd5.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/dc4ac38cf36367e4e1a574761e853b27b760b70e94903f463082267669296d27.json create mode 100644 graphify-out/cache/ast/v0.9.47-s2/fa80f48a34fa5ef51315ad4644eee701d6fadfa33415d944e8987caf56a8e5c2.json create mode 100644 scripts/select_article_extractor.py create mode 100644 specs/004-deterministic-content-selection/checklists/deterministic-selection.md create mode 100644 specs/004-deterministic-content-selection/checklists/requirements.md create mode 100644 specs/004-deterministic-content-selection/contracts/cli-contract.md create mode 100644 specs/004-deterministic-content-selection/contracts/json-schema.md create mode 100644 specs/004-deterministic-content-selection/data-model.md create mode 100644 specs/004-deterministic-content-selection/plan.md create mode 100644 specs/004-deterministic-content-selection/quickstart.md create mode 100644 specs/004-deterministic-content-selection/research.md create mode 100644 specs/004-deterministic-content-selection/spec.md create mode 100644 specs/004-deterministic-content-selection/tasks.md create mode 100644 tests/test_select_article_extractor.py diff --git a/README.md b/README.md index 045b9e3..9b722e4 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Type Checked](https://img.shields.io/badge/Type%20Check-Mypy-blue.svg)](https://mypy-lang.org/) [![Tests](https://img.shields.io/badge/Tests-Pytest%20(100%25%20Passing)-brightgreen.svg)](tests/) -> Plataforma modular em Python para **Classificação Multilíngue de Inerência de Entidades (NLP/LLM/ECP)** e **Extração Inteligente de Manchetes de Notícias com Evasão Anti-Bot (Google News RSS & Foxcape)**. +> Plataforma modular em Python para **Classificação Multilíngue de Inerência de Entidades (NLP/LLM/ECP)**, **Extração Inteligente de Manchetes (Google News RSS & Foxcape)**, **Extração Multimotor de Artigos (Trafilatura, Newspaper4k, Readability)** e **Seleção Determinística de Conteúdo por Consenso Textual ($F_1$ Shingles)**. --- @@ -29,6 +29,12 @@ - [Visão Geral e Tríplice Extração](#visão-geral-e-tríplice-extração) - [Argumentos e Flags CLI](#argumentos-e-flags-cli) - [Exemplos de Uso](#exemplos-de-uso) +- [4. Seletor Determinístico de Conteúdo de Artigos](#4--seletor-determinístico-de-conteúdo-de-artigos) + - [Visão Geral e Algoritmo de Consenso ($F_1$)](#visão-geral-e-algoritmo-de-consenso-f_1) + - [Pipeline de Normalização e Shingles](#pipeline-de-normalização-e-shingles) + - [Critérios de Desempate Técnico e Resiliência](#critérios-de-desempate-técnico-e-resiliência) + - [Argumentos e Flags CLI](#argumentos-e-flags-cli-1) + - [Exemplos Práticos de Uso](#exemplos-práticos-de-uso-1) - [Estrutura do Projeto](#-estrutura-do-projeto) - [Testes e Qualidade de Código](#-testes-e-qualidade-de-código) - [Licença](#-licença) @@ -37,11 +43,12 @@ ## 🌟 Visão Geral -O **TextNLPClassifierApp** reúne ferramentas de engenharia de dados e processamento de linguagem natural: +O **TextNLPClassifierApp** reúne um ecossistema completo de ferramentas de engenharia de dados e processamento de linguagem natural: -1. **`classify.py`**: Motor de classificação semântica e contextual que determina o grau de aderência e inerência de um documento Markdown em relação a uma entidade alvo definida em um **ECP Snapshot (Entity Context Profile)**. -2. **`scripts/extract_google_news.py`**: Extrator de notícias por palavra-chave, idioma e região geográfica que utiliza o motor stealth **Foxcape** (em modo headless), decodificação paralela de URLs para os links reais dos portais de notícias e feedback em tempo real. -3. **`scripts/extract_article_contents.py`**: Extrator e parser de artigos multimotor com navegação stealth Foxcape headless e extração combinada via **Trafilatura**, **Newspaper4k** (NLP) e **Readability**, consolidando texto higienizado, autores, datas, imagens e resumos em JSON estruturado. +1. **`classify.py`**: Motor de classificação semântica e contextual que determina o grau de aderência e inerência de um documento Markdown em relação a uma entidade alvo descrita em um **ECP Snapshot (Entity Context Profile)**. +2. **`scripts/extract_google_news.py`**: Extrator de notícias por palavra-chave, idioma e região geográfica utilizando navegação stealth **Foxcape** (headless), decodificação paralela de URLs para links reais e feedback em tempo real. +3. **`scripts/extract_article_contents.py`**: Extrator e parser de artigos multimotor com navegação stealth Foxcape headless e extração simultânea via **Trafilatura**, **Newspaper4k** (NLP) e **Readability**, consolidando texto higienizado, autores, datas, imagens e resumos. +4. **`scripts/select_article_extractor.py`**: Motor determinístico de seleção de extratores que avalia as saídas dos três motores, aplica normalização em memória, calcula métricas de consenso de shingles (5-tokens) com pontuação $F_1$, desempata tecnicamente ($\le 0.03$) favorecendo menor concisão/ruído e enriquece os dados de forma não-destrutiva e atômica. --- @@ -157,7 +164,7 @@ python classify.py --ecp ecp.json --content artigo.md --enable-embeddings --enab ### O que é e Como Funciona -O script [`scripts/extract_google_news.py`](file:///c:/Users/aferr/Projects/AFTech/DunaMedia/TextNLPClassifierApp/scripts/extract_google_news.py) é um extrator CLI autônomo projetado para consultar o feed RSS do Google News com máxima velocidade, resiliência e integridade de dados. +O script [`scripts/extract_google_news.py`](scripts/extract_google_news.py) é um extrator CLI autônomo projetado para consultar o feed RSS do Google News com máxima velocidade, resiliência e integridade de dados. ### Diferenciais Técnicos @@ -182,42 +189,24 @@ O script [`scripts/extract_google_news.py`](file:///c:/Users/aferr/Projects/AFTe ### Exemplos Práticos de Uso -#### 1. River Plate (Argentina / Espanhol / 2 Páginas / Salvar em Arquivo) ```bash +# River Plate (Argentina / Espanhol / 2 Páginas / Salvar em Arquivo) python scripts/extract_google_news.py -q "River Plate" -l es --locale AR -p 2 -o out/river_plate.json -``` -* **Saída no Terminal**: -```text -[INFO] 🔍 Consultando Google News: 'River Plate' (idioma: es, locale: AR, max_pages: 2)... -[INFO] 📥 Feed RSS recebido (162117 bytes). -[INFO] 📰 20 artigos extraídos do feed XML. -[INFO] 🔗 Decodificando 20 URLs do Google News para os portais reais... -[INFO] ✅ 20/20 URLs resolvidas com sucesso para os domínios de origem. -[INFO] 💾 Arquivo salvo com sucesso: 'out/river_plate.json' (20 notícias). -``` -#### 2. Cruzeiro (Brasil / Português / Formatado no Terminal) -```bash +# Cruzeiro (Brasil / Português / Formatado no Terminal) python scripts/extract_google_news.py --query "Cruzeiro" --lang pt --locale BR --pretty -``` -#### 3. Fórmula 1 (Inglaterra / Inglês) -```bash -python scripts/extract_google_news.py --query "Formula 1" --lang en --locale GB --pretty -``` - -#### 4. Filtragem com `jq` em Modo Silencioso -```bash +# Filtragem com jq em modo silencioso python scripts/extract_google_news.py -q "inteligência artificial" -s | jq '.items[].url' ``` --- -## 3. 📰 Extrator e Parser Multimotor de Artigos +## 3. 📄 Extrator e Parser Multimotor de Artigos ### Visão Geral e Tríplice Extração -O script `scripts/extract_article_contents.py` lê os arquivos JSON gerados pelo extrator do Google News (ou qualquer lista contendo `items` com `url`), acessa cada página via **Foxcape** em modo stealth headless (reutilizando uma única sessão de navegador ativa com espera do evento `domcontentloaded`), e executa simultaneamente 3 motores especializados de extração: +O script [`scripts/extract_article_contents.py`](scripts/extract_article_contents.py) lê os arquivos JSON gerados pelo extrator do Google News (ou qualquer lista contendo `items` com `url`), acessa cada página via **Foxcape** em modo stealth headless (reutilizando uma única sessão de navegador ativa com espera do evento `domcontentloaded`), e executa simultaneamente 3 motores especializados de extração: 1. **Trafilatura**: Texto principal higienizado, autores, data de publicação, categorias, tags, URL canônica e payload estruturado nativo. 2. **Newspaper4k**: Artigo completo, autores, imagens (`top_image` e galeria), resumo automático e palavras-chave (*keywords*) extraídas por NLP nativo. @@ -238,20 +227,128 @@ O JSON final consolidado é salvo em `out/` com descarte de strings HTML brutas ### Exemplos de Uso -#### 1. Extração Completa Automática ```bash +# Extração Completa Automática (gera out/river_plate_extracted.json) python scripts/extract_article_contents.py -i out/river_plate.json -# Gera automaticamente out/river_plate_extracted.json -``` -#### 2. Amostragem Rápida (Limit 2 Notícias) -```bash +# Amostragem Rápida (Limit 2 Notícias) python scripts/extract_article_contents.py -i out/river_plate.json --limit 2 + +# Destino Customizado e Timeout Ajustado +python scripts/extract_article_contents.py -i out/petrobras_result.json -o out/petrobras_full.json --timeout 45 ``` -#### 3. Destino Customizado e Timeout Ajustado +--- + +## 4. 🎯 Seletor Determinístico de Conteúdo de Artigos + +### Visão Geral e Algoritmo de Consenso ($F_1$) + +O script [`scripts/select_article_extractor.py`](scripts/select_article_extractor.py) é uma ferramenta autônoma, leve e 100% determinística (baseada exclusivamente na biblioteca padrão do Python) que resolve o problema de divergência entre múltiplos extratores de texto. + +O motor analisa as saídas dos candidatos ativos (`trafilatura`, `newspaper4k` e `readability`), compara a sobreposição de conteúdo através de **shingles de 5 tokens** e calcula o índice de concordância mútua via pontuação $F_1$: + +$$\text{Coverage} = \frac{|\text{Shingles do Candidato} \cap \text{Consenso}|}{|\text{Consenso}|}$$ + +$$\text{Support} = \frac{|\text{Shingles do Candidato} \cap \text{Consenso}|}{|\text{Shingles do Candidato}|}$$ + +$$F_1 = \frac{2 \times \text{Coverage} \times \text{Support}}{\text{Coverage} + \text{Support}}$$ + +```mermaid +flowchart TD + Art[Artigo com Trafilatura, Newspaper4k e Readability] --> Class[Classificação de Viabilidade: Usable, Degraded, Unavailable] + Class --> Set[Formação do Conjunto Ativo] + Set --> Norm[Normalização NFKC & Shingles de 5 Tokens] + Norm --> Metric[Cálculo de Consenso & Métricas F1] + Metric --> Check{Existe Consenso >= 2?} + Check -- Sim --> TopScore[Avaliação do Top Score] + TopScore --> TiePool{Empate Técnico <= 0.03?} + TiePool -- Sim --> SmallestShingle[Menor Quantidade de Shingles / Menos Ruído] + SmallestShingle --> Winner[Extrator Selecionado] + TiePool -- Não --> HighestScore[Maior Pontuação F1] + HighestScore --> Winner + Check -- Não --> ZeroCons[Desempate Sem Consenso: Mediana / Max / Prioridade] + ZeroCons --> Winner +``` + +### Pipeline de Normalização e Shingles + +A normalização ocorre em memória exclusivamente para fins comparativos: +1. **Decodificação de entidades HTML** (`html.unescape`). +2. **Descarte de imagens Markdown** (`![alt](url)`) para evitar que descrições de imagens criem falsos consensos com legendas. +3. **Preservação de links Markdown** (`[texto](url)` $\to$ `texto`). +4. **Remoção de tags HTML** preservando espaçamento entre palavras adjacentes. +5. **Normalização Unicode NFKC** e conversão para minúsculas. +6. **Colapso de espaços em branco**. +7. **Tokenização Unicode alfanumérica** com descarte de pontuações. +8. **Geração de Shingles**: Janela deslizante de 5 tokens (ou tupla única para textos curtos de 1 a 4 tokens). + +### Critérios de Desempate Técnico e Resiliência + +* **Empate Técnico ($\le 0.03$)**: Quando dois ou mais extratores atingem pontuações com diferença $\le 0.03$, o algoritmo seleciona aquele com **menor quantidade de shingles** (penalizando *boilerplate*, cabeçalhos ou menus excedentes). +* **Desempate Hierárquico Estrito**: Em caso de empate absoluto de pontuação e tamanho, aplica-se a hierarquia fixa: + $$\text{newspaper4k} > \text{readability} > \text{trafilatura}$$ +* **Cenários de 0 Consenso**: + * 3 candidatos ativos $\to$ seleciona o de **tamanho mediano de shingles**. + * 2 candidatos ativos $\to$ seleciona o de **maior tamanho de shingles**. + * 1 candidato ativo $\to$ seleciona o único utilizável. + * Todos indisponíveis $\to$ *fallback* obrigatório em `newspaper4k`. +* **Gravação Atômica e Não-Destrutiva**: Criação de arquivo temporário com substituição atômica (`os.replace`), preservando 100% dos dados pré-existentes, ordem de artigos e propriedades originais. + +### Argumentos e Flags CLI + +| Parâmetro | Tipo | Padrão | Descrição | +|---|---|---|---| +| `input_file` | Posicional (obrigatório) | — | Caminho para o arquivo JSON contendo a coleção `articles`. | +| `-o, --output` | Caminho (opcional) | `_selected.json` | Caminho do arquivo JSON de destino. | +| `--indent` | Inteiro (opcional) | `2` | Espaços de indentação do JSON (`0` para compacto). | +| `-v, --verbose` | Flag booleana | `False` | Emite no `stderr` os detalhes de pontuação, ativos e regra de escolha por artigo. | + +### Exemplos Práticos de Uso + +#### 1. Execução Padrão Automática ```bash -python scripts/extract_article_contents.py -i out/petrobras_result.json -o out/petrobras_full.json --timeout 45 +python scripts/select_article_extractor.py out/river_plate_extracted.json +# Gera automaticamente out/river_plate_extracted_selected.json +``` + +#### 2. Execução com Modo Verboso +```bash +python scripts/select_article_extractor.py out/river_plate_extracted.json --verbose +``` +* **Saída no Terminal**: +```text +[Artigo #001] Extrator: newspaper4k | Motivo: technical_tie_smallest_shingles | Ativos: 3 | Consenso: 1048 +[Artigo #002] Extrator: newspaper4k | Motivo: highest_score | Ativos: 3 | Consenso: 333 +[Artigo #003] Extrator: readability | Motivo: highest_score | Ativos: 3 | Consenso: 778 +... +{ + "status": "success", + "input_file": "out/river_plate_extracted.json", + "output_file": "out/river_plate_extracted_selected.json", + "total_articles": 20, + "processed_count": 20, + "distribution": { + "newspaper4k": 9, + "readability": 9, + "trafilatura": 2 + } +} +``` + +#### 3. Uso Programático como Módulo Python +```python +from scripts.select_article_extractor import select_article_extractor + +article_data = { + "trafilatura": {"text": "River Plate venceu ontem por 3-0.", "error": None}, + "newspaper4k": {"text": "River Plate venceu ontem por 3-0 no Monumental.", "error": None}, + "readability": {"cleaned_text": "River Plate venceu ontem por 3-0.", "error": None}, +} + +result = select_article_extractor(article_data) +print("Extrator Selecionado:", result.selected_extractor.value) +print("Motivo:", result.selection_reason) ``` --- @@ -264,7 +361,8 @@ TextNLPClassifierApp/ ├── scripts/ │ ├── __init__.py # Pacote utilitário de scripts │ ├── extract_google_news.py # CLI de Extração de Manchetes do Google News -│ └── extract_article_contents.py # CLI de Extração e Parsing Multimotor de Artigos +│ ├── extract_article_contents.py # CLI de Extração e Parsing Multimotor de Artigos +│ └── select_article_extractor.py # CLI de Seleção Determinística de Extrator ├── src/ # Módulos centrais do classificador │ ├── classifier.py # Orquestrador de classificação (Tier 1, 2, 3) │ ├── models.py # Modelos de dados e esquemas (ECPSnapshot, Decision) @@ -273,11 +371,13 @@ TextNLPClassifierApp/ ├── specs/ # Especificações e planos arquiteturais (Speckit) │ ├── 001-multilingual-entity-classifier/ │ ├── 002-google-news-extractor/ -│ └── 003-article-content-extractor/ # Specs da feature de extração multimotor +│ ├── 003-article-content-extractor/ +│ └── 004-deterministic-content-selection/ # Specs da seleção determinística ├── tests/ # Suíte de testes automatizados │ ├── test_classifier.py │ ├── test_extract_google_news.py -│ └── test_extract_article_contents.py # Testes do extrator de conteúdo +│ ├── test_extract_article_contents.py +│ └── test_select_article_extractor.py # Testes do seletor determinístico ├── requirements.txt # Dependências do projeto ├── pyproject.toml # Configurações de ferramentas (pytest, ruff, mypy) └── README.md # Documentação principal @@ -287,13 +387,19 @@ TextNLPClassifierApp/ ## 🧪 Testes e Qualidade de Código -O repositório possui cobertura com testes unitários, testes de integração e testes End-to-End (E2E) com requisição de rede ao vivo: +O repositório possui **120 testes automatizados** com 100% de aprovação cobrindo testes unitários, de regressão, de integração e testes End-to-End (E2E) via CLI subprocess: ```bash -# Executar todos os testes do projeto +# Executar toda a suíte de testes do projeto (120 testes) pytest -v -# Executar especificamente os testes do Extrator de Notícias +# Executar especificamente os testes do Seletor Determinístico +pytest tests/test_select_article_extractor.py -v + +# Executar os testes do Extrator de Conteúdo Multimotor +pytest tests/test_extract_article_contents.py -v + +# Executar os testes do Extrator do Google News pytest tests/test_extract_google_news.py -v # Validação e correção automática de formatação com Ruff diff --git a/docs/prd_deterministic_content_selection.md b/docs/prd_deterministic_content_selection.md new file mode 100644 index 0000000..6d3ca45 --- /dev/null +++ b/docs/prd_deterministic_content_selection.md @@ -0,0 +1,279 @@ +# PRD — Seleção determinística da biblioteca de extração de conteúdo + +**Versão:** 1.0 +**Data:** 20/08/2026 +**Status:** Pronto para implementação + +## 1. Contexto + +Cada artigo é processado pelas bibliotecas Trafilatura, Newspaper4k e Readability a partir do mesmo HTML. O resultado é consolidado em um arquivo JSON que contém, para cada artigo, as saídas das três bibliotecas. + +É necessário escolher deterministicamente uma única biblioteca por artigo. A escolha deve ocorrer mesmo quando todos os resultados forem ruins. O processamento não pode retornar estado ambíguo nem deixar um artigo sem seleção. + +## 2. Objetivo + +Receber um arquivo JSON no formato do arquivo de referência, selecionar a melhor saída de extração disponível para cada artigo e gerar um novo arquivo JSON com os mesmos dados, acrescentando somente a chave `selected_extractor` em cada item de `articles`. + +## 3. Escopo + +### 3.1 Incluído + +- Ler um arquivo JSON com uma coleção `articles`. +- Comparar as saídas de Trafilatura, Newspaper4k e Readability de cada artigo. +- Escolher obrigatoriamente uma das três bibliotecas. +- Adicionar `selected_extractor` em cada artigo. +- Gerar um novo arquivo JSON. +- Preservar os dados e a ordem dos artigos recebidos. + +### 3.2 Fora do escopo + +- Baixar ou renderizar páginas. +- Verificar se as bibliotecas receberam o mesmo HTML. +- Executar novamente as bibliotecas de extração. +- Limpar, recortar, combinar ou reescrever o conteúdo extraído. +- Gerar Markdown. +- Usar LLM, embeddings ou regras específicas por domínio. +- Alterar qualquer campo existente no JSON. +- Adicionar métricas, justificativas ou outras chaves ao arquivo de saída. + +## 4. Premissas + +- As três bibliotecas processaram exatamente o mesmo HTML. +- A entrada segue a estrutura do JSON de referência. +- A seleção é executada individualmente para cada artigo. +- O algoritmo deve sempre produzir uma escolha, inclusive em situações sem concordância entre as bibliotecas. + +## 5. Entrada + +### 5.1 Arquivo + +- Formato: JSON válido. +- A raiz deve conter `articles` como uma lista. +- Cada item de `articles` representa um artigo. + +### 5.2 Conteúdos comparados + +| Biblioteca | Campo usado na comparação | +| ----------- | -------------------------- | +| Trafilatura | `trafilatura.text` | +| Newspaper4k | `newspaper4k.text` | +| Readability | `readability.cleaned_text` | + +Os demais campos, incluindo título, descrição, resumo, palavras-chave, HTML estruturado e metadados, não participam da seleção. + +### 5.3 Estado de um candidato + +Para cada biblioteca, o candidato é classificado em um dos seguintes estados: + +| Estado | Condição | +| ------------ | ---------------------------------------------------------------------------------- | +| Utilizável | Campo de conteúdo é uma string não vazia após normalização e `error` é nulo | +| Degradado | Campo de conteúdo é uma string não vazia após normalização, mas `error` não é nulo | +| Indisponível | Campo ausente, nulo, de tipo diferente de string ou vazio após normalização | + +O campo de erro considerado é `trafilatura.error`, `newspaper4k.error` ou `readability.error`, conforme a biblioteca. + +## 6. Saída + +### 6.1 Arquivo + +O arquivo de entrada nunca deve ser alterado. Deve ser criado um novo arquivo com o nome: + +`_selected.json` + +Exemplo: `river_plate_extracted(2).json` gera `river_plate_extracted(2)_selected.json`. + +### 6.2 Alteração permitida + +Cada item de `articles` deve receber exatamente uma nova chave no mesmo nível de `trafilatura`, `newspaper4k` e `readability`: + +`selected_extractor` + +Valores permitidos: + +- `trafilatura` +- `newspaper4k` +- `readability` + +Não são permitidos `null`, string vazia, `ambiguous` ou qualquer outro valor. + +### 6.3 Preservação da entrada + +- Todas as chaves e valores existentes devem permanecer semanticamente idênticos. +- A ordem dos itens de `articles` deve ser preservada. +- Nenhum artigo pode ser adicionado ou removido. +- Espaçamento, indentação e ordem textual das chaves do JSON não fazem parte do contrato, pois o arquivo pode ser serializado novamente. +- Caso `selected_extractor` já exista, seu valor deve ser recalculado e substituído. + +## 7. Algoritmo determinístico de seleção + +### 7.1 Formar o conjunto ativo + +Para cada artigo: + +1. Identificar os candidatos utilizáveis. +2. Se existir pelo menos um utilizável, considerar somente os utilizáveis. +3. Se não existir utilizável, considerar os candidatos degradados. +4. Se não existir candidato utilizável nem degradado, selecionar `newspaper4k` pelo desempate final obrigatório. +5. Se o conjunto ativo possuir somente um candidato, selecioná-lo imediatamente. + +### 7.2 Normalizar os conteúdos + +A normalização serve apenas para comparação e não modifica o JSON de saída. + +Para cada candidato ativo: + +1. Decodificar entidades HTML. +2. Remover marcação HTML e Markdown, preservando o texto visível. +3. Em links, preservar o texto e remover o endereço. +4. Aplicar normalização Unicode NFKC. +5. Converter o texto para minúsculas. +6. Substituir toda sequência de espaços, tabulações ou quebras de linha por um único espaço. +7. Tokenizar mantendo letras e números Unicode. +8. Desconsiderar pontuação. + +Nenhuma palavra ou trecho pode ser removido por interpretação semântica. + +### 7.3 Gerar shingles + +- Gerar a sequência ordenada de tokens de cada candidato. +- Formar o conjunto de todas as janelas consecutivas de cinco tokens. +- Quando o candidato possuir entre um e quatro tokens, usar a sequência completa como um único shingle. +- Candidato sem token é indisponível e não participa do conjunto ativo. + +### 7.4 Construir o consenso + +O consenso é o conjunto de shingles presentes em pelo menos dois candidatos ativos. + +Para cada candidato ativo, calcular: + +**Cobertura:** + +`coverage = quantidade de shingles do consenso presentes no candidato / quantidade total de shingles do consenso` + +**Suporte:** + +`support = quantidade de shingles do candidato presentes no consenso / quantidade total de shingles do candidato` + +**Pontuação:** + +`score = 2 × coverage × support / (coverage + support)` + +Quando `coverage + support` for zero, a pontuação será zero. + +### 7.5 Selecionar quando existe consenso + +1. Ordenar os candidatos por `score`, do maior para o menor. +2. Identificar o maior `score`. +3. Considerar empate técnico todo candidato cuja diferença para o maior `score` seja menor ou igual a `0,03`. +4. Se houver apenas um candidato no empate técnico, selecioná-lo. +5. Se houver empate técnico, selecionar o candidato com a menor quantidade de shingles. +6. Se a quantidade de shingles também empatar, aplicar a prioridade final: + 1. `newspaper4k` + 2. `readability` + 3. `trafilatura` + +A preferência pelo menor candidato ocorre somente no empate técnico. Nesse cenário, os candidatos possuem qualidade de concordância equivalente, e a decisão favorece menor conteúdo excedente. + +### 7.6 Selecionar quando não existe consenso + +Quando nenhum shingle aparece em pelo menos dois candidatos ativos: + +- Com três candidatos ativos: selecionar o candidato com a quantidade mediana de shingles. +- Com dois candidatos ativos: selecionar o candidato com a maior quantidade de shingles. +- Com um candidato ativo: selecionar o único candidato. +- Em empate de quantidade: aplicar a prioridade `newspaper4k`, `readability`, `trafilatura`. +- Sem candidato ativo: selecionar `newspaper4k`. + +Essas regras garantem uma escolha mesmo quando não existe concordância textual. + +### 7.7 Gravar a escolha + +Adicionar ou substituir `selected_extractor` no artigo com o identificador da biblioteca vencedora. Repetir o processo até que todos os itens de `articles` tenham sido processados. + +## 8. Requisitos funcionais + +| ID | Requisito | +| ------ | ------------------------------------------------------------------------------------------------------- | +| FR-001 | O sistema deve aceitar um arquivo JSON como entrada. | +| FR-002 | O sistema deve validar que a raiz é um objeto e que `articles` é uma lista. | +| FR-003 | O sistema deve processar todos os artigos, preservando sua ordem. | +| FR-004 | O sistema deve usar exclusivamente os três campos de conteúdo definidos no PRD para calcular a escolha. | +| FR-005 | O sistema deve executar a normalização e a comparação conforme o algoritmo deste PRD. | +| FR-006 | O sistema deve selecionar exatamente uma biblioteca por artigo. | +| FR-007 | O sistema nunca deve produzir resultado ambíguo. | +| FR-008 | O sistema deve adicionar somente `selected_extractor` em cada artigo. | +| FR-009 | O valor de `selected_extractor` deve pertencer ao catálogo fechado de valores permitidos. | +| FR-010 | O sistema deve preservar todas as chaves e valores recebidos. | +| FR-011 | O sistema deve gerar um novo arquivo e manter o arquivo original inalterado. | +| FR-012 | O sistema deve produzir a mesma seleção sempre que receber exatamente a mesma entrada. | +| FR-013 | O sistema deve recalcular `selected_extractor` quando a chave já existir. | + +## 9. Tratamento de erros + +| Situação | Comportamento obrigatório | +| ---------------------------------------- | ----------------------------------------------------- | +| JSON inválido | Encerrar o processamento e não gerar arquivo de saída | +| Raiz diferente de objeto | Encerrar o processamento e não gerar arquivo de saída | +| `articles` ausente ou diferente de lista | Encerrar o processamento e não gerar arquivo de saída | +| `articles` vazio | Gerar arquivo com lista vazia e sem outras alterações | +| Estrutura de uma biblioteca ausente | Tratar seu candidato como indisponível | +| Campo de conteúdo com tipo inválido | Tratar seu candidato como indisponível | +| Todas as bibliotecas indisponíveis | Selecionar `newspaper4k` | +| Falha ao gravar o arquivo | Não deixar arquivo de saída parcialmente gravado | + +Um erro em um artigo não pode impedir a seleção dos demais artigos, desde que o JSON e a lista `articles` sejam válidos. + +## 10. Requisitos não funcionais + +| ID | Requisito | +| ------- | ----------------------------------------------------------------------------------------- | +| NFR-001 | O processamento deve ser totalmente determinístico. | +| NFR-002 | O processamento não deve realizar chamadas de rede. | +| NFR-003 | O processamento não deve depender de LLM, embeddings ou serviços externos. | +| NFR-004 | O processamento deve operar somente sobre os dados do arquivo recebido. | +| NFR-005 | A gravação do arquivo deve ser atômica: sucesso completo ou ausência do arquivo de saída. | + +## 11. Critérios de aceite + +1. Dado o JSON de referência com 20 artigos, o arquivo de saída contém os mesmos 20 artigos na mesma ordem. +2. Cada artigo contém exatamente um `selected_extractor` válido. +3. Nenhum artigo contém `selected_extractor` nulo, vazio ou ambíguo. +4. Todas as chaves e valores anteriores permanecem semanticamente idênticos. +5. Nenhuma chave adicional, além de `selected_extractor`, é criada. +6. O arquivo original permanece inalterado. +7. Duas execuções sobre o mesmo arquivo produzem os mesmos valores de `selected_extractor`. +8. A seleção usa somente `trafilatura.text`, `newspaper4k.text` e `readability.cleaned_text`. +9. Quando todas as saídas estiverem vazias ou indisponíveis, `selected_extractor` recebe `newspaper4k`. +10. Quando não houver consenso, o desempate segue exatamente as regras da seção 7.6. +11. Quando houver empate técnico, o desempate segue exatamente as regras da seção 7.5. +12. Um JSON inválido ou sem `articles` válido não produz arquivo parcial. + +## 12. Casos obrigatórios de teste + +| Caso | Condição | Resultado esperado | +| ------ | ---------------------------------------------------------------------------- | ------------------------------------------------- | +| CT-001 | Três candidatos com consenso e um vencedor claro | Selecionar o maior `score` | +| CT-002 | Dois ou mais candidatos dentro de `0,03` do maior `score` | Selecionar o de menor quantidade de shingles | +| CT-003 | Empate técnico e mesma quantidade de shingles | Aplicar prioridade final | +| CT-004 | Três candidatos sem consenso | Selecionar a quantidade mediana de shingles | +| CT-005 | Dois candidatos sem consenso | Selecionar a maior quantidade de shingles | +| CT-006 | Somente um candidato utilizável | Selecionar esse candidato | +| CT-007 | Nenhum utilizável, mas existe candidato degradado | Executar o algoritmo somente com os degradados | +| CT-008 | Todos os candidatos indisponíveis | Selecionar `newspaper4k` | +| CT-009 | Readability retorna apenas um fragmento pequeno enquanto os outros concordam | O fragmento perde por baixa cobertura do consenso | +| CT-010 | Um candidato contém o conteúdo comum e muito conteúdo excedente | O candidato perde suporte e reduz sua pontuação | +| CT-011 | Um candidato contém somente parte do conteúdo comum | O candidato perde cobertura e reduz sua pontuação | +| CT-012 | A entrada já contém `selected_extractor` | Recalcular e substituir somente essa chave | +| CT-013 | `articles` está vazio | Gerar saída válida com `articles` vazio | +| CT-014 | JSON inválido | Não gerar saída | + +## 13. Definition of Done + +- Todos os requisitos funcionais foram implementados. +- Todos os casos obrigatórios de teste foram automatizados e aprovados. +- O JSON de referência com 20 artigos é processado integralmente. +- A saída contém somente a inclusão de `selected_extractor` em cada artigo. +- O arquivo original permanece inalterado. +- Execuções repetidas sobre a mesma entrada produzem as mesmas escolhas. +- Não existe caminho de execução que produza `ambiguous`, `null` ou artigo sem seleção. diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index 92d2d95..f2b8b77 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.graphify_labels.json @@ -44,10 +44,10 @@ "42": "1. Input Schemas", "43": "2. Basic CLI Usage Examples", "44": "2. Standard Streams & Exit Codes", - "45": "classifier.py", + "45": "ClassificationResult", "46": "InherenceClassifier", - "47": "detect_language", - "48": "ClassificationError", + "47": "classifier.py", + "48": "main", "49": "content_northvolt_de.md", "50": "content_presal_pt.md", "51": "content_tangential_es.md", @@ -99,12 +99,12 @@ "97": "🧠 TextNLPClassifierApp", "98": "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor", "99": "sample_rss_xml", - "100": "main", + "100": "models.py", "101": "ECPSnapshot", "102": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)", "103": "4. Requisitos Funcionais (FR)", "104": "Tasks: Article Content Multi-Engine Extractor", - "105": "models.py", + "105": "LocalEmbeddingsAdapter", "106": "Implementation Plan: Article Content Multi-Engine Extractor", "107": "2. Cenários de Validação", "108": "1. Technical Decisions & Tradeoffs", @@ -113,5 +113,21 @@ "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" + "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", + "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": "JSON Schema Contract: Deterministic Article Content Selection" } diff --git a/graphify-out/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index 591854a..18d4ec5 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": "70b30e0a139bbd59", "46": "58f3596265f5f902", "47": "f89e819a4cc2d299", "48": "b45478cb1443df68", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6", "80": "6ff8a97e63c9a2f3", "81": "a38f84ae3d895236", "82": "08e48bd11f9714df", "83": "5095122914e83cf5", "84": "1aef305bd7d7d63f", "85": "f8bfd0cfe9e8b478", "86": "410d15a346bd5894", "87": "6b41d288cfd834ab", "88": "5aa6db96312a8811", "89": "80225792bb62ba04", "90": "fd291228c3311f40", "91": "d4579c5b7aa2742a", "92": "7b9ba7c3bff11361", "93": "71cd9c1fa4a857f0", "94": "34cd980be3c32d21", "95": "970093453f3b7d90", "96": "9e96780a2b7c4bd6", "97": "a4e57776e229c794", "98": "089ea6a55861c693", "99": "8968e9e7d55afcbe", "100": "daa6156e559cda08", "101": "14e5b6323d34c337", "102": "6aa00d5a83295f11", "103": "f58668f5b10ccdeb", "104": "4ec787414cc6f50b", "105": "de672873b6dec6e2", "106": "edcd5d9bb3c4b00f", "107": "37f2f47110fe3eaa", "108": "b7ad5abb1da8cf8d", "109": "cb48a9c4f54efa38", "110": "f6dd36fd7f3edbe5", "111": "2925b620f0b1fd17", "112": "d8b3099917c3b711", "113": "3bb61caa0302c804", "114": "0d4f1d08dd056bb9"} \ 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": "1880db165e83768c", "46": "58f3596265f5f902", "47": "4e9a638bf1f93e1b", "48": "cc757e9c9987201b", "49": "0d0f9f015921feef", "50": "8d0c81e5ca23e9a6", "51": "f79963571b9c15ee", "52": "5935824c825606cb", "53": "9685f9cbe158e50b", "54": "3d5ab759f350bc79", "55": "d549f24931a990e9", "56": "3cc031dcb648797c", "57": "a0ab88e6c629251d", "58": "76bd6412e2a22ecd", "59": "54827845564490c9", "60": "0a9736c416c0c6b9", "61": "77358620ac528153", "62": "3b0c585df09df48a", "63": "7e78cd3b28828c20", "64": "1c0c958231735f61", "65": "60b0f81225f62f69", "66": "920754c65cc94b88", "67": "df911472140a9b94", "68": "8e17bc11bcea91b9", "69": "7e905b75e4f28b95", "70": "a28424eca5d36c55", "71": "2cdb53d5b6051ab6", "72": "e42fbd3dc744e730", "73": "7fe2cac980de160c", "74": "2b1343a6a9db1487", "75": "54a1bb232f1d4ceb", "76": "442ba11d31ec0e0a", "77": "852a25b8b95bf8d1", "78": "1810ab370b9cd608", "79": "0fc5dca02a3f02f6", "80": "6ff8a97e63c9a2f3", "81": "a38f84ae3d895236", "82": "08e48bd11f9714df", "83": "5095122914e83cf5", "84": "1aef305bd7d7d63f", "85": "f8bfd0cfe9e8b478", "86": "410d15a346bd5894", "87": "6b41d288cfd834ab", "88": "5aa6db96312a8811", "89": "80225792bb62ba04", "90": "fd291228c3311f40", "91": "d4579c5b7aa2742a", "92": "7b9ba7c3bff11361", "93": "71cd9c1fa4a857f0", "94": "34cd980be3c32d21", "95": "970093453f3b7d90", "96": "9e96780a2b7c4bd6", "97": "e091504212d41fa4", "98": "089ea6a55861c693", "99": "8968e9e7d55afcbe", "100": "a7b5a49d77797f1b", "101": "21a45c852f9aeb96", "102": "6aa00d5a83295f11", "103": "f58668f5b10ccdeb", "104": "4ec787414cc6f50b", "105": "b42f25c7ec3542ab", "106": "edcd5d9bb3c4b00f", "107": "37f2f47110fe3eaa", "108": "b7ad5abb1da8cf8d", "109": "cb48a9c4f54efa38", "110": "f6dd36fd7f3edbe5", "111": "2925b620f0b1fd17", "112": "d8b3099917c3b711", "113": "3bb61caa0302c804", "114": "0d4f1d08dd056bb9", "115": "4ac2dcddeec2ff11", "116": "0bd2e5150cdcc835", "117": "196f63e0c4536d30", "118": "ade84262e3cfac12", "119": "6adb71671a1f363f", "120": "3d4cabafb8ebe1b7", "122": "80cc7c4359559d19", "123": "96618c9a362af46c", "124": "83f104cbb62fd03e", "125": "6db738fb27190349", "126": "6a087a22cbcef972", "127": "85fd71a0cad8d3a5", "128": "22dd4feed96c4229", "129": "c4d2f60f532e6f16", "130": "f6b0aa8a1568926b", "131": "56747bad6345d66b"} \ No newline at end of file diff --git a/graphify-out/2026-08-20/.graphify_labels.json b/graphify-out/2026-08-20/.graphify_labels.json index 75af693..3d2cb68 100644 --- a/graphify-out/2026-08-20/.graphify_labels.json +++ b/graphify-out/2026-08-20/.graphify_labels.json @@ -44,10 +44,10 @@ "42": "1. Input Schemas", "43": "2. Basic CLI Usage Examples", "44": "2. Standard Streams & Exit Codes", - "45": "LocalEmbeddingsAdapter", + "45": "ClassificationResult", "46": "InherenceClassifier", "47": "detect_language", - "48": "classifier.py", + "48": "models.py", "49": "content_northvolt_de.md", "50": "content_presal_pt.md", "51": "content_tangential_es.md", @@ -99,12 +99,12 @@ "97": "🧠 TextNLPClassifierApp", "98": "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor", "99": "sample_rss_xml", - "100": "models.py", + "100": "ClassificationError", "101": "ECPSnapshot", "102": "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)", "103": "4. Requisitos Funcionais (FR)", "104": "Tasks: Article Content Multi-Engine Extractor", - "105": "ClassificationResult", + "105": "classifier.py", "106": "Implementation Plan: Article Content Multi-Engine Extractor", "107": "2. Cenários de Validação", "108": "1. Technical Decisions & Tradeoffs", @@ -113,5 +113,21 @@ "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" + "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", + "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": "JSON Schema Contract: Deterministic Article Content Selection" } diff --git a/graphify-out/2026-08-20/GRAPH_REPORT.md b/graphify-out/2026-08-20/GRAPH_REPORT.md index 9a69b86..670f33b 100644 --- a/graphify-out/2026-08-20/GRAPH_REPORT.md +++ b/graphify-out/2026-08-20/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - TextNLPClassifierApp (2026-08-20) ## Corpus Check -- 161 files · ~78,476 words +- 174 files · ~91,254 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1000 nodes · 1226 edges · 115 communities (77 shown, 38 thin omitted) -- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 39 edges (avg confidence: 0.95) +- 1233 nodes · 1546 edges · 131 communities (93 shown, 38 thin omitted) +- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 51 edges (avg confidence: 0.95) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `6e3d5761` +- Built from commit: `6a45368c` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -56,10 +56,10 @@ - 1. Input Schemas - 2. Basic CLI Usage Examples - 2. Standard Streams & Exit Codes -- LocalEmbeddingsAdapter +- ClassificationResult - InherenceClassifier - detect_language -- classifier.py +- models.py - content_northvolt_de.md - content_presal_pt.md - content_tangential_es.md @@ -110,12 +110,12 @@ - 🧠 TextNLPClassifierApp - Extraction Pipeline Checklist: Article Content Multi-Engine Extractor - sample_rss_xml -- models.py +- ClassificationError - ECPSnapshot - Feature Specification: Multilingual NLP Entity Inherence Classifier (POC) - 4. Requisitos Funcionais (FR) - Tasks: Article Content Multi-Engine Extractor -- ClassificationResult +- classifier.py - Implementation Plan: Article Content Multi-Engine Extractor - 2. Cenários de Validação - 1. Technical Decisions & Tradeoffs @@ -124,18 +124,33 @@ - Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier - CLI Contract: Article Content Multi-Engine Extractor - 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 +- 1. Text Normalization Pipeline +- Tasks: Deterministic Article Content Selection +- select_article_extractor +- process_batch +- test_select_article_extractor.py +- Feature Specification: Deterministic Content Selection +- 2. Entity Descriptions & Fields +- Implementation Plan: Deterministic Article Content Selection +- Deterministic Content Selection Checklist: End-to-End Requirements Quality +- Quickstart: Deterministic Article Content Selection +- Specification Quality Checklist: Deterministic Content Selection +- CLI Interface Contract: Deterministic Article Content Selection +- JSON Schema Contract: Deterministic Article Content Selection ## God Nodes (most connected - your core abstractions) 1. `ECPSnapshot` - 31 edges 2. `InherenceClassifier` - 25 edges -3. `DecisionCategory` - 18 edges -4. `ClassificationResult` - 17 edges -5. `process_batch()` - 15 edges -6. `LocalEmbeddingsAdapter` - 14 edges -7. `LLMFallbackAdapter` - 14 edges -8. `detect_language()` - 14 edges -9. `main()` - 13 edges -10. `ArticleCrawler` - 13 edges +3. `select_article_extractor()` - 23 edges +4. `ExtractorName` - 21 edges +5. `DecisionCategory` - 17 edges +6. `ClassificationResult` - 17 edges +7. `process_batch()` - 15 edges +8. `process_batch()` - 14 edges +9. `LocalEmbeddingsAdapter` - 14 edges +10. `LLMFallbackAdapter` - 14 edges ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] @@ -146,13 +161,13 @@ tests/test_benchmark_24.py → src/classifier.py - `test_classification_result_serialization()` --uses--> `DecisionCategory` [INFERRED] tests/test_models.py → src/models.py -- `petrobras_ecp()` --uses--> `ECPSnapshot` [INFERRED] - tests/test_classifier.py → src/models.py +- `test_classification_error_serialization()` --uses--> `ErrorCode` [INFERRED] + tests/test_models.py → src/models.py ## Import Cycles - None detected. -## Communities (115 total, 38 thin omitted) +## Communities (131 total, 38 thin omitted) ### Community 0 - "Task Planning" Cohesion: 0.07 @@ -294,21 +309,21 @@ Nodes (7): 1. Prerequisites & Installation, 2.1 Direct Inherence (Portuguese), 2 Cohesion: 0.29 Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC) -### Community 45 - "LocalEmbeddingsAdapter" -Cohesion: 0.14 -Nodes (8): LocalEmbeddingsAdapter, Optional adapter for local multilingual semantic vector embeddings., LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Unit tests for optional adapter interfaces (Tier 2 / Tier 3)., test_classifier_with_adapter_flags(), test_embeddings_adapter_interface(), test_llm_adapter_interface() +### Community 45 - "ClassificationResult" +Cohesion: 0.17 +Nodes (10): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., Optional LLM fallback adapter (Tier 3). Disabled by default. Provides fallback… (+2 more) ### Community 46 - "InherenceClassifier" Cohesion: 0.12 -Nodes (27): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier., DecisionCategory, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC., Run CLI via subprocess with missing target_name and verify error payload. (+19 more) +Nodes (27): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier., DecisionCategory, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC. (+19 more) ### Community 47 - "detect_language" -Cohesion: 0.14 -Nodes (21): count_phrase_occurrences(), match_phrase_in_text(), Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., detect_language(), extract_words(), normalize_text() (+13 more) +Cohesion: 0.09 +Nodes (30): count_phrase_occurrences(), match_phrase_in_text(), Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., detect_language(), extract_words(), normalize_text() (+22 more) -### Community 48 - "classifier.py" -Cohesion: 0.24 -Nodes (11): Core deterministic classification engine (Tier 1 core)., extract_evidence_snippets(), extract_sentences(), Markdown content parser and excerpt extraction utilities., Remove markdown syntax markers (headers, bold, italics, links, code blocks) to…, Split text into individual sentences., Extract relevant sentence excerpts from Markdown text that contain any of the…, strip_markdown() (+3 more) +### Community 48 - "models.py" +Cohesion: 0.19 +Nodes (15): emit_error(), main(), parse_args(), Namespace, ErrorCode, MatchedGraphEntity, Enum, str (+7 more) ### Community 80 - "test_extract_article_contents.py" Cohesion: 0.06 @@ -382,13 +397,13 @@ Nodes (34): 1. Requirement Completeness, 2. Requirement Clarity & Non-Ambiguity, Cohesion: 0.67 Nodes (3): fixture, Fixture que fornece o conteúdo do XML de exemplo para testes offline., sample_rss_xml() -### Community 100 - "models.py" -Cohesion: 0.15 -Nodes (17): emit_error(), main(), parse_args(), Namespace, Enum, ClassificationError, ErrorCode, MatchedGraphEntity (+9 more) +### Community 100 - "ClassificationError" +Cohesion: 0.29 +Nodes (3): ClassificationError, Any, test_classification_error_serialization() ### 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.24 +Nodes (10): parametrize, ECPSnapshot, classifier(), fixture, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), Unit tests for ECP models, schema validation, and structured error handling., test_ecp_snapshot_defaults() (+2 more) ### Community 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -402,13 +417,13 @@ Nodes (20): 1.1 Objetivo do Produto, 1. Visão Geral e Contexto, 2. Personas e C Cohesion: 0.11 Nodes (18): Dependencies & Execution Order, Entrega Incremental, Implementation Strategy, Implementação da User Story 1, Implementação da User Story 2, Implementação da User Story 3, MVP First (User Story 1 Only), Oportunidades de Execução Paralela (+10 more) -### Community 105 - "ClassificationResult" -Cohesion: 0.16 -Nodes (11): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., Optional local vector embeddings adapter (Tier 2). Disabled by default.… (+3 more) +### Community 105 - "classifier.py" +Cohesion: 0.13 +Nodes (10): LocalEmbeddingsAdapter, Optional local vector embeddings adapter (Tier 2). Disabled by default.…, Optional adapter for local multilingual semantic vector embeddings., LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Core deterministic classification engine (Tier 1 core)., Unit tests for optional adapter interfaces (Tier 2 / Tier 3)., test_classifier_with_adapter_flags() (+2 more) ### Community 106 - "Implementation Plan: Article Content Multi-Engine Extractor" Cohesion: 0.17 -Nodes (11): Constitution Check, Documentation (this feature), Implementation Phases, Implementation Plan: Article Content Multi-Engine Extractor, Phase 0: Outline & Research *(Completed)*, Phase 1: Design & Contracts *(Completed)*, Phase 2: Tasks & Execution *(Next: `/speckit-tasks`)*, Project Structure (+3 more) +Nodes (11): Constitution Check, Documentation (this feature), Implementation Phases, Implementation Plan: Article Content Multi-Engine Extractor, Phase 0: Outline & Research *(Completed)*, Phase 1: Design & Contracts *(Completed)*, Phase 2: Tasks & Execution *(Completed)*, Project Structure (+3 more) ### Community 107 - "2. Cenários de Validação" Cohesion: 0.22 @@ -438,25 +453,85 @@ Nodes (5): 1. Comando de Execução, 2. Argumentos e Flags, 3. Códigos de Saíd Cohesion: 0.50 Nodes (3): 1. Schema de Entrada (Input JSON), 2. Schema de Saída (Output JSON), JSON Schema Contract: Article Content Multi-Engine Extractor +### Community 115 - "PRD — Seleção determinística da biblioteca de extração de conteúdo" +Cohesion: 0.07 +Nodes (29): 10. Requisitos não funcionais, 11. Critérios de aceite, 12. Casos obrigatórios de teste, 13. Definition of Done, 1. Contexto, 2. Objetivo, 3.1 Incluído, 3.2 Fora do escopo (+21 more) + +### Community 116 - "select_article_extractor.py" +Cohesion: 0.16 +Nodes (17): BatchProcessingResult, break_priority_tie(), calculate_consensus_metrics(), ExtractorCandidate, form_active_set(), main(), parse_args(), Namespace (+9 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 +Nodes (18): Dependencies & Execution Order, Implementation for User Story 1, Implementation for User Story 2, Implementation for User Story 3, Implementation Strategy, Incremental Delivery (Phases 4, 5 & 6), MVP First (Phases 1, 2 & 3), Parallel Opportunities (+10 more) + +### Community 119 - "select_article_extractor" +Cohesion: 0.08 +Nodes (37): ArticleSelectionResult, CandidateStatus, extract_candidate_data(), ExtractorName, Any, Enum, str, Extrai campo de texto, erro e calcula tokens/shingles para um motor. (+29 more) + +### Community 120 - "process_batch" +Cohesion: 0.10 +Nodes (26): atomic_save_json(), process_batch(), Path, Salva dados em JSON de forma atômica utilizando arquivo temporário e rename., Lê o JSON de entrada, valida a estrutura, processa todos os artigos e grava o…, Path, CT-012: A entrada já contém selected_extractor -> Recalcular e substituir…, CT-013: articles está vazio -> Gerar saída válida com articles vazio. (+18 more) + +### Community 122 - "test_select_article_extractor.py" +Cohesion: 0.21 +Nodes (14): generate_shingles(), normalize_text(), Executa a normalização determinística para comparação: 1. Decodificar entidades…, Gera conjunto de shingles ordenados de tamanho window_size (padrão 5). - Se…, Suíte de Testes Automatizados para o Seletor Determinístico de Extrator. Cobre…, Garante que marcação de imagem Markdown ![alt](url) seja descartada e link…, test_generate_shingles_empty(), test_generate_shingles_short_text() (+6 more) + +### Community 123 - "Feature Specification: Deterministic Content Selection" +Cohesion: 0.17 +Nodes (12): Assumptions, Edge Cases, Feature Specification: Deterministic Content Selection, Functional Requirements, Key Entities *(include if feature involves data)*, Measurable Outcomes, Requirements *(mandatory)*, Success Criteria *(mandatory)* (+4 more) + +### Community 124 - "2. Entity Descriptions & Fields" +Cohesion: 0.18 +Nodes (11): 1. Domain Entities & Value Types, 2. Entity Descriptions & Fields, 3. JSON Schema Mapping, `ArticleSelectionResult` (Dataclass), `BatchProcessingResult` (Dataclass), `CandidateStatus` (Enum), Data Model: Deterministic Content Selection, Entrada (+3 more) + +### Community 125 - "Implementation Plan: Deterministic Article Content Selection" +Cohesion: 0.18 +Nodes (11): Constitution Check, Documentation (this feature), Implementation Phases, Implementation Plan: Deterministic Article Content Selection, Phase 0: Outline & Research *(Completed)*, Phase 1: Design & Contracts *(Completed)*, Phase 2: Tasks & Execution *(Next Step via `/speckit-tasks`)*, Project Structure (+3 more) + +### Community 126 - "Deterministic Content Selection Checklist: End-to-End Requirements Quality" +Cohesion: 0.25 +Nodes (7): Candidate State Transitions & Resilience, Decision & Tie-Breaking Hierarchy, Deterministic Content Selection Checklist: End-to-End Requirements Quality, JSON Schema Integrity & Atomic I/O, Notes, Shingles & Consensus Metric Formulation, Text Normalization & Tokenization Quality + +### Community 127 - "Quickstart: Deterministic Article Content Selection" +Cohesion: 0.29 +Nodes (7): 1. Pré-requisitos, 2. Execução Rápida via CLI, 3. Execução dos Testes Automatizados, 4. Validação Programática / Uso como Módulo Python, Cenário 1: Selecionar o melhor extrator para uma extração existente, Cenário 2: Especificar caminho de saída customizado e modo verboso, Quickstart: Deterministic Article Content Selection + +### Community 128 - "Specification Quality Checklist: Deterministic Content Selection" +Cohesion: 0.33 +Nodes (5): Content Quality, Feature Readiness, Notes, Requirement Completeness, Specification Quality Checklist: Deterministic Content Selection + +### Community 129 - "CLI Interface Contract: Deterministic Article Content Selection" +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 131 - "JSON Schema Contract: Deterministic Article Content Selection" +Cohesion: 0.50 +Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: Deterministic Article Content Selection + ## Knowledge Gaps -- **465 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+460 more) +- **560 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+555 more) These have ≤1 connection - possible missing edges or undocumented components. - **38 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 `ECPSnapshot` connect `ECPSnapshot` to `models.py`, `ClassificationResult`, `LocalEmbeddingsAdapter`, `InherenceClassifier`, `detect_language`, `classifier.py`?** - _High betweenness centrality (0.005) - this node is a cross-community bridge._ -- **Why does `InherenceClassifier` connect `InherenceClassifier` to `models.py`, `ECPSnapshot`, `ClassificationResult`, `LocalEmbeddingsAdapter`, `detect_language`, `classifier.py`?** +- **Why does `ECPSnapshot` connect `ECPSnapshot` to `classifier.py`, `ClassificationResult`, `InherenceClassifier`, `detect_language`, `models.py`?** _High betweenness centrality (0.003) - this node is a cross-community bridge._ -- **Why does `detect_language()` connect `detect_language` to `classifier.py`?** +- **Why does `LLMFallbackAdapter` connect `classifier.py` to `ECPSnapshot`, `ClassificationResult`, `InherenceClassifier`?** + _High betweenness centrality (0.003) - this node is a cross-community bridge._ +- **Why does `Research & Architectural Decisions: Deterministic Content Selection` connect `1. Text Normalization Pipeline` to `004-deterministic-content-selection/spec.md`?** _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?** _`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 12 inferred relationships involving `ExtractorName` (e.g. with `test_article_1_regression_technical_tie_markdown_images()` and `test_ct_001_three_candidates_clear_winner()`) actually correct?** + _`ExtractorName` has 12 INFERRED edges - model-reasoned connections that need verification._ - **Are the 10 inferred relationships involving `DecisionCategory` (e.g. with `InherenceClassifier` and `test_adversarial_apple_fruit_recipe()`) actually correct?** - _`DecisionCategory` has 10 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 4 inferred relationships involving `ClassificationResult` (e.g. with `BaseNLPAdapter` and `LocalEmbeddingsAdapter`) actually correct?** - _`ClassificationResult` has 4 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._ \ No newline at end of file diff --git a/graphify-out/2026-08-20/graph.json b/graphify-out/2026-08-20/graph.json index 47f9ba9..0fa54d7 100644 --- a/graphify-out/2026-08-20/graph.json +++ b/graphify-out/2026-08-20/graph.json @@ -10,37 +10,11 @@ "_callable_class": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", "norm_label": "classificationerror", "source_file": "src/models.py", - "source_location": "L153" - }, - { - "id": "src_models_errorcode", - "label": "ErrorCode", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "errorcode", - "source_file": "src/models.py", - "source_location": "L18" - }, - { - "id": "src_models_matchedgraphentity", - "label": "MatchedGraphEntity", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "matchedgraphentity", - "source_file": "src/models.py", - "source_location": "L114" + "source_location": "L155" }, { "id": "src_models_ecpsnapshot", @@ -55,13 +29,104 @@ "source_file": "src/models.py", "source_location": "L58" }, + { + "id": "src_adapters_embeddings_localembeddingsadapter", + "label": "LocalEmbeddingsAdapter", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "localembeddingsadapter", + "source_file": "src/adapters/embeddings.py", + "source_location": "L13" + }, + { + "id": "src_adapters_llm_llmfallbackadapter", + "label": "LLMFallbackAdapter", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "llmfallbackadapter", + "source_file": "src/adapters/llm.py", + "source_location": "L15" + }, + { + "id": "scripts_select_article_extractor_batchprocessingresult", + "label": "BatchProcessingResult", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "batchprocessingresult", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L90" + }, + { + "id": "scripts_select_article_extractor_extractorcandidate", + "label": "ExtractorCandidate", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "extractorcandidate", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L62" + }, + { + "id": "scripts_select_article_extractor_articleselectionresult", + "label": "ArticleSelectionResult", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "articleselectionresult", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L78" + }, + { + "id": "scripts_select_article_extractor_candidatestatus", + "label": "CandidateStatus", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "candidatestatus", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L41" + }, + { + "id": "scripts_select_article_extractor_extractorname", + "label": "ExtractorName", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "extractorname", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L33" + }, { "id": "src_adapters_base_basenlpadapter", "label": "BaseNLPAdapter", "_callable": true, "_callable_class": true, "_origin": "ast", - "community": 105, + "community": 45, "community_name": "ClassificationResult", "file_type": "code", "norm_label": "basenlpadapter", @@ -74,39 +139,13 @@ "_callable": true, "_callable_class": true, "_origin": "ast", - "community": 105, + "community": 45, "community_name": "ClassificationResult", "file_type": "code", "norm_label": "classificationresult", "source_file": "src/models.py", "source_location": "L122" }, - { - "id": "src_adapters_embeddings_localembeddingsadapter", - "label": "LocalEmbeddingsAdapter", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": "localembeddingsadapter", - "source_file": "src/adapters/embeddings.py", - "source_location": "L14" - }, - { - "id": "src_adapters_llm_llmfallbackadapter", - "label": "LLMFallbackAdapter", - "_callable": true, - "_callable_class": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": "llmfallbackadapter", - "source_file": "src/adapters/llm.py", - "source_location": "L15" - }, { "id": "src_classifier_inherenceclassifier", "label": "InherenceClassifier", @@ -118,7 +157,7 @@ "file_type": "code", "norm_label": "inherenceclassifier", "source_file": "src/classifier.py", - "source_location": "L44" + "source_location": "L41" }, { "id": "src_models_decisioncategory", @@ -146,6 +185,32 @@ "source_file": "src/models.py", "source_location": "L27" }, + { + "id": "src_models_errorcode", + "label": "ErrorCode", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "errorcode", + "source_file": "src/models.py", + "source_location": "L18" + }, + { + "id": "src_models_matchedgraphentity", + "label": "MatchedGraphEntity", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "matchedgraphentity", + "source_file": "src/models.py", + "source_location": "L114" + }, { "id": "scripts_extract_article_contents_articlecrawler", "label": "ArticleCrawler", @@ -157,7 +222,7 @@ "file_type": "code", "norm_label": "articlecrawler", "source_file": "scripts/extract_article_contents.py", - "source_location": "L458" + "source_location": "L482" }, { "id": "scripts_extract_article_contents_extractedarticle", @@ -170,7 +235,7 @@ "file_type": "code", "norm_label": "extractedarticle", "source_file": "scripts/extract_article_contents.py", - "source_location": "L177" + "source_location": "L174" }, { "id": "scripts_extract_article_contents_extractionbatchreport", @@ -183,7 +248,7 @@ "file_type": "code", "norm_label": "extractionbatchreport", "source_file": "scripts/extract_article_contents.py", - "source_location": "L205" + "source_location": "L202" }, { "id": "scripts_extract_article_contents_inputarticle", @@ -196,7 +261,7 @@ "file_type": "code", "norm_label": "inputarticle", "source_file": "scripts/extract_article_contents.py", - "source_location": "L37" + "source_location": "L34" }, { "id": "scripts_extract_article_contents_newspaperdata", @@ -209,7 +274,7 @@ "file_type": "code", "norm_label": "newspaperdata", "source_file": "scripts/extract_article_contents.py", - "source_location": "L105" + "source_location": "L102" }, { "id": "scripts_extract_article_contents_newspaperextractor", @@ -222,7 +287,7 @@ "file_type": "code", "norm_label": "newspaperextractor", "source_file": "scripts/extract_article_contents.py", - "source_location": "L310" + "source_location": "L332" }, { "id": "scripts_extract_article_contents_readabilitydata", @@ -235,7 +300,7 @@ "file_type": "code", "norm_label": "readabilitydata", "source_file": "scripts/extract_article_contents.py", - "source_location": "L155" + "source_location": "L152" }, { "id": "scripts_extract_article_contents_readabilityextractor", @@ -248,7 +313,7 @@ "file_type": "code", "norm_label": "readabilityextractor", "source_file": "scripts/extract_article_contents.py", - "source_location": "L371" + "source_location": "L395" }, { "id": "scripts_extract_article_contents_trafilaturadata", @@ -261,7 +326,7 @@ "file_type": "code", "norm_label": "trafilaturadata", "source_file": "scripts/extract_article_contents.py", - "source_location": "L57" + "source_location": "L54" }, { "id": "scripts_extract_article_contents_trafilaturaextractor", @@ -274,7 +339,7 @@ "file_type": "code", "norm_label": "trafilaturaextractor", "source_file": "scripts/extract_article_contents.py", - "source_location": "L231" + "source_location": "L228" }, { "id": "scripts_extract_google_news_newsarticle", @@ -287,7 +352,7 @@ "file_type": "code", "norm_label": "newsarticle", "source_file": "scripts/extract_google_news.py", - "source_location": "L66" + "source_location": "L64" }, { "id": "scripts_extract_google_news_extractionresult", @@ -300,7 +365,7 @@ "file_type": "code", "norm_label": "extractionresult", "source_file": "scripts/extract_google_news.py", - "source_location": "L86" + "source_location": "L84" }, { "id": "scripts_extract_google_news_searchquery", @@ -315,53 +380,17 @@ "source_file": "scripts/extract_google_news.py", "source_location": "L32" }, - { - "id": "classify_emit_error", - "label": "emit_error()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "emit_error()", - "source_file": "classify.py", - "source_location": "L73" - }, - { - "id": "classify_main", - "label": "main()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "main()", - "source_file": "classify.py", - "source_location": "L98" - }, - { - "id": "classify_parse_args", - "label": "parse_args()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "parse_args()", - "source_file": "classify.py", - "source_location": "L28" - }, { "id": "src_models_classificationerror_to_dict", "label": ".to_dict()", "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", "norm_label": ".to_dict()", "source_file": "src/models.py", - "source_location": "L158" + "source_location": "L160" }, { "id": "src_models_classificationerror_to_json_str", @@ -369,11 +398,23 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", "norm_label": ".to_json_str()", "source_file": "src/models.py", - "source_location": "L165" + "source_location": "L169" + }, + { + "id": "src_models_classificationresult_to_dict", + "label": ".to_dict()", + "_callable": true, + "_origin": "ast", + "community": 100, + "community_name": "ClassificationError", + "file_type": "code", + "norm_label": ".to_dict()", + "source_file": "src/models.py", + "source_location": "L134" }, { "id": "src_models_classificationresult_to_json_str", @@ -381,71 +422,23 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", "norm_label": ".to_json_str()", "source_file": "src/models.py", - "source_location": "L148" + "source_location": "L150" }, { - "id": "tests_test_cli_test_cli_empty_content_file", - "label": "test_cli_empty_content_file()", + "id": "src_models_relatedentity_from_dict", + "label": ".from_dict()", "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", - "norm_label": "test_cli_empty_content_file()", - "source_file": "tests/test_cli.py", - "source_location": "L68" - }, - { - "id": "tests_test_cli_test_cli_missing_ecp_file", - "label": "test_cli_missing_ecp_file()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "test_cli_missing_ecp_file()", - "source_file": "tests/test_cli.py", - "source_location": "L56" - }, - { - "id": "tests_test_cli_test_cli_missing_required_ecp_field", - "label": "test_cli_missing_required_ecp_field()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "test_cli_missing_required_ecp_field()", - "source_file": "tests/test_cli.py", - "source_location": "L89" - }, - { - "id": "tests_test_cli_test_cli_output_file", - "label": "test_cli_output_file()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "test_cli_output_file()", - "source_file": "tests/test_cli.py", - "source_location": "L32" - }, - { - "id": "tests_test_cli_test_cli_success_stdout", - "label": "test_cli_success_stdout()", - "_callable": true, - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "test_cli_success_stdout()", - "source_file": "tests/test_cli.py", - "source_location": "L9" + "norm_label": ".from_dict()", + "source_file": "src/models.py", + "source_location": "L37" }, { "id": "tests_test_models_test_classification_error_serialization", @@ -453,7 +446,7 @@ "_callable": true, "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", "norm_label": "test_classification_error_serialization()", "source_file": "tests/test_models.py", @@ -483,18 +476,6 @@ "source_file": "src/models.py", "source_location": "L105" }, - { - "id": "src_models_relatedentity_from_dict", - "label": ".from_dict()", - "_callable": true, - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": ".from_dict()", - "source_file": "src/models.py", - "source_location": "L37" - }, { "id": "tests_test_benchmark_24_classifier", "label": "classifier()", @@ -505,7 +486,7 @@ "file_type": "code", "norm_label": "classifier()", "source_file": "tests/test_benchmark_24.py", - "source_location": "L25" + "source_location": "L23" }, { "id": "tests_test_benchmark_24_test_benchmark_case", @@ -517,7 +498,7 @@ "file_type": "code", "norm_label": "test_benchmark_case()", "source_file": "tests/test_benchmark_24.py", - "source_location": "L30" + "source_location": "L28" }, { "id": "tests_test_models_test_ecp_snapshot_defaults", @@ -556,64 +537,652 @@ "source_location": "L15" }, { - "id": "src_adapters_base_basenlpadapter_disambiguate", - "label": ".disambiguate()", - "_callable": true, - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": ".disambiguate()", - "source_file": "src/adapters/base.py", - "source_location": "L24" - }, - { - "id": "src_adapters_base_basenlpadapter_evaluate_similarity", + "id": "src_adapters_embeddings_localembeddingsadapter_evaluate_similarity", "label": ".evaluate_similarity()", "_callable": true, "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "code", "norm_label": ".evaluate_similarity()", - "source_file": "src/adapters/base.py", - "source_location": "L19" + "source_file": "src/adapters/embeddings.py", + "source_location": "L31" }, { - "id": "src_adapters_base_basenlpadapter_is_available", + "id": "src_adapters_embeddings_localembeddingsadapter_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/adapters/embeddings.py", + "source_location": "L16" + }, + { + "id": "src_adapters_embeddings_localembeddingsadapter_is_available", "label": ".is_available()", "_callable": true, "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "code", "norm_label": ".is_available()", - "source_file": "src/adapters/base.py", - "source_location": "L14" + "source_file": "src/adapters/embeddings.py", + "source_location": "L23" }, { - "id": "src_models_classificationresult_to_dict", - "label": ".to_dict()", + "id": "src_adapters_llm_llmfallbackadapter_disambiguate", + "label": ".disambiguate()", "_callable": true, "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "code", - "norm_label": ".to_dict()", - "source_file": "src/models.py", - "source_location": "L134" + "norm_label": ".disambiguate()", + "source_file": "src/adapters/llm.py", + "source_location": "L28" }, { - "id": "tests_test_models_test_classification_result_serialization", - "label": "test_classification_result_serialization()", + "id": "src_adapters_llm_llmfallbackadapter_evaluate_similarity", + "label": ".evaluate_similarity()", "_callable": true, "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "code", - "norm_label": "test_classification_result_serialization()", - "source_file": "tests/test_models.py", - "source_location": "L70" + "norm_label": ".evaluate_similarity()", + "source_file": "src/adapters/llm.py", + "source_location": "L25" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/adapters/llm.py", + "source_location": "L18" + }, + { + "id": "src_adapters_llm_llmfallbackadapter_is_available", + "label": ".is_available()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": ".is_available()", + "source_file": "src/adapters/llm.py", + "source_location": "L22" + }, + { + "id": "src_classifier_inherenceclassifier_init", + "label": ".__init__()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": ".__init__()", + "source_file": "src/classifier.py", + "source_location": "L44" + }, + { + "id": "tests_test_adapters_test_classifier_with_adapter_flags", + "label": "test_classifier_with_adapter_flags()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "test_classifier_with_adapter_flags()", + "source_file": "tests/test_adapters.py", + "source_location": "L20" + }, + { + "id": "tests_test_adapters_test_embeddings_adapter_interface", + "label": "test_embeddings_adapter_interface()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "test_embeddings_adapter_interface()", + "source_file": "tests/test_adapters.py", + "source_location": "L9" + }, + { + "id": "tests_test_adapters_test_llm_adapter_interface", + "label": "test_llm_adapter_interface()", + "_callable": true, + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "test_llm_adapter_interface()", + "source_file": "tests/test_adapters.py", + "source_location": "L15" + }, + { + "id": "scripts_select_article_extractor_break_priority_tie", + "label": "break_priority_tie()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "break_priority_tie()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L280" + }, + { + "id": "scripts_select_article_extractor_calculate_consensus_metrics", + "label": "calculate_consensus_metrics()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "calculate_consensus_metrics()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L234" + }, + { + "id": "scripts_select_article_extractor_form_active_set", + "label": "form_active_set()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "form_active_set()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L211" + }, + { + "id": "scripts_select_article_extractor_main", + "label": "main()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "main()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L544" + }, + { + "id": "scripts_select_article_extractor_parse_args", + "label": "parse_args()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "parse_args()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L523" + }, + { + "id": "scripts_select_article_extractor_select_with_consensus", + "label": "select_with_consensus()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "select_with_consensus()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L289" + }, + { + "id": "scripts_select_article_extractor_select_without_consensus", + "label": "select_without_consensus()", + "_callable": true, + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "select_without_consensus()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L322" + }, + { + "id": "scripts_select_article_extractor_extract_candidate_data", + "label": "extract_candidate_data()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "extract_candidate_data()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L167" + }, + { + "id": "scripts_select_article_extractor_select_article_extractor", + "label": "select_article_extractor()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "select_article_extractor()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L373" + }, + { + "id": "tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", + "label": "test_article_1_regression_technical_tie_markdown_images()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_article_1_regression_technical_tie_markdown_images()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L363" + }, + { + "id": "tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", + "label": "test_ct_001_three_candidates_clear_winner()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_001_three_candidates_clear_winner()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L115" + }, + { + "id": "tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", + "label": "test_ct_002_technical_tie_smallest_shingles()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_002_technical_tie_smallest_shingles()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L128" + }, + { + "id": "tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", + "label": "test_ct_003_technical_tie_priority_fallback()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_003_technical_tie_priority_fallback()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L140" + }, + { + "id": "tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", + "label": "test_ct_004_three_candidates_no_consensus()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_004_three_candidates_no_consensus()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L161" + }, + { + "id": "tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", + "label": "test_ct_005_two_candidates_no_consensus()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_005_two_candidates_no_consensus()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L176" + }, + { + "id": "tests_test_select_article_extractor_test_ct_006_single_usable_candidate", + "label": "test_ct_006_single_usable_candidate()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_006_single_usable_candidate()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L190" + }, + { + "id": "tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", + "label": "test_ct_007_degraded_candidates_only()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_007_degraded_candidates_only()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L202" + }, + { + "id": "tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", + "label": "test_ct_008_all_candidates_unavailable()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_008_all_candidates_unavailable()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L214" + }, + { + "id": "tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", + "label": "test_ct_009_small_fragment_loses_due_to_low_coverage()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_009_small_fragment_loses_due_to_low_coverage()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L226" + }, + { + "id": "tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", + "label": "test_ct_010_excessive_boilerplate_loses_due_to_low_support()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_010_excessive_boilerplate_loses_due_to_low_support()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L243" + }, + { + "id": "tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", + "label": "test_ct_011_partial_content_loses_due_to_low_coverage()", + "_callable": true, + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "test_ct_011_partial_content_loses_due_to_low_coverage()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L259" + }, + { + "id": "scripts_select_article_extractor_atomic_save_json", + "label": "atomic_save_json()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "atomic_save_json()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L430" + }, + { + "id": "scripts_select_article_extractor_process_batch", + "label": "process_batch()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "process_batch()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L452" + }, + { + "id": "tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", + "label": "test_ct_012_recalculate_existing_selected_extractor()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_ct_012_recalculate_existing_selected_extractor()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L272" + }, + { + "id": "tests_test_select_article_extractor_test_ct_013_empty_articles_list", + "label": "test_ct_013_empty_articles_list()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_ct_013_empty_articles_list()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L298" + }, + { + "id": "tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", + "label": "test_ct_014_invalid_json_fails_atomically()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_ct_014_invalid_json_fails_atomically()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L317" + }, + { + "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", + "label": "test_e2e_cli_subprocess_default_naming()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_e2e_cli_subprocess_default_naming()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L520" + }, + { + "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", + "label": "test_e2e_cli_subprocess_invalid_input()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_e2e_cli_subprocess_invalid_input()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L548" + }, + { + "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", + "label": "test_e2e_cli_subprocess_missing_file()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_e2e_cli_subprocess_missing_file()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L561" + }, + { + "id": "tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", + "label": "test_e2e_cli_subprocess_real_execution()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_e2e_cli_subprocess_real_execution()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L483" + }, + { + "id": "tests_test_select_article_extractor_test_integration_large_batch_determinism", + "label": "test_integration_large_batch_determinism()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_integration_large_batch_determinism()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L397" + }, + { + "id": "tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", + "label": "test_integration_pipeline_downstream_consumer()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_integration_pipeline_downstream_consumer()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L446" + }, + { + "id": "tests_test_select_article_extractor_test_integration_reference_file", + "label": "test_integration_reference_file()", + "_callable": true, + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "test_integration_reference_file()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L334" + }, + { + "id": "scripts_select_article_extractor_generate_shingles", + "label": "generate_shingles()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "generate_shingles()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L147" + }, + { + "id": "scripts_select_article_extractor_normalize_text", + "label": "normalize_text()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "normalize_text()", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L106" + }, + { + "id": "tests_test_select_article_extractor_test_generate_shingles_empty", + "label": "test_generate_shingles_empty()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_generate_shingles_empty()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L106" + }, + { + "id": "tests_test_select_article_extractor_test_generate_shingles_short_text", + "label": "test_generate_shingles_short_text()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_generate_shingles_short_text()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L98" + }, + { + "id": "tests_test_select_article_extractor_test_generate_shingles_sliding_window", + "label": "test_generate_shingles_sliding_window()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_generate_shingles_sliding_window()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L90" + }, + { + "id": "tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", + "label": "test_normalize_text_empty_and_invalid()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_normalize_text_empty_and_invalid()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L40" + }, + { + "id": "tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", + "label": "test_normalize_text_html_entities_and_tags()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_normalize_text_html_entities_and_tags()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L47" + }, + { + "id": "tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", + "label": "test_normalize_text_markdown_images_stripped_while_links_preserved()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_normalize_text_markdown_images_stripped_while_links_preserved()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L59" + }, + { + "id": "tests_test_select_article_extractor_test_normalize_text_markdown_links", + "label": "test_normalize_text_markdown_links()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_normalize_text_markdown_links()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L53" + }, + { + "id": "tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", + "label": "test_normalize_text_nfkc_unicode_and_punctuation()", + "_callable": true, + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_normalize_text_nfkc_unicode_and_punctuation()", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L78" }, { "id": "scripts_extract_google_news_build_parser", @@ -625,7 +1194,7 @@ "file_type": "code", "norm_label": "build_parser()", "source_file": "scripts/extract_google_news.py", - "source_location": "L338" + "source_location": "L336" }, { "id": "scripts_extract_google_news_main", @@ -637,7 +1206,7 @@ "file_type": "code", "norm_label": "main()", "source_file": "scripts/extract_google_news.py", - "source_location": "L405" + "source_location": "L403" }, { "id": "tests_test_extract_google_news_test_cli_empty_query_error", @@ -649,7 +1218,7 @@ "file_type": "code", "norm_label": "test_cli_empty_query_error()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L263" + "source_location": "L253" }, { "id": "tests_test_extract_google_news_test_cli_execution_file_output", @@ -661,7 +1230,7 @@ "file_type": "code", "norm_label": "test_cli_execution_file_output()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L242" + "source_location": "L234" }, { "id": "tests_test_extract_google_news_test_cli_execution_stdout", @@ -673,7 +1242,7 @@ "file_type": "code", "norm_label": "test_cli_execution_stdout()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L217" + "source_location": "L213" }, { "id": "tests_test_extract_google_news_test_cli_network_error_handling", @@ -685,7 +1254,7 @@ "file_type": "code", "norm_label": "test_cli_network_error_handling()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L272" + "source_location": "L262" }, { "id": "tests_test_extract_google_news_test_e2e_cli_live_file_output", @@ -697,7 +1266,43 @@ "file_type": "code", "norm_label": "test_e2e_cli_live_file_output()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L328" + "source_location": "L318" + }, + { + "id": "src_adapters_base_basenlpadapter_disambiguate", + "label": ".disambiguate()", + "_callable": true, + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "code", + "norm_label": ".disambiguate()", + "source_file": "src/adapters/base.py", + "source_location": "L22" + }, + { + "id": "src_adapters_base_basenlpadapter_evaluate_similarity", + "label": ".evaluate_similarity()", + "_callable": true, + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "code", + "norm_label": ".evaluate_similarity()", + "source_file": "src/adapters/base.py", + "source_location": "L18" + }, + { + "id": "src_adapters_base_basenlpadapter_is_available", + "label": ".is_available()", + "_callable": true, + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "code", + "norm_label": ".is_available()", + "source_file": "src/adapters/base.py", + "source_location": "L14" }, { "id": "src_adapters_embeddings_localembeddingsadapter_disambiguate", @@ -705,143 +1310,23 @@ "_callable": true, "_origin": "ast", "community": 45, - "community_name": "LocalEmbeddingsAdapter", + "community_name": "ClassificationResult", "file_type": "code", "norm_label": ".disambiguate()", "source_file": "src/adapters/embeddings.py", - "source_location": "L35" + "source_location": "L37" }, { - "id": "src_adapters_embeddings_localembeddingsadapter_evaluate_similarity", - "label": ".evaluate_similarity()", + "id": "tests_test_models_test_classification_result_serialization", + "label": "test_classification_result_serialization()", "_callable": true, "_origin": "ast", "community": 45, - "community_name": "LocalEmbeddingsAdapter", + "community_name": "ClassificationResult", "file_type": "code", - "norm_label": ".evaluate_similarity()", - "source_file": "src/adapters/embeddings.py", - "source_location": "L29" - }, - { - "id": "src_adapters_embeddings_localembeddingsadapter_init", - "label": ".__init__()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/adapters/embeddings.py", - "source_location": "L17" - }, - { - "id": "src_adapters_embeddings_localembeddingsadapter_is_available", - "label": ".is_available()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".is_available()", - "source_file": "src/adapters/embeddings.py", - "source_location": "L22" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_disambiguate", - "label": ".disambiguate()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".disambiguate()", - "source_file": "src/adapters/llm.py", - "source_location": "L28" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_evaluate_similarity", - "label": ".evaluate_similarity()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".evaluate_similarity()", - "source_file": "src/adapters/llm.py", - "source_location": "L25" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_init", - "label": ".__init__()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/adapters/llm.py", - "source_location": "L18" - }, - { - "id": "src_adapters_llm_llmfallbackadapter_is_available", - "label": ".is_available()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".is_available()", - "source_file": "src/adapters/llm.py", - "source_location": "L22" - }, - { - "id": "src_classifier_inherenceclassifier_init", - "label": ".__init__()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": ".__init__()", - "source_file": "src/classifier.py", - "source_location": "L47" - }, - { - "id": "tests_test_adapters_test_classifier_with_adapter_flags", - "label": "test_classifier_with_adapter_flags()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": "test_classifier_with_adapter_flags()", - "source_file": "tests/test_adapters.py", - "source_location": "L20" - }, - { - "id": "tests_test_adapters_test_embeddings_adapter_interface", - "label": "test_embeddings_adapter_interface()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": "test_embeddings_adapter_interface()", - "source_file": "tests/test_adapters.py", - "source_location": "L9" - }, - { - "id": "tests_test_adapters_test_llm_adapter_interface", - "label": "test_llm_adapter_interface()", - "_callable": true, - "_origin": "ast", - "community": 45, - "community_name": "LocalEmbeddingsAdapter", - "file_type": "code", - "norm_label": "test_llm_adapter_interface()", - "source_file": "tests/test_adapters.py", - "source_location": "L15" + "norm_label": "test_classification_result_serialization()", + "source_file": "tests/test_models.py", + "source_location": "L70" }, { "id": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", @@ -853,7 +1338,7 @@ "file_type": "code", "norm_label": "test_adversarial_apple_fruit_recipe()", "source_file": "tests/test_adversarial.py", - "source_location": "L40" + "source_location": "L44" }, { "id": "tests_test_adversarial_test_adversarial_related_entity_without_scope_context", @@ -865,7 +1350,7 @@ "file_type": "code", "norm_label": "test_adversarial_related_entity_without_scope_context()", "source_file": "tests/test_adversarial.py", - "source_location": "L63" + "source_location": "L68" }, { "id": "tests_test_adversarial_test_adversarial_sao_paulo_city_vs_fc", @@ -877,7 +1362,7 @@ "file_type": "code", "norm_label": "test_adversarial_sao_paulo_city_vs_fc()", "source_file": "tests/test_adversarial.py", - "source_location": "L15" + "source_location": "L14" }, { "id": "tests_test_adversarial_test_adversarial_subprocess_cli_corrupted_json", @@ -889,7 +1374,7 @@ "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_corrupted_json()", "source_file": "tests/test_adversarial.py", - "source_location": "L193" + "source_location": "L220" }, { "id": "tests_test_adversarial_test_adversarial_subprocess_cli_empty_content", @@ -901,7 +1386,7 @@ "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_empty_content()", "source_file": "tests/test_adversarial.py", - "source_location": "L133" + "source_location": "L148" }, { "id": "tests_test_adversarial_test_adversarial_subprocess_cli_missing_required_field", @@ -913,7 +1398,7 @@ "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_missing_required_field()", "source_file": "tests/test_adversarial.py", - "source_location": "L164" + "source_location": "L185" }, { "id": "tests_test_adversarial_test_adversarial_subprocess_cli_success_stdout", @@ -925,7 +1410,7 @@ "file_type": "code", "norm_label": "test_adversarial_subprocess_cli_success_stdout()", "source_file": "tests/test_adversarial.py", - "source_location": "L98" + "source_location": "L104" }, { "id": "tests_test_classifier_petrobras_ecp", @@ -937,7 +1422,7 @@ "file_type": "code", "norm_label": "petrobras_ecp()", "source_file": "tests/test_classifier.py", - "source_location": "L9" + "source_location": "L10" }, { "id": "tests_test_classifier_test_contextual_inherent", @@ -949,7 +1434,7 @@ "file_type": "code", "norm_label": "test_contextual_inherent()", "source_file": "tests/test_classifier.py", - "source_location": "L48" + "source_location": "L49" }, { "id": "tests_test_classifier_test_direct_inherent", @@ -961,7 +1446,7 @@ "file_type": "code", "norm_label": "test_direct_inherent()", "source_file": "tests/test_classifier.py", - "source_location": "L32" + "source_location": "L33" }, { "id": "tests_test_classifier_test_negative_anchor_suppression", @@ -973,7 +1458,7 @@ "file_type": "code", "norm_label": "test_negative_anchor_suppression()", "source_file": "tests/test_classifier.py", - "source_location": "L90" + "source_location": "L91" }, { "id": "tests_test_classifier_test_not_related", @@ -985,7 +1470,7 @@ "file_type": "code", "norm_label": "test_not_related()", "source_file": "tests/test_classifier.py", - "source_location": "L77" + "source_location": "L78" }, { "id": "tests_test_classifier_test_tangential_inherent", @@ -997,7 +1482,7 @@ "file_type": "code", "norm_label": "test_tangential_inherent()", "source_file": "tests/test_classifier.py", - "source_location": "L63" + "source_location": "L64" }, { "id": "src_classifier_count_phrase_occurrences", @@ -1009,7 +1494,7 @@ "file_type": "code", "norm_label": "count_phrase_occurrences()", "source_file": "src/classifier.py", - "source_location": "L33" + "source_location": "L30" }, { "id": "src_classifier_inherenceclassifier_classify", @@ -1021,7 +1506,7 @@ "file_type": "code", "norm_label": ".classify()", "source_file": "src/classifier.py", - "source_location": "L61" + "source_location": "L60" }, { "id": "src_classifier_match_phrase_in_text", @@ -1033,7 +1518,7 @@ "file_type": "code", "norm_label": "match_phrase_in_text()", "source_file": "src/classifier.py", - "source_location": "L20" + "source_location": "L17" }, { "id": "src_language_detect_language", @@ -1045,7 +1530,7 @@ "file_type": "code", "norm_label": "detect_language()", "source_file": "src/language.py", - "source_location": "L85" + "source_location": "L477" }, { "id": "src_language_extract_words", @@ -1057,7 +1542,7 @@ "file_type": "code", "norm_label": "extract_words()", "source_file": "src/language.py", - "source_location": "L80" + "source_location": "L472" }, { "id": "src_language_normalize_text", @@ -1069,7 +1554,43 @@ "file_type": "code", "norm_label": "normalize_text()", "source_file": "src/language.py", - "source_location": "L70" + "source_location": "L462" + }, + { + "id": "src_parser_extract_evidence_snippets", + "label": "extract_evidence_snippets()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "code", + "norm_label": "extract_evidence_snippets()", + "source_file": "src/parser.py", + "source_location": "L50" + }, + { + "id": "src_parser_extract_sentences", + "label": "extract_sentences()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "code", + "norm_label": "extract_sentences()", + "source_file": "src/parser.py", + "source_location": "L42" + }, + { + "id": "src_parser_strip_markdown", + "label": "strip_markdown()", + "_callable": true, + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "code", + "norm_label": "strip_markdown()", + "source_file": "src/parser.py", + "source_location": "L8" }, { "id": "tests_test_language_test_detect_english", @@ -1081,7 +1602,7 @@ "file_type": "code", "norm_label": "test_detect_english()", "source_file": "tests/test_language.py", - "source_location": "L19" + "source_location": "L21" }, { "id": "tests_test_language_test_detect_french", @@ -1093,7 +1614,7 @@ "file_type": "code", "norm_label": "test_detect_french()", "source_file": "tests/test_language.py", - "source_location": "L47" + "source_location": "L51" }, { "id": "tests_test_language_test_detect_german", @@ -1105,7 +1626,7 @@ "file_type": "code", "norm_label": "test_detect_german()", "source_file": "tests/test_language.py", - "source_location": "L33" + "source_location": "L37" }, { "id": "tests_test_language_test_detect_italian", @@ -1117,7 +1638,7 @@ "file_type": "code", "norm_label": "test_detect_italian()", "source_file": "tests/test_language.py", - "source_location": "L40" + "source_location": "L44" }, { "id": "tests_test_language_test_detect_portuguese", @@ -1129,7 +1650,7 @@ "file_type": "code", "norm_label": "test_detect_portuguese()", "source_file": "tests/test_language.py", - "source_location": "L12" + "source_location": "L14" }, { "id": "tests_test_language_test_detect_spanish", @@ -1141,7 +1662,7 @@ "file_type": "code", "norm_label": "test_detect_spanish()", "source_file": "tests/test_language.py", - "source_location": "L26" + "source_location": "L28" }, { "id": "tests_test_language_test_empty_language", @@ -1153,7 +1674,7 @@ "file_type": "code", "norm_label": "test_empty_language()", "source_file": "tests/test_language.py", - "source_location": "L54" + "source_location": "L58" }, { "id": "tests_test_language_test_normalize_text", @@ -1167,49 +1688,13 @@ "source_file": "tests/test_language.py", "source_location": "L6" }, - { - "id": "src_parser_extract_evidence_snippets", - "label": "extract_evidence_snippets()", - "_callable": true, - "_origin": "ast", - "community": 48, - "community_name": "classifier.py", - "file_type": "code", - "norm_label": "extract_evidence_snippets()", - "source_file": "src/parser.py", - "source_location": "L51" - }, - { - "id": "src_parser_extract_sentences", - "label": "extract_sentences()", - "_callable": true, - "_origin": "ast", - "community": 48, - "community_name": "classifier.py", - "file_type": "code", - "norm_label": "extract_sentences()", - "source_file": "src/parser.py", - "source_location": "L43" - }, - { - "id": "src_parser_strip_markdown", - "label": "strip_markdown()", - "_callable": true, - "_origin": "ast", - "community": 48, - "community_name": "classifier.py", - "file_type": "code", - "norm_label": "strip_markdown()", - "source_file": "src/parser.py", - "source_location": "L9" - }, { "id": "tests_test_models_test_extract_evidence_snippets", "label": "test_extract_evidence_snippets()", "_callable": true, "_origin": "ast", - "community": 48, - "community_name": "classifier.py", + "community": 47, + "community_name": "detect_language", "file_type": "code", "norm_label": "test_extract_evidence_snippets()", "source_file": "tests/test_models.py", @@ -1220,13 +1705,109 @@ "label": "test_parser_strip_markdown()", "_callable": true, "_origin": "ast", - "community": 48, - "community_name": "classifier.py", + "community": 47, + "community_name": "detect_language", "file_type": "code", "norm_label": "test_parser_strip_markdown()", "source_file": "tests/test_models.py", "source_location": "L100" }, + { + "id": "classify_emit_error", + "label": "emit_error()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "emit_error()", + "source_file": "classify.py", + "source_location": "L72" + }, + { + "id": "classify_main", + "label": "main()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "main()", + "source_file": "classify.py", + "source_location": "L97" + }, + { + "id": "classify_parse_args", + "label": "parse_args()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "parse_args()", + "source_file": "classify.py", + "source_location": "L27" + }, + { + "id": "tests_test_cli_test_cli_empty_content_file", + "label": "test_cli_empty_content_file()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "test_cli_empty_content_file()", + "source_file": "tests/test_cli.py", + "source_location": "L85" + }, + { + "id": "tests_test_cli_test_cli_missing_ecp_file", + "label": "test_cli_missing_ecp_file()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "test_cli_missing_ecp_file()", + "source_file": "tests/test_cli.py", + "source_location": "L73" + }, + { + "id": "tests_test_cli_test_cli_missing_required_ecp_field", + "label": "test_cli_missing_required_ecp_field()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "test_cli_missing_required_ecp_field()", + "source_file": "tests/test_cli.py", + "source_location": "L111" + }, + { + "id": "tests_test_cli_test_cli_output_file", + "label": "test_cli_output_file()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "test_cli_output_file()", + "source_file": "tests/test_cli.py", + "source_location": "L39" + }, + { + "id": "tests_test_cli_test_cli_success_stdout", + "label": "test_cli_success_stdout()", + "_callable": true, + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "test_cli_success_stdout()", + "source_file": "tests/test_cli.py", + "source_location": "L8" + }, { "id": "scripts_extract_article_contents_articlecrawler_close", "label": ".close()", @@ -1237,7 +1818,7 @@ "file_type": "code", "norm_label": ".close()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L472" + "source_location": "L496" }, { "id": "scripts_extract_article_contents_articlecrawler_crawl", @@ -1249,7 +1830,7 @@ "file_type": "code", "norm_label": ".crawl()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L487" + "source_location": "L511" }, { "id": "scripts_extract_article_contents_articlecrawler_enter", @@ -1261,7 +1842,7 @@ "file_type": "code", "norm_label": ".__enter__()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L480" + "source_location": "L504" }, { "id": "scripts_extract_article_contents_articlecrawler_exit", @@ -1273,7 +1854,7 @@ "file_type": "code", "norm_label": ".__exit__()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L484" + "source_location": "L508" }, { "id": "scripts_extract_article_contents_articlecrawler_init", @@ -1285,7 +1866,7 @@ "file_type": "code", "norm_label": ".__init__()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L461" + "source_location": "L485" }, { "id": "scripts_extract_article_contents_articlecrawler_start", @@ -1297,7 +1878,7 @@ "file_type": "code", "norm_label": ".start()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L466" + "source_location": "L490" }, { "id": "scripts_extract_article_contents_extract_all_engines", @@ -1309,7 +1890,7 @@ "file_type": "code", "norm_label": "extract_all_engines()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L403" + "source_location": "L427" }, { "id": "scripts_extract_article_contents_extractedarticle_to_dict", @@ -1321,7 +1902,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L190" + "source_location": "L187" }, { "id": "scripts_extract_article_contents_extractionbatchreport_to_dict", @@ -1333,7 +1914,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L215" + "source_location": "L212" }, { "id": "scripts_extract_article_contents_inputarticle_to_dict", @@ -1345,7 +1926,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L46" + "source_location": "L43" }, { "id": "scripts_extract_article_contents_load_search_json", @@ -1357,7 +1938,7 @@ "file_type": "code", "norm_label": "load_search_json()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L516" + "source_location": "L540" }, { "id": "scripts_extract_article_contents_log_info", @@ -1369,7 +1950,7 @@ "file_type": "code", "norm_label": "log_info()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L509" + "source_location": "L533" }, { "id": "scripts_extract_article_contents_main", @@ -1381,7 +1962,7 @@ "file_type": "code", "norm_label": "main()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L718" + "source_location": "L742" }, { "id": "scripts_extract_article_contents_newspaperdata_to_dict", @@ -1393,7 +1974,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L129" + "source_location": "L126" }, { "id": "scripts_extract_article_contents_newspaperextractor_extract", @@ -1405,7 +1986,7 @@ "file_type": "code", "norm_label": ".extract()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L314" + "source_location": "L336" }, { "id": "scripts_extract_article_contents_parse_arguments", @@ -1417,7 +1998,7 @@ "file_type": "code", "norm_label": "parse_arguments()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L664" + "source_location": "L688" }, { "id": "scripts_extract_article_contents_process_batch", @@ -1429,7 +2010,7 @@ "file_type": "code", "norm_label": "process_batch()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L551" + "source_location": "L575" }, { "id": "scripts_extract_article_contents_readabilitydata_to_dict", @@ -1441,7 +2022,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L165" + "source_location": "L162" }, { "id": "scripts_extract_article_contents_readabilityextractor_extract", @@ -1453,7 +2034,7 @@ "file_type": "code", "norm_label": ".extract()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L375" + "source_location": "L399" }, { "id": "scripts_extract_article_contents_save_extracted_json", @@ -1465,7 +2046,7 @@ "file_type": "code", "norm_label": "save_extracted_json()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L544" + "source_location": "L568" }, { "id": "scripts_extract_article_contents_trafilaturadata_to_dict", @@ -1477,7 +2058,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L80" + "source_location": "L77" }, { "id": "scripts_extract_article_contents_trafilaturaextractor_extract", @@ -1489,7 +2070,7 @@ "file_type": "code", "norm_label": ".extract()", "source_file": "scripts/extract_article_contents.py", - "source_location": "L235" + "source_location": "L232" }, { "id": "tests_test_extract_article_contents_sample_input_json", @@ -1501,7 +2082,7 @@ "file_type": "code", "norm_label": "sample_input_json()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L63" + "source_location": "L61" }, { "id": "tests_test_extract_article_contents_test_cli_main_missing_input_file", @@ -1513,7 +2094,7 @@ "file_type": "code", "norm_label": "test_cli_main_missing_input_file()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L311" + "source_location": "L305" }, { "id": "tests_test_extract_article_contents_test_cli_main_success", @@ -1525,7 +2106,7 @@ "file_type": "code", "norm_label": "test_cli_main_success()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L296" + "source_location": "L291" }, { "id": "tests_test_extract_article_contents_test_crawler_error_isolation", @@ -1537,7 +2118,7 @@ "file_type": "code", "norm_label": "test_crawler_error_isolation()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L248" + "source_location": "L242" }, { "id": "tests_test_extract_article_contents_test_e2e_cli_live_execution", @@ -1549,7 +2130,7 @@ "file_type": "code", "norm_label": "test_e2e_cli_live_execution()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L366" + "source_location": "L360" }, { "id": "tests_test_extract_article_contents_test_e2e_live_article_extraction", @@ -1561,7 +2142,7 @@ "file_type": "code", "norm_label": "test_e2e_live_article_extraction()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L322" + "source_location": "L316" }, { "id": "tests_test_extract_article_contents_test_extract_all_engines", @@ -1573,7 +2154,7 @@ "file_type": "code", "norm_label": "test_extract_all_engines()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L221" + "source_location": "L215" }, { "id": "tests_test_extract_article_contents_test_extractor_error_isolation_on_faulty_engine", @@ -1585,7 +2166,7 @@ "file_type": "code", "norm_label": "test_extractor_error_isolation_on_faulty_engine()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L235" + "source_location": "L229" }, { "id": "tests_test_extract_article_contents_test_input_article_creation", @@ -1597,7 +2178,7 @@ "file_type": "code", "norm_label": "test_input_article_creation()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L96" + "source_location": "L94" }, { "id": "tests_test_extract_article_contents_test_load_search_json_invalid_file", @@ -1609,7 +2190,7 @@ "file_type": "code", "norm_label": "test_load_search_json_invalid_file()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L120" + "source_location": "L118" }, { "id": "tests_test_extract_article_contents_test_load_search_json_valid", @@ -1621,7 +2202,7 @@ "file_type": "code", "norm_label": "test_load_search_json_valid()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L112" + "source_location": "L110" }, { "id": "tests_test_extract_article_contents_test_newspaper_extractor", @@ -1633,7 +2214,7 @@ "file_type": "code", "norm_label": "test_newspaper_extractor()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L199" + "source_location": "L195" }, { "id": "tests_test_extract_article_contents_test_process_batch_with_limit", @@ -1645,7 +2226,7 @@ "file_type": "code", "norm_label": "test_process_batch_with_limit()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L277" + "source_location": "L271" }, { "id": "tests_test_extract_article_contents_test_readability_extractor", @@ -1657,7 +2238,7 @@ "file_type": "code", "norm_label": "test_readability_extractor()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L211" + "source_location": "L205" }, { "id": "tests_test_extract_article_contents_test_save_extracted_json", @@ -1669,7 +2250,7 @@ "file_type": "code", "norm_label": "test_save_extracted_json()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L126" + "source_location": "L124" }, { "id": "tests_test_extract_article_contents_test_trafilatura_extractor", @@ -1681,7 +2262,7 @@ "file_type": "code", "norm_label": "test_trafilatura_extractor()", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L190" + "source_location": "L186" }, { "id": "scripts_extract_google_news_extract_google_news", @@ -1693,7 +2274,7 @@ "file_type": "code", "norm_label": "extract_google_news()", "source_file": "scripts/extract_google_news.py", - "source_location": "L299" + "source_location": "L297" }, { "id": "scripts_extract_google_news_fetch_rss_content", @@ -1705,7 +2286,7 @@ "file_type": "code", "norm_label": "_fetch_rss_content()", "source_file": "scripts/extract_google_news.py", - "source_location": "L255" + "source_location": "L253" }, { "id": "scripts_extract_google_news_get_hl_gl_ceid", @@ -1717,7 +2298,7 @@ "file_type": "code", "norm_label": "get_hl_gl_ceid()", "source_file": "scripts/extract_google_news.py", - "source_location": "L109" + "source_location": "L107" }, { "id": "scripts_extract_google_news_normalize_text_for_comparison", @@ -1729,7 +2310,7 @@ "file_type": "code", "norm_label": "_normalize_text_for_comparison()", "source_file": "scripts/extract_google_news.py", - "source_location": "L153" + "source_location": "L151" }, { "id": "scripts_extract_google_news_parse_google_news_rss", @@ -1741,7 +2322,7 @@ "file_type": "code", "norm_label": "parse_google_news_rss()", "source_file": "scripts/extract_google_news.py", - "source_location": "L158" + "source_location": "L156" }, { "id": "scripts_extract_google_news_resolve_articles_urls", @@ -1753,7 +2334,7 @@ "file_type": "code", "norm_label": "resolve_articles_urls()", "source_file": "scripts/extract_google_news.py", - "source_location": "L222" + "source_location": "L220" }, { "id": "tests_test_extract_google_news_test_parse_google_news_rss_with_fixture", @@ -1777,7 +2358,7 @@ "file_type": "code", "norm_label": "test_resolve_articles_urls_batch()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L163" + "source_location": "L161" }, { "id": "scripts_extract_google_news_extractionresult_to_dict", @@ -1789,7 +2370,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_google_news.py", - "source_location": "L97" + "source_location": "L95" }, { "id": "scripts_extract_google_news_newsarticle_to_dict", @@ -1801,7 +2382,7 @@ "file_type": "code", "norm_label": ".to_dict()", "source_file": "scripts/extract_google_news.py", - "source_location": "L75" + "source_location": "L73" }, { "id": "tests_test_extract_google_news_test_e2e_extract_google_news_live_pipeline", @@ -1813,7 +2394,7 @@ "file_type": "code", "norm_label": "test_e2e_extract_google_news_live_pipeline()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L312" + "source_location": "L302" }, { "id": "scripts_extract_google_news_resolve_article_url", @@ -1825,7 +2406,7 @@ "file_type": "code", "norm_label": "resolve_article_url()", "source_file": "scripts/extract_google_news.py", - "source_location": "L209" + "source_location": "L207" }, { "id": "tests_test_extract_google_news_test_e2e_resolve_real_google_news_url", @@ -1837,7 +2418,7 @@ "file_type": "code", "norm_label": "test_e2e_resolve_real_google_news_url()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L291" + "source_location": "L281" }, { "id": "tests_test_extract_google_news_test_get_hl_gl_ceid_default_mappings", @@ -1897,7 +2478,7 @@ "file_type": "code", "norm_label": "test_resolve_article_url_success()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L150" + "source_location": "L148" }, { "id": "scripts_extract_google_news_searchquery_clean_keyword", @@ -1909,7 +2490,7 @@ "file_type": "code", "norm_label": ".clean_keyword()", "source_file": "scripts/extract_google_news.py", - "source_location": "L53" + "source_location": "L51" }, { "id": "scripts_extract_google_news_searchquery_clean_language", @@ -1921,7 +2502,7 @@ "file_type": "code", "norm_label": ".clean_language()", "source_file": "scripts/extract_google_news.py", - "source_location": "L57" + "source_location": "L55" }, { "id": "scripts_extract_google_news_searchquery_clean_locale", @@ -1933,7 +2514,7 @@ "file_type": "code", "norm_label": ".clean_locale()", "source_file": "scripts/extract_google_news.py", - "source_location": "L61" + "source_location": "L59" }, { "id": "scripts_extract_google_news_searchquery_post_init", @@ -1957,7 +2538,7 @@ "file_type": "code", "norm_label": "test_extract_google_news_orchestration_mocked()", "source_file": "tests/test_extract_google_news.py", - "source_location": "L188" + "source_location": "L186" }, { "id": "tests_test_extract_google_news_test_search_query_validation", @@ -2645,93 +3226,16 @@ "source_location": "L11" }, { - "id": "classify", - "label": "classify.py", + "id": "src_models_py_any", + "label": "Any", "_origin": "ast", "community": 100, - "community_name": "models.py", + "community_name": "ClassificationError", "file_type": "code", - "norm_label": "classify.py", - "source_file": "classify.py", - "source_location": "L1" - }, - { - "id": "classify_py_namespace", - "label": "Namespace", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "namespace", + "norm_label": "any", "source_file": "", "source_location": "" }, - { - "id": "enum", - "label": "Enum", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "enum", - "source_file": "", - "source_location": "" - }, - { - "id": "src_models", - "label": "models.py", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "models.py", - "source_file": "src/models.py", - "source_location": "L1" - }, - { - "id": "str", - "label": "str", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "str", - "source_file": "", - "source_location": "" - }, - { - "id": "tests_test_cli", - "label": "test_cli.py", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "code", - "norm_label": "test_cli.py", - "source_file": "tests/test_cli.py", - "source_location": "L1" - }, - { - "id": "src_models_rationale_1", - "label": "Data models and validation schemas for Multilingual NLP Entity Inherence\u2026", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "rationale", - "norm_label": "data models and validation schemas for multilingual nlp entity inherence...", - "source_file": "src/models.py", - "source_location": "L1" - }, - { - "id": "tests_test_cli_rationale_1", - "label": "CLI execution tests covering flags, arguments, stdout, and error handling.", - "_origin": "ast", - "community": 100, - "community_name": "models.py", - "file_type": "rationale", - "norm_label": "cli execution tests covering flags, arguments, stdout, and error handling.", - "source_file": "tests/test_cli.py", - "source_location": "L1" - }, { "id": "parametrize", "label": "parametrize", @@ -2743,17 +3247,6 @@ "source_file": "", "source_location": "" }, - { - "id": "src_models_py_any", - "label": "Any", - "_origin": "ast", - "community": 101, - "community_name": "ECPSnapshot", - "file_type": "code", - "norm_label": "any", - "source_file": "", - "source_location": "" - }, { "id": "tests_test_benchmark_24", "label": "test_benchmark_24.py", @@ -2776,6 +3269,17 @@ "source_file": "", "source_location": "" }, + { + "id": "tests_test_models", + "label": "test_models.py", + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "code", + "norm_label": "test_models.py", + "source_file": "tests/test_models.py", + "source_location": "L1" + }, { "id": "tests_test_benchmark_24_rationale_1", "label": "Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence\u2026", @@ -2787,6 +3291,17 @@ "source_file": "tests/test_benchmark_24.py", "source_location": "L1" }, + { + "id": "tests_test_models_rationale_1", + "label": "Unit tests for ECP models, schema validation, and structured error handling.", + "_origin": "ast", + "community": 101, + "community_name": "ECPSnapshot", + "file_type": "rationale", + "norm_label": "unit tests for ecp models, schema validation, and structured error handling.", + "source_file": "tests/test_models.py", + "source_location": "L1" + }, { "id": "specs_001_multilingual_entity_classifier_spec_assumptions", "label": "Assumptions", @@ -3435,125 +3950,92 @@ "source_file": "specs/003-article-content-extractor/tasks.md", "source_location": "L78" }, - { - "id": "abc", - "label": "ABC", - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": "abc", - "source_file": "", - "source_location": "" - }, - { - "id": "src_adapters_base", - "label": "base.py", - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "code", - "norm_label": "base.py", - "source_file": "src/adapters/base.py", - "source_location": "L1" - }, { "id": "src_adapters_embeddings", "label": "embeddings.py", "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "code", "norm_label": "embeddings.py", "source_file": "src/adapters/embeddings.py", "source_location": "L1" }, { - "id": "src_adapters_llm", - "label": "llm.py", + "id": "src_classifier", + "label": "classifier.py", "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "code", - "norm_label": "llm.py", - "source_file": "src/adapters/llm.py", + "norm_label": "classifier.py", + "source_file": "src/classifier.py", "source_location": "L1" }, { - "id": "src_adapters_base_rationale_1", - "label": "Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers.", + "id": "tests_test_adapters", + "label": "test_adapters.py", "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "base abstract adapter interface for optional tier 2 / tier 3 nlp enhancers.", - "source_file": "src/adapters/base.py", + "community_name": "classifier.py", + "file_type": "code", + "norm_label": "test_adapters.py", + "source_file": "tests/test_adapters.py", "source_location": "L1" }, - { - "id": "src_adapters_base_rationale_11", - "label": "Abstract interface for pluggable NLP classification adapters.", - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "abstract interface for pluggable nlp classification adapters.", - "source_file": "src/adapters/base.py", - "source_location": "L11" - }, - { - "id": "src_adapters_base_rationale_15", - "label": "Return True if the underlying provider or model is installed and configured.", - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "return true if the underlying provider or model is installed and configured.", - "source_file": "src/adapters/base.py", - "source_location": "L15" - }, - { - "id": "src_adapters_base_rationale_20", - "label": "Compute semantic similarity score between text and a set of candidate terms.", - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "compute semantic similarity score between text and a set of candidate terms.", - "source_file": "src/adapters/base.py", - "source_location": "L20" - }, - { - "id": "src_adapters_base_rationale_30", - "label": "Optionally refine an ambiguous classification result.", - "_origin": "ast", - "community": 105, - "community_name": "ClassificationResult", - "file_type": "rationale", - "norm_label": "optionally refine an ambiguous classification result.", - "source_file": "src/adapters/base.py", - "source_location": "L30" - }, { "id": "src_adapters_embeddings_rationale_1", "label": "Optional local vector embeddings adapter (Tier 2). Disabled by default.\u2026", "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "rationale", "norm_label": "optional local vector embeddings adapter (tier 2). disabled by default....", "source_file": "src/adapters/embeddings.py", "source_location": "L1" }, { - "id": "src_adapters_llm_rationale_1", - "label": "Optional LLM fallback adapter (Tier 3). Disabled by default. Provides fallback\u2026", + "id": "src_adapters_embeddings_rationale_14", + "label": "Optional adapter for local multilingual semantic vector embeddings.", "_origin": "ast", "community": 105, - "community_name": "ClassificationResult", + "community_name": "classifier.py", "file_type": "rationale", - "norm_label": "optional llm fallback adapter (tier 3). disabled by default. provides fallback...", + "norm_label": "optional adapter for local multilingual semantic vector embeddings.", + "source_file": "src/adapters/embeddings.py", + "source_location": "L14" + }, + { + "id": "src_adapters_llm_rationale_16", + "label": "Optional adapter for LLM fallback boundary disambiguation.", + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "rationale", + "norm_label": "optional adapter for llm fallback boundary disambiguation.", "source_file": "src/adapters/llm.py", + "source_location": "L16" + }, + { + "id": "src_classifier_rationale_1", + "label": "Core deterministic classification engine (Tier 1 core).", + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "rationale", + "norm_label": "core deterministic classification engine (tier 1 core).", + "source_file": "src/classifier.py", + "source_location": "L1" + }, + { + "id": "tests_test_adapters_rationale_1", + "label": "Unit tests for optional adapter interfaces (Tier 2 / Tier 3).", + "_origin": "ast", + "community": 105, + "community_name": "classifier.py", + "file_type": "rationale", + "norm_label": "unit tests for optional adapter interfaces (tier 2 / tier 3).", + "source_file": "tests/test_adapters.py", "source_location": "L1" }, { @@ -3641,14 +4123,14 @@ "source_location": "L80" }, { - "id": "specs_003_article_content_extractor_plan_phase_2_tasks_execution_next_speckit_tasks", - "label": "Phase 2: Tasks & Execution *(Next: `/speckit-tasks`)*", + "id": "specs_003_article_content_extractor_plan_phase_2_tasks_execution_completed", + "label": "Phase 2: Tasks & Execution *(Completed)*", "_origin": "ast", "community": 106, "community_name": "Implementation Plan: Article Content Multi-Engine Extractor", "file_type": "document", "node_kind": "heading", - "norm_label": "phase 2: tasks & execution *(next: `/speckit-tasks`)*", + "norm_label": "phase 2: tasks & execution *(completed)*", "source_file": "specs/003-article-content-extractor/plan.md", "source_location": "L84" }, @@ -4422,13 +4904,13 @@ }, { "id": "specs_003_article_content_extractor_contracts_json_schema", - "label": "json-schema.md", + "label": "003-article-content-extractor/contracts/json-schema.md", "_origin": "ast", "community": 114, "community_name": "JSON Schema Contract: Article Content Multi-Engine Extractor", "file_type": "document", "node_kind": "page", - "norm_label": "json-schema.md", + "norm_label": "003-article-content-extractor/contracts/json-schema.md", "source_file": "specs/003-article-content-extractor/contracts/json-schema.md", "source_location": "L1" }, @@ -4468,6 +4950,1117 @@ "source_file": "specs/003-article-content-extractor/contracts/json-schema.md", "source_location": "L1" }, + { + "id": "docs_prd_deterministic_content_selection", + "label": "prd_deterministic_content_selection.md", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "page", + "norm_label": "prd_deterministic_content_selection.md", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L1" + }, + { + "id": "docs_prd_deterministic_content_selection_10_requisitos_n\u00e3o_funcionais", + "label": "10. Requisitos n\u00e3o funcionais", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "10. requisitos nao funcionais", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L227" + }, + { + "id": "docs_prd_deterministic_content_selection_11_crit\u00e9rios_de_aceite", + "label": "11. Crit\u00e9rios de aceite", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "11. criterios de aceite", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L237" + }, + { + "id": "docs_prd_deterministic_content_selection_12_casos_obrigat\u00f3rios_de_teste", + "label": "12. Casos obrigat\u00f3rios de teste", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "12. casos obrigatorios de teste", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L252" + }, + { + "id": "docs_prd_deterministic_content_selection_13_definition_of_done", + "label": "13. Definition of Done", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "13. definition of done", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L271" + }, + { + "id": "docs_prd_deterministic_content_selection_1_contexto", + "label": "1. Contexto", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "1. contexto", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L7" + }, + { + "id": "docs_prd_deterministic_content_selection_2_objetivo", + "label": "2. Objetivo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "2. objetivo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L13" + }, + { + "id": "docs_prd_deterministic_content_selection_3_1_inclu\u00eddo", + "label": "3.1 Inclu\u00eddo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3.1 incluido", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L19" + }, + { + "id": "docs_prd_deterministic_content_selection_3_2_fora_do_escopo", + "label": "3.2 Fora do escopo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3.2 fora do escopo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L28" + }, + { + "id": "docs_prd_deterministic_content_selection_3_escopo", + "label": "3. Escopo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3. escopo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L17" + }, + { + "id": "docs_prd_deterministic_content_selection_4_premissas", + "label": "4. Premissas", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "4. premissas", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L39" + }, + { + "id": "docs_prd_deterministic_content_selection_5_1_arquivo", + "label": "5.1 Arquivo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "5.1 arquivo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L48" + }, + { + "id": "docs_prd_deterministic_content_selection_5_2_conte\u00fados_comparados", + "label": "5.2 Conte\u00fados comparados", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "5.2 conteudos comparados", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L54" + }, + { + "id": "docs_prd_deterministic_content_selection_5_3_estado_de_um_candidato", + "label": "5.3 Estado de um candidato", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "5.3 estado de um candidato", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L64" + }, + { + "id": "docs_prd_deterministic_content_selection_5_entrada", + "label": "5. Entrada", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "5. entrada", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L46" + }, + { + "id": "docs_prd_deterministic_content_selection_6_1_arquivo", + "label": "6.1 Arquivo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "6.1 arquivo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L78" + }, + { + "id": "docs_prd_deterministic_content_selection_6_2_altera\u00e7\u00e3o_permitida", + "label": "6.2 Altera\u00e7\u00e3o permitida", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "6.2 alteracao permitida", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L86" + }, + { + "id": "docs_prd_deterministic_content_selection_6_3_preserva\u00e7\u00e3o_da_entrada", + "label": "6.3 Preserva\u00e7\u00e3o da entrada", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "6.3 preservacao da entrada", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L100" + }, + { + "id": "docs_prd_deterministic_content_selection_6_sa\u00edda", + "label": "6. Sa\u00edda", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "6. saida", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L76" + }, + { + "id": "docs_prd_deterministic_content_selection_7_1_formar_o_conjunto_ativo", + "label": "7.1 Formar o conjunto ativo", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.1 formar o conjunto ativo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L110" + }, + { + "id": "docs_prd_deterministic_content_selection_7_2_normalizar_os_conte\u00fados", + "label": "7.2 Normalizar os conte\u00fados", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.2 normalizar os conteudos", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L120" + }, + { + "id": "docs_prd_deterministic_content_selection_7_3_gerar_shingles", + "label": "7.3 Gerar shingles", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.3 gerar shingles", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L137" + }, + { + "id": "docs_prd_deterministic_content_selection_7_4_construir_o_consenso", + "label": "7.4 Construir o consenso", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.4 construir o consenso", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L144" + }, + { + "id": "docs_prd_deterministic_content_selection_7_5_selecionar_quando_existe_consenso", + "label": "7.5 Selecionar quando existe consenso", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.5 selecionar quando existe consenso", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L164" + }, + { + "id": "docs_prd_deterministic_content_selection_7_6_selecionar_quando_n\u00e3o_existe_consenso", + "label": "7.6 Selecionar quando n\u00e3o existe consenso", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.6 selecionar quando nao existe consenso", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L178" + }, + { + "id": "docs_prd_deterministic_content_selection_7_7_gravar_a_escolha", + "label": "7.7 Gravar a escolha", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7.7 gravar a escolha", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L190" + }, + { + "id": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "label": "7. Algoritmo determin\u00edstico de sele\u00e7\u00e3o", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "7. algoritmo deterministico de selecao", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L108" + }, + { + "id": "docs_prd_deterministic_content_selection_8_requisitos_funcionais", + "label": "8. Requisitos funcionais", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "8. requisitos funcionais", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L194" + }, + { + "id": "docs_prd_deterministic_content_selection_9_tratamento_de_erros", + "label": "9. Tratamento de erros", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "9. tratamento de erros", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L212" + }, + { + "id": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "label": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "_origin": "ast", + "community": 115, + "community_name": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", + "file_type": "document", + "node_kind": "heading", + "norm_label": "prd \u2014 selecao deterministica da biblioteca de extracao de conteudo", + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L1" + }, + { + "id": "scripts_select_article_extractor", + "label": "select_article_extractor.py", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "select_article_extractor.py", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L1" + }, + { + "id": "scripts_select_article_extractor_py_namespace", + "label": "Namespace", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "code", + "norm_label": "namespace", + "source_file": "", + "source_location": "" + }, + { + "id": "scripts_select_article_extractor_rationale_212", + "label": "Forma o conjunto ativo de candidatos conforme PRD \u00a77.1: 1. Se existir pelo\u2026", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "forma o conjunto ativo de candidatos conforme prd \u00a77.1: 1. se existir pelo...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L212" + }, + { + "id": "scripts_select_article_extractor_rationale_235", + "label": "Constr\u00f3i o conjunto de consenso (shingles presentes em >= 2 candidatos ativos)\u2026", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "constroi o conjunto de consenso (shingles presentes em >= 2 candidatos ativos)...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L235" + }, + { + "id": "scripts_select_article_extractor_rationale_281", + "label": "Aplica a prioridade final estrita: newspaper4k > readability > trafilatura.", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "aplica a prioridade final estrita: newspaper4k > readability > trafilatura.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L281" + }, + { + "id": "scripts_select_article_extractor_rationale_292", + "label": "Seleciona o melhor candidato quando existe consenso (PRD \u00a77.5): 1. Ordenar por\u2026", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "seleciona o melhor candidato quando existe consenso (prd \u00a77.5): 1. ordenar por...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L292" + }, + { + "id": "scripts_select_article_extractor_rationale_323", + "label": "Seleciona o candidato quando N\u00c3O existe consenso (PRD \u00a77.6): - Com 3 candidatos\u2026", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "seleciona o candidato quando nao existe consenso (prd \u00a77.6): - com 3 candidatos...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L323" + }, + { + "id": "scripts_select_article_extractor_rationale_63", + "label": "Representa\u00e7\u00e3o e m\u00e9tricas de um candidato a extrator em um artigo.", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "representacao e metricas de um candidato a extrator em um artigo.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L63" + }, + { + "id": "scripts_select_article_extractor_rationale_91", + "label": "Resultado consolidado do processamento em lote.", + "_origin": "ast", + "community": 116, + "community_name": "select_article_extractor.py", + "file_type": "rationale", + "norm_label": "resultado consolidado do processamento em lote.", + "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": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "2. 5-token shingles & consensus metrics", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L32" + }, + { + "id": "specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", + "label": "3. Regras de Decis\u00e3o, Empate T\u00e9cnico e Desempate Hier\u00e1rquico", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3. regras de decisao, empate tecnico e desempate hierarquico", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L57" + }, + { + "id": "specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", + "label": "4. Estrat\u00e9gia de I/O N\u00e3o Destrutiva e Escrita At\u00f4mica", + "_origin": "ast", + "community": 117, + "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": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "context", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L34" + }, + { + "id": "specs_004_deterministic_content_selection_research_context_59", + "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": "L59" + }, + { + "id": "specs_004_deterministic_content_selection_research_context_91", + "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": "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": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "decisions", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L37" + }, + { + "id": "specs_004_deterministic_content_selection_research_decisions_62", + "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": "L62" + }, + { + "id": "specs_004_deterministic_content_selection_research_decisions_94", + "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": "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": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "rationale", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L106" + }, + { + "id": "specs_004_deterministic_content_selection_research_rationale_51", + "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": "L51" + }, + { + "id": "specs_004_deterministic_content_selection_research_rationale_84", + "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": "L84" + }, + { + "id": "specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", + "label": "Research & Architectural Decisions: Deterministic Content Selection", + "_origin": "ast", + "community": 117, + "community_name": "1. Text Normalization Pipeline", + "file_type": "document", + "node_kind": "heading", + "norm_label": "research & architectural decisions: deterministic content selection", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_dependencies_execution_order", + "label": "Dependencies & Execution Order", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "dependencies & execution order", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L100" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_implementation_for_user_story_1", + "label": "Implementation for User Story 1", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "implementation for user story 1", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L41" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_implementation_for_user_story_2", + "label": "Implementation for User Story 2", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "implementation for user story 2", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L61" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_implementation_for_user_story_3", + "label": "Implementation for User Story 3", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "implementation for user story 3", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L82" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_implementation_strategy", + "label": "Implementation Strategy", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "implementation strategy", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L138" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_incremental_delivery_phases_4_5_6", + "label": "Incremental Delivery (Phases 4, 5 & 6)", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "incremental delivery (phases 4, 5 & 6)", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L145" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_mvp_first_phases_1_2_3", + "label": "MVP First (Phases 1, 2 & 3)", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "mvp first (phases 1, 2 & 3)", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L140" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_parallel_opportunities", + "label": "Parallel Opportunities", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "parallel opportunities", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L129" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_phase_1_setup_shared_infrastructure", + "label": "Phase 1: Setup (Shared Infrastructure)", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 1: setup (shared infrastructure)", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L7" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_phase_2_foundational_data_structures_normalization_engine", + "label": "Phase 2: Foundational (Data Structures & Normalization Engine)", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 2: foundational (data structures & normalization engine)", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L15" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", + "label": "Phase 3: User Story 1 - Deterministic Selection with Text Consensus (Priority: P1) \ud83c\udfaf MVP", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 3: user story 1 - deterministic selection with text consensus (priority: p1) \ud83c\udfaf mvp", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L30" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", + "label": "Phase 4: User Story 2 - Resilient Decision Under Disagreement or Degradation (Priority: P2)", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 4: user story 2 - resilient decision under disagreement or degradation (priority: p2)", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L50" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", + "label": "Phase 5: User Story 3 - Non-Destructive JSON Batch Processing (Priority: P3)", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 5: user story 3 - non-destructive json batch processing (priority: p3)", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L71" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_phase_6_polish_cross_cutting_concerns", + "label": "Phase 6: Polish & Cross-Cutting Concerns", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 6: polish & cross-cutting concerns", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L91" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "label": "Tasks: Deterministic Article Content Selection", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "tasks: deterministic article content selection", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_tests_for_user_story_1", + "label": "Tests for User Story 1 \ud83e\uddea", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "tests for user story 1 \ud83e\uddea", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L36" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_tests_for_user_story_2", + "label": "Tests for User Story 2 \ud83e\uddea", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "tests for user story 2 \ud83e\uddea", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L56" + }, + { + "id": "specs_004_deterministic_content_selection_tasks_tests_for_user_story_3", + "label": "Tests for User Story 3 \ud83e\uddea", + "_origin": "ast", + "community": 118, + "community_name": "Tasks: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "tests for user story 3 \ud83e\uddea", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L77" + }, + { + "id": "scripts_select_article_extractor_py_any", + "label": "Any", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "any", + "source_file": "", + "source_location": "" + }, + { + "id": "scripts_select_article_extractor_py_enum", + "label": "Enum", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "enum", + "source_file": "", + "source_location": "" + }, + { + "id": "scripts_select_article_extractor_py_str", + "label": "str", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "code", + "norm_label": "str", + "source_file": "", + "source_location": "" + }, + { + "id": "scripts_select_article_extractor_rationale_168", + "label": "Extrai campo de texto, erro e calcula tokens/shingles para um motor.", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "extrai campo de texto, erro e calcula tokens/shingles para um motor.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L168" + }, + { + "id": "scripts_select_article_extractor_rationale_34", + "label": "Nomes can\u00f4nicos e cat\u00e1logo fechado dos motores de extra\u00e7\u00e3o.", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "nomes canonicos e catalogo fechado dos motores de extracao.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L34" + }, + { + "id": "scripts_select_article_extractor_rationale_374", + "label": "Orquestrador determin\u00edstico completo para um \u00fanico artigo. Classifica\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "orquestrador deterministico completo para um unico artigo. classifica...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L374" + }, + { + "id": "scripts_select_article_extractor_rationale_42", + "label": "Estado de viabilidade do candidato para forma\u00e7\u00e3o do conjunto ativo.", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "estado de viabilidade do candidato para formacao do conjunto ativo.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L42" + }, + { + "id": "scripts_select_article_extractor_rationale_79", + "label": "Resultado detalhado da sele\u00e7\u00e3o para um artigo individual.", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "resultado detalhado da selecao para um artigo individual.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L79" + }, + { + "id": "tests_test_select_article_extractor_rationale_116", + "label": "CT-001: Tr\u00eas candidatos com consenso e um vencedor claro -> Selecionar o maior\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-001: tres candidatos com consenso e um vencedor claro -> selecionar o maior...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L116" + }, + { + "id": "tests_test_select_article_extractor_rationale_129", + "label": "CT-002: Dois ou mais candidatos dentro de 0,03 do maior score -> Selecionar o\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-002: dois ou mais candidatos dentro de 0,03 do maior score -> selecionar o...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L129" + }, + { + "id": "tests_test_select_article_extractor_rationale_141", + "label": "CT-003: Empate t\u00e9cnico e mesma quantidade de shingles -> Aplicar prioridade\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-003: empate tecnico e mesma quantidade de shingles -> aplicar prioridade...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L141" + }, + { + "id": "tests_test_select_article_extractor_rationale_162", + "label": "CT-004: Tr\u00eas candidatos sem consenso -> Selecionar a quantidade mediana de\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-004: tres candidatos sem consenso -> selecionar a quantidade mediana de...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L162" + }, + { + "id": "tests_test_select_article_extractor_rationale_177", + "label": "CT-005: Dois candidatos sem consenso -> Selecionar a maior quantidade de\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-005: dois candidatos sem consenso -> selecionar a maior quantidade de...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L177" + }, + { + "id": "tests_test_select_article_extractor_rationale_191", + "label": "CT-006: Somente um candidato utiliz\u00e1vel -> Selecionar esse candidato.", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-006: somente um candidato utilizavel -> selecionar esse candidato.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L191" + }, + { + "id": "tests_test_select_article_extractor_rationale_203", + "label": "CT-007: Nenhum utiliz\u00e1vel, mas existe candidato degradado -> Executar o\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-007: nenhum utilizavel, mas existe candidato degradado -> executar o...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L203" + }, + { + "id": "tests_test_select_article_extractor_rationale_215", + "label": "CT-008: Todos os candidatos indispon\u00edveis -> Selecionar newspaper4k.", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-008: todos os candidatos indisponiveis -> selecionar newspaper4k.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L215" + }, + { + "id": "tests_test_select_article_extractor_rationale_227", + "label": "CT-009: Readability retorna apenas um fragmento pequeno enquanto os outros\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-009: readability retorna apenas um fragmento pequeno enquanto os outros...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L227" + }, + { + "id": "tests_test_select_article_extractor_rationale_244", + "label": "CT-010: Um candidato cont\u00e9m o conte\u00fado comum e muito conte\u00fado excedente ->\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-010: um candidato contem o conteudo comum e muito conteudo excedente ->...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L244" + }, + { + "id": "tests_test_select_article_extractor_rationale_260", + "label": "CT-011: Um candidato cont\u00e9m somente parte do conte\u00fado comum -> Perde cobertura\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "ct-011: um candidato contem somente parte do conteudo comum -> perde cobertura...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L260" + }, + { + "id": "tests_test_select_article_extractor_rationale_364", + "label": "Teste de regress\u00e3o para o Artigo 1 (Los puntajes de River vs. Independiente\u2026", + "_origin": "ast", + "community": 119, + "community_name": "select_article_extractor", + "file_type": "rationale", + "norm_label": "teste de regressao para o artigo 1 (los puntajes de river vs. independiente...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L364" + }, { "id": "specify_templates_constitution_template", "label": "constitution-template.md", @@ -4600,6 +6193,947 @@ "source_file": ".specify/templates/constitution-template.md", "source_location": "L37" }, + { + "id": "scripts_select_article_extractor_py_path", + "label": "Path", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "path", + "source_file": "", + "source_location": "" + }, + { + "id": "tests_test_select_article_extractor_py_path", + "label": "Path", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "code", + "norm_label": "path", + "source_file": "", + "source_location": "" + }, + { + "id": "scripts_select_article_extractor_rationale_431", + "label": "Salva dados em JSON de forma at\u00f4mica utilizando arquivo tempor\u00e1rio e rename.", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "salva dados em json de forma atomica utilizando arquivo temporario e rename.", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L431" + }, + { + "id": "scripts_select_article_extractor_rationale_455", + "label": "L\u00ea o JSON de entrada, valida a estrutura, processa todos os artigos e grava o\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "le o json de entrada, valida a estrutura, processa todos os artigos e grava o...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L455" + }, + { + "id": "tests_test_select_article_extractor_rationale_273", + "label": "CT-012: A entrada j\u00e1 cont\u00e9m selected_extractor -> Recalcular e substituir\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "ct-012: a entrada ja contem selected_extractor -> recalcular e substituir...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L273" + }, + { + "id": "tests_test_select_article_extractor_rationale_299", + "label": "CT-013: articles est\u00e1 vazio -> Gerar sa\u00edda v\u00e1lida com articles vazio.", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "ct-013: articles esta vazio -> gerar saida valida com articles vazio.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L299" + }, + { + "id": "tests_test_select_article_extractor_rationale_318", + "label": "CT-014: JSON inv\u00e1lido -> N\u00e3o gerar sa\u00edda.", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "ct-014: json invalido -> nao gerar saida.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L318" + }, + { + "id": "tests_test_select_article_extractor_rationale_335", + "label": "Testa o processamento em lote completo sobre o arquivo real\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "testa o processamento em lote completo sobre o arquivo real...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L335" + }, + { + "id": "tests_test_select_article_extractor_rationale_398", + "label": "Gera um lote de 100 artigos sint\u00e9ticos e verifica 100% de repetibilidade\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "gera um lote de 100 artigos sinteticos e verifica 100% de repetibilidade...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L398" + }, + { + "id": "tests_test_select_article_extractor_rationale_447", + "label": "Testa a integra\u00e7\u00e3o end-to-end do pipeline downstream: L\u00ea o JSON enriquecido com\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "testa a integracao end-to-end do pipeline downstream: le o json enriquecido com...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L447" + }, + { + "id": "tests_test_select_article_extractor_rationale_484", + "label": "E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "e2e: executa scripts/select_article_extractor.py como subprocesso real na linha...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L484" + }, + { + "id": "tests_test_select_article_extractor_rationale_521", + "label": "E2E: Executa CLI sem a flag -o e valida cria\u00e7\u00e3o autom\u00e1tica de\u2026", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "e2e: executa cli sem a flag -o e valida criacao automatica de...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L521" + }, + { + "id": "tests_test_select_article_extractor_rationale_549", + "label": "E2E: Executa CLI com JSON inv\u00e1lido e valida c\u00f3digo de sa\u00edda e erro no stderr.", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "e2e: executa cli com json invalido e valida codigo de saida e erro no stderr.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L549" + }, + { + "id": "tests_test_select_article_extractor_rationale_562", + "label": "E2E: Executa CLI com arquivo inexistente e valida c\u00f3digo 1 e mensagem no stderr.", + "_origin": "ast", + "community": 120, + "community_name": "process_batch", + "file_type": "rationale", + "norm_label": "e2e: executa cli com arquivo inexistente e valida codigo 1 e mensagem no stderr.", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L562" + }, + { + "id": "tests_test_select_article_extractor", + "label": "test_select_article_extractor.py", + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "code", + "norm_label": "test_select_article_extractor.py", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L1" + }, + { + "id": "scripts_select_article_extractor_rationale_107", + "label": "Executa a normaliza\u00e7\u00e3o determin\u00edstica para compara\u00e7\u00e3o: 1. Decodificar entidades\u2026", + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "rationale", + "norm_label": "executa a normalizacao deterministica para comparacao: 1. decodificar entidades...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L107" + }, + { + "id": "scripts_select_article_extractor_rationale_148", + "label": "Gera conjunto de shingles ordenados de tamanho window_size (padr\u00e3o 5). - Se\u2026", + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "rationale", + "norm_label": "gera conjunto de shingles ordenados de tamanho window_size (padrao 5). - se...", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L148" + }, + { + "id": "tests_test_select_article_extractor_rationale_1", + "label": "Su\u00edte de Testes Automatizados para o Seletor Determin\u00edstico de Extrator. Cobre\u2026", + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "rationale", + "norm_label": "suite de testes automatizados para o seletor deterministico de extrator. cobre...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L1" + }, + { + "id": "tests_test_select_article_extractor_rationale_60", + "label": "Garante que marca\u00e7\u00e3o de imagem Markdown ![alt](url) seja descartada e link\u2026", + "_origin": "ast", + "community": 122, + "community_name": "test_select_article_extractor.py", + "file_type": "rationale", + "norm_label": "garante que marcacao de imagem markdown ![alt](url) seja descartada e link...", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L60" + }, + { + "id": "specs_004_deterministic_content_selection_spec_assumptions", + "label": "Assumptions", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "assumptions", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L129" + }, + { + "id": "specs_004_deterministic_content_selection_spec_edge_cases", + "label": "Edge Cases", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "edge cases", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L56" + }, + { + "id": "specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", + "label": "Feature Specification: Deterministic Content Selection", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "feature specification: deterministic content selection", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_spec_functional_requirements", + "label": "Functional Requirements", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "functional requirements", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L67" + }, + { + "id": "specs_004_deterministic_content_selection_spec_key_entities_include_if_feature_involves_data", + "label": "Key Entities *(include if feature involves data)*", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "key entities *(include if feature involves data)*", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L111" + }, + { + "id": "specs_004_deterministic_content_selection_spec_measurable_outcomes", + "label": "Measurable Outcomes", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "measurable outcomes", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L120" + }, + { + "id": "specs_004_deterministic_content_selection_spec_requirements_mandatory", + "label": "Requirements *(mandatory)*", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "requirements *(mandatory)*", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L65" + }, + { + "id": "specs_004_deterministic_content_selection_spec_success_criteria_mandatory", + "label": "Success Criteria *(mandatory)*", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "success criteria *(mandatory)*", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L118" + }, + { + "id": "specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", + "label": "User Scenarios & Testing *(mandatory)*", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "user scenarios & testing *(mandatory)*", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L8" + }, + { + "id": "specs_004_deterministic_content_selection_spec_user_story_1_deterministic_selection_with_text_consensus_priority_p1", + "label": "User Story 1 - Deterministic Selection with Text Consensus (Priority: P1)", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "user story 1 - deterministic selection with text consensus (priority: p1)", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L10" + }, + { + "id": "specs_004_deterministic_content_selection_spec_user_story_2_resilient_decision_under_total_disagreement_or_degradation_priority_p2", + "label": "User Story 2 - Resilient Decision Under Total Disagreement or Degradation (Priority: P2)", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "user story 2 - resilient decision under total disagreement or degradation (priority: p2)", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L25" + }, + { + "id": "specs_004_deterministic_content_selection_spec_user_story_3_non_destructive_json_batch_processing_priority_p3", + "label": "User Story 3 - Non-Destructive JSON Batch Processing (Priority: P3)", + "_origin": "ast", + "community": 123, + "community_name": "Feature Specification: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "user story 3 - non-destructive json batch processing (priority: p3)", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L41" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_1_domain_entities_value_types", + "label": "1. Domain Entities & Value Types", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "1. domain entities & value types", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L7" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "label": "2. Entity Descriptions & Fields", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "2. entity descriptions & fields", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L64" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", + "label": "3. JSON Schema Mapping", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3. json schema mapping", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L123" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_articleselectionresult_dataclass", + "label": "`ArticleSelectionResult` (Dataclass)", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "`articleselectionresult` (dataclass)", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L96" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_batchprocessingresult_dataclass", + "label": "`BatchProcessingResult` (Dataclass)", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "`batchprocessingresult` (dataclass)", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L110" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_candidatestatus_enum", + "label": "`CandidateStatus` (Enum)", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "`candidatestatus` (enum)", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L72" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", + "label": "Data Model: Deterministic Content Selection", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "data model: deterministic content selection", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_entrada", + "label": "Entrada", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "entrada", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L125" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_extractorcandidate_dataclass", + "label": "`ExtractorCandidate` (Dataclass)", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "`extractorcandidate` (dataclass)", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L78" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_extractorname_enum_literal", + "label": "`ExtractorName` (Enum / Literal)", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "`extractorname` (enum / literal)", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L66" + }, + { + "id": "specs_004_deterministic_content_selection_data_model_sa\u00edda", + "label": "Sa\u00edda", + "_origin": "ast", + "community": 124, + "community_name": "2. Entity Descriptions & Fields", + "file_type": "document", + "node_kind": "heading", + "norm_label": "saida", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L132" + }, + { + "id": "specs_004_deterministic_content_selection_plan_constitution_check", + "label": "Constitution Check", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "constitution check", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L29" + }, + { + "id": "specs_004_deterministic_content_selection_plan_documentation_this_feature", + "label": "Documentation (this feature)", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "documentation (this feature)", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L45" + }, + { + "id": "specs_004_deterministic_content_selection_plan_implementation_phases", + "label": "Implementation Phases", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "implementation phases", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L79" + }, + { + "id": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "label": "Implementation Plan: Deterministic Article Content Selection", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "implementation plan: deterministic article content selection", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_plan_phase_0_outline_research_completed", + "label": "Phase 0: Outline & Research *(Completed)*", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 0: outline & research *(completed)*", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L81" + }, + { + "id": "specs_004_deterministic_content_selection_plan_phase_1_design_contracts_completed", + "label": "Phase 1: Design & Contracts *(Completed)*", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 1: design & contracts *(completed)*", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L87" + }, + { + "id": "specs_004_deterministic_content_selection_plan_phase_2_tasks_execution_next_step_via_speckit_tasks", + "label": "Phase 2: Tasks & Execution *(Next Step via `/speckit-tasks`)*", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "phase 2: tasks & execution *(next step via `/speckit-tasks`)*", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L92" + }, + { + "id": "specs_004_deterministic_content_selection_plan_project_structure", + "label": "Project Structure", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "project structure", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L43" + }, + { + "id": "specs_004_deterministic_content_selection_plan_source_code_layout", + "label": "Source Code Layout", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "source code layout", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L61" + }, + { + "id": "specs_004_deterministic_content_selection_plan_summary", + "label": "Summary", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "summary", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L9" + }, + { + "id": "specs_004_deterministic_content_selection_plan_technical_context", + "label": "Technical Context", + "_origin": "ast", + "community": 125, + "community_name": "Implementation Plan: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "technical context", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L15" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection", + "label": "deterministic-selection.md", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "page", + "norm_label": "deterministic-selection.md", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_candidate_state_transitions_resilience", + "label": "Candidate State Transitions & Resilience", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "candidate state transitions & resilience", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L33" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_decision_tie_breaking_hierarchy", + "label": "Decision & Tie-Breaking Hierarchy", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "decision & tie-breaking hierarchy", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L26" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "label": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "deterministic content selection checklist: end-to-end requirements quality", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_json_schema_integrity_atomic_i_o", + "label": "JSON Schema Integrity & Atomic I/O", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "json schema integrity & atomic i/o", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L39" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_notes", + "label": "Notes", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "notes", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L48" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_shingles_consensus_metric_formulation", + "label": "Shingles & Consensus Metric Formulation", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "shingles & consensus metric formulation", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L20" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_deterministic_selection_text_normalization_tokenization_quality", + "label": "Text Normalization & Tokenization Quality", + "_origin": "ast", + "community": 126, + "community_name": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", + "file_type": "document", + "node_kind": "heading", + "norm_label": "text normalization & tokenization quality", + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L13" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_1_pr\u00e9_requisitos", + "label": "1. Pr\u00e9-requisitos", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "1. pre-requisitos", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L7" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", + "label": "2. Execu\u00e7\u00e3o R\u00e1pida via CLI", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "2. execucao rapida via cli", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L14" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_3_execu\u00e7\u00e3o_dos_testes_automatizados", + "label": "3. Execu\u00e7\u00e3o dos Testes Automatizados", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3. execucao dos testes automatizados", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L33" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_4_valida\u00e7\u00e3o_program\u00e1tica_uso_como_m\u00f3dulo_python", + "label": "4. Valida\u00e7\u00e3o Program\u00e1tica / Uso como M\u00f3dulo Python", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "4. validacao programatica / uso como modulo python", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L43" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_1_selecionar_o_melhor_extrator_para_uma_extra\u00e7\u00e3o_existente", + "label": "Cen\u00e1rio 1: Selecionar o melhor extrator para uma extra\u00e7\u00e3o existente", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "cenario 1: selecionar o melhor extrator para uma extracao existente", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L16" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_2_especificar_caminho_de_sa\u00edda_customizado_e_modo_verboso", + "label": "Cen\u00e1rio 2: Especificar caminho de sa\u00edda customizado e modo verboso", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "cenario 2: especificar caminho de saida customizado e modo verboso", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L24" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", + "label": "Quickstart: Deterministic Article Content Selection", + "_origin": "ast", + "community": 127, + "community_name": "Quickstart: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "quickstart: deterministic article content selection", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_requirements", + "label": "004-deterministic-content-selection/checklists/requirements.md", + "_origin": "ast", + "community": 128, + "community_name": "Specification Quality Checklist: Deterministic Content Selection", + "file_type": "document", + "node_kind": "page", + "norm_label": "004-deterministic-content-selection/checklists/requirements.md", + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_requirements_content_quality", + "label": "Content Quality", + "_origin": "ast", + "community": 128, + "community_name": "Specification Quality Checklist: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "content quality", + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L7" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_requirements_feature_readiness", + "label": "Feature Readiness", + "_origin": "ast", + "community": 128, + "community_name": "Specification Quality Checklist: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "feature readiness", + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L25" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_requirements_notes", + "label": "Notes", + "_origin": "ast", + "community": 128, + "community_name": "Specification Quality Checklist: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "notes", + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L32" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_requirements_requirement_completeness", + "label": "Requirement Completeness", + "_origin": "ast", + "community": 128, + "community_name": "Specification Quality Checklist: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "requirement completeness", + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L14" + }, + { + "id": "specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", + "label": "Specification Quality Checklist: Deterministic Content Selection", + "_origin": "ast", + "community": 128, + "community_name": "Specification Quality Checklist: Deterministic Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "specification quality checklist: deterministic content selection", + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_cli_contract", + "label": "004-deterministic-content-selection/contracts/cli-contract.md", + "_origin": "ast", + "community": 129, + "community_name": "CLI Interface Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "page", + "norm_label": "004-deterministic-content-selection/contracts/cli-contract.md", + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_cli_contract_1_command_syntax", + "label": "1. Command Syntax", + "_origin": "ast", + "community": 129, + "community_name": "CLI Interface Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "1. command syntax", + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L7" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_cli_contract_2_arguments_and_flags", + "label": "2. Arguments and Flags", + "_origin": "ast", + "community": 129, + "community_name": "CLI Interface Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "2. arguments and flags", + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L15" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_cli_contract_3_standard_streams_i_o", + "label": "3. Standard Streams (I/O)", + "_origin": "ast", + "community": 129, + "community_name": "CLI Interface Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "3. standard streams (i/o)", + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L26" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_cli_contract_4_exit_codes", + "label": "4. Exit Codes", + "_origin": "ast", + "community": 129, + "community_name": "CLI Interface Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "4. exit codes", + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L48" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", + "label": "CLI Interface Contract: Deterministic Article Content Selection", + "_origin": "ast", + "community": 129, + "community_name": "CLI Interface Contract: Deterministic Article Content Selection", + "file_type": "document", + "node_kind": "heading", + "norm_label": "cli interface contract: deterministic article content selection", + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L1" + }, { "id": "agents_skills_graphify_references_exports", "label": "exports.md", @@ -4708,6 +7242,126 @@ "source_file": ".agents/skills/graphify/references/exports.md", "source_location": "L79" }, + { + "id": "specs_004_deterministic_content_selection_data_model", + "label": "004-deterministic-content-selection/data-model.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/data-model.md", + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_plan", + "label": "004-deterministic-content-selection/plan.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/plan.md", + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_quickstart", + "label": "004-deterministic-content-selection/quickstart.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/quickstart.md", + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_research", + "label": "004-deterministic-content-selection/research.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/research.md", + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_spec", + "label": "004-deterministic-content-selection/spec.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/spec.md", + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_tasks", + "label": "004-deterministic-content-selection/tasks.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/tasks.md", + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L1" + }, + { + "id": "specs_004_deterministic_content_selection_contracts_json_schema", + "label": "004-deterministic-content-selection/contracts/json-schema.md", + "_origin": "ast", + "community": 131, + "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": 131, + "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": 131, + "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": 131, + "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": "agents_skills_ponytail_skill", "label": "ponytail/SKILL.md", @@ -7036,7 +9690,7 @@ "source_location": "" }, { - "id": "scripts_extract_google_news_rationale_339", + "id": "scripts_extract_google_news_rationale_337", "label": "Cria e configura o parser de argumentos CLI.", "_origin": "ast", "community": 40, @@ -7044,10 +9698,10 @@ "file_type": "rationale", "norm_label": "cria e configura o parser de argumentos cli.", "source_file": "scripts/extract_google_news.py", - "source_location": "L339" + "source_location": "L337" }, { - "id": "scripts_extract_google_news_rationale_406", + "id": "scripts_extract_google_news_rationale_404", "label": "Ponto de entrada do script CLI.", "_origin": "ast", "community": 40, @@ -7055,10 +9709,10 @@ "file_type": "rationale", "norm_label": "ponto de entrada do script cli.", "source_file": "scripts/extract_google_news.py", - "source_location": "L406" + "source_location": "L404" }, { - "id": "tests_test_extract_google_news_rationale_218", + "id": "tests_test_extract_google_news_rationale_214", "label": "Valida execu\u00e7\u00e3o padr\u00e3o do CLI com sa\u00edda JSON no stdout.", "_origin": "ast", "community": 40, @@ -7066,10 +9720,10 @@ "file_type": "rationale", "norm_label": "valida execucao padrao do cli com saida json no stdout.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L218" + "source_location": "L214" }, { - "id": "tests_test_extract_google_news_rationale_243", + "id": "tests_test_extract_google_news_rationale_235", "label": "Valida grava\u00e7\u00e3o em arquivo com cria\u00e7\u00e3o autom\u00e1tica de diret\u00f3rios pais.", "_origin": "ast", "community": 40, @@ -7077,10 +9731,10 @@ "file_type": "rationale", "norm_label": "valida gravacao em arquivo com criacao automatica de diretorios pais.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L243" + "source_location": "L235" }, { - "id": "tests_test_extract_google_news_rationale_264", + "id": "tests_test_extract_google_news_rationale_254", "label": "Valida tratamento de erro e c\u00f3digo de sa\u00edda 1 para par\u00e2metro vazio.", "_origin": "ast", "community": 40, @@ -7088,10 +9742,10 @@ "file_type": "rationale", "norm_label": "valida tratamento de erro e codigo de saida 1 para parametro vazio.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L264" + "source_location": "L254" }, { - "id": "tests_test_extract_google_news_rationale_273", + "id": "tests_test_extract_google_news_rationale_263", "label": "Valida tratamento de erro e c\u00f3digo de sa\u00edda 2 para falhas de rede.", "_origin": "ast", "community": 40, @@ -7099,10 +9753,10 @@ "file_type": "rationale", "norm_label": "valida tratamento de erro e codigo de saida 2 para falhas de rede.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L273" + "source_location": "L263" }, { - "id": "tests_test_extract_google_news_rationale_329", + "id": "tests_test_extract_google_news_rationale_319", "label": "Valida E2E a execu\u00e7\u00e3o do CLI com sa\u00edda real em arquivo e URLs decodificadas.", "_origin": "ast", "community": 40, @@ -7110,7 +9764,7 @@ "file_type": "rationale", "norm_label": "valida e2e a execucao do cli com saida real em arquivo e urls decodificadas.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L329" + "source_location": "L319" }, { "id": "specs_001_multilingual_entity_classifier_research", @@ -7497,47 +10151,102 @@ "source_location": "L1" }, { - "id": "tests_test_adapters", - "label": "test_adapters.py", + "id": "abc", + "label": "ABC", "_origin": "ast", "community": 45, - "community_name": "LocalEmbeddingsAdapter", + "community_name": "ClassificationResult", "file_type": "code", - "norm_label": "test_adapters.py", - "source_file": "tests/test_adapters.py", + "norm_label": "abc", + "source_file": "", + "source_location": "" + }, + { + "id": "src_adapters_base", + "label": "base.py", + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "code", + "norm_label": "base.py", + "source_file": "src/adapters/base.py", "source_location": "L1" }, { - "id": "src_adapters_embeddings_rationale_15", - "label": "Optional adapter for local multilingual semantic vector embeddings.", + "id": "src_adapters_llm", + "label": "llm.py", "_origin": "ast", "community": 45, - "community_name": "LocalEmbeddingsAdapter", + "community_name": "ClassificationResult", + "file_type": "code", + "norm_label": "llm.py", + "source_file": "src/adapters/llm.py", + "source_location": "L1" + }, + { + "id": "src_adapters_base_rationale_1", + "label": "Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers.", + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", "file_type": "rationale", - "norm_label": "optional adapter for local multilingual semantic vector embeddings.", - "source_file": "src/adapters/embeddings.py", + "norm_label": "base abstract adapter interface for optional tier 2 / tier 3 nlp enhancers.", + "source_file": "src/adapters/base.py", + "source_location": "L1" + }, + { + "id": "src_adapters_base_rationale_11", + "label": "Abstract interface for pluggable NLP classification adapters.", + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "rationale", + "norm_label": "abstract interface for pluggable nlp classification adapters.", + "source_file": "src/adapters/base.py", + "source_location": "L11" + }, + { + "id": "src_adapters_base_rationale_15", + "label": "Return True if the underlying provider or model is installed and configured.", + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "rationale", + "norm_label": "return true if the underlying provider or model is installed and configured.", + "source_file": "src/adapters/base.py", "source_location": "L15" }, { - "id": "src_adapters_llm_rationale_16", - "label": "Optional adapter for LLM fallback boundary disambiguation.", + "id": "src_adapters_base_rationale_19", + "label": "Compute semantic similarity score between text and a set of candidate terms.", "_origin": "ast", "community": 45, - "community_name": "LocalEmbeddingsAdapter", + "community_name": "ClassificationResult", "file_type": "rationale", - "norm_label": "optional adapter for llm fallback boundary disambiguation.", - "source_file": "src/adapters/llm.py", - "source_location": "L16" + "norm_label": "compute semantic similarity score between text and a set of candidate terms.", + "source_file": "src/adapters/base.py", + "source_location": "L19" }, { - "id": "tests_test_adapters_rationale_1", - "label": "Unit tests for optional adapter interfaces (Tier 2 / Tier 3).", + "id": "src_adapters_base_rationale_28", + "label": "Optionally refine an ambiguous classification result.", "_origin": "ast", "community": 45, - "community_name": "LocalEmbeddingsAdapter", + "community_name": "ClassificationResult", "file_type": "rationale", - "norm_label": "unit tests for optional adapter interfaces (tier 2 / tier 3).", - "source_file": "tests/test_adapters.py", + "norm_label": "optionally refine an ambiguous classification result.", + "source_file": "src/adapters/base.py", + "source_location": "L28" + }, + { + "id": "src_adapters_llm_rationale_1", + "label": "Optional LLM fallback adapter (Tier 3). Disabled by default. Provides fallback\u2026", + "_origin": "ast", + "community": 45, + "community_name": "ClassificationResult", + "file_type": "rationale", + "norm_label": "optional llm fallback adapter (tier 3). disabled by default. provides fallback...", + "source_file": "src/adapters/llm.py", "source_location": "L1" }, { @@ -7574,7 +10283,7 @@ "source_location": "" }, { - "id": "src_classifier_rationale_45", + "id": "src_classifier_rationale_42", "label": "Tier 1 Deterministic NLP Entity Inherence Classifier.", "_origin": "ast", "community": 46, @@ -7582,7 +10291,7 @@ "file_type": "rationale", "norm_label": "tier 1 deterministic nlp entity inherence classifier.", "source_file": "src/classifier.py", - "source_location": "L45" + "source_location": "L42" }, { "id": "tests_test_adversarial_rationale_1", @@ -7596,73 +10305,7 @@ "source_location": "L1" }, { - "id": "tests_test_adversarial_rationale_134", - "label": "Run CLI via subprocess with empty content and verify error code and exit code.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "run cli via subprocess with empty content and verify error code and exit code.", - "source_file": "tests/test_adversarial.py", - "source_location": "L134" - }, - { - "id": "tests_test_adversarial_rationale_16", - "label": "Content about city/state governance of S\u00e3o Paulo against ECP for S\u00e3o Paulo FC.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "content about city/state governance of sao paulo against ecp for sao paulo fc.", - "source_file": "tests/test_adversarial.py", - "source_location": "L16" - }, - { - "id": "tests_test_adversarial_rationale_165", - "label": "Run CLI via subprocess with missing target_name and verify error payload.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "run cli via subprocess with missing target_name and verify error payload.", - "source_file": "tests/test_adversarial.py", - "source_location": "L165" - }, - { - "id": "tests_test_adversarial_rationale_194", - "label": "Run CLI via subprocess with corrupted JSON and verify error payload.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "run cli via subprocess with corrupted json and verify error payload.", - "source_file": "tests/test_adversarial.py", - "source_location": "L194" - }, - { - "id": "tests_test_adversarial_rationale_41", - "label": "Content about apple fruit/culinary recipe against Apple Inc. tech entity.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "content about apple fruit/culinary recipe against apple inc. tech entity.", - "source_file": "tests/test_adversarial.py", - "source_location": "L41" - }, - { - "id": "tests_test_adversarial_rationale_64", - "label": "High-weight related entity mentioned in passing without required domain anchors.", - "_origin": "ast", - "community": 46, - "community_name": "InherenceClassifier", - "file_type": "rationale", - "norm_label": "high-weight related entity mentioned in passing without required domain anchors.", - "source_file": "tests/test_adversarial.py", - "source_location": "L64" - }, - { - "id": "tests_test_adversarial_rationale_99", + "id": "tests_test_adversarial_rationale_105", "label": "Run CLI via subprocess without --output and verify stdout is pure parseable\u2026", "_origin": "ast", "community": 46, @@ -7670,7 +10313,73 @@ "file_type": "rationale", "norm_label": "run cli via subprocess without --output and verify stdout is pure parseable...", "source_file": "tests/test_adversarial.py", - "source_location": "L99" + "source_location": "L105" + }, + { + "id": "tests_test_adversarial_rationale_149", + "label": "Run CLI via subprocess with empty content and verify error code and exit code.", + "_origin": "ast", + "community": 46, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "run cli via subprocess with empty content and verify error code and exit code.", + "source_file": "tests/test_adversarial.py", + "source_location": "L149" + }, + { + "id": "tests_test_adversarial_rationale_15", + "label": "Content about city/state governance of S\u00e3o Paulo against ECP for S\u00e3o Paulo FC.", + "_origin": "ast", + "community": 46, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "content about city/state governance of sao paulo against ecp for sao paulo fc.", + "source_file": "tests/test_adversarial.py", + "source_location": "L15" + }, + { + "id": "tests_test_adversarial_rationale_186", + "label": "Run CLI via subprocess with missing target_name and verify error payload.", + "_origin": "ast", + "community": 46, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "run cli via subprocess with missing target_name and verify error payload.", + "source_file": "tests/test_adversarial.py", + "source_location": "L186" + }, + { + "id": "tests_test_adversarial_rationale_221", + "label": "Run CLI via subprocess with corrupted JSON and verify error payload.", + "_origin": "ast", + "community": 46, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "run cli via subprocess with corrupted json and verify error payload.", + "source_file": "tests/test_adversarial.py", + "source_location": "L221" + }, + { + "id": "tests_test_adversarial_rationale_45", + "label": "Content about apple fruit/culinary recipe against Apple Inc. tech entity.", + "_origin": "ast", + "community": 46, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "content about apple fruit/culinary recipe against apple inc. tech entity.", + "source_file": "tests/test_adversarial.py", + "source_location": "L45" + }, + { + "id": "tests_test_adversarial_rationale_69", + "label": "High-weight related entity mentioned in passing without required domain anchors.", + "_origin": "ast", + "community": 46, + "community_name": "InherenceClassifier", + "file_type": "rationale", + "norm_label": "high-weight related entity mentioned in passing without required domain anchors.", + "source_file": "tests/test_adversarial.py", + "source_location": "L69" }, { "id": "tests_test_classifier_rationale_1", @@ -7694,6 +10403,17 @@ "source_file": "src/language.py", "source_location": "L1" }, + { + "id": "src_parser", + "label": "parser.py", + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "code", + "norm_label": "parser.py", + "source_file": "src/parser.py", + "source_location": "L1" + }, { "id": "tests_test_language", "label": "test_language.py", @@ -7706,7 +10426,7 @@ "source_location": "L1" }, { - "id": "src_classifier_rationale_21", + "id": "src_classifier_rationale_18", "label": "Check if a normalized phrase appears in normalized text with word boundary\u2026", "_origin": "ast", "community": 47, @@ -7714,10 +10434,10 @@ "file_type": "rationale", "norm_label": "check if a normalized phrase appears in normalized text with word boundary...", "source_file": "src/classifier.py", - "source_location": "L21" + "source_location": "L18" }, { - "id": "src_classifier_rationale_34", + "id": "src_classifier_rationale_31", "label": "Count occurrences of a phrase in text.", "_origin": "ast", "community": 47, @@ -7725,10 +10445,10 @@ "file_type": "rationale", "norm_label": "count occurrences of a phrase in text.", "source_file": "src/classifier.py", - "source_location": "L34" + "source_location": "L31" }, { - "id": "src_classifier_rationale_62", + "id": "src_classifier_rationale_61", "label": "Classify inherence of content against an ECP snapshot.", "_origin": "ast", "community": 47, @@ -7736,7 +10456,7 @@ "file_type": "rationale", "norm_label": "classify inherence of content against an ecp snapshot.", "source_file": "src/classifier.py", - "source_location": "L62" + "source_location": "L61" }, { "id": "src_language_rationale_1", @@ -7750,7 +10470,7 @@ "source_location": "L1" }, { - "id": "src_language_rationale_71", + "id": "src_language_rationale_463", "label": "Normalize text by converting to lowercase and stripping combining diacritical\u2026", "_origin": "ast", "community": 47, @@ -7758,10 +10478,10 @@ "file_type": "rationale", "norm_label": "normalize text by converting to lowercase and stripping combining diacritical...", "source_file": "src/language.py", - "source_location": "L71" + "source_location": "L463" }, { - "id": "src_language_rationale_81", + "id": "src_language_rationale_473", "label": "Tokenize text into lowercase alphanumeric words.", "_origin": "ast", "community": 47, @@ -7769,10 +10489,10 @@ "file_type": "rationale", "norm_label": "tokenize text into lowercase alphanumeric words.", "source_file": "src/language.py", - "source_location": "L81" + "source_location": "L473" }, { - "id": "src_language_rationale_86", + "id": "src_language_rationale_478", "label": "Detect the ISO-639-1 language code of text among supported languages (pt, en,\u2026", "_origin": "ast", "community": 47, @@ -7780,7 +10500,51 @@ "file_type": "rationale", "norm_label": "detect the iso-639-1 language code of text among supported languages (pt, en,...", "source_file": "src/language.py", - "source_location": "L86" + "source_location": "L478" + }, + { + "id": "src_parser_rationale_1", + "label": "Markdown content parser and excerpt extraction utilities.", + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "rationale", + "norm_label": "markdown content parser and excerpt extraction utilities.", + "source_file": "src/parser.py", + "source_location": "L1" + }, + { + "id": "src_parser_rationale_43", + "label": "Split text into individual sentences.", + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "rationale", + "norm_label": "split text into individual sentences.", + "source_file": "src/parser.py", + "source_location": "L43" + }, + { + "id": "src_parser_rationale_53", + "label": "Extract relevant sentence excerpts from Markdown text that contain any of the\u2026", + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "rationale", + "norm_label": "extract relevant sentence excerpts from markdown text that contain any of the...", + "source_file": "src/parser.py", + "source_location": "L53" + }, + { + "id": "src_parser_rationale_9", + "label": "Remove markdown syntax markers (headers, bold, italics, links, code blocks) to\u2026", + "_origin": "ast", + "community": 47, + "community_name": "detect_language", + "file_type": "rationale", + "norm_label": "remove markdown syntax markers (headers, bold, italics, links, code blocks) to...", + "source_file": "src/parser.py", + "source_location": "L9" }, { "id": "tests_test_language_rationale_1", @@ -7794,102 +10558,91 @@ "source_location": "L1" }, { - "id": "src_classifier", - "label": "classifier.py", + "id": "classify", + "label": "classify.py", "_origin": "ast", "community": 48, - "community_name": "classifier.py", + "community_name": "models.py", "file_type": "code", - "norm_label": "classifier.py", - "source_file": "src/classifier.py", + "norm_label": "classify.py", + "source_file": "classify.py", "source_location": "L1" }, { - "id": "src_parser", - "label": "parser.py", + "id": "classify_py_namespace", + "label": "Namespace", "_origin": "ast", "community": 48, - "community_name": "classifier.py", + "community_name": "models.py", "file_type": "code", - "norm_label": "parser.py", - "source_file": "src/parser.py", - "source_location": "L1" + "norm_label": "namespace", + "source_file": "", + "source_location": "" }, { - "id": "tests_test_models", - "label": "test_models.py", + "id": "src_models", + "label": "models.py", "_origin": "ast", "community": 48, - "community_name": "classifier.py", + "community_name": "models.py", "file_type": "code", - "norm_label": "test_models.py", - "source_file": "tests/test_models.py", + "norm_label": "models.py", + "source_file": "src/models.py", "source_location": "L1" }, { - "id": "src_classifier_rationale_1", - "label": "Core deterministic classification engine (Tier 1 core).", + "id": "src_models_py_enum", + "label": "Enum", "_origin": "ast", "community": 48, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "core deterministic classification engine (tier 1 core).", - "source_file": "src/classifier.py", + "community_name": "models.py", + "file_type": "code", + "norm_label": "enum", + "source_file": "", + "source_location": "" + }, + { + "id": "src_models_py_str", + "label": "str", + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "str", + "source_file": "", + "source_location": "" + }, + { + "id": "tests_test_cli", + "label": "test_cli.py", + "_origin": "ast", + "community": 48, + "community_name": "models.py", + "file_type": "code", + "norm_label": "test_cli.py", + "source_file": "tests/test_cli.py", "source_location": "L1" }, { - "id": "src_parser_rationale_1", - "label": "Markdown content parser and excerpt extraction utilities.", + "id": "src_models_rationale_1", + "label": "Data models and validation schemas for Multilingual NLP Entity Inherence\u2026", "_origin": "ast", "community": 48, - "community_name": "classifier.py", + "community_name": "models.py", "file_type": "rationale", - "norm_label": "markdown content parser and excerpt extraction utilities.", - "source_file": "src/parser.py", + "norm_label": "data models and validation schemas for multilingual nlp entity inherence...", + "source_file": "src/models.py", "source_location": "L1" }, { - "id": "src_parser_rationale_10", - "label": "Remove markdown syntax markers (headers, bold, italics, links, code blocks) to\u2026", + "id": "tests_test_cli_rationale_1", + "label": "CLI execution tests covering flags, arguments, stdout, and error handling.", "_origin": "ast", "community": 48, - "community_name": "classifier.py", + "community_name": "models.py", "file_type": "rationale", - "norm_label": "remove markdown syntax markers (headers, bold, italics, links, code blocks) to...", - "source_file": "src/parser.py", - "source_location": "L10" - }, - { - "id": "src_parser_rationale_44", - "label": "Split text into individual sentences.", - "_origin": "ast", - "community": 48, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "split text into individual sentences.", - "source_file": "src/parser.py", - "source_location": "L44" - }, - { - "id": "src_parser_rationale_52", - "label": "Extract relevant sentence excerpts from Markdown text that contain any of the\u2026", - "_origin": "ast", - "community": 48, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "extract relevant sentence excerpts from markdown text that contain any of the...", - "source_file": "src/parser.py", - "source_location": "L52" - }, - { - "id": "tests_test_models_rationale_1", - "label": "Unit tests for ECP models, schema validation, and structured error handling.", - "_origin": "ast", - "community": 48, - "community_name": "classifier.py", - "file_type": "rationale", - "norm_label": "unit tests for ecp models, schema validation, and structured error handling.", - "source_file": "tests/test_models.py", + "norm_label": "cli execution tests covering flags, arguments, stdout, and error handling.", + "source_file": "tests/test_cli.py", "source_location": "L1" }, { @@ -9175,7 +11928,7 @@ "source_location": "" }, { - "id": "scripts_extract_article_contents_rationale_106", + "id": "scripts_extract_article_contents_rationale_103", "label": "Dados completos extra\u00eddos e enriquecidos com NLP pelo motor Newspaper4k.", "_origin": "ast", "community": 80, @@ -9183,10 +11936,10 @@ "file_type": "rationale", "norm_label": "dados completos extraidos e enriquecidos com nlp pelo motor newspaper4k.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L106" + "source_location": "L103" }, { - "id": "scripts_extract_article_contents_rationale_156", + "id": "scripts_extract_article_contents_rationale_153", "label": "Dados completos higienizados pelo algoritmo Readability.", "_origin": "ast", "community": 80, @@ -9194,10 +11947,10 @@ "file_type": "rationale", "norm_label": "dados completos higienizados pelo algoritmo readability.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L156" + "source_location": "L153" }, { - "id": "scripts_extract_article_contents_rationale_178", + "id": "scripts_extract_article_contents_rationale_175", "label": "Resultado consolidado da extra\u00e7\u00e3o de um artigo.", "_origin": "ast", "community": 80, @@ -9205,10 +11958,10 @@ "file_type": "rationale", "norm_label": "resultado consolidado da extracao de um artigo.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L178" + "source_location": "L175" }, { - "id": "scripts_extract_article_contents_rationale_206", + "id": "scripts_extract_article_contents_rationale_203", "label": "Relat\u00f3rio consolidado de sa\u00edda do processamento de um lote.", "_origin": "ast", "community": 80, @@ -9216,10 +11969,10 @@ "file_type": "rationale", "norm_label": "relatorio consolidado de saida do processamento de um lote.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L206" + "source_location": "L203" }, { - "id": "scripts_extract_article_contents_rationale_232", + "id": "scripts_extract_article_contents_rationale_229", "label": "Motor de extra\u00e7\u00e3o baseado na biblioteca Trafilatura.", "_origin": "ast", "community": 80, @@ -9227,10 +11980,10 @@ "file_type": "rationale", "norm_label": "motor de extracao baseado na biblioteca trafilatura.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L232" + "source_location": "L229" }, { - "id": "scripts_extract_article_contents_rationale_311", + "id": "scripts_extract_article_contents_rationale_333", "label": "Motor de extra\u00e7\u00e3o baseado no Newspaper4k com NLP.", "_origin": "ast", "community": 80, @@ -9238,21 +11991,10 @@ "file_type": "rationale", "norm_label": "motor de extracao baseado no newspaper4k com nlp.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L311" + "source_location": "L333" }, { - "id": "scripts_extract_article_contents_rationale_372", - "label": "Motor de extra\u00e7\u00e3o baseado no algoritmo Readability (readability-lxml).", - "_origin": "ast", - "community": 80, - "community_name": "test_extract_article_contents.py", - "file_type": "rationale", - "norm_label": "motor de extracao baseado no algoritmo readability (readability-lxml).", - "source_file": "scripts/extract_article_contents.py", - "source_location": "L372" - }, - { - "id": "scripts_extract_article_contents_rationale_38", + "id": "scripts_extract_article_contents_rationale_35", "label": "Metadados originais da not\u00edcia contida no JSON de entrada.", "_origin": "ast", "community": 80, @@ -9260,10 +12002,21 @@ "file_type": "rationale", "norm_label": "metadados originais da noticia contida no json de entrada.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L38" + "source_location": "L35" }, { - "id": "scripts_extract_article_contents_rationale_406", + "id": "scripts_extract_article_contents_rationale_396", + "label": "Motor de extra\u00e7\u00e3o baseado no algoritmo Readability (readability-lxml).", + "_origin": "ast", + "community": 80, + "community_name": "test_extract_article_contents.py", + "file_type": "rationale", + "norm_label": "motor de extracao baseado no algoritmo readability (readability-lxml).", + "source_file": "scripts/extract_article_contents.py", + "source_location": "L396" + }, + { + "id": "scripts_extract_article_contents_rationale_430", "label": "Executa a extra\u00e7\u00e3o simult\u00e2nea pelos tr\u00eas motores de conte\u00fado com isolamento\u2026", "_origin": "ast", "community": 80, @@ -9271,10 +12024,10 @@ "file_type": "rationale", "norm_label": "executa a extracao simultanea pelos tres motores de conteudo com isolamento...", "source_file": "scripts/extract_article_contents.py", - "source_location": "L406" + "source_location": "L430" }, { - "id": "scripts_extract_article_contents_rationale_459", + "id": "scripts_extract_article_contents_rationale_483", "label": "Gerenciador de ciclo de vida e requisi\u00e7\u00f5es via Foxcape Headless.", "_origin": "ast", "community": 80, @@ -9282,10 +12035,10 @@ "file_type": "rationale", "norm_label": "gerenciador de ciclo de vida e requisicoes via foxcape headless.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L459" + "source_location": "L483" }, { - "id": "scripts_extract_article_contents_rationale_488", + "id": "scripts_extract_article_contents_rationale_512", "label": "Navega at\u00e9 a URL, aguarda o carregamento do DOM e retorna (html, page_title,\u2026", "_origin": "ast", "community": 80, @@ -9293,10 +12046,10 @@ "file_type": "rationale", "norm_label": "navega ate a url, aguarda o carregamento do dom e retorna (html, page_title,...", "source_file": "scripts/extract_article_contents.py", - "source_location": "L488" + "source_location": "L512" }, { - "id": "scripts_extract_article_contents_rationale_510", + "id": "scripts_extract_article_contents_rationale_534", "label": "Escreve mensagem informativa no stderr.", "_origin": "ast", "community": 80, @@ -9304,10 +12057,10 @@ "file_type": "rationale", "norm_label": "escreve mensagem informativa no stderr.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L510" + "source_location": "L534" }, { - "id": "scripts_extract_article_contents_rationale_517", + "id": "scripts_extract_article_contents_rationale_541", "label": "Carrega o arquivo JSON gerado pelo extrator de not\u00edcias.", "_origin": "ast", "community": 80, @@ -9315,32 +12068,10 @@ "file_type": "rationale", "norm_label": "carrega o arquivo json gerado pelo extrator de noticias.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L517" + "source_location": "L541" }, { - "id": "scripts_extract_article_contents_rationale_545", - "label": "Salva o relat\u00f3rio consolidado em formato JSON com UTF-8.", - "_origin": "ast", - "community": 80, - "community_name": "test_extract_article_contents.py", - "file_type": "rationale", - "norm_label": "salva o relatorio consolidado em formato json com utf-8.", - "source_file": "scripts/extract_article_contents.py", - "source_location": "L545" - }, - { - "id": "scripts_extract_article_contents_rationale_559", - "label": "Executa o pipeline completo de extra\u00e7\u00e3o em lote para o arquivo de entrada.", - "_origin": "ast", - "community": 80, - "community_name": "test_extract_article_contents.py", - "file_type": "rationale", - "norm_label": "executa o pipeline completo de extracao em lote para o arquivo de entrada.", - "source_file": "scripts/extract_article_contents.py", - "source_location": "L559" - }, - { - "id": "scripts_extract_article_contents_rationale_58", + "id": "scripts_extract_article_contents_rationale_55", "label": "Dados completos extra\u00eddos pelo motor Trafilatura.", "_origin": "ast", "community": 80, @@ -9348,10 +12079,32 @@ "file_type": "rationale", "norm_label": "dados completos extraidos pelo motor trafilatura.", "source_file": "scripts/extract_article_contents.py", - "source_location": "L58" + "source_location": "L55" }, { - "id": "tests_test_extract_article_contents_rationale_323", + "id": "scripts_extract_article_contents_rationale_569", + "label": "Salva o relat\u00f3rio consolidado em formato JSON com UTF-8.", + "_origin": "ast", + "community": 80, + "community_name": "test_extract_article_contents.py", + "file_type": "rationale", + "norm_label": "salva o relatorio consolidado em formato json com utf-8.", + "source_file": "scripts/extract_article_contents.py", + "source_location": "L569" + }, + { + "id": "scripts_extract_article_contents_rationale_583", + "label": "Executa o pipeline completo de extra\u00e7\u00e3o em lote para o arquivo de entrada.", + "_origin": "ast", + "community": 80, + "community_name": "test_extract_article_contents.py", + "file_type": "rationale", + "norm_label": "executa o pipeline completo de extracao em lote para o arquivo de entrada.", + "source_file": "scripts/extract_article_contents.py", + "source_location": "L583" + }, + { + "id": "tests_test_extract_article_contents_rationale_317", "label": "Valida E2E a extra\u00e7\u00e3o real ao vivo com Foxcape e os 3 motores em lote.", "_origin": "ast", "community": 80, @@ -9359,10 +12112,10 @@ "file_type": "rationale", "norm_label": "valida e2e a extracao real ao vivo com foxcape e os 3 motores em lote.", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L323" + "source_location": "L317" }, { - "id": "tests_test_extract_article_contents_rationale_367", + "id": "tests_test_extract_article_contents_rationale_361", "label": "Valida E2E a execu\u00e7\u00e3o do CLI real de ponta a ponta.", "_origin": "ast", "community": 80, @@ -9370,7 +12123,7 @@ "file_type": "rationale", "norm_label": "valida e2e a execucao do cli real de ponta a ponta.", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L367" + "source_location": "L361" }, { "id": "docs_googlenews_extractor_guia_completo", @@ -9418,7 +12171,7 @@ "node_kind": "heading", "norm_label": "2.2 value object de validacao (`googlenews_etl/domain/entities/search_query.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L75" + "source_location": "L77" }, { "id": "docs_googlenews_extractor_guia_completo_2_entrada", @@ -9442,7 +12195,7 @@ "node_kind": "heading", "norm_label": "3.1 o caso de uso (`googlenews_etl/application/use_cases/extract_news_use_case.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L115" + "source_location": "L119" }, { "id": "docs_googlenews_extractor_guia_completo_3_2_a_porta_googlenews_etl_domain_ports_news_extractor_port_py", @@ -9454,7 +12207,7 @@ "node_kind": "heading", "norm_label": "3.2 a porta (`googlenews_etl/domain/ports/news_extractor_port.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L168" + "source_location": "L173" }, { "id": "docs_googlenews_extractor_guia_completo_3_3_1_inicializa\u00e7\u00e3o_sess\u00e3o_http_com_impersona\u00e7\u00e3o_de_browser", @@ -9466,7 +12219,7 @@ "node_kind": "heading", "norm_label": "3.3.1 inicializacao: sessao http com impersonacao de browser", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L185" + "source_location": "L190" }, { "id": "docs_googlenews_extractor_guia_completo_3_3_2_mapeamento_idioma_par\u00e2metros_hl_gl_get_hl_gl", @@ -9478,7 +12231,7 @@ "node_kind": "heading", "norm_label": "3.3.2 mapeamento idioma \u2192 parametros `hl`/`gl` (`_get_hl_gl`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L213" + "source_location": "L220" }, { "id": "docs_googlenews_extractor_guia_completo_3_3_3_extra\u00e7\u00e3o_do_rss_o_ponto_fundamental_fetch_rss", @@ -9490,7 +12243,7 @@ "node_kind": "heading", "norm_label": "3.3.3 \u2605 extracao do rss \u2014 o ponto fundamental (`_fetch_rss`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L250" + "source_location": "L257" }, { "id": "docs_googlenews_extractor_guia_completo_3_3_4_orquestra\u00e7\u00e3o_com_resolu\u00e7\u00e3o_de_urls_extract", @@ -9502,7 +12255,7 @@ "node_kind": "heading", "norm_label": "3.3.4 orquestracao com resolucao de urls (`extract`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L306" + "source_location": "L313" }, { "id": "docs_googlenews_extractor_guia_completo_3_3_o_adaptador_concreto_o_cora\u00e7\u00e3o_do_extrator_googlenews_etl_infrastructure_adapters_google_news_extractor_adapter_py", @@ -9514,7 +12267,7 @@ "node_kind": "heading", "norm_label": "3.3 o adaptador concreto \u2014 o coracao do extrator (`googlenews_etl/infrastructure/adapters/google_news_extractor_adapter.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L183" + "source_location": "L188" }, { "id": "docs_googlenews_extractor_guia_completo_3_4_resolu\u00e7\u00e3o_de_urls_googlenews_etl_infrastructure_adapters_playwright_url_resolver_adapter_py", @@ -9526,7 +12279,7 @@ "node_kind": "heading", "norm_label": "3.4 resolucao de urls (`googlenews_etl/infrastructure/adapters/playwright_url_resolver_adapter.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L332" + "source_location": "L339" }, { "id": "docs_googlenews_extractor_guia_completo_3_5_rate_limiter_googlenews_etl_domain_services_rate_limiter_service_py", @@ -9538,7 +12291,7 @@ "node_kind": "heading", "norm_label": "3.5 rate limiter (`googlenews_etl/domain/services/rate_limiter_service.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L384" + "source_location": "L395" }, { "id": "docs_googlenews_extractor_guia_completo_3_processamento_passo_a_passo", @@ -9550,7 +12303,7 @@ "node_kind": "heading", "norm_label": "3. processamento \u2014 passo a passo", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L113" + "source_location": "L117" }, { "id": "docs_googlenews_extractor_guia_completo_4_entidade_de_dom\u00ednio_da_not\u00edcia_googlenews_etl_domain_entities_news_article_py", @@ -9562,7 +12315,7 @@ "node_kind": "heading", "norm_label": "4. entidade de dominio da noticia (`googlenews_etl/domain/entities/news_article.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L403" + "source_location": "L414" }, { "id": "docs_googlenews_extractor_guia_completo_5_1_dtos_de_sa\u00edda_googlenews_etl_application_dtos_extract_news_dto_py", @@ -9574,7 +12327,7 @@ "node_kind": "heading", "norm_label": "5.1 dtos de saida (`googlenews_etl/application/dtos/extract_news_dto.py`)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L437" + "source_location": "L448" }, { "id": "docs_googlenews_extractor_guia_completo_5_2_exemplo_de_sa\u00edda_json", @@ -9586,7 +12339,7 @@ "node_kind": "heading", "norm_label": "5.2 exemplo de saida json", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L461" + "source_location": "L472" }, { "id": "docs_googlenews_extractor_guia_completo_5_sa\u00edda", @@ -9598,7 +12351,7 @@ "node_kind": "heading", "norm_label": "5. saida", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L435" + "source_location": "L446" }, { "id": "docs_googlenews_extractor_guia_completo_6_resumo_do_fluxo_completo_entrada_sa\u00edda", @@ -9610,7 +12363,7 @@ "node_kind": "heading", "norm_label": "6. resumo do fluxo completo (entrada \u2192 saida)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L486" + "source_location": "L497" }, { "id": "docs_googlenews_extractor_guia_completo_7_depend\u00eancias_para_rodar_o_que_n\u00e3o_est\u00e1_nos_4_arquivos_centrais", @@ -9622,7 +12375,7 @@ "node_kind": "heading", "norm_label": "7. dependencias para rodar (o que nao esta nos 4 arquivos centrais)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L514" + "source_location": "L525" }, { "id": "docs_googlenews_extractor_guia_completo_8_como_chamar_exemplo_de_uso", @@ -9634,7 +12387,7 @@ "node_kind": "heading", "norm_label": "8. como chamar (exemplo de uso)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L548" + "source_location": "L559" }, { "id": "docs_googlenews_extractor_guia_completo_comportamentos_observ\u00e1veis_honestidade", @@ -9646,7 +12399,7 @@ "node_kind": "heading", "norm_label": "comportamentos observaveis (honestidade)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L537" + "source_location": "L548" }, { "id": "docs_googlenews_extractor_guia_completo_depend\u00eancias_de_bibliotecas_requirements", @@ -9658,7 +12411,7 @@ "node_kind": "heading", "norm_label": "dependencias de bibliotecas (requirements)", "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L529" + "source_location": "L540" }, { "id": "docs_googlenews_extractor_guia_completo_extrator_de_not\u00edcias_do_google_news_guia_completo_de_funcionamento", @@ -9684,7 +12437,7 @@ "source_location": "L1" }, { - "id": "scripts_extract_google_news_rationale_110", + "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, @@ -9692,10 +12445,10 @@ "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": "L110" + "source_location": "L108" }, { - "id": "scripts_extract_google_news_rationale_154", + "id": "scripts_extract_google_news_rationale_152", "label": "Remove pontua\u00e7\u00e3o e espa\u00e7os extras para compara\u00e7\u00e3o de redund\u00e2ncia.", "_origin": "ast", "community": 82, @@ -9703,10 +12456,10 @@ "file_type": "rationale", "norm_label": "remove pontuacao e espacos extras para comparacao de redundancia.", "source_file": "scripts/extract_google_news.py", - "source_location": "L154" + "source_location": "L152" }, { - "id": "scripts_extract_google_news_rationale_159", + "id": "scripts_extract_google_news_rationale_157", "label": "Parseia o XML do RSS do Google News e extrai os itens estruturados.", "_origin": "ast", "community": 82, @@ -9714,10 +12467,10 @@ "file_type": "rationale", "norm_label": "parseia o xml do rss do google news e extrai os itens estruturados.", "source_file": "scripts/extract_google_news.py", - "source_location": "L159" + "source_location": "L157" }, { - "id": "scripts_extract_google_news_rationale_225", + "id": "scripts_extract_google_news_rationale_223", "label": "Resolve em paralelo as URLs intermedi\u00e1rias do Google News para os links finais\u2026", "_origin": "ast", "community": 82, @@ -9725,10 +12478,10 @@ "file_type": "rationale", "norm_label": "resolve em paralelo as urls intermediarias do google news para os links finais...", "source_file": "scripts/extract_google_news.py", - "source_location": "L225" + "source_location": "L223" }, { - "id": "scripts_extract_google_news_rationale_256", + "id": "scripts_extract_google_news_rationale_254", "label": "Realiza a requisi\u00e7\u00e3o ao feed RSS utilizando a biblioteca Foxcape como motor\u2026", "_origin": "ast", "community": 82, @@ -9736,10 +12489,10 @@ "file_type": "rationale", "norm_label": "realiza a requisicao ao feed rss utilizando a biblioteca foxcape como motor...", "source_file": "scripts/extract_google_news.py", - "source_location": "L256" + "source_location": "L254" }, { - "id": "scripts_extract_google_news_rationale_302", + "id": "scripts_extract_google_news_rationale_300", "label": "Orquestra a consulta ao Google News e retorna o resultado consolidado com URLs\u2026", "_origin": "ast", "community": 82, @@ -9747,10 +12500,10 @@ "file_type": "rationale", "norm_label": "orquestra a consulta ao google news e retorna o resultado consolidado com urls...", "source_file": "scripts/extract_google_news.py", - "source_location": "L302" + "source_location": "L300" }, { - "id": "scripts_extract_google_news_rationale_67", + "id": "scripts_extract_google_news_rationale_65", "label": "Entidade que representa uma not\u00edcia extra\u00edda.", "_origin": "ast", "community": 82, @@ -9758,7 +12511,7 @@ "file_type": "rationale", "norm_label": "entidade que representa uma noticia extraida.", "source_file": "scripts/extract_google_news.py", - "source_location": "L67" + "source_location": "L65" }, { "id": "tests_test_extract_google_news_rationale_112", @@ -9772,7 +12525,7 @@ "source_location": "L112" }, { - "id": "tests_test_extract_google_news_rationale_164", + "id": "tests_test_extract_google_news_rationale_162", "label": "Valida a resolu\u00e7\u00e3o concorrente em lote de uma lista de NewsArticle.", "_origin": "ast", "community": 82, @@ -9780,7 +12533,7 @@ "file_type": "rationale", "norm_label": "valida a resolucao concorrente em lote de uma lista de newsarticle.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L164" + "source_location": "L162" }, { "id": "scripts_extract_google_news_py_any", @@ -9794,7 +12547,7 @@ "source_location": "" }, { - "id": "scripts_extract_google_news_rationale_87", + "id": "scripts_extract_google_news_rationale_85", "label": "Resultado consolidado da extra\u00e7\u00e3o.", "_origin": "ast", "community": 83, @@ -9802,10 +12555,10 @@ "file_type": "rationale", "norm_label": "resultado consolidado da extracao.", "source_file": "scripts/extract_google_news.py", - "source_location": "L87" + "source_location": "L85" }, { - "id": "tests_test_extract_google_news_rationale_313", + "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": 83, @@ -9813,7 +12566,7 @@ "file_type": "rationale", "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": "L313" + "source_location": "L303" }, { "id": "tests_test_extract_google_news", @@ -9827,7 +12580,7 @@ "source_location": "L1" }, { - "id": "scripts_extract_google_news_rationale_210", + "id": "scripts_extract_google_news_rationale_208", "label": "Resolve a URL intermedi\u00e1ria do Google News para a URL real do ve\u00edculo.", "_origin": "ast", "community": 84, @@ -9835,7 +12588,7 @@ "file_type": "rationale", "norm_label": "resolve a url intermediaria do google news para a url real do veiculo.", "source_file": "scripts/extract_google_news.py", - "source_location": "L210" + "source_location": "L208" }, { "id": "tests_test_extract_google_news_rationale_1", @@ -9860,7 +12613,7 @@ "source_location": "L139" }, { - "id": "tests_test_extract_google_news_rationale_151", + "id": "tests_test_extract_google_news_rationale_149", "label": "Valida resolu\u00e7\u00e3o bem-sucedida de URL do Google News para o portal destino.", "_origin": "ast", "community": 84, @@ -9868,10 +12621,10 @@ "file_type": "rationale", "norm_label": "valida resolucao bem-sucedida de url do google news para o portal destino.", "source_file": "tests/test_extract_google_news.py", - "source_location": "L151" + "source_location": "L149" }, { - "id": "tests_test_extract_google_news_rationale_292", + "id": "tests_test_extract_google_news_rationale_282", "label": "Valida E2E que o decodificador resolve uma URL real do Google News para o\u2026", "_origin": "ast", "community": 84, @@ -9879,7 +12632,7 @@ "file_type": "rationale", "norm_label": "valida e2e que o decodificador resolve uma url real do google news para o...", "source_file": "tests/test_extract_google_news.py", - "source_location": "L292" + "source_location": "L282" }, { "id": "tests_test_extract_google_news_rationale_38", @@ -10589,7 +13342,7 @@ "source_location": "L33" }, { - "id": "tests_test_extract_google_news_rationale_189", + "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": 90, @@ -10597,7 +13350,7 @@ "file_type": "rationale", "norm_label": "valida a consolidacao do extractionresult a partir da busca mockada com urls...", "source_file": "tests/test_extract_google_news.py", - "source_location": "L189" + "source_location": "L187" }, { "id": "tests_test_extract_google_news_rationale_87", @@ -11100,7 +13853,7 @@ "node_kind": "heading", "norm_label": "1. \ud83e\udde0 classificador de conteudo e inerencia (nlp / llm / ecp)", "source_file": "README.md", - "source_location": "L78" + "source_location": "L79" }, { "id": "readme_1_clonar_o_reposit\u00f3rio_e_criar_ambiente_virtual", @@ -11112,7 +13865,7 @@ "node_kind": "heading", "norm_label": "1. clonar o repositorio e criar ambiente virtual", "source_file": "README.md", - "source_location": "L49" + "source_location": "L50" }, { "id": "readme_1_extra\u00e7\u00e3o_completa_autom\u00e1tica", @@ -11124,7 +13877,7 @@ "node_kind": "heading", "norm_label": "1. extracao completa automatica", "source_file": "README.md", - "source_location": "L240" + "source_location": "L241" }, { "id": "readme_1_river_plate_argentina_espanhol_2_p\u00e1ginas_salvar_em_arquivo", @@ -11136,7 +13889,7 @@ "node_kind": "heading", "norm_label": "1. river plate (argentina / espanhol / 2 paginas / salvar em arquivo)", "source_file": "README.md", - "source_location": "L184" + "source_location": "L185" }, { "id": "readme_2_amostragem_r\u00e1pida_limit_2_not\u00edcias", @@ -11148,7 +13901,7 @@ "node_kind": "heading", "norm_label": "2. amostragem rapida (limit 2 noticias)", "source_file": "README.md", - "source_location": "L246" + "source_location": "L247" }, { "id": "readme_2_cruzeiro_brasil_portugu\u00eas_formatado_no_terminal", @@ -11160,7 +13913,7 @@ "node_kind": "heading", "norm_label": "2. cruzeiro (brasil / portugues / formatado no terminal)", "source_file": "README.md", - "source_location": "L198" + "source_location": "L199" }, { "id": "readme_2_extrator_de_manchetes_do_google_news", @@ -11172,7 +13925,7 @@ "node_kind": "heading", "norm_label": "2. \ud83d\udcf0 extrator de manchetes do google news", "source_file": "README.md", - "source_location": "L155" + "source_location": "L156" }, { "id": "readme_2_instalar_depend\u00eancias", @@ -11184,7 +13937,7 @@ "node_kind": "heading", "norm_label": "2. instalar dependencias", "source_file": "README.md", - "source_location": "L62" + "source_location": "L63" }, { "id": "readme_3_baixar_bin\u00e1rios_do_navegador_stealth_camoufox", @@ -11196,7 +13949,7 @@ "node_kind": "heading", "norm_label": "3. baixar binarios do navegador stealth (camoufox)", "source_file": "README.md", - "source_location": "L68" + "source_location": "L69" }, { "id": "readme_3_destino_customizado_e_timeout_ajustado", @@ -11208,7 +13961,7 @@ "node_kind": "heading", "norm_label": "3. destino customizado e timeout ajustado", "source_file": "README.md", - "source_location": "L251" + "source_location": "L252" }, { "id": "readme_3_extrator_e_parser_multimotor_de_artigos", @@ -11220,7 +13973,7 @@ "node_kind": "heading", "norm_label": "3. \ud83d\udcf0 extrator e parser multimotor de artigos", "source_file": "README.md", - "source_location": "L215" + "source_location": "L216" }, { "id": "readme_3_f\u00f3rmula_1_inglaterra_ingl\u00eas", @@ -11232,7 +13985,7 @@ "node_kind": "heading", "norm_label": "3. formula 1 (inglaterra / ingles)", "source_file": "README.md", - "source_location": "L203" + "source_location": "L204" }, { "id": "readme_4_filtragem_com_jq_em_modo_silencioso", @@ -11244,7 +13997,7 @@ "node_kind": "heading", "norm_label": "4. filtragem com `jq` em modo silencioso", "source_file": "README.md", - "source_location": "L208" + "source_location": "L209" }, { "id": "readme_argumentos_e_flags_cli", @@ -11256,7 +14009,7 @@ "node_kind": "heading", "norm_label": "argumentos e flags cli", "source_file": "README.md", - "source_location": "L227" + "source_location": "L228" }, { "id": "readme_argumentos_e_flags_de_linha_de_comando", @@ -11268,7 +14021,7 @@ "node_kind": "heading", "norm_label": "argumentos e flags de linha de comando", "source_file": "README.md", - "source_location": "L169" + "source_location": "L170" }, { "id": "readme_arquitetura_de_classifica\u00e7\u00e3o_em_3_tiers", @@ -11280,7 +14033,7 @@ "node_kind": "heading", "norm_label": "arquitetura de classificacao em 3 tiers", "source_file": "README.md", - "source_location": "L86" + "source_location": "L87" }, { "id": "readme_categorias_de_decis\u00e3o", @@ -11292,7 +14045,7 @@ "node_kind": "heading", "norm_label": "categorias de decisao", "source_file": "README.md", - "source_location": "L107" + "source_location": "L108" }, { "id": "readme_diferenciais_t\u00e9cnicos", @@ -11304,7 +14057,7 @@ "node_kind": "heading", "norm_label": "diferenciais tecnicos", "source_file": "README.md", - "source_location": "L161" + "source_location": "L162" }, { "id": "readme_estrutura_do_projeto", @@ -11316,7 +14069,7 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc1 estrutura do projeto", "source_file": "README.md", - "source_location": "L258" + "source_location": "L259" }, { "id": "readme_exemplo_de_ecp_snapshot_ecp_sample_json", @@ -11328,7 +14081,7 @@ "node_kind": "heading", "norm_label": "exemplo de ecp snapshot (`ecp_sample.json`):", "source_file": "README.md", - "source_location": "L118" + "source_location": "L119" }, { "id": "readme_exemplos_de_uso", @@ -11340,7 +14093,7 @@ "node_kind": "heading", "norm_label": "exemplos de uso", "source_file": "README.md", - "source_location": "L238" + "source_location": "L239" }, { "id": "readme_exemplos_de_uso_cli", @@ -11352,7 +14105,7 @@ "node_kind": "heading", "norm_label": "exemplos de uso cli", "source_file": "README.md", - "source_location": "L140" + "source_location": "L141" }, { "id": "readme_exemplos_pr\u00e1ticos_de_uso", @@ -11364,7 +14117,7 @@ "node_kind": "heading", "norm_label": "exemplos praticos de uso", "source_file": "README.md", - "source_location": "L182" + "source_location": "L183" }, { "id": "readme_formato_do_ecp_snapshot_e_markdown", @@ -11376,7 +14129,7 @@ "node_kind": "heading", "norm_label": "formato do ecp snapshot e markdown", "source_file": "README.md", - "source_location": "L116" + "source_location": "L117" }, { "id": "readme_instala\u00e7\u00e3o_e_setup", @@ -11388,7 +14141,7 @@ "node_kind": "heading", "norm_label": "\u2699\ufe0f instalacao e setup", "source_file": "README.md", - "source_location": "L47" + "source_location": "L48" }, { "id": "readme_licen\u00e7a", @@ -11400,7 +14153,7 @@ "node_kind": "heading", "norm_label": "\ud83d\udcc4 licenca", "source_file": "README.md", - "source_location": "L308" + "source_location": "L309" }, { "id": "readme_o_que_\u00e9_e_como_funciona", @@ -11412,10 +14165,10 @@ "node_kind": "heading", "norm_label": "o que e e como funciona", "source_file": "README.md", - "source_location": "L80" + "source_location": "L81" }, { - "id": "readme_o_que_\u00e9_e_como_funciona_157", + "id": "readme_o_que_\u00e9_e_como_funciona_158", "label": "O que \u00e9 e Como Funciona", "_origin": "ast", "community": 97, @@ -11424,7 +14177,7 @@ "node_kind": "heading", "norm_label": "o que e e como funciona", "source_file": "README.md", - "source_location": "L157" + "source_location": "L158" }, { "id": "readme_tabela_de_conte\u00fados", @@ -11448,7 +14201,7 @@ "node_kind": "heading", "norm_label": "\ud83e\uddea testes e qualidade de codigo", "source_file": "README.md", - "source_location": "L287" + "source_location": "L288" }, { "id": "readme_textnlpclassifierapp", @@ -11484,7 +14237,7 @@ "node_kind": "heading", "norm_label": "visao geral e triplice extracao", "source_file": "README.md", - "source_location": "L217" + "source_location": "L218" }, { "id": "specs_003_article_content_extractor_checklists_extraction", @@ -11975,19 +14728,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "classify.py", - "source_location": "L79", - "weight": 1.0 - }, - { - "source": "classify_main", - "target": "classify_parse_args", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "classify.py", - "source_location": "L100", + "source_location": "L78", "weight": 1.0 }, { @@ -11999,7 +14740,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "classify.py", - "source_location": "L109", + "source_location": "L108", "weight": 1.0 }, { @@ -12011,7 +14752,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "classify.py", - "source_location": "L127", + "source_location": "L126", "weight": 1.0 }, { @@ -12023,7 +14764,19 @@ "confidence_score": 1.0, "context": "call", "source_file": "classify.py", - "source_location": "L172", + "source_location": "L171", + "weight": 1.0 + }, + { + "source": "classify_main", + "target": "classify_parse_args", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "classify.py", + "source_location": "L99", "weight": 1.0 }, { @@ -12035,7 +14788,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L492", + "source_location": "L516", "weight": 1.0 }, { @@ -12047,7 +14800,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L481", + "source_location": "L505", "weight": 1.0 }, { @@ -12059,7 +14812,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L485", + "source_location": "L509", "weight": 1.0 }, { @@ -12071,7 +14824,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L408", + "source_location": "L432", "weight": 1.0 }, { @@ -12083,7 +14836,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L410", + "source_location": "L434", "weight": 1.0 }, { @@ -12095,7 +14848,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L424", + "source_location": "L448", "weight": 1.0 }, { @@ -12107,7 +14860,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L426", + "source_location": "L450", "weight": 1.0 }, { @@ -12119,7 +14872,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L440", + "source_location": "L464", "weight": 1.0 }, { @@ -12131,7 +14884,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L442", + "source_location": "L466", "weight": 1.0 }, { @@ -12143,7 +14896,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L532", + "source_location": "L556", "weight": 1.0 }, { @@ -12155,7 +14908,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L720", + "source_location": "L744", "weight": 1.0 }, { @@ -12167,7 +14920,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L721", + "source_location": "L745", "weight": 1.0 }, { @@ -12179,7 +14932,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L728", + "source_location": "L752", "weight": 1.0 }, { @@ -12191,7 +14944,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L345", + "source_location": "L369", "weight": 1.0 }, { @@ -12203,7 +14956,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L562", + "source_location": "L586", "weight": 1.0 }, { @@ -12215,7 +14968,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L569", + "source_location": "L593", "weight": 1.0 }, { @@ -12227,7 +14980,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L583", + "source_location": "L607", "weight": 1.0 }, { @@ -12239,7 +14992,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L595", + "source_location": "L619", "weight": 1.0 }, { @@ -12251,7 +15004,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L599", + "source_location": "L623", "weight": 1.0 }, { @@ -12263,7 +15016,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L640", + "source_location": "L664", "weight": 1.0 }, { @@ -12275,7 +15028,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L649", + "source_location": "L673", "weight": 1.0 }, { @@ -12287,7 +15040,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L391", + "source_location": "L415", "weight": 1.0 }, { @@ -12299,7 +15052,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_article_contents.py", - "source_location": "L276", + "source_location": "L274", "weight": 1.0 }, { @@ -12311,7 +15064,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L307", + "source_location": "L305", "weight": 1.0 }, { @@ -12323,7 +15076,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L316", + "source_location": "L314", "weight": 1.0 }, { @@ -12335,7 +15088,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L320", + "source_location": "L318", "weight": 1.0 }, { @@ -12347,7 +15100,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L325", + "source_location": "L323", "weight": 1.0 }, { @@ -12359,7 +15112,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L327", + "source_location": "L325", "weight": 1.0 }, { @@ -12371,7 +15124,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L418", + "source_location": "L416", "weight": 1.0 }, { @@ -12383,7 +15136,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L422", + "source_location": "L420", "weight": 1.0 }, { @@ -12395,7 +15148,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L437", + "source_location": "L435", "weight": 1.0 }, { @@ -12407,7 +15160,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L190", + "source_location": "L188", "weight": 1.0 }, { @@ -12419,7 +15172,223 @@ "confidence_score": 1.0, "context": "call", "source_file": "scripts/extract_google_news.py", - "source_location": "L197", + "source_location": "L195", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_atomic_save_json", + "target": "scripts_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L432", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_extract_candidate_data", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L171", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_extract_candidate_data", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L188", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_extract_candidate_data", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L189", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_main", + "target": "scripts_select_article_extractor_parse_args", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L545", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_main", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L547", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_process_batch", + "target": "scripts_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L459", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_process_batch", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L491", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_process_batch", + "target": "scripts_select_article_extractor_atomic_save_json", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L506", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_process_batch", + "target": "scripts_select_article_extractor_batchprocessingresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L508", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_extract_candidate_data", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L379", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_form_active_set", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L382", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_articleselectionresult", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L386", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_calculate_consensus_metrics", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L408", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_select_with_consensus", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L411", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_select_without_consensus", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L413", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_with_consensus", + "target": "scripts_select_article_extractor_break_priority_tie", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L318", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_without_consensus", + "target": "scripts_select_article_extractor_break_priority_tie", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L344", "weight": 1.0 }, { @@ -12431,7 +15400,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/adapters/embeddings.py", - "source_location": "L30", + "source_location": "L32", "weight": 1.0 }, { @@ -12455,7 +15424,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L37", + "source_location": "L34", "weight": 1.0 }, { @@ -12467,7 +15436,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L204", + "source_location": "L223", "weight": 1.0 }, { @@ -12479,7 +15448,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L208", + "source_location": "L227", "weight": 1.0 }, { @@ -12491,7 +15460,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L67", + "source_location": "L66", "weight": 1.0 }, { @@ -12503,7 +15472,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L68", + "source_location": "L67", "weight": 1.0 }, { @@ -12515,7 +15484,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L69", + "source_location": "L68", "weight": 1.0 }, { @@ -12527,7 +15496,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L82", + "source_location": "L81", "weight": 1.0 }, { @@ -12539,7 +15508,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L90", + "source_location": "L89", "weight": 1.0 }, { @@ -12551,7 +15520,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L55", + "source_location": "L53", "weight": 1.0 }, { @@ -12563,7 +15532,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L59", + "source_location": "L58", "weight": 1.0 }, { @@ -12575,19 +15544,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/classifier.py", - "source_location": "L24", - "weight": 1.0 - }, - { - "source": "src_language_detect_language", - "target": "src_language_normalize_text", - "relation": "calls", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "call", - "source_file": "src/language.py", - "source_location": "L123", + "source_location": "L21", "weight": 1.0 }, { @@ -12599,7 +15556,19 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/language.py", - "source_location": "L93", + "source_location": "L485", + "weight": 1.0 + }, + { + "source": "src_language_detect_language", + "target": "src_language_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "src/language.py", + "source_location": "L556", "weight": 1.0 }, { @@ -12611,7 +15580,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/models.py", - "source_location": "L166", + "source_location": "L170", "weight": 1.0 }, { @@ -12623,7 +15592,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/models.py", - "source_location": "L149", + "source_location": "L151", "weight": 1.0 }, { @@ -12659,7 +15628,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/parser.py", - "source_location": "L59", + "source_location": "L60", "weight": 1.0 }, { @@ -12671,7 +15640,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "src/parser.py", - "source_location": "L60", + "source_location": "L61", "weight": 1.0 }, { @@ -12731,7 +15700,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L42", + "source_location": "L46", "weight": 1.0 }, { @@ -12743,7 +15712,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L57", + "source_location": "L62", "weight": 1.0 }, { @@ -12755,7 +15724,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L65", + "source_location": "L70", "weight": 1.0 }, { @@ -12767,7 +15736,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L73", + "source_location": "L78", "weight": 1.0 }, { @@ -12779,7 +15748,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L90", + "source_location": "L96", "weight": 1.0 }, { @@ -12791,7 +15760,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L17", + "source_location": "L16", "weight": 1.0 }, { @@ -12803,7 +15772,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_adversarial.py", - "source_location": "L33", + "source_location": "L37", "weight": 1.0 }, { @@ -12815,7 +15784,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_benchmark_24.py", - "source_location": "L40", + "source_location": "L38", "weight": 1.0 }, { @@ -12827,7 +15796,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_classifier.py", - "source_location": "L49", + "source_location": "L50", "weight": 1.0 }, { @@ -12839,7 +15808,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_classifier.py", - "source_location": "L33", + "source_location": "L34", "weight": 1.0 }, { @@ -12851,7 +15820,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_classifier.py", - "source_location": "L91", + "source_location": "L92", "weight": 1.0 }, { @@ -12863,7 +15832,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_classifier.py", - "source_location": "L78", + "source_location": "L79", "weight": 1.0 }, { @@ -12875,7 +15844,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_classifier.py", - "source_location": "L64", + "source_location": "L65", "weight": 1.0 }, { @@ -12887,7 +15856,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_cli.py", - "source_location": "L81", + "source_location": "L103", "weight": 1.0 }, { @@ -12899,7 +15868,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_cli.py", - "source_location": "L60", + "source_location": "L77", "weight": 1.0 }, { @@ -12911,7 +15880,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_cli.py", - "source_location": "L100", + "source_location": "L121", "weight": 1.0 }, { @@ -12923,7 +15892,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_cli.py", - "source_location": "L47", + "source_location": "L62", "weight": 1.0 }, { @@ -12935,7 +15904,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_cli.py", - "source_location": "L22", + "source_location": "L29", "weight": 1.0 }, { @@ -12947,7 +15916,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L313", + "source_location": "L307", "weight": 1.0 }, { @@ -12959,7 +15928,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L303", + "source_location": "L299", "weight": 1.0 }, { @@ -12971,7 +15940,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L258", + "source_location": "L252", "weight": 1.0 }, { @@ -12983,7 +15952,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L368", + "source_location": "L362", "weight": 1.0 }, { @@ -12995,7 +15964,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L373", + "source_location": "L367", "weight": 1.0 }, { @@ -13007,7 +15976,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L324", + "source_location": "L318", "weight": 1.0 }, { @@ -13019,7 +15988,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L331", + "source_location": "L325", "weight": 1.0 }, { @@ -13031,7 +16000,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L222", + "source_location": "L216", "weight": 1.0 }, { @@ -13043,7 +16012,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L240", + "source_location": "L234", "weight": 1.0 }, { @@ -13055,7 +16024,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L97", + "source_location": "L95", "weight": 1.0 }, { @@ -13067,7 +16036,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L123", + "source_location": "L121", "weight": 1.0 }, { @@ -13079,7 +16048,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L113", + "source_location": "L111", "weight": 1.0 }, { @@ -13091,7 +16060,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L200", + "source_location": "L196", "weight": 1.0 }, { @@ -13103,7 +16072,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L284", + "source_location": "L279", "weight": 1.0 }, { @@ -13115,7 +16084,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L212", + "source_location": "L206", "weight": 1.0 }, { @@ -13127,7 +16096,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L127", + "source_location": "L125", "weight": 1.0 }, { @@ -13139,7 +16108,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L134", + "source_location": "L132", "weight": 1.0 }, { @@ -13151,7 +16120,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L135", + "source_location": "L133", "weight": 1.0 }, { @@ -13163,7 +16132,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L143", + "source_location": "L139", "weight": 1.0 }, { @@ -13175,7 +16144,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L155", + "source_location": "L151", "weight": 1.0 }, { @@ -13187,7 +16156,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L167", + "source_location": "L163", "weight": 1.0 }, { @@ -13199,7 +16168,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L178", + "source_location": "L174", "weight": 1.0 }, { @@ -13211,7 +16180,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L191", + "source_location": "L187", "weight": 1.0 }, { @@ -13223,7 +16192,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L265", + "source_location": "L255", "weight": 1.0 }, { @@ -13235,7 +16204,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L255", + "source_location": "L245", "weight": 1.0 }, { @@ -13247,7 +16216,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L228", + "source_location": "L222", "weight": 1.0 }, { @@ -13259,7 +16228,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L278", + "source_location": "L268", "weight": 1.0 }, { @@ -13271,7 +16240,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L331", + "source_location": "L321", "weight": 1.0 }, { @@ -13283,7 +16252,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L314", + "source_location": "L304", "weight": 1.0 }, { @@ -13295,7 +16264,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L315", + "source_location": "L305", "weight": 1.0 }, { @@ -13307,7 +16276,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L303", + "source_location": "L293", "weight": 1.0 }, { @@ -13319,7 +16288,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L190", + "source_location": "L188", "weight": 1.0 }, { @@ -13331,7 +16300,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L204", + "source_location": "L200", "weight": 1.0 }, { @@ -13403,7 +16372,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L159", + "source_location": "L157", "weight": 1.0 }, { @@ -13415,7 +16384,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L166", + "source_location": "L164", "weight": 1.0 }, { @@ -13427,7 +16396,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_extract_google_news.py", - "source_location": "L182", + "source_location": "L180", "weight": 1.0 }, { @@ -13451,7 +16420,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L21", + "source_location": "L23", "weight": 1.0 }, { @@ -13463,7 +16432,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L49", + "source_location": "L53", "weight": 1.0 }, { @@ -13475,7 +16444,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L35", + "source_location": "L39", "weight": 1.0 }, { @@ -13487,7 +16456,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L42", + "source_location": "L46", "weight": 1.0 }, { @@ -13499,7 +16468,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L14", + "source_location": "L16", "weight": 1.0 }, { @@ -13511,7 +16480,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L28", + "source_location": "L32", "weight": 1.0 }, { @@ -13523,7 +16492,7 @@ "confidence_score": 1.0, "context": "call", "source_file": "tests/test_language.py", - "source_location": "L55", + "source_location": "L59", "weight": 1.0 }, { @@ -13622,6 +16591,426 @@ "source_location": "L102", "weight": 1.0 }, + { + "source": "tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L370", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L378", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L123", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L136", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L148", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L171", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L185", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_006_single_usable_candidate", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L197", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L210", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L221", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L238", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L255", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L268", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L288", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L289", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_013_empty_articles_list", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L304", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_013_empty_articles_list", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L305", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L324", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L536", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L553", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L563", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L485", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_generate_shingles_empty", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L107", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_generate_shingles_short_text", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L101", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_generate_shingles_sliding_window", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L92", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_integration_large_batch_determinism", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L434", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L452", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L457", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_integration_reference_file", + "target": "tests_test_select_article_extractor_py_path", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L336", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_integration_reference_file", + "target": "scripts_select_article_extractor_process_batch", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L341", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L49", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L67", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_normalize_text_markdown_links", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L55", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "calls", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "call", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L81", + "weight": 1.0 + }, { "source": "tests_test_benchmark_24_classifier", "target": "tests_test_benchmark_24_py_fixture", @@ -13631,7 +17020,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_benchmark_24.py", - "source_location": "L24", + "source_location": "L22", "weight": 1.0 }, { @@ -13643,7 +17032,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_benchmark_24.py", - "source_location": "L29", + "source_location": "L27", "weight": 1.0 }, { @@ -13655,7 +17044,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_classifier.py", - "source_location": "L8", + "source_location": "L9", "weight": 1.0 }, { @@ -13667,7 +17056,7 @@ "confidence_score": 1.0, "context": "decorator", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L62", + "source_location": "L60", "weight": 1.0 }, { @@ -13691,7 +17080,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_article_contents.py", - "source_location": "L190", + "source_location": "L187", "weight": 1.0 }, { @@ -13703,7 +17092,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_article_contents.py", - "source_location": "L215", + "source_location": "L212", "weight": 1.0 }, { @@ -13715,7 +17104,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_article_contents.py", - "source_location": "L46", + "source_location": "L43", "weight": 1.0 }, { @@ -13727,7 +17116,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_article_contents.py", - "source_location": "L129", + "source_location": "L126", "weight": 1.0 }, { @@ -13739,7 +17128,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_article_contents.py", - "source_location": "L165", + "source_location": "L162", "weight": 1.0 }, { @@ -13751,7 +17140,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_article_contents.py", - "source_location": "L80", + "source_location": "L77", "weight": 1.0 }, { @@ -13763,7 +17152,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_google_news.py", - "source_location": "L97", + "source_location": "L95", "weight": 1.0 }, { @@ -13775,7 +17164,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_google_news.py", - "source_location": "L75", + "source_location": "L73", "weight": 1.0 }, { @@ -13787,43 +17176,115 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "scripts/extract_google_news.py", - "source_location": "L222", + "source_location": "L220", "weight": 1.0 }, { - "source": "src_adapters_base_basenlpadapter_disambiguate", - "target": "src_models_classificationresult", + "source": "scripts_select_article_extractor_calculate_consensus_metrics", + "target": "scripts_select_article_extractor_extractorcandidate", "relation": "references", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "generic_arg", - "source_file": "src/adapters/base.py", - "source_location": "L24", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L234", "weight": 1.0 }, { - "source": "src_adapters_embeddings_localembeddingsadapter_disambiguate", - "target": "src_models_classificationresult", + "source": "scripts_select_article_extractor_extract_candidate_data", + "target": "scripts_select_article_extractor_py_any", "relation": "references", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "generic_arg", - "source_file": "src/adapters/embeddings.py", - "source_location": "L35", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L167", "weight": 1.0 }, { - "source": "src_adapters_llm_llmfallbackadapter_disambiguate", - "target": "src_models_classificationresult", + "source": "scripts_select_article_extractor_form_active_set", + "target": "scripts_select_article_extractor_extractorcandidate", "relation": "references", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "generic_arg", - "source_file": "src/adapters/llm.py", - "source_location": "L28", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L211", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_form_active_set", + "target": "scripts_select_article_extractor_extractorname", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L211", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_article_extractor", + "target": "scripts_select_article_extractor_py_any", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L373", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_with_consensus", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L289", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_with_consensus", + "target": "scripts_select_article_extractor_extractorname", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L289", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_without_consensus", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L322", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_select_without_consensus", + "target": "scripts_select_article_extractor_extractorname", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "generic_arg", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L322", "weight": 1.0 }, { @@ -13835,7 +17296,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "src/models.py", - "source_location": "L158", + "source_location": "L160", "weight": 1.0 }, { @@ -13883,7 +17344,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "tests/test_extract_google_news.py", - "source_location": "L263", + "source_location": "L253", "weight": 1.0 }, { @@ -13895,7 +17356,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "tests/test_extract_google_news.py", - "source_location": "L217", + "source_location": "L213", "weight": 1.0 }, { @@ -13907,43 +17368,7 @@ "confidence_score": 1.0, "context": "generic_arg", "source_file": "tests/test_extract_google_news.py", - "source_location": "L272", - "weight": 1.0 - }, - { - "source": "classify", - "target": "src_models_classificationerror", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "classify.py", - "source_location": "L12", - "weight": 1.0 - }, - { - "source": "classify", - "target": "src_models_ecpsnapshot", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "classify.py", - "source_location": "L12", - "weight": 1.0 - }, - { - "source": "classify", - "target": "src_models_errorcode", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "classify.py", - "source_location": "L12", + "source_location": "L262", "weight": 1.0 }, { @@ -13955,7 +17380,43 @@ "confidence_score": 1.0, "context": "import", "source_file": "classify.py", - "source_location": "L13", + "source_location": "L11", + "weight": 1.0 + }, + { + "source": "classify", + "target": "src_models_classificationerror", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "classify.py", + "source_location": "L12", + "weight": 1.0 + }, + { + "source": "classify", + "target": "src_models_ecpsnapshot", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "classify.py", + "source_location": "L12", + "weight": 1.0 + }, + { + "source": "classify", + "target": "src_models_errorcode", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "classify.py", + "source_location": "L12", "weight": 1.0 }, { @@ -14015,6 +17476,18 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/embeddings.py", + "source_location": "L9", + "weight": 1.0 + }, + { + "source": "src_adapters_llm", + "target": "src_adapters_base_basenlpadapter", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "src/adapters/llm.py", "source_location": "L11", "weight": 1.0 }, @@ -14027,7 +17500,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L11", + "source_location": "L12", "weight": 1.0 }, { @@ -14039,45 +17512,9 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L11", - "weight": 1.0 - }, - { - "source": "src_adapters_llm", - "target": "src_adapters_base_basenlpadapter", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "src/adapters/llm.py", "source_location": "L12", "weight": 1.0 }, - { - "source": "src_classifier", - "target": "src_language_detect_language", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "src/classifier.py", - "source_location": "L16", - "weight": 1.0 - }, - { - "source": "src_classifier", - "target": "src_language_normalize_text", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "src/classifier.py", - "source_location": "L16", - "weight": 1.0 - }, { "source": "src_classifier", "target": "src_parser_extract_evidence_snippets", @@ -14087,7 +17524,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L17", + "source_location": "L14", "weight": 1.0 }, { @@ -14099,7 +17536,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L17", + "source_location": "L14", "weight": 1.0 }, { @@ -14111,7 +17548,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L54", + "source_location": "L51", "weight": 1.0 }, { @@ -14123,12 +17560,24 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L58", + "source_location": "L56", "weight": 1.0 }, { "source": "src_classifier", - "target": "src_models_classificationerror", + "target": "src_language_detect_language", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "src/classifier.py", + "source_location": "L8", + "weight": 1.0 + }, + { + "source": "src_classifier", + "target": "src_language_normalize_text", "relation": "imports", "_origin": "ast", "confidence": "EXTRACTED", @@ -14147,7 +17596,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L8", + "source_location": "L9", "weight": 1.0 }, { @@ -14159,7 +17608,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L8", + "source_location": "L9", "weight": 1.0 }, { @@ -14171,31 +17620,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L8", - "weight": 1.0 - }, - { - "source": "src_classifier", - "target": "src_models_errorcode", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "src/classifier.py", - "source_location": "L8", - "weight": 1.0 - }, - { - "source": "src_classifier", - "target": "src_models_relatedentity", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "src/classifier.py", - "source_location": "L8", + "source_location": "L9", "weight": 1.0 }, { @@ -14255,115 +17680,67 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_adversarial.py", - "source_location": "L12", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial", - "target": "src_models_ecpsnapshot", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_adversarial.py", - "source_location": "L12", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial", - "target": "src_models_relatedentity", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_adversarial.py", - "source_location": "L12", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial", - "target": "src_classifier_inherenceclassifier", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_adversarial.py", - "source_location": "L32", - "weight": 1.0 - }, - { - "source": "tests_test_benchmark_24", - "target": "src_models_decisioncategory", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_benchmark_24.py", - "source_location": "L10", - "weight": 1.0 - }, - { - "source": "tests_test_benchmark_24", - "target": "src_models_ecpsnapshot", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_benchmark_24.py", - "source_location": "L10", - "weight": 1.0 - }, - { - "source": "tests_test_benchmark_24", - "target": "src_classifier_inherenceclassifier", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_benchmark_24.py", "source_location": "L11", "weight": 1.0 }, { - "source": "tests_test_classifier", - "target": "src_models_decisioncategory", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_classifier.py", - "source_location": "L4", - "weight": 1.0 - }, - { - "source": "tests_test_classifier", + "source": "tests_test_adversarial", "target": "src_models_ecpsnapshot", "relation": "imports", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "import", - "source_file": "tests/test_classifier.py", - "source_location": "L4", + "source_file": "tests/test_adversarial.py", + "source_location": "L11", "weight": 1.0 }, { - "source": "tests_test_classifier", + "source": "tests_test_adversarial", "target": "src_models_relatedentity", "relation": "imports", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "import", - "source_file": "tests/test_classifier.py", - "source_location": "L4", + "source_file": "tests/test_adversarial.py", + "source_location": "L11", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial", + "target": "src_classifier_inherenceclassifier", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_adversarial.py", + "source_location": "L35", + "weight": 1.0 + }, + { + "source": "tests_test_benchmark_24", + "target": "src_classifier_inherenceclassifier", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_benchmark_24.py", + "source_location": "L12", + "weight": 1.0 + }, + { + "source": "tests_test_benchmark_24", + "target": "src_models_ecpsnapshot", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_benchmark_24.py", + "source_location": "L13", "weight": 1.0 }, { @@ -14378,6 +17755,42 @@ "source_location": "L5", "weight": 1.0 }, + { + "source": "tests_test_classifier", + "target": "src_models_decisioncategory", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classifier.py", + "source_location": "L6", + "weight": 1.0 + }, + { + "source": "tests_test_classifier", + "target": "src_models_ecpsnapshot", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classifier.py", + "source_location": "L6", + "weight": 1.0 + }, + { + "source": "tests_test_classifier", + "target": "src_models_relatedentity", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classifier.py", + "source_location": "L6", + "weight": 1.0 + }, { "source": "tests_test_cli", "target": "classify_main", @@ -14387,7 +17800,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_cli.py", - "source_location": "L6", + "source_location": "L5", "weight": 1.0 }, { @@ -14399,7 +17812,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14411,7 +17824,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14423,7 +17836,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14435,7 +17848,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14447,7 +17860,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14459,7 +17872,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14471,7 +17884,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14483,7 +17896,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14495,7 +17908,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14507,7 +17920,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14519,7 +17932,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14531,7 +17944,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14543,7 +17956,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14555,7 +17968,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14567,7 +17980,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -14714,18 +18127,6 @@ "source_location": "L12", "weight": 1.0 }, - { - "source": "tests_test_models", - "target": "src_parser_extract_sentences", - "relation": "imports", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_models.py", - "source_location": "L12", - "weight": 1.0 - }, { "source": "tests_test_models", "target": "src_parser_strip_markdown", @@ -14747,7 +18148,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_models.py", - "source_location": "L4", + "source_location": "L5", "weight": 1.0 }, { @@ -14759,7 +18160,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_models.py", - "source_location": "L4", + "source_location": "L5", "weight": 1.0 }, { @@ -14771,7 +18172,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_models.py", - "source_location": "L4", + "source_location": "L5", "weight": 1.0 }, { @@ -14783,7 +18184,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_models.py", - "source_location": "L4", + "source_location": "L5", "weight": 1.0 }, { @@ -14795,19 +18196,163 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_models.py", - "source_location": "L4", + "source_location": "L5", "weight": 1.0 }, { - "source": "tests_test_models", - "target": "src_models_relatedentity", + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_calculate_consensus_metrics", "relation": "imports", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "import", - "source_file": "tests/test_models.py", - "source_location": "L4", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_candidatestatus", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_extractorname", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_form_active_set", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_main", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_process_batch", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_select_with_consensus", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor_select_without_consensus", + "relation": "imports", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "classify", + "target": "src_classifier", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "classify.py", + "source_location": "L11", "weight": 1.0 }, { @@ -14823,15 +18368,15 @@ "weight": 1.0 }, { - "source": "classify", - "target": "src_classifier", + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_py_enum", "relation": "imports_from", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "import", - "source_file": "classify.py", - "source_location": "L13", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L24", "weight": 1.0 }, { @@ -14879,19 +18424,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/embeddings.py", - "source_location": "L11", - "weight": 1.0 - }, - { - "source": "src_adapters_llm", - "target": "src_models", - "relation": "imports_from", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "src/adapters/llm.py", - "source_location": "L11", + "source_location": "L9", "weight": 1.0 }, { @@ -14903,19 +18436,19 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/adapters/llm.py", - "source_location": "L12", + "source_location": "L11", "weight": 1.0 }, { - "source": "src_classifier", - "target": "src_language", + "source": "src_adapters_llm", + "target": "src_models", "relation": "imports_from", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "context": "import", - "source_file": "src/classifier.py", - "source_location": "L16", + "source_file": "src/adapters/llm.py", + "source_location": "L12", "weight": 1.0 }, { @@ -14927,7 +18460,19 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L17", + "source_location": "L14", + "weight": 1.0 + }, + { + "source": "src_classifier", + "target": "src_language", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "src/classifier.py", + "source_location": "L8", "weight": 1.0 }, { @@ -14939,12 +18484,12 @@ "confidence_score": 1.0, "context": "import", "source_file": "src/classifier.py", - "source_location": "L8", + "source_location": "L9", "weight": 1.0 }, { "source": "src_models", - "target": "enum", + "target": "src_models_py_enum", "relation": "imports_from", "_origin": "ast", "confidence": "EXTRACTED", @@ -15011,6 +18556,18 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_adversarial.py", + "source_location": "L11", + "weight": 1.0 + }, + { + "source": "tests_test_benchmark_24", + "target": "src_classifier", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_benchmark_24.py", "source_location": "L12", "weight": 1.0 }, @@ -15023,31 +18580,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_benchmark_24.py", - "source_location": "L10", - "weight": 1.0 - }, - { - "source": "tests_test_benchmark_24", - "target": "src_classifier", - "relation": "imports_from", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_benchmark_24.py", - "source_location": "L11", - "weight": 1.0 - }, - { - "source": "tests_test_classifier", - "target": "src_models", - "relation": "imports_from", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "context": "import", - "source_file": "tests/test_classifier.py", - "source_location": "L4", + "source_location": "L13", "weight": 1.0 }, { @@ -15062,6 +18595,18 @@ "source_location": "L5", "weight": 1.0 }, + { + "source": "tests_test_classifier", + "target": "src_models", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_classifier.py", + "source_location": "L6", + "weight": 1.0 + }, { "source": "tests_test_cli", "target": "classify", @@ -15071,7 +18616,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_cli.py", - "source_location": "L6", + "source_location": "L5", "weight": 1.0 }, { @@ -15083,7 +18628,7 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L18", + "source_location": "L16", "weight": 1.0 }, { @@ -15131,7 +18676,19 @@ "confidence_score": 1.0, "context": "import", "source_file": "tests/test_models.py", - "source_location": "L4", + "source_location": "L5", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "scripts_select_article_extractor", + "relation": "imports_from", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "import", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L20", "weight": 1.0 }, { @@ -15143,7 +18700,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "scripts/extract_article_contents.py", - "source_location": "L484", + "source_location": "L508", "weight": 1.0 }, { @@ -15155,7 +18712,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "scripts/extract_article_contents.py", - "source_location": "L516", + "source_location": "L540", "weight": 1.0 }, { @@ -15167,7 +18724,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "scripts/extract_article_contents.py", - "source_location": "L551", + "source_location": "L575", "weight": 1.0 }, { @@ -15179,7 +18736,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "scripts/extract_article_contents.py", - "source_location": "L544", + "source_location": "L568", "weight": 1.0 }, { @@ -15191,7 +18748,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "scripts/extract_article_contents.py", - "source_location": "L544", + "source_location": "L568", "weight": 1.0 }, { @@ -15203,7 +18760,43 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "scripts/extract_google_news.py", - "source_location": "L299", + "source_location": "L297", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_atomic_save_json", + "target": "scripts_select_article_extractor_py_any", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L430", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_extract_candidate_data", + "target": "scripts_select_article_extractor_extractorname", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L167", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_normalize_text", + "target": "scripts_select_article_extractor_py_any", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L106", "weight": 1.0 }, { @@ -15215,7 +18808,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/adapters/base.py", - "source_location": "L24", + "source_location": "L22", "weight": 1.0 }, { @@ -15227,7 +18820,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/adapters/embeddings.py", - "source_location": "L35", + "source_location": "L37", "weight": 1.0 }, { @@ -15251,7 +18844,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "src/classifier.py", - "source_location": "L61", + "source_location": "L60", "weight": 1.0 }, { @@ -15263,7 +18856,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L311", + "source_location": "L305", "weight": 1.0 }, { @@ -15275,7 +18868,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L296", + "source_location": "L291", "weight": 1.0 }, { @@ -15287,7 +18880,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L248", + "source_location": "L242", "weight": 1.0 }, { @@ -15299,7 +18892,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L120", + "source_location": "L118", "weight": 1.0 }, { @@ -15311,7 +18904,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L112", + "source_location": "L110", "weight": 1.0 }, { @@ -15323,7 +18916,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L277", + "source_location": "L271", "weight": 1.0 }, { @@ -15335,7 +18928,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L126", + "source_location": "L124", "weight": 1.0 }, { @@ -15347,7 +18940,7 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_google_news.py", - "source_location": "L242", + "source_location": "L234", "weight": 1.0 }, { @@ -15359,7 +18952,31 @@ "confidence_score": 1.0, "context": "parameter_type", "source_file": "tests/test_extract_google_news.py", - "source_location": "L328", + "source_location": "L318", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", + "target": "tests_test_select_article_extractor_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L317", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_test_integration_large_batch_determinism", + "target": "tests_test_select_article_extractor_py_path", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "parameter_type", + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L397", "weight": 1.0 }, { @@ -15371,7 +18988,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "classify.py", - "source_location": "L28", + "source_location": "L27", "weight": 1.0 }, { @@ -15383,7 +19000,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "scripts/extract_article_contents.py", - "source_location": "L664", + "source_location": "L688", "weight": 1.0 }, { @@ -15395,7 +19012,67 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "scripts/extract_google_news.py", - "source_location": "L338", + "source_location": "L336", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_break_priority_tie", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "return_type", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L280", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_parse_args", + "target": "scripts_select_article_extractor_py_namespace", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "return_type", + "source_file": "scripts/select_article_extractor.py", + "source_location": "L523", + "weight": 1.0 + }, + { + "source": "src_adapters_base_basenlpadapter_disambiguate", + "target": "src_models_classificationresult", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "return_type", + "source_file": "src/adapters/base.py", + "source_location": "L22", + "weight": 1.0 + }, + { + "source": "src_adapters_embeddings_localembeddingsadapter_disambiguate", + "target": "src_models_classificationresult", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "return_type", + "source_file": "src/adapters/embeddings.py", + "source_location": "L37", + "weight": 1.0 + }, + { + "source": "src_adapters_llm_llmfallbackadapter_disambiguate", + "target": "src_models_classificationresult", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "context": "return_type", + "source_file": "src/adapters/llm.py", + "source_location": "L28", "weight": 1.0 }, { @@ -15407,7 +19084,7 @@ "confidence_score": 1.0, "context": "return_type", "source_file": "tests/test_extract_article_contents.py", - "source_location": "L63", + "source_location": "L61", "weight": 1.0 }, { @@ -17552,7 +21229,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "classify.py", - "source_location": "L28", + "source_location": "L27", "weight": 1.0 }, { @@ -17563,7 +21240,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "classify.py", - "source_location": "L73", + "source_location": "L72", "weight": 1.0 }, { @@ -17574,7 +21251,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "classify.py", - "source_location": "L98", + "source_location": "L97", "weight": 1.0 }, { @@ -17607,7 +21284,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L75", + "source_location": "L77", "weight": 1.0 }, { @@ -17618,7 +21295,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L185", + "source_location": "L190", "weight": 1.0 }, { @@ -17629,7 +21306,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L213", + "source_location": "L220", "weight": 1.0 }, { @@ -17640,7 +21317,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L250", + "source_location": "L257", "weight": 1.0 }, { @@ -17651,7 +21328,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L306", + "source_location": "L313", "weight": 1.0 }, { @@ -17662,7 +21339,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L115", + "source_location": "L119", "weight": 1.0 }, { @@ -17673,7 +21350,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L168", + "source_location": "L173", "weight": 1.0 }, { @@ -17684,7 +21361,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L183", + "source_location": "L188", "weight": 1.0 }, { @@ -17695,7 +21372,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L332", + "source_location": "L339", "weight": 1.0 }, { @@ -17706,7 +21383,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L384", + "source_location": "L395", "weight": 1.0 }, { @@ -17717,7 +21394,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L437", + "source_location": "L448", "weight": 1.0 }, { @@ -17728,7 +21405,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L461", + "source_location": "L472", "weight": 1.0 }, { @@ -17739,7 +21416,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L529", + "source_location": "L540", "weight": 1.0 }, { @@ -17750,7 +21427,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L537", + "source_location": "L548", "weight": 1.0 }, { @@ -17761,7 +21438,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L113", + "source_location": "L117", "weight": 1.0 }, { @@ -17772,7 +21449,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L403", + "source_location": "L414", "weight": 1.0 }, { @@ -17783,7 +21460,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L435", + "source_location": "L446", "weight": 1.0 }, { @@ -17794,7 +21471,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L486", + "source_location": "L497", "weight": 1.0 }, { @@ -17805,7 +21482,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L514", + "source_location": "L525", "weight": 1.0 }, { @@ -17816,7 +21493,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "docs/googlenews_extractor_guia_completo.md", - "source_location": "L548", + "source_location": "L559", "weight": 1.0 }, { @@ -17841,6 +21518,325 @@ "source_location": "L9", "weight": 1.0 }, + { + "source": "docs_prd_deterministic_content_selection", + "target": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_3_escopo", + "target": "docs_prd_deterministic_content_selection_3_1_inclu\u00eddo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L19", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_3_escopo", + "target": "docs_prd_deterministic_content_selection_3_2_fora_do_escopo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L28", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_5_entrada", + "target": "docs_prd_deterministic_content_selection_5_1_arquivo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L48", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_5_entrada", + "target": "docs_prd_deterministic_content_selection_5_2_conte\u00fados_comparados", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L54", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_5_entrada", + "target": "docs_prd_deterministic_content_selection_5_3_estado_de_um_candidato", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L64", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_6_sa\u00edda", + "target": "docs_prd_deterministic_content_selection_6_3_preserva\u00e7\u00e3o_da_entrada", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L100", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_6_sa\u00edda", + "target": "docs_prd_deterministic_content_selection_6_1_arquivo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L78", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_6_sa\u00edda", + "target": "docs_prd_deterministic_content_selection_6_2_altera\u00e7\u00e3o_permitida", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L86", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_1_formar_o_conjunto_ativo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L110", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_2_normalizar_os_conte\u00fados", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L120", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_3_gerar_shingles", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L137", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_4_construir_o_consenso", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L144", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_5_selecionar_quando_existe_consenso", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L164", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_6_selecionar_quando_n\u00e3o_existe_consenso", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L178", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "target": "docs_prd_deterministic_content_selection_7_7_gravar_a_escolha", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L190", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L108", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_2_objetivo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L13", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_3_escopo", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L17", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_8_requisitos_funcionais", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L194", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_9_tratamento_de_erros", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L212", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_10_requisitos_n\u00e3o_funcionais", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L227", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_11_crit\u00e9rios_de_aceite", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L237", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_12_casos_obrigat\u00f3rios_de_teste", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L252", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_13_definition_of_done", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L271", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_4_premissas", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L39", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_5_entrada", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L46", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_1_contexto", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", + "target": "docs_prd_deterministic_content_selection_6_sa\u00edda", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "docs/prd_deterministic_content_selection.md", + "source_location": "L76", + "weight": 1.0 + }, { "source": "docs_prd_extrator_artigos_nlp", "target": "docs_prd_extrator_artigos_nlp_prd_extrator_e_parser_de_artigos_multimotor_foxcape_trafilatura_newspaper4k_readability", @@ -18113,7 +22109,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L107", + "source_location": "L108", "weight": 1.0 }, { @@ -18124,7 +22120,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L116", + "source_location": "L117", "weight": 1.0 }, { @@ -18135,7 +22131,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L140", + "source_location": "L141", "weight": 1.0 }, { @@ -18146,7 +22142,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L80", + "source_location": "L81", "weight": 1.0 }, { @@ -18157,18 +22153,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L86", + "source_location": "L87", "weight": 1.0 }, { "source": "readme_2_extrator_de_manchetes_do_google_news", - "target": "readme_o_que_\u00e9_e_como_funciona_157", + "target": "readme_o_que_\u00e9_e_como_funciona_158", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L157", + "source_location": "L158", "weight": 1.0 }, { @@ -18179,7 +22175,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L161", + "source_location": "L162", "weight": 1.0 }, { @@ -18190,7 +22186,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L169", + "source_location": "L170", "weight": 1.0 }, { @@ -18201,7 +22197,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L182", + "source_location": "L183", "weight": 1.0 }, { @@ -18212,7 +22208,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L217", + "source_location": "L218", "weight": 1.0 }, { @@ -18223,7 +22219,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L227", + "source_location": "L228", "weight": 1.0 }, { @@ -18234,7 +22230,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L238", + "source_location": "L239", "weight": 1.0 }, { @@ -18245,7 +22241,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L240", + "source_location": "L241", "weight": 1.0 }, { @@ -18256,7 +22252,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L246", + "source_location": "L247", "weight": 1.0 }, { @@ -18267,7 +22263,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L251", + "source_location": "L252", "weight": 1.0 }, { @@ -18278,7 +22274,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L184", + "source_location": "L185", "weight": 1.0 }, { @@ -18289,7 +22285,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L198", + "source_location": "L199", "weight": 1.0 }, { @@ -18300,7 +22296,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L203", + "source_location": "L204", "weight": 1.0 }, { @@ -18311,7 +22307,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L208", + "source_location": "L209", "weight": 1.0 }, { @@ -18322,7 +22318,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L118", + "source_location": "L119", "weight": 1.0 }, { @@ -18333,7 +22329,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L49", + "source_location": "L50", "weight": 1.0 }, { @@ -18344,7 +22340,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L62", + "source_location": "L63", "weight": 1.0 }, { @@ -18355,7 +22351,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L68", + "source_location": "L69", "weight": 1.0 }, { @@ -18377,7 +22373,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L155", + "source_location": "L156", "weight": 1.0 }, { @@ -18388,7 +22384,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L215", + "source_location": "L216", "weight": 1.0 }, { @@ -18399,7 +22395,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L258", + "source_location": "L259", "weight": 1.0 }, { @@ -18410,7 +22406,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L287", + "source_location": "L288", "weight": 1.0 }, { @@ -18421,7 +22417,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L308", + "source_location": "L309", "weight": 1.0 }, { @@ -18443,7 +22439,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L47", + "source_location": "L48", "weight": 1.0 }, { @@ -18454,7 +22450,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "README.md", - "source_location": "L78", + "source_location": "L79", "weight": 1.0 }, { @@ -18465,7 +22461,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L105", + "source_location": "L102", "weight": 1.0 }, { @@ -18476,7 +22472,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L155", + "source_location": "L152", "weight": 1.0 }, { @@ -18487,7 +22483,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L177", + "source_location": "L174", "weight": 1.0 }, { @@ -18498,7 +22494,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L205", + "source_location": "L202", "weight": 1.0 }, { @@ -18509,7 +22505,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L231", + "source_location": "L228", "weight": 1.0 }, { @@ -18520,7 +22516,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L310", + "source_location": "L332", "weight": 1.0 }, { @@ -18531,7 +22527,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L37", + "source_location": "L34", "weight": 1.0 }, { @@ -18542,7 +22538,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L371", + "source_location": "L395", "weight": 1.0 }, { @@ -18553,7 +22549,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L403", + "source_location": "L427", "weight": 1.0 }, { @@ -18564,7 +22560,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L458", + "source_location": "L482", "weight": 1.0 }, { @@ -18575,40 +22571,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L509", - "weight": 1.0 - }, - { - "source": "scripts_extract_article_contents", - "target": "scripts_extract_article_contents_load_search_json", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/extract_article_contents.py", - "source_location": "L516", - "weight": 1.0 - }, - { - "source": "scripts_extract_article_contents", - "target": "scripts_extract_article_contents_save_extracted_json", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/extract_article_contents.py", - "source_location": "L544", - "weight": 1.0 - }, - { - "source": "scripts_extract_article_contents", - "target": "scripts_extract_article_contents_process_batch", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/extract_article_contents.py", - "source_location": "L551", + "source_location": "L533", "weight": 1.0 }, { @@ -18619,7 +22582,40 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L57", + "source_location": "L54", + "weight": 1.0 + }, + { + "source": "scripts_extract_article_contents", + "target": "scripts_extract_article_contents_load_search_json", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/extract_article_contents.py", + "source_location": "L540", + "weight": 1.0 + }, + { + "source": "scripts_extract_article_contents", + "target": "scripts_extract_article_contents_save_extracted_json", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/extract_article_contents.py", + "source_location": "L568", + "weight": 1.0 + }, + { + "source": "scripts_extract_article_contents", + "target": "scripts_extract_article_contents_process_batch", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/extract_article_contents.py", + "source_location": "L575", "weight": 1.0 }, { @@ -18630,7 +22626,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L664", + "source_location": "L688", "weight": 1.0 }, { @@ -18641,7 +22637,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L718", + "source_location": "L742", "weight": 1.0 }, { @@ -18652,7 +22648,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L109", + "source_location": "L107", "weight": 1.0 }, { @@ -18663,7 +22659,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L153", + "source_location": "L151", "weight": 1.0 }, { @@ -18674,7 +22670,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L158", + "source_location": "L156", "weight": 1.0 }, { @@ -18685,7 +22681,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L209", + "source_location": "L207", "weight": 1.0 }, { @@ -18696,7 +22692,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L222", + "source_location": "L220", "weight": 1.0 }, { @@ -18707,7 +22703,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L255", + "source_location": "L253", "weight": 1.0 }, { @@ -18718,7 +22714,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L299", + "source_location": "L297", "weight": 1.0 }, { @@ -18740,7 +22736,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L338", + "source_location": "L336", "weight": 1.0 }, { @@ -18751,7 +22747,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L405", + "source_location": "L403", "weight": 1.0 }, { @@ -18762,7 +22758,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L66", + "source_location": "L64", "weight": 1.0 }, { @@ -18773,7 +22769,205 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L86", + "source_location": "L84", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L106", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L147", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_extract_candidate_data", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L167", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_form_active_set", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L211", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_calculate_consensus_metrics", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L234", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_break_priority_tie", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L280", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_select_with_consensus", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L289", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_select_without_consensus", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L322", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_extractorname", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L33", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L373", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_candidatestatus", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_atomic_save_json", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L430", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_process_batch", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L452", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_parse_args", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L523", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_main", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L544", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L62", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_articleselectionresult", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L78", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor", + "target": "scripts_select_article_extractor_batchprocessingresult", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L90", "weight": 1.0 }, { @@ -21726,7 +25920,7 @@ }, { "source": "specs_003_article_content_extractor_plan_implementation_phases", - "target": "specs_003_article_content_extractor_plan_phase_2_tasks_execution_next_speckit_tasks", + "target": "specs_003_article_content_extractor_plan_phase_2_tasks_execution_completed", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", @@ -22340,6 +26534,1073 @@ "source_location": "L91", "weight": 1.0 }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_text_normalization_tokenization_quality", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L13", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_shingles_consensus_metric_formulation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L20", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_decision_tie_breaking_hierarchy", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L26", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_candidate_state_transitions_resilience", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L33", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_json_schema_integrity_atomic_i_o", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L39", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", + "target": "specs_004_deterministic_content_selection_checklists_deterministic_selection_notes", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L48", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_requirements", + "target": "specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_checklists_requirements_requirement_completeness", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L14", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_checklists_requirements_feature_readiness", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L25", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_checklists_requirements_notes", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L32", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_checklists_requirements_content_quality", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_cli_contract", + "target": "specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_contracts_cli_contract_2_arguments_and_flags", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L15", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_contracts_cli_contract_3_standard_streams_i_o", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L26", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_contracts_cli_contract_4_exit_codes", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L48", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_contracts_cli_contract_1_command_syntax", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_json_schema", + "target": "specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_contracts_json_schema_2_output_json_schema", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L52", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_contracts_json_schema_1_input_json_schema", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model", + "target": "specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "target": "specs_004_deterministic_content_selection_data_model_batchprocessingresult_dataclass", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L110", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "target": "specs_004_deterministic_content_selection_data_model_extractorname_enum_literal", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L66", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "target": "specs_004_deterministic_content_selection_data_model_candidatestatus_enum", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L72", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "target": "specs_004_deterministic_content_selection_data_model_extractorcandidate_dataclass", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L78", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "target": "specs_004_deterministic_content_selection_data_model_articleselectionresult_dataclass", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L96", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", + "target": "specs_004_deterministic_content_selection_data_model_entrada", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L125", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", + "target": "specs_004_deterministic_content_selection_data_model_sa\u00edda", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L132", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L123", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L64", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_data_model_1_domain_entities_value_types", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan", + "target": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_phases", + "target": "specs_004_deterministic_content_selection_plan_phase_0_outline_research_completed", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L81", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_phases", + "target": "specs_004_deterministic_content_selection_plan_phase_1_design_contracts_completed", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L87", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_phases", + "target": "specs_004_deterministic_content_selection_plan_phase_2_tasks_execution_next_step_via_speckit_tasks", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L92", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_plan_technical_context", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L15", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_plan_constitution_check", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L29", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_plan_project_structure", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L43", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_plan_implementation_phases", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L79", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_plan_summary", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L9", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_project_structure", + "target": "specs_004_deterministic_content_selection_plan_documentation_this_feature", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L45", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan_project_structure", + "target": "specs_004_deterministic_content_selection_plan_source_code_layout", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L61", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart", + "target": "specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", + "target": "specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_1_selecionar_o_melhor_extrator_para_uma_extra\u00e7\u00e3o_existente", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L16", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", + "target": "specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_2_especificar_caminho_de_sa\u00edda_customizado_e_modo_verboso", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L24", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L14", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_quickstart_3_execu\u00e7\u00e3o_dos_testes_automatizados", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L33", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_quickstart_4_valida\u00e7\u00e3o_program\u00e1tica_uso_como_m\u00f3dulo_python", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L43", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_quickstart_1_pr\u00e9_requisitos", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research", + "target": "specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", + "target": "specs_004_deterministic_content_selection_research_decisions", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L12", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", + "target": "specs_004_deterministic_content_selection_research_rationale", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L22", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", + "target": "specs_004_deterministic_content_selection_research_alternatives_considered", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L26", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", + "target": "specs_004_deterministic_content_selection_research_context", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L9", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", + "target": "specs_004_deterministic_content_selection_research_context_34", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L34", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", + "target": "specs_004_deterministic_content_selection_research_decisions_37", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L37", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", + "target": "specs_004_deterministic_content_selection_research_rationale_51", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L51", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", + "target": "specs_004_deterministic_content_selection_research_context_59", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L59", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", + "target": "specs_004_deterministic_content_selection_research_decisions_62", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L62", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", + "target": "specs_004_deterministic_content_selection_research_rationale_84", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L84", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", + "target": "specs_004_deterministic_content_selection_research_rationale_106", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L106", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", + "target": "specs_004_deterministic_content_selection_research_context_91", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L91", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", + "target": "specs_004_deterministic_content_selection_research_decisions_94", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L94", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L32", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L57", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L89", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec", + "target": "specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_spec_success_criteria_mandatory", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L118", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_spec_assumptions", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L129", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_spec_requirements_mandatory", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L65", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", + "target": "specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L8", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_requirements_mandatory", + "target": "specs_004_deterministic_content_selection_spec_key_entities_include_if_feature_involves_data", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L111", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_requirements_mandatory", + "target": "specs_004_deterministic_content_selection_spec_functional_requirements", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L67", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_success_criteria_mandatory", + "target": "specs_004_deterministic_content_selection_spec_measurable_outcomes", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L120", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", + "target": "specs_004_deterministic_content_selection_spec_user_story_1_deterministic_selection_with_text_consensus_priority_p1", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L10", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", + "target": "specs_004_deterministic_content_selection_spec_user_story_2_resilient_decision_under_total_disagreement_or_degradation_priority_p2", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L25", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", + "target": "specs_004_deterministic_content_selection_spec_user_story_3_non_destructive_json_batch_processing_priority_p3", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", + "target": "specs_004_deterministic_content_selection_spec_edge_cases", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/spec.md", + "source_location": "L56", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks", + "target": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_implementation_strategy", + "target": "specs_004_deterministic_content_selection_tasks_mvp_first_phases_1_2_3", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L140", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_implementation_strategy", + "target": "specs_004_deterministic_content_selection_tasks_incremental_delivery_phases_4_5_6", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L145", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", + "target": "specs_004_deterministic_content_selection_tasks_tests_for_user_story_1", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L36", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", + "target": "specs_004_deterministic_content_selection_tasks_implementation_for_user_story_1", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", + "target": "specs_004_deterministic_content_selection_tasks_tests_for_user_story_2", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L56", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", + "target": "specs_004_deterministic_content_selection_tasks_implementation_for_user_story_2", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L61", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", + "target": "specs_004_deterministic_content_selection_tasks_tests_for_user_story_3", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L77", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", + "target": "specs_004_deterministic_content_selection_tasks_implementation_for_user_story_3", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L82", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_dependencies_execution_order", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L100", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_parallel_opportunities", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L129", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_implementation_strategy", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L138", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_phase_2_foundational_data_structures_normalization_engine", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L15", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L30", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L50", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_phase_1_setup_shared_infrastructure", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L7", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L71", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", + "target": "specs_004_deterministic_content_selection_tasks_phase_6_polish_cross_cutting_concerns", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L91", + "weight": 1.0 + }, { "source": "src_adapters_base", "target": "src_adapters_base_basenlpadapter", @@ -22359,7 +27620,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L14", + "source_location": "L13", "weight": 1.0 }, { @@ -22381,7 +27642,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L20", + "source_location": "L17", "weight": 1.0 }, { @@ -22392,7 +27653,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L33", + "source_location": "L30", "weight": 1.0 }, { @@ -22403,7 +27664,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L44", + "source_location": "L41", "weight": 1.0 }, { @@ -22414,7 +27675,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/language.py", - "source_location": "L70", + "source_location": "L462", "weight": 1.0 }, { @@ -22425,7 +27686,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/language.py", - "source_location": "L80", + "source_location": "L472", "weight": 1.0 }, { @@ -22436,7 +27697,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/language.py", - "source_location": "L85", + "source_location": "L477", "weight": 1.0 }, { @@ -22480,7 +27741,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/models.py", - "source_location": "L153", + "source_location": "L155", "weight": 1.0 }, { @@ -22524,7 +27785,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/parser.py", - "source_location": "L43", + "source_location": "L42", "weight": 1.0 }, { @@ -22535,7 +27796,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/parser.py", - "source_location": "L51", + "source_location": "L50", "weight": 1.0 }, { @@ -22546,7 +27807,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/parser.py", - "source_location": "L9", + "source_location": "L8", "weight": 1.0 }, { @@ -22848,13 +28109,13 @@ }, { "source": "tests_test_adversarial", - "target": "tests_test_adversarial_test_adversarial_subprocess_cli_empty_content", + "target": "tests_test_adversarial_test_adversarial_subprocess_cli_success_stdout", "relation": "contains", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L133", + "source_location": "L104", "weight": 1.0 }, { @@ -22865,7 +28126,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L15", + "source_location": "L14", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial", + "target": "tests_test_adversarial_test_adversarial_subprocess_cli_empty_content", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L148", "weight": 1.0 }, { @@ -22876,7 +28148,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L164", + "source_location": "L185", "weight": 1.0 }, { @@ -22887,7 +28159,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L193", + "source_location": "L220", "weight": 1.0 }, { @@ -22898,7 +28170,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L40", + "source_location": "L44", "weight": 1.0 }, { @@ -22909,18 +28181,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L63", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial", - "target": "tests_test_adversarial_test_adversarial_subprocess_cli_success_stdout", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L98", + "source_location": "L68", "weight": 1.0 }, { @@ -22931,7 +28192,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_benchmark_24.py", - "source_location": "L25", + "source_location": "L23", "weight": 1.0 }, { @@ -22942,51 +28203,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_benchmark_24.py", - "source_location": "L30", - "weight": 1.0 - }, - { - "source": "tests_test_classifier", - "target": "tests_test_classifier_test_direct_inherent", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_classifier.py", - "source_location": "L32", - "weight": 1.0 - }, - { - "source": "tests_test_classifier", - "target": "tests_test_classifier_test_contextual_inherent", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_classifier.py", - "source_location": "L48", - "weight": 1.0 - }, - { - "source": "tests_test_classifier", - "target": "tests_test_classifier_test_tangential_inherent", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_classifier.py", - "source_location": "L63", - "weight": 1.0 - }, - { - "source": "tests_test_classifier", - "target": "tests_test_classifier_test_not_related", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_classifier.py", - "source_location": "L77", + "source_location": "L28", "weight": 1.0 }, { @@ -22997,7 +28214,51 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_classifier.py", - "source_location": "L9", + "source_location": "L10", + "weight": 1.0 + }, + { + "source": "tests_test_classifier", + "target": "tests_test_classifier_test_direct_inherent", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classifier.py", + "source_location": "L33", + "weight": 1.0 + }, + { + "source": "tests_test_classifier", + "target": "tests_test_classifier_test_contextual_inherent", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classifier.py", + "source_location": "L49", + "weight": 1.0 + }, + { + "source": "tests_test_classifier", + "target": "tests_test_classifier_test_tangential_inherent", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classifier.py", + "source_location": "L64", + "weight": 1.0 + }, + { + "source": "tests_test_classifier", + "target": "tests_test_classifier_test_not_related", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_classifier.py", + "source_location": "L78", "weight": 1.0 }, { @@ -23008,40 +28269,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_classifier.py", - "source_location": "L90", - "weight": 1.0 - }, - { - "source": "tests_test_cli", - "target": "tests_test_cli_test_cli_output_file", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_cli.py", - "source_location": "L32", - "weight": 1.0 - }, - { - "source": "tests_test_cli", - "target": "tests_test_cli_test_cli_missing_ecp_file", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_cli.py", - "source_location": "L56", - "weight": 1.0 - }, - { - "source": "tests_test_cli", - "target": "tests_test_cli_test_cli_empty_content_file", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_cli.py", - "source_location": "L68", + "source_location": "L91", "weight": 1.0 }, { @@ -23052,7 +28280,29 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_cli.py", - "source_location": "L89", + "source_location": "L111", + "weight": 1.0 + }, + { + "source": "tests_test_cli", + "target": "tests_test_cli_test_cli_output_file", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_cli.py", + "source_location": "L39", + "weight": 1.0 + }, + { + "source": "tests_test_cli", + "target": "tests_test_cli_test_cli_missing_ecp_file", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_cli.py", + "source_location": "L73", "weight": 1.0 }, { @@ -23063,7 +28313,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_cli.py", - "source_location": "L9", + "source_location": "L8", + "weight": 1.0 + }, + { + "source": "tests_test_cli", + "target": "tests_test_cli_test_cli_empty_content_file", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_cli.py", + "source_location": "L85", "weight": 1.0 }, { @@ -23074,7 +28335,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L112", + "source_location": "L110", "weight": 1.0 }, { @@ -23085,7 +28346,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L120", + "source_location": "L118", "weight": 1.0 }, { @@ -23096,7 +28357,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L126", + "source_location": "L124", "weight": 1.0 }, { @@ -23107,7 +28368,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L190", + "source_location": "L186", "weight": 1.0 }, { @@ -23118,7 +28379,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L199", + "source_location": "L195", "weight": 1.0 }, { @@ -23129,7 +28390,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L211", + "source_location": "L205", "weight": 1.0 }, { @@ -23140,7 +28401,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L221", + "source_location": "L215", "weight": 1.0 }, { @@ -23151,7 +28412,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L235", + "source_location": "L229", "weight": 1.0 }, { @@ -23162,7 +28423,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L248", + "source_location": "L242", "weight": 1.0 }, { @@ -23173,7 +28434,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L277", + "source_location": "L271", "weight": 1.0 }, { @@ -23184,7 +28445,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L296", + "source_location": "L291", "weight": 1.0 }, { @@ -23195,7 +28456,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L311", + "source_location": "L305", "weight": 1.0 }, { @@ -23206,7 +28467,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L322", + "source_location": "L316", "weight": 1.0 }, { @@ -23217,7 +28478,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L366", + "source_location": "L360", "weight": 1.0 }, { @@ -23228,7 +28489,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L63", + "source_location": "L61", "weight": 1.0 }, { @@ -23239,7 +28500,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L96", + "source_location": "L94", "weight": 1.0 }, { @@ -23272,7 +28533,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L150", + "source_location": "L148", "weight": 1.0 }, { @@ -23283,7 +28544,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L163", + "source_location": "L161", "weight": 1.0 }, { @@ -23294,7 +28555,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L188", + "source_location": "L186", "weight": 1.0 }, { @@ -23305,7 +28566,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L217", + "source_location": "L213", "weight": 1.0 }, { @@ -23316,7 +28577,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L242", + "source_location": "L234", "weight": 1.0 }, { @@ -23327,7 +28588,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L263", + "source_location": "L253", "weight": 1.0 }, { @@ -23338,7 +28599,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L272", + "source_location": "L262", "weight": 1.0 }, { @@ -23349,7 +28610,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L291", + "source_location": "L281", "weight": 1.0 }, { @@ -23360,7 +28621,18 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L312", + "source_location": "L302", + "weight": 1.0 + }, + { + "source": "tests_test_extract_google_news", + "target": "tests_test_extract_google_news_test_e2e_cli_live_file_output", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_extract_google_news.py", + "source_location": "L318", "weight": 1.0 }, { @@ -23374,17 +28646,6 @@ "source_location": "L32", "weight": 1.0 }, - { - "source": "tests_test_extract_google_news", - "target": "tests_test_extract_google_news_test_e2e_cli_live_file_output", - "relation": "contains", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_extract_google_news.py", - "source_location": "L328", - "weight": 1.0 - }, { "source": "tests_test_extract_google_news", "target": "tests_test_extract_google_news_test_get_hl_gl_ceid_default_mappings", @@ -23437,7 +28698,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L12", + "source_location": "L14", "weight": 1.0 }, { @@ -23448,7 +28709,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L19", + "source_location": "L21", "weight": 1.0 }, { @@ -23459,7 +28720,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L26", + "source_location": "L28", "weight": 1.0 }, { @@ -23470,7 +28731,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L33", + "source_location": "L37", "weight": 1.0 }, { @@ -23481,7 +28742,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L40", + "source_location": "L44", "weight": 1.0 }, { @@ -23492,7 +28753,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L47", + "source_location": "L51", "weight": 1.0 }, { @@ -23503,7 +28764,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_language.py", - "source_location": "L54", + "source_location": "L58", "weight": 1.0 }, { @@ -23594,6 +28855,380 @@ "source_location": "L88", "weight": 1.0 }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_generate_shingles_empty", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L106", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L115", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L128", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L140", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L161", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L176", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_006_single_usable_candidate", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L190", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L202", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L214", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L226", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L243", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L259", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L272", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_013_empty_articles_list", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L298", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L317", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_integration_reference_file", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L334", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L363", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_integration_large_batch_determinism", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L397", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L40", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L446", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L47", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L483", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L520", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_normalize_text_markdown_links", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L53", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L548", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L561", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L59", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L78", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_generate_shingles_sliding_window", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L90", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor", + "target": "tests_test_select_article_extractor_test_generate_shingles_short_text", + "relation": "contains", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L98", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_candidatestatus", + "target": "scripts_select_article_extractor_py_enum", + "relation": "inherits", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_candidatestatus", + "target": "scripts_select_article_extractor_py_str", + "relation": "inherits", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L41", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_extractorname", + "target": "scripts_select_article_extractor_py_enum", + "relation": "inherits", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L33", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_extractorname", + "target": "scripts_select_article_extractor_py_str", + "relation": "inherits", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L33", + "weight": 1.0 + }, { "source": "src_adapters_base_basenlpadapter", "target": "abc", @@ -23613,7 +29248,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L14", + "source_location": "L13", "weight": 1.0 }, { @@ -23629,7 +29264,7 @@ }, { "source": "src_models_decisioncategory", - "target": "enum", + "target": "src_models_py_enum", "relation": "inherits", "_origin": "ast", "confidence": "EXTRACTED", @@ -23640,7 +29275,7 @@ }, { "source": "src_models_decisioncategory", - "target": "str", + "target": "src_models_py_str", "relation": "inherits", "_origin": "ast", "confidence": "EXTRACTED", @@ -23651,7 +29286,7 @@ }, { "source": "src_models_errorcode", - "target": "enum", + "target": "src_models_py_enum", "relation": "inherits", "_origin": "ast", "confidence": "EXTRACTED", @@ -23662,7 +29297,7 @@ }, { "source": "src_models_errorcode", - "target": "str", + "target": "src_models_py_str", "relation": "inherits", "_origin": "ast", "confidence": "EXTRACTED", @@ -23679,7 +29314,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L461", + "source_location": "L485", "weight": 1.0 }, { @@ -23690,7 +29325,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L466", + "source_location": "L490", "weight": 1.0 }, { @@ -23701,7 +29336,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L472", + "source_location": "L496", "weight": 1.0 }, { @@ -23712,7 +29347,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L480", + "source_location": "L504", "weight": 1.0 }, { @@ -23723,7 +29358,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L484", + "source_location": "L508", "weight": 1.0 }, { @@ -23734,7 +29369,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L487", + "source_location": "L511", "weight": 1.0 }, { @@ -23745,7 +29380,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L190", + "source_location": "L187", "weight": 1.0 }, { @@ -23756,7 +29391,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L215", + "source_location": "L212", "weight": 1.0 }, { @@ -23767,7 +29402,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L46", + "source_location": "L43", "weight": 1.0 }, { @@ -23778,7 +29413,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L129", + "source_location": "L126", "weight": 1.0 }, { @@ -23789,7 +29424,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L314", + "source_location": "L336", "weight": 1.0 }, { @@ -23800,7 +29435,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L165", + "source_location": "L162", "weight": 1.0 }, { @@ -23811,7 +29446,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L375", + "source_location": "L399", "weight": 1.0 }, { @@ -23822,7 +29457,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L80", + "source_location": "L77", "weight": 1.0 }, { @@ -23833,7 +29468,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L235", + "source_location": "L232", "weight": 1.0 }, { @@ -23844,7 +29479,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L97", + "source_location": "L95", "weight": 1.0 }, { @@ -23855,7 +29490,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L75", + "source_location": "L73", "weight": 1.0 }, { @@ -23877,7 +29512,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L53", + "source_location": "L51", "weight": 1.0 }, { @@ -23888,7 +29523,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L57", + "source_location": "L55", "weight": 1.0 }, { @@ -23899,7 +29534,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L61", + "source_location": "L59", "weight": 1.0 }, { @@ -23921,7 +29556,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/base.py", - "source_location": "L19", + "source_location": "L18", "weight": 1.0 }, { @@ -23932,7 +29567,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/base.py", - "source_location": "L24", + "source_location": "L22", "weight": 1.0 }, { @@ -23943,7 +29578,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L17", + "source_location": "L16", "weight": 1.0 }, { @@ -23954,7 +29589,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L22", + "source_location": "L23", "weight": 1.0 }, { @@ -23965,7 +29600,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L29", + "source_location": "L31", "weight": 1.0 }, { @@ -23976,7 +29611,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L35", + "source_location": "L37", "weight": 1.0 }, { @@ -24031,7 +29666,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L47", + "source_location": "L44", "weight": 1.0 }, { @@ -24042,7 +29677,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L61", + "source_location": "L60", "weight": 1.0 }, { @@ -24053,7 +29688,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/models.py", - "source_location": "L158", + "source_location": "L160", "weight": 1.0 }, { @@ -24064,7 +29699,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/models.py", - "source_location": "L165", + "source_location": "L169", "weight": 1.0 }, { @@ -24086,7 +29721,7 @@ "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/models.py", - "source_location": "L148", + "source_location": "L150", "weight": 1.0 }, { @@ -24123,256 +29758,256 @@ "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_106", + "source": "scripts_extract_article_contents_rationale_103", "target": "scripts_extract_article_contents_newspaperdata", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L106", + "source_location": "L103", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_156", + "source": "scripts_extract_article_contents_rationale_153", "target": "scripts_extract_article_contents_readabilitydata", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L156", + "source_location": "L153", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_178", + "source": "scripts_extract_article_contents_rationale_175", "target": "scripts_extract_article_contents_extractedarticle", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L178", + "source_location": "L175", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_206", + "source": "scripts_extract_article_contents_rationale_203", "target": "scripts_extract_article_contents_extractionbatchreport", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L206", + "source_location": "L203", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_232", + "source": "scripts_extract_article_contents_rationale_229", "target": "scripts_extract_article_contents_trafilaturaextractor", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L232", + "source_location": "L229", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_311", + "source": "scripts_extract_article_contents_rationale_333", "target": "scripts_extract_article_contents_newspaperextractor", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L311", + "source_location": "L333", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_372", - "target": "scripts_extract_article_contents_readabilityextractor", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/extract_article_contents.py", - "source_location": "L372", - "weight": 1.0 - }, - { - "source": "scripts_extract_article_contents_rationale_38", + "source": "scripts_extract_article_contents_rationale_35", "target": "scripts_extract_article_contents_inputarticle", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L38", + "source_location": "L35", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_406", + "source": "scripts_extract_article_contents_rationale_396", + "target": "scripts_extract_article_contents_readabilityextractor", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/extract_article_contents.py", + "source_location": "L396", + "weight": 1.0 + }, + { + "source": "scripts_extract_article_contents_rationale_430", "target": "scripts_extract_article_contents_extract_all_engines", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L406", + "source_location": "L430", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_459", + "source": "scripts_extract_article_contents_rationale_483", "target": "scripts_extract_article_contents_articlecrawler", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L459", + "source_location": "L483", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_488", + "source": "scripts_extract_article_contents_rationale_512", "target": "scripts_extract_article_contents_articlecrawler_crawl", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L488", + "source_location": "L512", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_510", + "source": "scripts_extract_article_contents_rationale_534", "target": "scripts_extract_article_contents_log_info", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L510", + "source_location": "L534", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_517", + "source": "scripts_extract_article_contents_rationale_541", "target": "scripts_extract_article_contents_load_search_json", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L517", + "source_location": "L541", "weight": 1.0 }, { - "source": "scripts_extract_article_contents_rationale_545", - "target": "scripts_extract_article_contents_save_extracted_json", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/extract_article_contents.py", - "source_location": "L545", - "weight": 1.0 - }, - { - "source": "scripts_extract_article_contents_rationale_559", - "target": "scripts_extract_article_contents_process_batch", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "scripts/extract_article_contents.py", - "source_location": "L559", - "weight": 1.0 - }, - { - "source": "scripts_extract_article_contents_rationale_58", + "source": "scripts_extract_article_contents_rationale_55", "target": "scripts_extract_article_contents_trafilaturadata", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_article_contents.py", - "source_location": "L58", + "source_location": "L55", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_110", + "source": "scripts_extract_article_contents_rationale_569", + "target": "scripts_extract_article_contents_save_extracted_json", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/extract_article_contents.py", + "source_location": "L569", + "weight": 1.0 + }, + { + "source": "scripts_extract_article_contents_rationale_583", + "target": "scripts_extract_article_contents_process_batch", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/extract_article_contents.py", + "source_location": "L583", + "weight": 1.0 + }, + { + "source": "scripts_extract_google_news_rationale_108", "target": "scripts_extract_google_news_get_hl_gl_ceid", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L110", + "source_location": "L108", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_154", + "source": "scripts_extract_google_news_rationale_152", "target": "scripts_extract_google_news_normalize_text_for_comparison", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L154", + "source_location": "L152", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_159", + "source": "scripts_extract_google_news_rationale_157", "target": "scripts_extract_google_news_parse_google_news_rss", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L159", + "source_location": "L157", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_210", + "source": "scripts_extract_google_news_rationale_208", "target": "scripts_extract_google_news_resolve_article_url", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L210", + "source_location": "L208", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_225", + "source": "scripts_extract_google_news_rationale_223", "target": "scripts_extract_google_news_resolve_articles_urls", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L225", + "source_location": "L223", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_256", + "source": "scripts_extract_google_news_rationale_254", "target": "scripts_extract_google_news_fetch_rss_content", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L256", + "source_location": "L254", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_302", + "source": "scripts_extract_google_news_rationale_300", "target": "scripts_extract_google_news_extract_google_news", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L302", + "source_location": "L300", "weight": 1.0 }, { @@ -24387,47 +30022,47 @@ "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_339", + "source": "scripts_extract_google_news_rationale_337", "target": "scripts_extract_google_news_build_parser", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L339", + "source_location": "L337", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_406", + "source": "scripts_extract_google_news_rationale_404", "target": "scripts_extract_google_news_main", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L406", + "source_location": "L404", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_67", + "source": "scripts_extract_google_news_rationale_65", "target": "scripts_extract_google_news_newsarticle", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L67", + "source_location": "L65", "weight": 1.0 }, { - "source": "scripts_extract_google_news_rationale_87", + "source": "scripts_extract_google_news_rationale_85", "target": "scripts_extract_google_news_extractionresult", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "scripts/extract_google_news.py", - "source_location": "L87", + "source_location": "L85", "weight": 1.0 }, { @@ -24441,6 +30076,182 @@ "source_location": "L1", "weight": 1.0 }, + { + "source": "scripts_select_article_extractor_rationale_107", + "target": "scripts_select_article_extractor_normalize_text", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L107", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_148", + "target": "scripts_select_article_extractor_generate_shingles", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L148", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_168", + "target": "scripts_select_article_extractor_extract_candidate_data", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L168", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_212", + "target": "scripts_select_article_extractor_form_active_set", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L212", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_235", + "target": "scripts_select_article_extractor_calculate_consensus_metrics", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L235", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_281", + "target": "scripts_select_article_extractor_break_priority_tie", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L281", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_292", + "target": "scripts_select_article_extractor_select_with_consensus", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L292", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_323", + "target": "scripts_select_article_extractor_select_without_consensus", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L323", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_34", + "target": "scripts_select_article_extractor_extractorname", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L34", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_374", + "target": "scripts_select_article_extractor_select_article_extractor", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L374", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_42", + "target": "scripts_select_article_extractor_candidatestatus", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L42", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_431", + "target": "scripts_select_article_extractor_atomic_save_json", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L431", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_455", + "target": "scripts_select_article_extractor_process_batch", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L455", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_63", + "target": "scripts_select_article_extractor_extractorcandidate", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L63", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_79", + "target": "scripts_select_article_extractor_articleselectionresult", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L79", + "weight": 1.0 + }, + { + "source": "scripts_select_article_extractor_rationale_91", + "target": "scripts_select_article_extractor_batchprocessingresult", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "scripts/select_article_extractor.py", + "source_location": "L91", + "weight": 1.0 + }, { "source": "src_adapters_base_rationale_1", "target": "src_adapters_base", @@ -24475,25 +30286,25 @@ "weight": 1.0 }, { - "source": "src_adapters_base_rationale_20", + "source": "src_adapters_base_rationale_19", "target": "src_adapters_base_basenlpadapter_evaluate_similarity", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/base.py", - "source_location": "L20", + "source_location": "L19", "weight": 1.0 }, { - "source": "src_adapters_base_rationale_30", + "source": "src_adapters_base_rationale_28", "target": "src_adapters_base_basenlpadapter_disambiguate", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/base.py", - "source_location": "L30", + "source_location": "L28", "weight": 1.0 }, { @@ -24508,14 +30319,14 @@ "weight": 1.0 }, { - "source": "src_adapters_embeddings_rationale_15", + "source": "src_adapters_embeddings_rationale_14", "target": "src_adapters_embeddings_localembeddingsadapter", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/adapters/embeddings.py", - "source_location": "L15", + "source_location": "L14", "weight": 1.0 }, { @@ -24563,47 +30374,47 @@ "weight": 1.0 }, { - "source": "src_classifier_rationale_21", + "source": "src_classifier_rationale_18", "target": "src_classifier_match_phrase_in_text", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L21", + "source_location": "L18", "weight": 1.0 }, { - "source": "src_classifier_rationale_34", + "source": "src_classifier_rationale_31", "target": "src_classifier_count_phrase_occurrences", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L34", + "source_location": "L31", "weight": 1.0 }, { - "source": "src_classifier_rationale_45", + "source": "src_classifier_rationale_42", "target": "src_classifier_inherenceclassifier", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L45", + "source_location": "L42", "weight": 1.0 }, { - "source": "src_classifier_rationale_62", + "source": "src_classifier_rationale_61", "target": "src_classifier_inherenceclassifier_classify", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/classifier.py", - "source_location": "L62", + "source_location": "L61", "weight": 1.0 }, { @@ -24629,36 +30440,36 @@ "weight": 1.0 }, { - "source": "src_language_rationale_71", + "source": "src_language_rationale_463", "target": "src_language_normalize_text", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/language.py", - "source_location": "L71", + "source_location": "L463", "weight": 1.0 }, { - "source": "src_language_rationale_81", + "source": "src_language_rationale_473", "target": "src_language_extract_words", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/language.py", - "source_location": "L81", + "source_location": "L473", "weight": 1.0 }, { - "source": "src_language_rationale_86", + "source": "src_language_rationale_478", "target": "src_language_detect_language", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/language.py", - "source_location": "L86", + "source_location": "L478", "weight": 1.0 }, { @@ -24684,36 +30495,36 @@ "weight": 1.0 }, { - "source": "src_parser_rationale_10", - "target": "src_parser_strip_markdown", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "src/parser.py", - "source_location": "L10", - "weight": 1.0 - }, - { - "source": "src_parser_rationale_44", + "source": "src_parser_rationale_43", "target": "src_parser_extract_sentences", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/parser.py", - "source_location": "L44", + "source_location": "L43", "weight": 1.0 }, { - "source": "src_parser_rationale_52", + "source": "src_parser_rationale_53", "target": "src_parser_extract_evidence_snippets", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/parser.py", - "source_location": "L52", + "source_location": "L53", + "weight": 1.0 + }, + { + "source": "src_parser_rationale_9", + "target": "src_parser_strip_markdown", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/parser.py", + "source_location": "L9", "weight": 1.0 }, { @@ -24750,80 +30561,80 @@ "weight": 1.0 }, { - "source": "tests_test_adversarial_rationale_134", - "target": "tests_test_adversarial_test_adversarial_subprocess_cli_empty_content", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L134", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial_rationale_16", - "target": "tests_test_adversarial_test_adversarial_sao_paulo_city_vs_fc", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L16", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial_rationale_165", - "target": "tests_test_adversarial_test_adversarial_subprocess_cli_missing_required_field", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L165", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial_rationale_194", - "target": "tests_test_adversarial_test_adversarial_subprocess_cli_corrupted_json", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L194", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial_rationale_41", - "target": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L41", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial_rationale_64", - "target": "tests_test_adversarial_test_adversarial_related_entity_without_scope_context", - "relation": "rationale_for", - "_origin": "ast", - "confidence": "EXTRACTED", - "confidence_score": 1.0, - "source_file": "tests/test_adversarial.py", - "source_location": "L64", - "weight": 1.0 - }, - { - "source": "tests_test_adversarial_rationale_99", + "source": "tests_test_adversarial_rationale_105", "target": "tests_test_adversarial_test_adversarial_subprocess_cli_success_stdout", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_adversarial.py", - "source_location": "L99", + "source_location": "L105", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial_rationale_149", + "target": "tests_test_adversarial_test_adversarial_subprocess_cli_empty_content", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L149", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial_rationale_15", + "target": "tests_test_adversarial_test_adversarial_sao_paulo_city_vs_fc", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L15", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial_rationale_186", + "target": "tests_test_adversarial_test_adversarial_subprocess_cli_missing_required_field", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L186", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial_rationale_221", + "target": "tests_test_adversarial_test_adversarial_subprocess_cli_corrupted_json", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L221", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial_rationale_45", + "target": "tests_test_adversarial_test_adversarial_apple_fruit_recipe", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L45", + "weight": 1.0 + }, + { + "source": "tests_test_adversarial_rationale_69", + "target": "tests_test_adversarial_test_adversarial_related_entity_without_scope_context", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_adversarial.py", + "source_location": "L69", "weight": 1.0 }, { @@ -24860,25 +30671,25 @@ "weight": 1.0 }, { - "source": "tests_test_extract_article_contents_rationale_323", + "source": "tests_test_extract_article_contents_rationale_317", "target": "tests_test_extract_article_contents_test_e2e_live_article_extraction", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L323", + "source_location": "L317", "weight": 1.0 }, { - "source": "tests_test_extract_article_contents_rationale_367", + "source": "tests_test_extract_article_contents_rationale_361", "target": "tests_test_extract_article_contents_test_e2e_cli_live_execution", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L367", + "source_location": "L361", "weight": 1.0 }, { @@ -24915,113 +30726,113 @@ "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_151", + "source": "tests_test_extract_google_news_rationale_149", "target": "tests_test_extract_google_news_test_resolve_article_url_success", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L151", + "source_location": "L149", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_164", + "source": "tests_test_extract_google_news_rationale_162", "target": "tests_test_extract_google_news_test_resolve_articles_urls_batch", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L164", + "source_location": "L162", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_189", + "source": "tests_test_extract_google_news_rationale_187", "target": "tests_test_extract_google_news_test_extract_google_news_orchestration_mocked", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L189", + "source_location": "L187", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_218", + "source": "tests_test_extract_google_news_rationale_214", "target": "tests_test_extract_google_news_test_cli_execution_stdout", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L218", + "source_location": "L214", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_243", + "source": "tests_test_extract_google_news_rationale_235", "target": "tests_test_extract_google_news_test_cli_execution_file_output", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L243", + "source_location": "L235", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_264", + "source": "tests_test_extract_google_news_rationale_254", "target": "tests_test_extract_google_news_test_cli_empty_query_error", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L264", + "source_location": "L254", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_273", + "source": "tests_test_extract_google_news_rationale_263", "target": "tests_test_extract_google_news_test_cli_network_error_handling", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L273", + "source_location": "L263", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_292", + "source": "tests_test_extract_google_news_rationale_282", "target": "tests_test_extract_google_news_test_e2e_resolve_real_google_news_url", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L292", + "source_location": "L282", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_313", + "source": "tests_test_extract_google_news_rationale_303", "target": "tests_test_extract_google_news_test_e2e_extract_google_news_live_pipeline", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L313", + "source_location": "L303", "weight": 1.0 }, { - "source": "tests_test_extract_google_news_rationale_329", + "source": "tests_test_extract_google_news_rationale_319", "target": "tests_test_extract_google_news_test_e2e_cli_live_file_output", "relation": "rationale_for", "_origin": "ast", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "tests/test_extract_google_news.py", - "source_location": "L329", + "source_location": "L319", "weight": 1.0 }, { @@ -25101,6 +30912,270 @@ "source_location": "L1", "weight": 1.0 }, + { + "source": "tests_test_select_article_extractor_rationale_1", + "target": "tests_test_select_article_extractor", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L1", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_116", + "target": "tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L116", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_129", + "target": "tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L129", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_141", + "target": "tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L141", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_162", + "target": "tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L162", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_177", + "target": "tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L177", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_191", + "target": "tests_test_select_article_extractor_test_ct_006_single_usable_candidate", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L191", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_203", + "target": "tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L203", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_215", + "target": "tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L215", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_227", + "target": "tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L227", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_244", + "target": "tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L244", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_260", + "target": "tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L260", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_273", + "target": "tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L273", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_299", + "target": "tests_test_select_article_extractor_test_ct_013_empty_articles_list", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L299", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_318", + "target": "tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L318", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_335", + "target": "tests_test_select_article_extractor_test_integration_reference_file", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L335", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_364", + "target": "tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L364", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_398", + "target": "tests_test_select_article_extractor_test_integration_large_batch_determinism", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L398", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_447", + "target": "tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L447", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_484", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L484", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_521", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L521", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_549", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L549", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_562", + "target": "tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L562", + "weight": 1.0 + }, + { + "source": "tests_test_select_article_extractor_rationale_60", + "target": "tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", + "relation": "rationale_for", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L60", + "weight": 1.0 + }, { "source": "specs_001_multilingual_entity_classifier_checklists_poc_readiness", "target": "specs_001_multilingual_entity_classifier_plan", @@ -25310,6 +31385,149 @@ "source_location": "L5", "weight": 1.0 }, + { + "source": "specs_004_deterministic_content_selection_checklists_deterministic_selection", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", + "source_location": "L5", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_checklists_requirements", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", + "source_location": "L5", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_cli_contract", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_contracts_json_schema", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_data_model", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/data-model.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan", + "target": "specs_004_deterministic_content_selection_research", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L85", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan", + "target": "specs_004_deterministic_content_selection_data_model", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L88", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_plan", + "target": "specs_004_deterministic_content_selection_quickstart", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/plan.md", + "source_location": "L90", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_quickstart", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/quickstart.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_research", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/research.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks", + "target": "specs_004_deterministic_content_selection_plan", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L3", + "weight": 1.0 + }, + { + "source": "specs_004_deterministic_content_selection_tasks", + "target": "specs_004_deterministic_content_selection_spec", + "relation": "references", + "_origin": "ast", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "specs/004-deterministic-content-selection/tasks.md", + "source_location": "L3", + "weight": 1.0 + }, { "source": "classify_emit_error", "target": "src_models_errorcode", @@ -25319,7 +31537,7 @@ "confidence_score": 0.95, "context": "parameter_type", "source_file": "classify.py", - "source_location": "L74", + "source_location": "L73", "weight": 0.8 }, { @@ -25330,7 +31548,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "classify.py", - "source_location": "L110", + "source_location": "L109", "weight": 0.8 }, { @@ -25341,7 +31559,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "classify.py", - "source_location": "L127", + "source_location": "L126", "weight": 0.8 }, { @@ -25352,20 +31570,20 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/base.py", + "source_location": "L24", + "weight": 0.8 + }, + { + "source": "src_adapters_base_basenlpadapter", + "target": "src_models_classificationresult", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "src/adapters/base.py", "source_location": "L26", "weight": 0.8 }, - { - "source": "src_adapters_base_basenlpadapter", - "target": "src_models_classificationresult", - "relation": "uses", - "_origin": "ast", - "confidence": "INFERRED", - "confidence_score": 0.95, - "source_file": "src/adapters/base.py", - "source_location": "L28", - "weight": 0.8 - }, { "source": "src_adapters_embeddings_localembeddingsadapter", "target": "src_models_ecpsnapshot", @@ -25374,7 +31592,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/embeddings.py", - "source_location": "L37", + "source_location": "L39", "weight": 0.8 }, { @@ -25385,7 +31603,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/adapters/embeddings.py", - "source_location": "L39", + "source_location": "L41", "weight": 0.8 }, { @@ -25418,7 +31636,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L139", + "source_location": "L151", "weight": 0.8 }, { @@ -25429,7 +31647,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L55", + "source_location": "L53", "weight": 0.8 }, { @@ -25440,7 +31658,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L59", + "source_location": "L58", "weight": 0.8 }, { @@ -25451,7 +31669,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L61", + "source_location": "L60", "weight": 0.8 }, { @@ -25462,7 +31680,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "src/classifier.py", - "source_location": "L61", + "source_location": "L60", "weight": 0.8 }, { @@ -25473,7 +31691,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_adversarial.py", - "source_location": "L59", + "source_location": "L64", "weight": 0.8 }, { @@ -25484,7 +31702,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_adversarial.py", - "source_location": "L93", + "source_location": "L99", "weight": 0.8 }, { @@ -25495,7 +31713,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_adversarial.py", - "source_location": "L35", + "source_location": "L39", "weight": 0.8 }, { @@ -25506,7 +31724,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_benchmark_24.py", - "source_location": "L26", + "source_location": "L24", "weight": 0.8 }, { @@ -25517,7 +31735,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_benchmark_24.py", - "source_location": "L40", + "source_location": "L38", "weight": 0.8 }, { @@ -25528,7 +31746,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L10", + "source_location": "L11", "weight": 0.8 }, { @@ -25539,7 +31757,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L19", + "source_location": "L20", "weight": 0.8 }, { @@ -25550,7 +31768,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L56", + "source_location": "L57", "weight": 0.8 }, { @@ -25561,7 +31779,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L40", + "source_location": "L41", "weight": 0.8 }, { @@ -25572,7 +31790,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L97", + "source_location": "L98", "weight": 0.8 }, { @@ -25583,7 +31801,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L85", + "source_location": "L86", "weight": 0.8 }, { @@ -25594,7 +31812,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_classifier.py", - "source_location": "L71", + "source_location": "L72", "weight": 0.8 }, { @@ -25605,7 +31823,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L300", + "source_location": "L295", "weight": 0.8 }, { @@ -25616,7 +31834,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L256", + "source_location": "L250", "weight": 0.8 }, { @@ -25627,7 +31845,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L204", + "source_location": "L198", "weight": 0.8 }, { @@ -25638,7 +31856,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L281", + "source_location": "L275", "weight": 0.8 }, { @@ -25649,7 +31867,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L214", + "source_location": "L208", "weight": 0.8 }, { @@ -25660,7 +31878,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_article_contents.py", - "source_location": "L193", + "source_location": "L189", "weight": 0.8 }, { @@ -25671,7 +31889,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_google_news.py", - "source_location": "L317", + "source_location": "L307", "weight": 0.8 }, { @@ -25682,7 +31900,7 @@ "confidence": "INFERRED", "confidence_score": 0.95, "source_file": "tests/test_extract_google_news.py", - "source_location": "L206", + "source_location": "L202", "weight": 0.8 }, { @@ -25739,8 +31957,140 @@ "source_file": "tests/test_models.py", "source_location": "L36", "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L380", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L124", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L137", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L149", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L172", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L186", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_006_single_usable_candidate", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L198", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L211", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L222", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L239", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L256", + "weight": 0.8 + }, + { + "source": "tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", + "target": "scripts_select_article_extractor_extractorname", + "relation": "uses", + "_origin": "ast", + "confidence": "INFERRED", + "confidence_score": 0.95, + "source_file": "tests/test_select_article_extractor.py", + "source_location": "L269", + "weight": 0.8 } ], "hyperedges": [], - "built_at_commit": "6e3d57619b8be1628f85090f1d20395cc0fd20e4" + "built_at_commit": "6a45368cb0061020764a5dd31edf6f7eb0e54475" } \ No newline at end of file diff --git a/graphify-out/2026-08-20/manifest.json b/graphify-out/2026-08-20/manifest.json index 00a1c93..56bb658 100644 --- a/graphify-out/2026-08-20/manifest.json +++ b/graphify-out/2026-08-20/manifest.json @@ -294,15 +294,15 @@ "semantic_hash": "" }, "classify.py": { - "mtime": 1787197110.3753626, - "seen": 1787197159.9828603, - "ast_hash": "d09a35a5e25d42f6ecc537d5b67bef8e", + "mtime": 1787264412.2457643, + "seen": 1787264519.0539427, + "ast_hash": "e89fc4b64bd7606fc466d5338108705b", "semantic_hash": "" }, "pyproject.toml": { - "mtime": 1787234982.768605, - "seen": 1787235020.6850271, - "ast_hash": "26f5f979658067bf447f375f044a8f21", + "mtime": 1787264482.8509245, + "seen": 1787264519.0539448, + "ast_hash": "409c1fc0d7bbda6830ccb71c6196cb2f", "semantic_hash": "" }, "src/__init__.py": { @@ -318,45 +318,45 @@ "semantic_hash": "" }, "src/adapters/base.py": { - "mtime": 1787196396.6199949, - "seen": 1787196463.0953116, - "ast_hash": "40dc6e175c8708467748c1f42a0e064a", + "mtime": 1787264412.2437606, + "seen": 1787264519.0542011, + "ast_hash": "220635d5d74e73f58259069bf5207908", "semantic_hash": "" }, "src/adapters/embeddings.py": { - "mtime": 1787196402.7484262, - "seen": 1787196463.0953145, - "ast_hash": "0444823bb05720d4c4ca1662a00b2c01", + "mtime": 1787264437.92723, + "seen": 1787264519.0542023, + "ast_hash": "7beb0ecfb7482c1fd10422da99f69abe", "semantic_hash": "" }, "src/adapters/llm.py": { - "mtime": 1787196408.180451, - "seen": 1787196463.0953166, - "ast_hash": "3d95d98625df3fcd343f2fecb78707c5", + "mtime": 1787264412.2437606, + "seen": 1787264519.0542035, + "ast_hash": "ba2990328f5b25ac6cdfc3b57acc9d39", "semantic_hash": "" }, "src/classifier.py": { - "mtime": 1787197085.0250447, - "seen": 1787197159.985785, - "ast_hash": "a2e70f968109d213fdab0ae81ac819ff", + "mtime": 1787264459.052089, + "seen": 1787264519.0542045, + "ast_hash": "b8fb440374ecd66bb8bf67c70c19ed1f", "semantic_hash": "" }, "src/language.py": { - "mtime": 1787196384.5545745, - "seen": 1787196463.0953217, - "ast_hash": "985619013e58a7f55af2e955817f223c", + "mtime": 1787264437.9312274, + "seen": 1787264519.0542057, + "ast_hash": "cbaf52272ebb05372e34a05cd201c270", "semantic_hash": "" }, "src/models.py": { - "mtime": 1787195855.3266282, - "seen": 1787196463.0953236, - "ast_hash": "ce73bfe85eb54f907e2052c80636ecaf", + "mtime": 1787264437.9302285, + "seen": 1787264519.054207, + "ast_hash": "16e604c14f7d66634dc9e2ed7959dd7c", "semantic_hash": "" }, "src/parser.py": { - "mtime": 1787195873.9119804, - "seen": 1787196463.0953257, - "ast_hash": "0a1d64ee7088b266125af071f85f3826", + "mtime": 1787264437.9312274, + "seen": 1787264519.054208, + "ast_hash": "d43fca3f063534e3626f86f36a97a2cc", "semantic_hash": "" }, "tests/__init__.py": { @@ -366,39 +366,39 @@ "semantic_hash": "" }, "tests/test_adapters.py": { - "mtime": 1787196418.6328156, - "seen": 1787196463.09533, - "ast_hash": "5caf95327ea030dbcc37a99bd9052ebd", + "mtime": 1787264437.9292288, + "seen": 1787264519.0543096, + "ast_hash": "7ed9ba6f62fef404bfc28a2e16ada647", "semantic_hash": "" }, "tests/test_benchmark_24.py": { - "mtime": 1787196325.5409796, - "seen": 1787196463.0953324, - "ast_hash": "487d30d6de2dee529fa91b86a1d62c0a", + "mtime": 1787264437.9302285, + "seen": 1787264519.0543122, + "ast_hash": "052a51561002be035de1a79455256b67", "semantic_hash": "" }, "tests/test_classifier.py": { - "mtime": 1787196364.7195728, - "seen": 1787196463.0953343, - "ast_hash": "4350a5b11a08d12ccb85a3f332d71e87", + "mtime": 1787264437.92723, + "seen": 1787264519.0543132, + "ast_hash": "14da0c7a7d4c08762437ca777c086dea", "semantic_hash": "" }, "tests/test_cli.py": { - "mtime": 1787195939.567137, - "seen": 1787196463.0953364, - "ast_hash": "90b0131d43cfc64a76e499c7a65d95de", + "mtime": 1787264437.9292288, + "seen": 1787264519.0543146, + "ast_hash": "b6f57994937363f8a1b0f2f66ea53d3a", "semantic_hash": "" }, "tests/test_language.py": { - "mtime": 1787195891.3329668, - "seen": 1787196463.0953388, - "ast_hash": "66191b43fcd7aef47c07cd20d5a8f03c", + "mtime": 1787264437.9292288, + "seen": 1787264519.0543184, + "ast_hash": "f1a09702410864434274f1b347769742", "semantic_hash": "" }, "tests/test_models.py": { - "mtime": 1787195886.5009987, - "seen": 1787196463.095341, - "ast_hash": "1fd725c8ca0f52e52f56c7223e9574d0", + "mtime": 1787264437.9302285, + "seen": 1787264519.0543194, + "ast_hash": "7ec72b612bf758be8c9a3617ce18b132", "semantic_hash": "" }, "examples/content_northvolt_de.md": { @@ -570,27 +570,27 @@ "semantic_hash": "" }, "tests/test_adversarial.py": { - "mtime": 1787197141.2340336, - "seen": 1787197159.9881344, - "ast_hash": "5e8daf517ee32c261617d96264ef0473", + "mtime": 1787264437.9242287, + "seen": 1787264519.0543108, + "ast_hash": "d353633ce31a624a8dcda790efec4d5e", "semantic_hash": "" }, "scripts/extract_google_news.py": { - "mtime": 1787236453.5231855, - "seen": 1787236509.1147037, - "ast_hash": "4216de490a87378d21dab707a3166679", + "mtime": 1787264437.92723, + "seen": 1787264519.0540311, + "ast_hash": "97d8a193901d5e2edf6359fad256b7ef", "semantic_hash": "" }, "tests/test_extract_google_news.py": { - "mtime": 1787236301.513448, - "seen": 1787236353.5582018, - "ast_hash": "1fc9a108a8abfecf1d37c8642a885e9e", + "mtime": 1787264437.9312274, + "seen": 1787264519.054317, + "ast_hash": "7561ad8fedcf1bc6cc8ed1e86a345532", "semantic_hash": "" }, "docs/googlenews_extractor_guia_completo.md": { - "mtime": 1787231605.0830677, - "seen": 1787234772.8112028, - "ast_hash": "59db8e652000ba6087a00289a0ce0959", + "mtime": 1787264437.9282286, + "seen": 1787264519.0578, + "ast_hash": "d7c3c64e2009dded496a08c7c91f63b9", "semantic_hash": "" }, "specs/002-google-news-extractor/checklists/readiness.md": { @@ -654,21 +654,21 @@ "semantic_hash": "" }, "README.md": { - "mtime": 1787240502.4633865, - "seen": 1787240516.5990582, - "ast_hash": "a075f140e2dd8383bec3991f92b32b26", + "mtime": 1787264334.4498444, + "seen": 1787264519.0577974, + "ast_hash": "196db110cfde06179fb750fc75afb6fe", "semantic_hash": "" }, "scripts/extract_article_contents.py": { - "mtime": 1787241061.3097162, - "seen": 1787241108.1811028, - "ast_hash": "08cd37738da1500b6912ffa1fb2fc0cc", + "mtime": 1787264465.3415215, + "seen": 1787264519.0540295, + "ast_hash": "2bea6b2a048526cb49d95fb88a001600", "semantic_hash": "" }, "tests/test_extract_article_contents.py": { - "mtime": 1787240910.5980105, - "seen": 1787241108.1826632, - "ast_hash": "98cf3b30fa6ce044d943eff381eaf8a7", + "mtime": 1787264437.9292288, + "seen": 1787264519.0543158, + "ast_hash": "56aee72480f05c714865791a935d539c", "semantic_hash": "" }, "docs/prd_extrator_artigos_nlp.md": { @@ -708,9 +708,9 @@ "semantic_hash": "" }, "specs/003-article-content-extractor/plan.md": { - "mtime": 1787239601.395844, - "seen": 1787240516.6008782, - "ast_hash": "406c3ebad1d32984c1b98f8a9b7ae9f1", + "mtime": 1787264323.707266, + "seen": 1787264519.0605621, + "ast_hash": "b2232491829a303a49e749c75f3adca2", "semantic_hash": "" }, "specs/003-article-content-extractor/quickstart.md": { @@ -726,9 +726,9 @@ "semantic_hash": "" }, "specs/003-article-content-extractor/spec.md": { - "mtime": 1787239197.9064422, - "seen": 1787240516.6008813, - "ast_hash": "9fd196b7ba4d9ba7adb2cad25d094764", + "mtime": 1787264319.2883234, + "seen": 1787264519.060745, + "ast_hash": "187b1307e28a02f0ac44895b5f9cca55", "semantic_hash": "" }, "specs/003-article-content-extractor/tasks.md": { @@ -736,5 +736,83 @@ "seen": 1787240516.6008823, "ast_hash": "d95c4763728496703cd89590288a2bed", "semantic_hash": "" + }, + "scripts/select_article_extractor.py": { + "mtime": 1787273522.903319, + "seen": 1787273548.728257, + "ast_hash": "3e6938964c7e4549051cb1637207698d", + "semantic_hash": "" + }, + "tests/test_select_article_extractor.py": { + "mtime": 1787274189.7777488, + "seen": 1787274207.7989414, + "ast_hash": "9f91e09d47f06140b243b6f516d14c60", + "semantic_hash": "" + }, + "docs/prd_deterministic_content_selection.md": { + "mtime": 1787264674.2038286, + "seen": 1787272611.6604555, + "ast_hash": "2c421402df8b6469ce60eaa984dce666", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/checklists/deterministic-selection.md": { + "mtime": 1787272346.8692143, + "seen": 1787272611.6713927, + "ast_hash": "6d9bcda99dbd284ffcbce372102fd868", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/checklists/requirements.md": { + "mtime": 1787264728.7202728, + "seen": 1787272611.6713977, + "ast_hash": "074efe6ba551e93f7d005c5462805693", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/contracts/cli-contract.md": { + "mtime": 1787274329.2175446, + "seen": 1787274402.0944166, + "ast_hash": "2cd795eaed6198dc343424bd20673728", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/contracts/json-schema.md": { + "mtime": 1787271837.7328393, + "seen": 1787272611.6714034, + "ast_hash": "155f0bccb7bcffabcedb6ef86b8003c5", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/data-model.md": { + "mtime": 1787271825.5970395, + "seen": 1787272611.671406, + "ast_hash": "23ec4a144f4aeeed9fee259b6165bea3", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/plan.md": { + "mtime": 1787271850.1744206, + "seen": 1787272611.671409, + "ast_hash": "3bebc2a73a9632d42ccca646af592133", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/quickstart.md": { + "mtime": 1787274324.1467915, + "seen": 1787274402.0946271, + "ast_hash": "a7886ca618af43f33971213e2255b3c6", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/research.md": { + "mtime": 1787274316.8544433, + "seen": 1787274402.0946283, + "ast_hash": "73ac1637d31472e25b0a1709cd137e5c", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/spec.md": { + "mtime": 1787274311.1564865, + "seen": 1787274402.0946293, + "ast_hash": "b2c994a14871c2e6e1cf4a11db7dbeb5", + "semantic_hash": "" + }, + "specs/004-deterministic-content-selection/tasks.md": { + "mtime": 1787272595.8186145, + "seen": 1787272611.6714194, + "ast_hash": "3a2617478f44c6400ed57088d2039f93", + "semantic_hash": "" } } \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index 0f0e2ff..c63d99b 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - TextNLPClassifierApp (2026-08-20) ## Corpus Check -- 161 files · ~78,549 words +- 174 files · ~91,961 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1000 nodes · 1220 edges · 115 communities (77 shown, 38 thin omitted) -- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 39 edges (avg confidence: 0.95) +- 1235 nodes · 1548 edges · 131 communities (93 shown, 38 thin omitted) +- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 51 edges (avg confidence: 0.95) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `6e3d5761` +- Built from commit: `6a45368c` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -56,10 +56,10 @@ - 1. Input Schemas - 2. Basic CLI Usage Examples - 2. Standard Streams & Exit Codes -- classifier.py +- ClassificationResult - InherenceClassifier -- detect_language -- ClassificationError +- classifier.py +- main - content_northvolt_de.md - content_presal_pt.md - content_tangential_es.md @@ -110,12 +110,12 @@ - 🧠 TextNLPClassifierApp - Extraction Pipeline Checklist: Article Content Multi-Engine Extractor - sample_rss_xml -- main +- models.py - ECPSnapshot - Feature Specification: Multilingual NLP Entity Inherence Classifier (POC) - 4. Requisitos Funcionais (FR) - Tasks: Article Content Multi-Engine Extractor -- models.py +- LocalEmbeddingsAdapter - Implementation Plan: Article Content Multi-Engine Extractor - 2. Cenários de Validação - 1. Technical Decisions & Tradeoffs @@ -124,35 +124,50 @@ - Specification Quality Checklist: Multilingual NLP Entity Inherence Classifier - CLI Contract: Article Content Multi-Engine Extractor - 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 +- 1. Text Normalization Pipeline +- Tasks: Deterministic Article Content Selection +- select_article_extractor +- process_batch +- test_select_article_extractor.py +- Feature Specification: Deterministic Content Selection +- 2. Entity Descriptions & Fields +- Implementation Plan: Deterministic Article Content Selection +- Deterministic Content Selection Checklist: End-to-End Requirements Quality +- Quickstart: Deterministic Article Content Selection +- Specification Quality Checklist: Deterministic Content Selection +- CLI Interface Contract: Deterministic Article Content Selection +- JSON Schema Contract: Deterministic Article Content Selection ## God Nodes (most connected - your core abstractions) 1. `ECPSnapshot` - 31 edges 2. `InherenceClassifier` - 25 edges -3. `DecisionCategory` - 17 edges -4. `ClassificationResult` - 17 edges -5. `process_batch()` - 15 edges -6. `LocalEmbeddingsAdapter` - 14 edges -7. `LLMFallbackAdapter` - 14 edges -8. `detect_language()` - 14 edges -9. `main()` - 13 edges -10. `ArticleCrawler` - 13 edges +3. `select_article_extractor()` - 23 edges +4. `ExtractorName` - 21 edges +5. `DecisionCategory` - 17 edges +6. `ClassificationResult` - 17 edges +7. `process_batch()` - 15 edges +8. `process_batch()` - 14 edges +9. `LocalEmbeddingsAdapter` - 14 edges +10. `LLMFallbackAdapter` - 14 edges ## Surprising Connections (you probably didn't know these) - `main()` --uses--> `ECPSnapshot` [INFERRED] classify.py → src/models.py +- `main()` --uses--> `ErrorCode` [INFERRED] + classify.py → src/models.py - `test_extract_google_news_orchestration_mocked()` --uses--> `ExtractionResult` [INFERRED] tests/test_extract_google_news.py → scripts/extract_google_news.py +- `test_llm_adapter_interface()` --calls--> `LLMFallbackAdapter` [EXTRACTED] + tests/test_adapters.py → src/adapters/llm.py - `classifier()` --uses--> `InherenceClassifier` [INFERRED] tests/test_benchmark_24.py → src/classifier.py -- `test_classification_result_serialization()` --uses--> `DecisionCategory` [INFERRED] - tests/test_models.py → src/models.py -- `test_classification_error_serialization()` --uses--> `ErrorCode` [INFERRED] - tests/test_models.py → src/models.py ## Import Cycles - None detected. -## Communities (115 total, 38 thin omitted) +## Communities (131 total, 38 thin omitted) ### Community 0 - "Task Planning" Cohesion: 0.07 @@ -294,21 +309,21 @@ Nodes (7): 1. Prerequisites & Installation, 2.1 Direct Inherence (Portuguese), 2 Cohesion: 0.29 Nodes (6): 1.1 Arguments & Options, 1. Command Line Interface, 2.1 Exit Codes, 2.2 Standard Output (`stdout`) / Standard Error (`stderr`), 2. Standard Streams & Exit Codes, CLI Contract & Interface Specification (POC) -### Community 45 - "classifier.py" +### Community 45 - "ClassificationResult" Cohesion: 0.14 -Nodes (9): LocalEmbeddingsAdapter, Optional adapter for local multilingual semantic vector embeddings., LLMFallbackAdapter, Optional adapter for LLM fallback boundary disambiguation., Core deterministic classification engine (Tier 1 core)., Unit tests for optional adapter interfaces (Tier 2 / Tier 3)., test_classifier_with_adapter_flags(), test_embeddings_adapter_interface() (+1 more) +Nodes (12): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., LLMFallbackAdapter (+4 more) ### Community 46 - "InherenceClassifier" Cohesion: 0.12 Nodes (27): InherenceClassifier, Tier 1 Deterministic NLP Entity Inherence Classifier., DecisionCategory, RelatedEntity, Adversarial and robustness test suite for Multilingual NLP Entity Inherence…, Run CLI via subprocess without --output and verify stdout is pure parseable…, Run CLI via subprocess with empty content and verify error code and exit code., Content about city/state governance of São Paulo against ECP for São Paulo FC. (+19 more) -### Community 47 - "detect_language" -Cohesion: 0.09 -Nodes (30): count_phrase_occurrences(), match_phrase_in_text(), Check if a normalized phrase appears in normalized text with word boundary…, Count occurrences of a phrase in text., Classify inherence of content against an ECP snapshot., detect_language(), extract_words(), normalize_text() (+22 more) +### Community 47 - "classifier.py" +Cohesion: 0.10 +Nodes (31): 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., detect_language(), extract_words() (+23 more) -### Community 48 - "ClassificationError" -Cohesion: 0.29 -Nodes (3): ClassificationError, Any, test_classification_error_serialization() +### Community 48 - "main" +Cohesion: 0.31 +Nodes (9): main(), parse_args(), Namespace, CLI execution tests covering flags, arguments, stdout, and error handling., test_cli_empty_content_file(), test_cli_missing_ecp_file(), test_cli_missing_required_ecp_field(), test_cli_output_file() (+1 more) ### Community 80 - "test_extract_article_contents.py" Cohesion: 0.06 @@ -372,7 +387,7 @@ Nodes (6): 1. Comando e Argumentos, 2. Códigos de Saída (Exit Codes), 3. Proto ### Community 97 - "🧠 TextNLPClassifierApp" Cohesion: 0.06 -Nodes (33): 1. 🧠 Classificador de Conteúdo e Inerência (NLP / LLM / ECP), 1. Clonar o Repositório e Criar Ambiente Virtual, 1. Extração Completa Automática, 1. River Plate (Argentina / Espanhol / 2 Páginas / Salvar em Arquivo), 2. Amostragem Rápida (Limit 2 Notícias), 2. Cruzeiro (Brasil / Português / Formatado no Terminal), 2. 📰 Extrator de Manchetes do Google News, 2. Instalar Dependências (+25 more) +Nodes (35): 1. 🧠 Classificador de Conteúdo e Inerência (NLP / LLM / ECP), 1. Clonar o Repositório e Criar Ambiente Virtual, 1. Execução Padrão Automática, 2. Execução com Modo Verboso, 2. 📰 Extrator de Manchetes do Google News, 2. Instalar Dependências, 3. Baixar Binários do Navegador Stealth (Camoufox), 3. 📄 Extrator e Parser Multimotor de Artigos (+27 more) ### Community 98 - "Extraction Pipeline Checklist: Article Content Multi-Engine Extractor" Cohesion: 0.05 @@ -382,13 +397,13 @@ Nodes (34): 1. Requirement Completeness, 2. Requirement Clarity & Non-Ambiguity, Cohesion: 0.67 Nodes (3): fixture, Fixture que fornece o conteúdo do XML de exemplo para testes offline., sample_rss_xml() -### Community 100 - "main" -Cohesion: 0.23 -Nodes (13): emit_error(), main(), parse_args(), Namespace, Enum, ErrorCode, str, CLI execution tests covering flags, arguments, stdout, and error handling. (+5 more) +### Community 100 - "models.py" +Cohesion: 0.24 +Nodes (8): emit_error(), ClassificationError, ErrorCode, MatchedGraphEntity, Enum, str, Data models and validation schemas for Multilingual NLP Entity Inherence…, test_classification_error_serialization() ### Community 101 - "ECPSnapshot" -Cohesion: 0.22 -Nodes (11): parametrize, ECPSnapshot, classifier(), fixture, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), Unit tests for ECP models, schema validation, and structured error handling., test_classification_result_serialization() (+3 more) +Cohesion: 0.19 +Nodes (11): parametrize, ECPSnapshot, Any, classifier(), fixture, Controlled 24-case benchmark suite for Multilingual NLP Entity Inherence…, test_benchmark_case(), Unit tests for ECP models, schema validation, and structured error handling. (+3 more) ### Community 102 - "Feature Specification: Multilingual NLP Entity Inherence Classifier (POC)" Cohesion: 0.14 @@ -402,9 +417,9 @@ Nodes (20): 1.1 Objetivo do Produto, 1. Visão Geral e Contexto, 2. Personas e C Cohesion: 0.11 Nodes (18): Dependencies & Execution Order, Entrega Incremental, Implementation Strategy, Implementação da User Story 1, Implementação da User Story 2, Implementação da User Story 3, MVP First (User Story 1 Only), Oportunidades de Execução Paralela (+10 more) -### Community 105 - "models.py" -Cohesion: 0.16 -Nodes (12): ABC, BaseNLPAdapter, Base abstract adapter interface for optional Tier 2 / Tier 3 NLP enhancers., Abstract interface for pluggable NLP classification adapters., Return True if the underlying provider or model is installed and configured., Compute semantic similarity score between text and a set of candidate terms., Optionally refine an ambiguous classification result., Optional local vector embeddings adapter (Tier 2). Disabled by default.… (+4 more) +### Community 105 - "LocalEmbeddingsAdapter" +Cohesion: 0.18 +Nodes (7): LocalEmbeddingsAdapter, Optional local vector embeddings adapter (Tier 2). Disabled by default.…, Optional adapter for local multilingual semantic vector embeddings., Unit tests for optional adapter interfaces (Tier 2 / Tier 3)., test_classifier_with_adapter_flags(), test_embeddings_adapter_interface(), test_llm_adapter_interface() ### Community 106 - "Implementation Plan: Article Content Multi-Engine Extractor" Cohesion: 0.17 @@ -438,25 +453,85 @@ Nodes (5): 1. Comando de Execução, 2. Argumentos e Flags, 3. Códigos de Saíd Cohesion: 0.50 Nodes (3): 1. Schema de Entrada (Input JSON), 2. Schema de Saída (Output JSON), JSON Schema Contract: Article Content Multi-Engine Extractor +### Community 115 - "PRD — Seleção determinística da biblioteca de extração de conteúdo" +Cohesion: 0.07 +Nodes (29): 10. Requisitos não funcionais, 11. Critérios de aceite, 12. Casos obrigatórios de teste, 13. Definition of Done, 1. Contexto, 2. Objetivo, 3.1 Incluído, 3.2 Fora do escopo (+21 more) + +### Community 116 - "select_article_extractor.py" +Cohesion: 0.16 +Nodes (17): BatchProcessingResult, break_priority_tie(), calculate_consensus_metrics(), ExtractorCandidate, form_active_set(), main(), parse_args(), Namespace (+9 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 +Nodes (18): Dependencies & Execution Order, Implementation for User Story 1, Implementation for User Story 2, Implementation for User Story 3, Implementation Strategy, Incremental Delivery (Phases 4, 5 & 6), MVP First (Phases 1, 2 & 3), Parallel Opportunities (+10 more) + +### Community 119 - "select_article_extractor" +Cohesion: 0.08 +Nodes (37): ArticleSelectionResult, CandidateStatus, extract_candidate_data(), ExtractorName, Any, Enum, str, Extrai campo de texto, erro e calcula tokens/shingles para um motor. (+29 more) + +### Community 120 - "process_batch" +Cohesion: 0.10 +Nodes (26): atomic_save_json(), process_batch(), Path, Salva dados em JSON de forma atômica utilizando arquivo temporário e rename., Lê o JSON de entrada, valida a estrutura, processa todos os artigos e grava o…, Path, CT-012: A entrada já contém selected_extractor -> Recalcular e substituir…, CT-013: articles está vazio -> Gerar saída válida com articles vazio. (+18 more) + +### Community 122 - "test_select_article_extractor.py" +Cohesion: 0.21 +Nodes (14): generate_shingles(), normalize_text(), Executa a normalização determinística para comparação: 1. Decodificar entidades…, Gera conjunto de shingles ordenados de tamanho window_size (padrão 5). - Se…, Suíte de Testes Automatizados para o Seletor Determinístico de Extrator. Cobre…, Garante que marcação de imagem Markdown ![alt](url) seja descartada e link…, test_generate_shingles_empty(), test_generate_shingles_short_text() (+6 more) + +### Community 123 - "Feature Specification: Deterministic Content Selection" +Cohesion: 0.17 +Nodes (12): Assumptions, Edge Cases, Feature Specification: Deterministic Content Selection, Functional Requirements, Key Entities *(include if feature involves data)*, Measurable Outcomes, Requirements *(mandatory)*, Success Criteria *(mandatory)* (+4 more) + +### Community 124 - "2. Entity Descriptions & Fields" +Cohesion: 0.18 +Nodes (11): 1. Domain Entities & Value Types, 2. Entity Descriptions & Fields, 3. JSON Schema Mapping, `ArticleSelectionResult` (Dataclass), `BatchProcessingResult` (Dataclass), `CandidateStatus` (Enum), Data Model: Deterministic Content Selection, Entrada (+3 more) + +### Community 125 - "Implementation Plan: Deterministic Article Content Selection" +Cohesion: 0.18 +Nodes (11): Constitution Check, Documentation (this feature), Implementation Phases, Implementation Plan: Deterministic Article Content Selection, Phase 0: Outline & Research *(Completed)*, Phase 1: Design & Contracts *(Completed)*, Phase 2: Tasks & Execution *(Next Step via `/speckit-tasks`)*, Project Structure (+3 more) + +### Community 126 - "Deterministic Content Selection Checklist: End-to-End Requirements Quality" +Cohesion: 0.25 +Nodes (7): Candidate State Transitions & Resilience, Decision & Tie-Breaking Hierarchy, Deterministic Content Selection Checklist: End-to-End Requirements Quality, JSON Schema Integrity & Atomic I/O, Notes, Shingles & Consensus Metric Formulation, Text Normalization & Tokenization Quality + +### Community 127 - "Quickstart: Deterministic Article Content Selection" +Cohesion: 0.29 +Nodes (7): 1. Pré-requisitos, 2. Execução Rápida via CLI, 3. Execução dos Testes Automatizados, 4. Validação Programática / Uso como Módulo Python, Cenário 1: Selecionar o melhor extrator para uma extração existente, Cenário 2: Especificar caminho de saída customizado e modo verboso, Quickstart: Deterministic Article Content Selection + +### Community 128 - "Specification Quality Checklist: Deterministic Content Selection" +Cohesion: 0.33 +Nodes (5): Content Quality, Feature Readiness, Notes, Requirement Completeness, Specification Quality Checklist: Deterministic Content Selection + +### Community 129 - "CLI Interface Contract: Deterministic Article Content Selection" +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 131 - "JSON Schema Contract: Deterministic Article Content Selection" +Cohesion: 0.50 +Nodes (3): 1. Input JSON Schema, 2. Output JSON Schema, JSON Schema Contract: Deterministic Article Content Selection + ## Knowledge Gaps -- **465 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+460 more) +- **562 isolated node(s):** `text-nlp-classifier`, `MatchedGraphEntity`, `graphify`, `Usage`, `What graphify is for` (+557 more) These have ≤1 connection - possible missing edges or undocumented components. - **38 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 `ECPSnapshot` connect `ECPSnapshot` to `main`, `models.py`, `classifier.py`, `InherenceClassifier`, `detect_language`?** - _High betweenness centrality (0.006) - this node is a cross-community bridge._ -- **Why does `InherenceClassifier` connect `InherenceClassifier` to `main`, `ECPSnapshot`, `models.py`, `classifier.py`, `detect_language`?** +- **Why does `ECPSnapshot` connect `ECPSnapshot` to `models.py`, `LocalEmbeddingsAdapter`, `ClassificationResult`, `InherenceClassifier`, `classifier.py`, `main`?** _High betweenness centrality (0.003) - this node is a cross-community bridge._ -- **Why does `detect_language()` connect `detect_language` to `classifier.py`?** +- **Why does `LLMFallbackAdapter` connect `ClassificationResult` to `LocalEmbeddingsAdapter`, `ECPSnapshot`, `InherenceClassifier`, `classifier.py`?** + _High betweenness centrality (0.003) - this node is a cross-community bridge._ +- **Why does `Research & Architectural Decisions: Deterministic Content Selection` connect `1. Text Normalization Pipeline` to `004-deterministic-content-selection/spec.md`?** _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?** _`InherenceClassifier` has 6 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 12 inferred relationships involving `ExtractorName` (e.g. with `test_article_1_regression_technical_tie_markdown_images()` and `test_ct_001_three_candidates_clear_winner()`) actually correct?** + _`ExtractorName` has 12 INFERRED edges - model-reasoned connections that need verification._ - **Are the 10 inferred relationships involving `DecisionCategory` (e.g. with `InherenceClassifier` and `test_adversarial_apple_fruit_recipe()`) actually correct?** - _`DecisionCategory` has 10 INFERRED edges - model-reasoned connections that need verification._ -- **Are the 4 inferred relationships involving `ClassificationResult` (e.g. with `BaseNLPAdapter` and `LocalEmbeddingsAdapter`) actually correct?** - _`ClassificationResult` has 4 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._ \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427.json b/graphify-out/cache/ast/v0.9.47-s2/11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427.json new file mode 100644 index 0000000..5848e72 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/11e7f5000a2fb8eeff02785f691ae153bc0eedd913432e3ca833022d394ff427.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "label": "research.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "label": "Research & Architectural Decisions: Deterministic Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "label": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L9"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L12"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L22"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_alternatives_considered", "label": "Alternatives Considered", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L26"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "label": "2. 5-Token Shingles & Consensus Metrics", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L32"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context_34", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L34"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_37", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L37"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_51", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L51"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "label": "3. Regras de Decis\u00e3o, Empate T\u00e9cnico e Desempate Hier\u00e1rquico", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L57"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context_59", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L59"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_62", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L62"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_84", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L84"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "label": "4. Estrat\u00e9gia de I/O N\u00e3o Destrutiva e Escrita At\u00f4mica", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L89"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context_91", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L91"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_94", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L94"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_106", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L106"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_url_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_alternatives_considered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L32", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context_34", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_37", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L37", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_51", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L51", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L57", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context_59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L59", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_62", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L62", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_84", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L84", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L89", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context_91", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_94", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L94", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_106", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L106", "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/16e0382c8b0acaca620bada81dc567ba761ec700ff47e424975218bab2713ceb.json b/graphify-out/cache/ast/v0.9.47-s2/16e0382c8b0acaca620bada81dc567ba761ec700ff47e424975218bab2713ceb.json new file mode 100644 index 0000000..e4b9470 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/16e0382c8b0acaca620bada81dc567ba761ec700ff47e424975218bab2713ceb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_scripts_select_article_extractor_py", "label": "select_article_extractor.py", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_scripts_select_article_extractor_extractorname", "label": "ExtractorName", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "_callable": true, "_callable_class": true}, {"id": "str", "label": "str", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "enum", "label": "Enum", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "label": "CandidateStatus", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "label": "ExtractorCandidate", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L62", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "label": "ArticleSelectionResult", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L78", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "label": "BatchProcessingResult", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L90", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_normalize_text", "label": "normalize_text()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L106", "_callable": true}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "label": "generate_shingles()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L144", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "label": "extract_candidate_data()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L164", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_form_active_set", "label": "form_active_set()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L208", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "label": "calculate_consensus_metrics()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L231", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "label": "break_priority_tie()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L277", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "label": "select_with_consensus()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L286", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "label": "select_without_consensus()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L319", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "label": "select_article_extractor()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L370", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "label": "atomic_save_json()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L427", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_process_batch", "label": "process_batch()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L449", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_parse_args", "label": "parse_args()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L520", "_callable": true}, {"id": "namespace", "label": "Namespace", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_main", "label": "main()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L541", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_34", "label": "Nomes can\u00f4nicos e cat\u00e1logo fechado dos motores de extra\u00e7\u00e3o.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L34"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_42", "label": "Estado de viabilidade do candidato para forma\u00e7\u00e3o do conjunto ativo.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L42"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_63", "label": "Representa\u00e7\u00e3o e m\u00e9tricas de um candidato a extrator em um artigo.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L63"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_79", "label": "Resultado detalhado da sele\u00e7\u00e3o para um artigo individual.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L79"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_91", "label": "Resultado consolidado do processamento em lote.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L91"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_107", "label": "Executa a normaliza\u00e7\u00e3o determin\u00edstica para compara\u00e7\u00e3o: 1. Decodificar entidades\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L107"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_145", "label": "Gera conjunto de shingles ordenados de tamanho window_size (padr\u00e3o 5). - Se\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L145"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_165", "label": "Extrai campo de texto, erro e calcula tokens/shingles para um motor.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L165"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_209", "label": "Forma o conjunto ativo de candidatos conforme PRD \u00a77.1: 1. Se existir pelo\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L209"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_232", "label": "Constr\u00f3i o conjunto de consenso (shingles presentes em >= 2 candidatos ativos)\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L232"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_278", "label": "Aplica a prioridade final estrita: newspaper4k > readability > trafilatura.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L278"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_289", "label": "Seleciona o melhor candidato quando existe consenso (PRD \u00a77.5): 1. Ordenar por\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L289"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_320", "label": "Seleciona o candidato quando N\u00c3O existe consenso (PRD \u00a77.6): - Com 3 candidatos\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L320"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_371", "label": "Orquestrador determin\u00edstico completo para um \u00fanico artigo. Classifica\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L371"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_428", "label": "Salva dados em JSON de forma at\u00f4mica utilizando arquivo tempor\u00e1rio e rename.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L428"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_452", "label": "L\u00ea o JSON de entrada, valida a estrutura, processa todos os artigos e grava o\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L452"}], "edges": [{"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "html", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "tempfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "unicodedata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "collections", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extractorname", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extractorname", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L62", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_normalize_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_normalize_text", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L144", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_form_active_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_form_active_set", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_form_active_set", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_form_active_set", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L231", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L231", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L277", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L277", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L277", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L286", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L286", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L286", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L319", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L319", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L319", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L370", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L370", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L370", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L427", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L427", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L427", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_process_batch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L449", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L449", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L449", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L449", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_parse_args", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L520", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_parse_args", "target": "namespace", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L520", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L541", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L168", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_normalize_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L185", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L186", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L315", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L341", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L376", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_form_active_set", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L379", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L383", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L405", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L408", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L410", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L429", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L456", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L488", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L503", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L505", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_main", "target": "$graphify-root$_scripts_select_article_extractor_parse_args", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L542", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_main", "target": "$graphify-root$_scripts_select_article_extractor_process_batch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L544", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_34", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_42", "target": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L42", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_63", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L63", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_79", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_91", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_107", "target": "$graphify-root$_scripts_select_article_extractor_normalize_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L107", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_145", "target": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L145", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_165", "target": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L165", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_209", "target": "$graphify-root$_scripts_select_article_extractor_form_active_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L209", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_232", "target": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L232", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_278", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L278", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_289", "target": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L289", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_320", "target": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L320", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_371", "target": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L371", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_428", "target": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L428", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_452", "target": "$graphify-root$_scripts_select_article_extractor_process_batch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L452", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L118"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "unescape", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L122", "receiver": "html"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L125", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L128", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "normalize", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L131", "receiver": "unicodedata"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "lower", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L134", "receiver": "s"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "strip", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L137", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L137", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "findall", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L140", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L166", "receiver": "article_dict"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L167"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L172", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L174", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L176", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L180", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "strip", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L182", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L199"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_form_active_set", "callee": "values", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L215", "receiver": "candidates"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_form_active_set", "callee": "values", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L219", "receiver": "candidates"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "callee": "Counter", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L244", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "callee": "items", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L249", "receiver": "shingle_counts"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "resolve", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L429", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "mkdir", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L430", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "mkstemp", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L432", "receiver": "tempfile"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "dump", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L438", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L438"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "dump", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L440", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L440"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L441", "receiver": "f"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "replace", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L442", "receiver": "os"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "exists", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L444", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "remove", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L445", "receiver": "os"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "resolve", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L456", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "is_file", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L457", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "FileNotFoundError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L458", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "load", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L462", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L462"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L464", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L466"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L467", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L469", "receiver": "data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "list", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L470"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L471", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "resolve", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L477", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "Counter", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L480", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L483"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "append", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L489", "receiver": "selections"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L496", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "ArgumentParser", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L521", "receiver": "argparse"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L524", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "Path", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L524"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L525", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "Path", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L528"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L532", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L533"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L535", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "parse_args", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L538", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L559", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "dumps", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L559", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L563", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L566", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L569", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/29b062645f2d57b34075195586c9d66d1f48f287082dcc75409c9b175e7a30dd.json b/graphify-out/cache/ast/v0.9.47-s2/29b062645f2d57b34075195586c9d66d1f48f287082dcc75409c9b175e7a30dd.json new file mode 100644 index 0000000..8d2cfe7 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/29b062645f2d57b34075195586c9d66d1f48f287082dcc75409c9b175e7a30dd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_select_article_extractor_py", "label": "test_select_article_extractor.py", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "label": "test_normalize_text_empty_and_invalid()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L40", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "label": "test_normalize_text_html_entities_and_tags()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L47", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "label": "test_normalize_text_markdown_links()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L53", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", "label": "test_normalize_text_markdown_images_stripped_while_links_preserved()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L59", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "label": "test_normalize_text_nfkc_unicode_and_punctuation()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L78", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "label": "test_generate_shingles_sliding_window()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L90", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "label": "test_generate_shingles_short_text()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L98", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "label": "test_generate_shingles_empty()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L106", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "label": "test_ct_001_three_candidates_clear_winner()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L115", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "label": "test_ct_002_technical_tie_smallest_shingles()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L128", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "label": "test_ct_003_technical_tie_priority_fallback()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L140", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "label": "test_ct_004_three_candidates_no_consensus()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L161", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "label": "test_ct_005_two_candidates_no_consensus()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L176", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "label": "test_ct_006_single_usable_candidate()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L190", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "label": "test_ct_007_degraded_candidates_only()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L202", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "label": "test_ct_008_all_candidates_unavailable()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L214", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "label": "test_ct_009_small_fragment_loses_due_to_low_coverage()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L226", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "label": "test_ct_010_excessive_boilerplate_loses_due_to_low_support()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L243", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "label": "test_ct_011_partial_content_loses_due_to_low_coverage()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L259", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "label": "test_ct_012_recalculate_existing_selected_extractor()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L272", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_select_article_extractor.py"}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "label": "test_ct_013_empty_articles_list()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "label": "test_ct_014_invalid_json_fails_atomically()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L317", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "label": "test_integration_reference_file()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L334", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "label": "test_article_1_regression_technical_tie_markdown_images()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L363", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "label": "test_integration_large_batch_determinism()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L397", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "label": "test_integration_pipeline_downstream_consumer()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L446", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "label": "test_e2e_cli_subprocess_real_execution()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L483", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "label": "test_e2e_cli_subprocess_default_naming()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L520", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "label": "test_e2e_cli_subprocess_invalid_input()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L548", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "label": "test_e2e_cli_subprocess_missing_file()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L561", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_1", "label": "Su\u00edte de Testes Automatizados para o Seletor Determin\u00edstico de Extrator. Cobre\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_60", "label": "Garante que marca\u00e7\u00e3o de imagem Markdown ![alt](url) seja descartada e link\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L60"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_116", "label": "CT-001: Tr\u00eas candidatos com consenso e um vencedor claro -> Selecionar o maior\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L116"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_129", "label": "CT-002: Dois ou mais candidatos dentro de 0,03 do maior score -> Selecionar o\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L129"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_141", "label": "CT-003: Empate t\u00e9cnico e mesma quantidade de shingles -> Aplicar prioridade\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L141"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_162", "label": "CT-004: Tr\u00eas candidatos sem consenso -> Selecionar a quantidade mediana de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L162"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_177", "label": "CT-005: Dois candidatos sem consenso -> Selecionar a maior quantidade de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L177"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_191", "label": "CT-006: Somente um candidato utiliz\u00e1vel -> Selecionar esse candidato.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L191"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_203", "label": "CT-007: Nenhum utiliz\u00e1vel, mas existe candidato degradado -> Executar o\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L203"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_215", "label": "CT-008: Todos os candidatos indispon\u00edveis -> Selecionar newspaper4k.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L215"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_227", "label": "CT-009: Readability retorna apenas um fragmento pequeno enquanto os outros\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L227"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_244", "label": "CT-010: Um candidato cont\u00e9m o conte\u00fado comum e muito conte\u00fado excedente ->\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L244"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_260", "label": "CT-011: Um candidato cont\u00e9m somente parte do conte\u00fado comum -> Perde cobertura\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L260"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_273", "label": "CT-012: A entrada j\u00e1 cont\u00e9m selected_extractor -> Recalcular e substituir\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L273"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_299", "label": "CT-013: articles est\u00e1 vazio -> Gerar sa\u00edda v\u00e1lida com articles vazio.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L299"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_318", "label": "CT-014: JSON inv\u00e1lido -> N\u00e3o gerar sa\u00edda.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L318"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_335", "label": "Testa o processamento em lote completo sobre o arquivo real\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L335"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_364", "label": "Teste de regress\u00e3o para o Artigo 1 (Los puntajes de River vs. Independiente\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L364"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_398", "label": "Gera um lote de 100 artigos sint\u00e9ticos e verifica 100% de repetibilidade\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L398"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_447", "label": "Testa a integra\u00e7\u00e3o end-to-end do pipeline downstream: L\u00ea o JSON enriquecido com\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L447"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_484", "label": "E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L484"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_521", "label": "E2E: Executa CLI sem a flag -o e valida cria\u00e7\u00e3o autom\u00e1tica de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L521"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_549", "label": "E2E: Executa CLI com JSON inv\u00e1lido e valida c\u00f3digo de sa\u00edda e erro no stderr.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L549"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_562", "label": "E2E: Executa CLI com arquivo inexistente e valida c\u00f3digo 1 e mensagem no stderr.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L562"}], "edges": [{"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "tempfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "scripts_select_article_extractor", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L47", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L53", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L59", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L98", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L115", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L128", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L140", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L161", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L176", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L190", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L202", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L214", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L226", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L243", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L259", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L272", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L272", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L317", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L317", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L334", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L334", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L363", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L397", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L397", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L446", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L446", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L483", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L483", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L520", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L520", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L548", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L548", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L561", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L289", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L305", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L336", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L370", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L452", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L485", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L536", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L553", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L563", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_1", "target": "$graphify-root$_tests_test_select_article_extractor_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_60", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L60", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_116", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L116", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_129", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L129", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_141", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L141", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_162", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L162", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_177", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L177", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_191", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L191", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_203", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L203", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_215", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L215", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_227", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L227", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_244", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L244", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_260", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L260", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_273", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L273", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_299", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L299", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_318", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L318", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_335", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L335", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_364", "target": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L364", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_398", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L398", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_447", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L447", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_484", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L484", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_521", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L521", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_549", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L549", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_562", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L562", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L49", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_images_stripped_while_links_preserved", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L67", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L81", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L92", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L101", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L107", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L123", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L136", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L148", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L157", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L171", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L197", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L210", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L221", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L238", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L255", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L268", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L286", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L286", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L288", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L290", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L293", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L293"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L302", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L302", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L304", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L306", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L309", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L309"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L320", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "raises", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L323", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L323"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L324", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L326", "receiver": "expected_out"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L337", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L338", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L341", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L345", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L348", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L348"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L371", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L372", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L375", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L375"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_article_1_regression_technical_tie_markdown_images", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L378", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "append", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L425", "receiver": "articles"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L429", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L429", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L434", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L435", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L453", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L454", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L457", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L460", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L460"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L474"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "strip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L475", "receiver": "chosen_text"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L486", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L487", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L490", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L495", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L503", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L506", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "loads", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L509", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L533", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L533", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L536", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L539", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L541", "receiver": "expected_out"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L544", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L544"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L551", "receiver": "invalid_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L553", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L556", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L563", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L566", "receiver": "subprocess"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f.json b/graphify-out/cache/ast/v0.9.47-s2/2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f.json new file mode 100644 index 0000000..5927df9 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/2baf2f08897f9e80d43db55aa178ac515e3f012fac265e43a7fb679eb4c01f1f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "label": "plan.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "label": "Implementation Plan: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_summary", "label": "Summary", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L9"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_technical_context", "label": "Technical Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L15"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_constitution_check", "label": "Constitution Check", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L29"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_project_structure", "label": "Project Structure", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L43"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_documentation_this_feature", "label": "Documentation (this feature)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L45"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_source_code_layout", "label": "Source Code Layout", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L61"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_phases", "label": "Implementation Phases", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L79"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_phase_0_outline_research_completed", "label": "Phase 0: Outline & Research *(Completed)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L81"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_phase_1_design_contracts_completed", "label": "Phase 1: Design & Contracts *(Completed)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L87"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_plan_phase_2_tasks_execution_next_step_via_speckit_tasks", "label": "Phase 2: Tasks & Execution *(Next Step via `/speckit-tasks`)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L92"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_technical_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_constitution_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L29", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_project_structure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L43", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_project_structure", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_documentation_this_feature", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L45", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_project_structure", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_source_code_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L61", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_plan_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_phases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_phases", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_phase_0_outline_research_completed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L81", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L85", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/research.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_phases", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_phase_1_design_contracts_completed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L87", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L88", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/data-model.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L89", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L90", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/quickstart.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_plan_implementation_phases", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_phase_2_tasks_execution_next_step_via_speckit_tasks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/plan.md", "source_location": "L92", "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/33763f18c72242a3b8ddc296b18cc0c7a35c490165a78cd21d021263d43add3b.json b/graphify-out/cache/ast/v0.9.47-s2/33763f18c72242a3b8ddc296b18cc0c7a35c490165a78cd21d021263d43add3b.json new file mode 100644 index 0000000..c440a31 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/33763f18c72242a3b8ddc296b18cc0c7a35c490165a78cd21d021263d43add3b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "label": "quickstart.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "label": "Quickstart: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_1_pr\u00e9_requisitos", "label": "1. Pr\u00e9-requisitos", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "label": "2. Execu\u00e7\u00e3o R\u00e1pida via CLI", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_1_selecionar_o_melhor_extrator_para_uma_extra\u00e7\u00e3o_existente", "label": "Cen\u00e1rio 1: Selecionar o melhor extrator para uma extra\u00e7\u00e3o existente", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L16"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_2_especificar_caminho_de_sa\u00edda_customizado_e_modo_verboso", "label": "Cen\u00e1rio 2: Especificar caminho de sa\u00edda customizado e modo verboso", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L24"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_3_execu\u00e7\u00e3o_dos_testes_automatizados", "label": "3. Execu\u00e7\u00e3o dos Testes Automatizados", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L33"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_4_valida\u00e7\u00e3o_program\u00e1tica_uso_como_m\u00f3dulo_python", "label": "4. Valida\u00e7\u00e3o Program\u00e1tica / Uso como M\u00f3dulo Python", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L43"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_1_pr\u00e9_requisitos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_1_selecionar_o_melhor_extrator_para_uma_extra\u00e7\u00e3o_existente", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_2_especificar_caminho_de_sa\u00edda_customizado_e_modo_verboso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_3_execu\u00e7\u00e3o_dos_testes_automatizados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_4_valida\u00e7\u00e3o_program\u00e1tica_uso_como_m\u00f3dulo_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L43", "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/391a52f77897cbbe1a555fcf94d432c1b7669343ecbf3b8336a941e5c10931d5.json b/graphify-out/cache/ast/v0.9.47-s2/391a52f77897cbbe1a555fcf94d432c1b7669343ecbf3b8336a941e5c10931d5.json new file mode 100644 index 0000000..769ea7b --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/391a52f77897cbbe1a555fcf94d432c1b7669343ecbf3b8336a941e5c10931d5.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": "L44"}, {"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": "L55"}, {"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": "L57"}, {"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": "L70"}, {"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": "L76"}, {"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": "L86"}, {"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": "L88"}, {"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": "L94"}, {"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": "L115"}, {"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": "L124"}, {"id": "$graphify-root$_readme_exemplo_de_ecp_snapshot_ecp_sample_json", "label": "Exemplo de ECP Snapshot (`ecp_sample.json`):", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L126"}, {"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": "L148"}, {"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": "L163"}, {"id": "$graphify-root$_readme_o_que_\u00e9_e_como_funciona_165", "label": "O que \u00e9 e Como Funciona", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L165"}, {"id": "$graphify-root$_readme_diferenciais_t\u00e9cnicos", "label": "Diferenciais T\u00e9cnicos", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L169"}, {"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": "L177"}, {"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": "L190"}, {"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": "L205"}, {"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": "L207"}, {"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": "L217"}, {"id": "$graphify-root$_readme_exemplos_de_uso", "label": "Exemplos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L228"}, {"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": "L243"}, {"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": "L245"}, {"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": "L274"}, {"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": "L286"}, {"id": "$graphify-root$_readme_argumentos_e_flags_cli_298", "label": "Argumentos e Flags CLI", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L298"}, {"id": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_307", "label": "Exemplos Pr\u00e1ticos de Uso", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L307"}, {"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": "L309"}, {"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": "L315"}, {"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": "L339"}, {"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": "L356"}, {"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": "L388"}, {"id": "$graphify-root$_readme_licen\u00e7a", "label": "\ud83d\udcc4 Licen\u00e7a", "file_type": "document", "node_kind": "heading", "source_file": "README.md", "source_location": "L415"}], "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": "L44", "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": "L55", "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": "L57", "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": "L70", "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": "L76", "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": "L86", "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": "L88", "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": "L94", "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": "L115", "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": "L124", "weight": 1.0}, {"source": "$graphify-root$_readme_formato_do_ecp_snapshot_e_markdown", "target": "$graphify-root$_readme_exemplo_de_ecp_snapshot_ecp_sample_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L126", "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": "L148", "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": "L163", "weight": 1.0}, {"source": "$graphify-root$_readme_2_extrator_de_manchetes_do_google_news", "target": "$graphify-root$_readme_o_que_\u00e9_e_como_funciona_165", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L165", "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": "L169", "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": "L177", "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": "L190", "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": "L205", "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": "L207", "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": "L217", "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": "L228", "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": "L243", "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": "L245", "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": "L274", "weight": 1.0}, {"source": "$graphify-root$_readme_md", "target": "$graphify-root$_url_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L279", "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": "L286", "weight": 1.0}, {"source": "$graphify-root$_readme_4_seletor_determin\u00edstico_de_conte\u00fado_de_artigos", "target": "$graphify-root$_readme_argumentos_e_flags_cli_298", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L298", "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_307", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L307", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_307", "target": "$graphify-root$_readme_1_execu\u00e7\u00e3o_padr\u00e3o_autom\u00e1tica", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L309", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_307", "target": "$graphify-root$_readme_2_execu\u00e7\u00e3o_com_modo_verboso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L315", "weight": 1.0}, {"source": "$graphify-root$_readme_exemplos_pr\u00e1ticos_de_uso_307", "target": "$graphify-root$_readme_3_uso_program\u00e1tico_como_m\u00f3dulo_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L339", "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": "L356", "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": "L388", "weight": 1.0}, {"source": "$graphify-root$_readme_textnlpclassifierapp", "target": "$graphify-root$_readme_licen\u00e7a", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L415", "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/412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887.json b/graphify-out/cache/ast/v0.9.47-s2/412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887.json new file mode 100644 index 0000000..4851d8b --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/412b7a4261ea8c52655286c5b5761cc3800dfedf827289589380b700a4c40887.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_md", "label": "tasks.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "label": "Tasks: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_1_setup_shared_infrastructure", "label": "Phase 1: Setup (Shared Infrastructure)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_2_foundational_data_structures_normalization_engine", "label": "Phase 2: Foundational (Data Structures & Normalization Engine)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L15"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", "label": "Phase 3: User Story 1 - Deterministic Selection with Text Consensus (Priority: P1) \ud83c\udfaf MVP", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L30"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tests_for_user_story_1", "label": "Tests for User Story 1 \ud83e\uddea", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L36"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_for_user_story_1", "label": "Implementation for User Story 1", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L41"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", "label": "Phase 4: User Story 2 - Resilient Decision Under Disagreement or Degradation (Priority: P2)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L50"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tests_for_user_story_2", "label": "Tests for User Story 2 \ud83e\uddea", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L56"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_for_user_story_2", "label": "Implementation for User Story 2", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L61"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", "label": "Phase 5: User Story 3 - Non-Destructive JSON Batch Processing (Priority: P3)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L71"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tests_for_user_story_3", "label": "Tests for User Story 3 \ud83e\uddea", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L77"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_for_user_story_3", "label": "Implementation for User Story 3", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L82"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_6_polish_cross_cutting_concerns", "label": "Phase 6: Polish & Cross-Cutting Concerns", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L91"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_dependencies_execution_order", "label": "Dependencies & Execution Order", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L100"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_parallel_opportunities", "label": "Parallel Opportunities", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L129"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_strategy", "label": "Implementation Strategy", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L138"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_mvp_first_phases_1_2_3", "label": "MVP First (Phases 1, 2 & 3)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L140"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_tasks_incremental_delivery_phases_4_5_6", "label": "Incremental Delivery (Phases 4, 5 & 6)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L145"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_plan_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/plan.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_1_setup_shared_infrastructure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_2_foundational_data_structures_normalization_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tests_for_user_story_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L36", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_3_user_story_1_deterministic_selection_with_text_consensus_priority_p1_mvp", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_for_user_story_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L50", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tests_for_user_story_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_4_user_story_2_resilient_decision_under_disagreement_or_degradation_priority_p2", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_for_user_story_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L61", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L71", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tests_for_user_story_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L77", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_5_user_story_3_non_destructive_json_batch_processing_priority_p3", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_for_user_story_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L82", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_phase_6_polish_cross_cutting_concerns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_dependencies_execution_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L100", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_parallel_opportunities", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L129", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_tasks_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_strategy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L138", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_strategy", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_mvp_first_phases_1_2_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L140", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_tasks_implementation_strategy", "target": "$graphify-root$_specs_004_deterministic_content_selection_tasks_incremental_delivery_phases_4_5_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/tasks.md", "source_location": "L145", "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/5070b45b71c7501f2eeb041c4c5e8c9ea36bfd0386bad2bfd0e451087d5f7dec.json b/graphify-out/cache/ast/v0.9.47-s2/5070b45b71c7501f2eeb041c4c5e8c9ea36bfd0386bad2bfd0e451087d5f7dec.json new file mode 100644 index 0000000..9a3a18d --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/5070b45b71c7501f2eeb041c4c5e8c9ea36bfd0386bad2bfd0e451087d5f7dec.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "label": "spec.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "label": "Feature Specification: Deterministic Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "label": "User Scenarios & Testing *(mandatory)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L8"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_1_deterministic_selection_with_text_consensus_priority_p1", "label": "User Story 1 - Deterministic Selection with Text Consensus (Priority: P1)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L10"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_2_resilient_decision_under_total_disagreement_or_degradation_priority_p2", "label": "User Story 2 - Resilient Decision Under Total Disagreement or Degradation (Priority: P2)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_3_non_destructive_json_batch_processing_priority_p3", "label": "User Story 3 - Non-Destructive JSON Batch Processing (Priority: P3)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L41"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_edge_cases", "label": "Edge Cases", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L56"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "label": "Requirements *(mandatory)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L65"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_functional_requirements", "label": "Functional Requirements", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L67"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_key_entities_include_if_feature_involves_data", "label": "Key Entities *(include if feature involves data)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L110"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_success_criteria_mandatory", "label": "Success Criteria *(mandatory)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L117"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_measurable_outcomes", "label": "Measurable Outcomes", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L119"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_assumptions", "label": "Assumptions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L128"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_1_deterministic_selection_with_text_consensus_priority_p1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_2_resilient_decision_under_total_disagreement_or_degradation_priority_p2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_3_non_destructive_json_batch_processing_priority_p3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_edge_cases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_functional_requirements", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L67", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_key_entities_include_if_feature_involves_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L110", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_success_criteria_mandatory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L117", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_success_criteria_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_measurable_outcomes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L119", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_assumptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L128", "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/5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a.json b/graphify-out/cache/ast/v0.9.47-s2/5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a.json new file mode 100644 index 0000000..ed75126 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/5773f5110269524eda7750f0d154d16e0bb29990fac51f57f76b42702789de8a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_md", "label": "data-model.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", "label": "Data Model: Deterministic Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_1_domain_entities_value_types", "label": "1. Domain Entities & Value Types", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "label": "2. Entity Descriptions & Fields", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L64"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_extractorname_enum_literal", "label": "`ExtractorName` (Enum / Literal)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L66"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_candidatestatus_enum", "label": "`CandidateStatus` (Enum)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L72"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_extractorcandidate_dataclass", "label": "`ExtractorCandidate` (Dataclass)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L78"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_articleselectionresult_dataclass", "label": "`ArticleSelectionResult` (Dataclass)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L96"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_batchprocessingresult_dataclass", "label": "`BatchProcessingResult` (Dataclass)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L110"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", "label": "3. JSON Schema Mapping", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L123"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_entrada", "label": "Entrada", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L125"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_data_model_sa\u00edda", "label": "Sa\u00edda", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L132"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_1_domain_entities_value_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L64", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_extractorname_enum_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L66", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_candidatestatus_enum", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L72", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_extractorcandidate_dataclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_articleselectionresult_dataclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L96", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_2_entity_descriptions_fields", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_batchprocessingresult_dataclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L110", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_data_model_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L123", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_entrada", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L125", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_data_model_3_json_schema_mapping", "target": "$graphify-root$_specs_004_deterministic_content_selection_data_model_sa\u00edda", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/data-model.md", "source_location": "L132", "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/589a226b68c671e8d3a7fd64ec7de98560eb6711c9cd255ee65989007b643d1c.json b/graphify-out/cache/ast/v0.9.47-s2/589a226b68c671e8d3a7fd64ec7de98560eb6711c9cd255ee65989007b643d1c.json new file mode 100644 index 0000000..fe5eb9e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/589a226b68c671e8d3a7fd64ec7de98560eb6711c9cd255ee65989007b643d1c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_md", "label": "cli-contract.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "label": "CLI Interface Contract: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_1_command_syntax", "label": "1. Command Syntax", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_2_arguments_and_flags", "label": "2. Arguments and Flags", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L15"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_3_standard_streams_i_o", "label": "3. Standard Streams (I/O)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L26"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_4_exit_codes", "label": "4. Exit Codes", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L48"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_1_command_syntax", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_2_arguments_and_flags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_3_standard_streams_i_o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_4_exit_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L48", "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/6ad8bcc784b3279a1e471fd3402387dfd33f79101f157b6cbccbcfabc4ec8775.json b/graphify-out/cache/ast/v0.9.47-s2/6ad8bcc784b3279a1e471fd3402387dfd33f79101f157b6cbccbcfabc4ec8775.json new file mode 100644 index 0000000..40c5453 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/6ad8bcc784b3279a1e471fd3402387dfd33f79101f157b6cbccbcfabc4ec8775.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "label": "research.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "label": "Research & Architectural Decisions: Deterministic Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "label": "1. Text Normalization Pipeline", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L9"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L12"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L21"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_alternatives_considered", "label": "Alternatives Considered", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "label": "2. 5-Token Shingles & Consensus Metrics", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L31"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context_33", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L33"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_36", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L36"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_50", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L50"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "label": "3. Regras de Decis\u00e3o, Empate T\u00e9cnico e Desempate Hier\u00e1rquico", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L56"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context_58", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L58"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_61", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L61"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_83", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L83"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "label": "4. Estrat\u00e9gia de I/O N\u00e3o Destrutiva e Escrita At\u00f4mica", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L88"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_context_90", "label": "Context", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L90"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_93", "label": "Decisions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L93"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_105", "label": "Rationale", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L105"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_url_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_1_text_normalization_pipeline", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_alternatives_considered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context_33", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_36", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L36", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_2_5_token_shingles_consensus_metrics", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_50", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L50", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context_58", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L58", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_61", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L61", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_3_regras_de_decis\u00e3o_empate_t\u00e9cnico_e_desempate_hier\u00e1rquico", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_83", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L83", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_research_architectural_decisions_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L88", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_context_90", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_decisions_93", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L93", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_research_4_estrat\u00e9gia_de_i_o_n\u00e3o_destrutiva_e_escrita_at\u00f4mica", "target": "$graphify-root$_specs_004_deterministic_content_selection_research_rationale_105", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/research.md", "source_location": "L105", "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/6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4.json b/graphify-out/cache/ast/v0.9.47-s2/6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4.json new file mode 100644 index 0000000..fe5eb9e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/6e6d43cae2405e648ff02f937b911d61e8efbd1f34b1f608feed7166f6c241f4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_md", "label": "cli-contract.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "label": "CLI Interface Contract: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_1_command_syntax", "label": "1. Command Syntax", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_2_arguments_and_flags", "label": "2. Arguments and Flags", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L15"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_3_standard_streams_i_o", "label": "3. Standard Streams (I/O)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L26"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_4_exit_codes", "label": "4. Exit Codes", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L48"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_1_command_syntax", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_2_arguments_and_flags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_3_standard_streams_i_o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_cli_interface_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_cli_contract_4_exit_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/cli-contract.md", "source_location": "L48", "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/7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303.json b/graphify-out/cache/ast/v0.9.47-s2/7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303.json new file mode 100644 index 0000000..8d3647f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/7f0baab75874dd05fc9fc891aefd4b4012b5ad82b2ed1738261ec6cb15d9f303.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "label": "spec.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "label": "Feature Specification: Deterministic Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "label": "User Scenarios & Testing *(mandatory)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L8"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_1_deterministic_selection_with_text_consensus_priority_p1", "label": "User Story 1 - Deterministic Selection with Text Consensus (Priority: P1)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L10"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_2_resilient_decision_under_total_disagreement_or_degradation_priority_p2", "label": "User Story 2 - Resilient Decision Under Total Disagreement or Degradation (Priority: P2)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_3_non_destructive_json_batch_processing_priority_p3", "label": "User Story 3 - Non-Destructive JSON Batch Processing (Priority: P3)", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L41"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_edge_cases", "label": "Edge Cases", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L56"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "label": "Requirements *(mandatory)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L65"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_functional_requirements", "label": "Functional Requirements", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L67"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_key_entities_include_if_feature_involves_data", "label": "Key Entities *(include if feature involves data)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L111"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_success_criteria_mandatory", "label": "Success Criteria *(mandatory)*", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L118"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_measurable_outcomes", "label": "Measurable Outcomes", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L120"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_spec_assumptions", "label": "Assumptions", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L129"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_1_deterministic_selection_with_text_consensus_priority_p1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_2_resilient_decision_under_total_disagreement_or_degradation_priority_p2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_story_3_non_destructive_json_batch_processing_priority_p3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_user_scenarios_testing_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_edge_cases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L56", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L65", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_functional_requirements", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L67", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_url_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L84", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_requirements_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_key_entities_include_if_feature_involves_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L111", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_success_criteria_mandatory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L118", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_success_criteria_mandatory", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_measurable_outcomes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L120", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_spec_feature_specification_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_assumptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/spec.md", "source_location": "L129", "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/8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56.json b/graphify-out/cache/ast/v0.9.47-s2/8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56.json new file mode 100644 index 0000000..b416dae --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/8a7f723658366b3ba5e135483200453bbbe100152977f488f39161c537903f56.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_md", "label": "requirements.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", "label": "Specification Quality Checklist: Deterministic Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_content_quality", "label": "Content Quality", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_requirement_completeness", "label": "Requirement Completeness", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_feature_readiness", "label": "Feature Readiness", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L25"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_notes", "label": "Notes", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L32"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L5", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_content_quality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_requirement_completeness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_feature_readiness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_specification_quality_checklist_deterministic_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_requirements_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/requirements.md", "source_location": "L32", "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/937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241.json b/graphify-out/cache/ast/v0.9.47-s2/937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241.json new file mode 100644 index 0000000..6d831a7 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/937ec7535aa3602a811212d196f441aff79338c4358b881c1bc8f7844b4f8241.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_md", "label": "deterministic-selection.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "label": "Deterministic Content Selection Checklist: End-to-End Requirements Quality", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_text_normalization_tokenization_quality", "label": "Text Normalization & Tokenization Quality", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L13"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_shingles_consensus_metric_formulation", "label": "Shingles & Consensus Metric Formulation", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L20"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_decision_tie_breaking_hierarchy", "label": "Decision & Tie-Breaking Hierarchy", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L26"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_candidate_state_transitions_resilience", "label": "Candidate State Transitions & Resilience", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L33"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_json_schema_integrity_atomic_i_o", "label": "JSON Schema Integrity & Atomic I/O", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L39"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_notes", "label": "Notes", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L48"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L5", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_text_normalization_tokenization_quality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_shingles_consensus_metric_formulation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_decision_tie_breaking_hierarchy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_candidate_state_transitions_resilience", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_json_schema_integrity_atomic_i_o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L39", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_deterministic_content_selection_checklist_end_to_end_requirements_quality", "target": "$graphify-root$_specs_004_deterministic_content_selection_checklists_deterministic_selection_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/checklists/deterministic-selection.md", "source_location": "L48", "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/a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b.json b/graphify-out/cache/ast/v0.9.47-s2/a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b.json new file mode 100644 index 0000000..fe0de0a --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/a337f19aa87b82ef5ee4f04bae19833331de5c49ee83bca2cf1f542eb893ae0b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_docs_prd_deterministic_content_selection_md", "label": "prd_deterministic_content_selection.md", "file_type": "document", "node_kind": "page", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L1"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "label": "PRD \u2014 Sele\u00e7\u00e3o determin\u00edstica da biblioteca de extra\u00e7\u00e3o de conte\u00fado", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L1"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_1_contexto", "label": "1. Contexto", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L7"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_2_objetivo", "label": "2. Objetivo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L13"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_3_escopo", "label": "3. Escopo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L17"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_3_1_inclu\u00eddo", "label": "3.1 Inclu\u00eddo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L19"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_3_2_fora_do_escopo", "label": "3.2 Fora do escopo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L28"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_4_premissas", "label": "4. Premissas", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L39"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_5_entrada", "label": "5. Entrada", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L46"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_5_1_arquivo", "label": "5.1 Arquivo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L48"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_5_2_conte\u00fados_comparados", "label": "5.2 Conte\u00fados comparados", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L54"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_5_3_estado_de_um_candidato", "label": "5.3 Estado de um candidato", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L64"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_6_sa\u00edda", "label": "6. Sa\u00edda", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L76"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_6_1_arquivo", "label": "6.1 Arquivo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L78"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_6_2_altera\u00e7\u00e3o_permitida", "label": "6.2 Altera\u00e7\u00e3o permitida", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L86"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_6_3_preserva\u00e7\u00e3o_da_entrada", "label": "6.3 Preserva\u00e7\u00e3o da entrada", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L100"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "label": "7. Algoritmo determin\u00edstico de sele\u00e7\u00e3o", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L108"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_1_formar_o_conjunto_ativo", "label": "7.1 Formar o conjunto ativo", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L110"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_2_normalizar_os_conte\u00fados", "label": "7.2 Normalizar os conte\u00fados", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L120"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_3_gerar_shingles", "label": "7.3 Gerar shingles", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L137"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_4_construir_o_consenso", "label": "7.4 Construir o consenso", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L144"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_5_selecionar_quando_existe_consenso", "label": "7.5 Selecionar quando existe consenso", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L164"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_6_selecionar_quando_n\u00e3o_existe_consenso", "label": "7.6 Selecionar quando n\u00e3o existe consenso", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L178"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_7_7_gravar_a_escolha", "label": "7.7 Gravar a escolha", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L190"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_8_requisitos_funcionais", "label": "8. Requisitos funcionais", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L194"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_9_tratamento_de_erros", "label": "9. Tratamento de erros", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L212"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_10_requisitos_n\u00e3o_funcionais", "label": "10. Requisitos n\u00e3o funcionais", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L227"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_11_crit\u00e9rios_de_aceite", "label": "11. Crit\u00e9rios de aceite", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L237"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_12_casos_obrigat\u00f3rios_de_teste", "label": "12. Casos obrigat\u00f3rios de teste", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L252"}, {"id": "$graphify-root$_docs_prd_deterministic_content_selection_13_definition_of_done", "label": "13. Definition of Done", "file_type": "document", "node_kind": "heading", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L271"}], "edges": [{"source": "$graphify-root$_docs_prd_deterministic_content_selection_md", "target": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_1_contexto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_2_objetivo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_3_escopo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_3_escopo", "target": "$graphify-root$_docs_prd_deterministic_content_selection_3_1_inclu\u00eddo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_3_escopo", "target": "$graphify-root$_docs_prd_deterministic_content_selection_3_2_fora_do_escopo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L28", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_4_premissas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L39", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_5_entrada", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L46", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_5_entrada", "target": "$graphify-root$_docs_prd_deterministic_content_selection_5_1_arquivo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L48", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_5_entrada", "target": "$graphify-root$_docs_prd_deterministic_content_selection_5_2_conte\u00fados_comparados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L54", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_5_entrada", "target": "$graphify-root$_docs_prd_deterministic_content_selection_5_3_estado_de_um_candidato", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L64", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_6_sa\u00edda", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L76", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_6_sa\u00edda", "target": "$graphify-root$_docs_prd_deterministic_content_selection_6_1_arquivo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_6_sa\u00edda", "target": "$graphify-root$_docs_prd_deterministic_content_selection_6_2_altera\u00e7\u00e3o_permitida", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L86", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_6_sa\u00edda", "target": "$graphify-root$_docs_prd_deterministic_content_selection_6_3_preserva\u00e7\u00e3o_da_entrada", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L100", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L108", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_1_formar_o_conjunto_ativo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L110", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_2_normalizar_os_conte\u00fados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L120", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_3_gerar_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L137", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_4_construir_o_consenso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L144", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_5_selecionar_quando_existe_consenso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_6_selecionar_quando_n\u00e3o_existe_consenso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L178", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_7_algoritmo_determin\u00edstico_de_sele\u00e7\u00e3o", "target": "$graphify-root$_docs_prd_deterministic_content_selection_7_7_gravar_a_escolha", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L190", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_8_requisitos_funcionais", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L194", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_9_tratamento_de_erros", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L212", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_10_requisitos_n\u00e3o_funcionais", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L227", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_11_crit\u00e9rios_de_aceite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L237", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_12_casos_obrigat\u00f3rios_de_teste", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L252", "weight": 1.0}, {"source": "$graphify-root$_docs_prd_deterministic_content_selection_prd_sele\u00e7\u00e3o_determin\u00edstica_da_biblioteca_de_extra\u00e7\u00e3o_de_conte\u00fado", "target": "$graphify-root$_docs_prd_deterministic_content_selection_13_definition_of_done", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/prd_deterministic_content_selection.md", "source_location": "L271", "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/bc7efac197e04013ed37c20c66affa150d39296c6712f97d4095ad6075352e15.json b/graphify-out/cache/ast/v0.9.47-s2/bc7efac197e04013ed37c20c66affa150d39296c6712f97d4095ad6075352e15.json new file mode 100644 index 0000000..3ae6f5f --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/bc7efac197e04013ed37c20c66affa150d39296c6712f97d4095ad6075352e15.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_select_article_extractor_py", "label": "test_select_article_extractor.py", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "label": "test_normalize_text_empty_and_invalid()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L40", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "label": "test_normalize_text_html_entities_and_tags()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L47", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "label": "test_normalize_text_markdown_links()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L53", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "label": "test_normalize_text_nfkc_unicode_and_punctuation()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L59", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "label": "test_generate_shingles_sliding_window()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L71", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "label": "test_generate_shingles_short_text()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L79", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "label": "test_generate_shingles_empty()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L87", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "label": "test_ct_001_three_candidates_clear_winner()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L96", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "label": "test_ct_002_technical_tie_smallest_shingles()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L109", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "label": "test_ct_003_technical_tie_priority_fallback()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L121", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "label": "test_ct_004_three_candidates_no_consensus()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L142", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "label": "test_ct_005_two_candidates_no_consensus()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L157", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "label": "test_ct_006_single_usable_candidate()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L171", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "label": "test_ct_007_degraded_candidates_only()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L183", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "label": "test_ct_008_all_candidates_unavailable()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L195", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "label": "test_ct_009_small_fragment_loses_due_to_low_coverage()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L207", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "label": "test_ct_010_excessive_boilerplate_loses_due_to_low_support()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L224", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "label": "test_ct_011_partial_content_loses_due_to_low_coverage()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L240", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "label": "test_ct_012_recalculate_existing_selected_extractor()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L253", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_select_article_extractor.py"}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "label": "test_ct_013_empty_articles_list()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L279", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "label": "test_ct_014_invalid_json_fails_atomically()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "label": "test_integration_reference_file()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L315", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "label": "test_integration_large_batch_determinism()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L337", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "label": "test_integration_pipeline_downstream_consumer()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L386", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "label": "test_e2e_cli_subprocess_real_execution()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L423", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "label": "test_e2e_cli_subprocess_default_naming()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L460", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "label": "test_e2e_cli_subprocess_invalid_input()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L488", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "label": "test_e2e_cli_subprocess_missing_file()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L501", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_1", "label": "Su\u00edte de Testes Automatizados para o Seletor Determin\u00edstico de Extrator. Cobre\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_97", "label": "CT-001: Tr\u00eas candidatos com consenso e um vencedor claro -> Selecionar o maior\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L97"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_110", "label": "CT-002: Dois ou mais candidatos dentro de 0,03 do maior score -> Selecionar o\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L110"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_122", "label": "CT-003: Empate t\u00e9cnico e mesma quantidade de shingles -> Aplicar prioridade\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L122"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_143", "label": "CT-004: Tr\u00eas candidatos sem consenso -> Selecionar a quantidade mediana de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L143"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_158", "label": "CT-005: Dois candidatos sem consenso -> Selecionar a maior quantidade de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L158"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_172", "label": "CT-006: Somente um candidato utiliz\u00e1vel -> Selecionar esse candidato.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L172"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_184", "label": "CT-007: Nenhum utiliz\u00e1vel, mas existe candidato degradado -> Executar o\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L184"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_196", "label": "CT-008: Todos os candidatos indispon\u00edveis -> Selecionar newspaper4k.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L196"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_208", "label": "CT-009: Readability retorna apenas um fragmento pequeno enquanto os outros\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L208"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_225", "label": "CT-010: Um candidato cont\u00e9m o conte\u00fado comum e muito conte\u00fado excedente ->\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L225"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_241", "label": "CT-011: Um candidato cont\u00e9m somente parte do conte\u00fado comum -> Perde cobertura\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L241"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_254", "label": "CT-012: A entrada j\u00e1 cont\u00e9m selected_extractor -> Recalcular e substituir\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L254"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_280", "label": "CT-013: articles est\u00e1 vazio -> Gerar sa\u00edda v\u00e1lida com articles vazio.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L280"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_299", "label": "CT-014: JSON inv\u00e1lido -> N\u00e3o gerar sa\u00edda.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L299"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_316", "label": "Testa o processamento em lote completo sobre o arquivo real\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L316"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_338", "label": "Gera um lote de 100 artigos sint\u00e9ticos e verifica 100% de repetibilidade\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L338"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_387", "label": "Testa a integra\u00e7\u00e3o end-to-end do pipeline downstream: L\u00ea o JSON enriquecido com\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L387"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_424", "label": "E2E: Executa scripts/select_article_extractor.py como subprocesso real na linha\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L424"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_461", "label": "E2E: Executa CLI sem a flag -o e valida cria\u00e7\u00e3o autom\u00e1tica de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L461"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_489", "label": "E2E: Executa CLI com JSON inv\u00e1lido e valida c\u00f3digo de sa\u00edda e erro no stderr.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L489"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_502", "label": "E2E: Executa CLI com arquivo inexistente e valida c\u00f3digo 1 e mensagem no stderr.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L502"}], "edges": [{"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "tempfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "scripts_select_article_extractor", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L47", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L53", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L59", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L71", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L87", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L96", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L109", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L121", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L142", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L157", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L171", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L183", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L195", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L207", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L224", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L240", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L253", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L253", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L279", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L279", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L315", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L315", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L337", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L337", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L386", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L386", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L423", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L423", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L460", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L460", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L488", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L488", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L501", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L270", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L286", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L317", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L392", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L425", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L476", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L493", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L503", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_1", "target": "$graphify-root$_tests_test_select_article_extractor_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_97", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L97", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_110", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L110", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_122", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L122", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_143", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L143", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_158", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L158", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_172", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L172", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_184", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L184", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_196", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L196", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_208", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L208", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_225", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L225", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_241", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L241", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_254", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L254", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_280", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_299", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L299", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_316", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L316", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_338", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L338", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_387", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L387", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_424", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L424", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_461", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L461", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_489", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L489", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_502", "target": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L502", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L43", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L44", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L49", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L55", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L62", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L73", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L82", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L88", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L104", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L117", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L129", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L138", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L152", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L166", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L178", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L191", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L202", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L219", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L236", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L249", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L267", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L267", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L269", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L271", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L274", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L274"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L283", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L283", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L285", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L287", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L290", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L290"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L301", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "raises", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L304", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L304"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L305", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L307", "receiver": "expected_out"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L318", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L319", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L322", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L326", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L329", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L329"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "append", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L365", "receiver": "articles"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L369", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L369", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L374", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_large_batch_determinism", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L375", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L393", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L394", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L397", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L400", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L400"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L414"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_pipeline_downstream_consumer", "callee": "strip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L415", "receiver": "chosen_text"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L426", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L427", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L430", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L435", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L443", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L446", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_real_execution", "callee": "loads", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L449", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L473", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L473", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L476", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L479", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L481", "receiver": "expected_out"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L484", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_default_naming", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L484"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L491", "receiver": "invalid_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L493", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_invalid_input", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L496", "receiver": "subprocess"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "callee": "resolve", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L503", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_e2e_cli_subprocess_missing_file", "callee": "run", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L506", "receiver": "subprocess"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/cb68f74508ae41345d6ecaaf83418f460dff21cbfc81770bc5f6f136890ecfd5.json b/graphify-out/cache/ast/v0.9.47-s2/cb68f74508ae41345d6ecaaf83418f460dff21cbfc81770bc5f6f136890ecfd5.json new file mode 100644 index 0000000..007fc9a --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/cb68f74508ae41345d6ecaaf83418f460dff21cbfc81770bc5f6f136890ecfd5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_scripts_select_article_extractor_py", "label": "select_article_extractor.py", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_scripts_select_article_extractor_extractorname", "label": "ExtractorName", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "_callable": true, "_callable_class": true}, {"id": "str", "label": "str", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "enum", "label": "Enum", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "label": "CandidateStatus", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "label": "ExtractorCandidate", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L62", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "label": "ArticleSelectionResult", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L78", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "label": "BatchProcessingResult", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L90", "_callable": true, "_callable_class": true}, {"id": "$graphify-root$_scripts_select_article_extractor_normalize_text", "label": "normalize_text()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L106", "_callable": true}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "label": "generate_shingles()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L147", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "label": "extract_candidate_data()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L167", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_form_active_set", "label": "form_active_set()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L211", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "label": "calculate_consensus_metrics()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L234", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "label": "break_priority_tie()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L280", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "label": "select_with_consensus()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L289", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "label": "select_without_consensus()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L322", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "label": "select_article_extractor()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L373", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "label": "atomic_save_json()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L430", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_process_batch", "label": "process_batch()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L452", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_parse_args", "label": "parse_args()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L523", "_callable": true}, {"id": "namespace", "label": "Namespace", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/scripts/select_article_extractor.py"}, {"id": "$graphify-root$_scripts_select_article_extractor_main", "label": "main()", "file_type": "code", "source_file": "scripts/select_article_extractor.py", "source_location": "L544", "_callable": true}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_34", "label": "Nomes can\u00f4nicos e cat\u00e1logo fechado dos motores de extra\u00e7\u00e3o.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L34"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_42", "label": "Estado de viabilidade do candidato para forma\u00e7\u00e3o do conjunto ativo.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L42"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_63", "label": "Representa\u00e7\u00e3o e m\u00e9tricas de um candidato a extrator em um artigo.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L63"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_79", "label": "Resultado detalhado da sele\u00e7\u00e3o para um artigo individual.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L79"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_91", "label": "Resultado consolidado do processamento em lote.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L91"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_107", "label": "Executa a normaliza\u00e7\u00e3o determin\u00edstica para compara\u00e7\u00e3o: 1. Decodificar entidades\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L107"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_148", "label": "Gera conjunto de shingles ordenados de tamanho window_size (padr\u00e3o 5). - Se\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L148"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_168", "label": "Extrai campo de texto, erro e calcula tokens/shingles para um motor.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L168"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_212", "label": "Forma o conjunto ativo de candidatos conforme PRD \u00a77.1: 1. Se existir pelo\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L212"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_235", "label": "Constr\u00f3i o conjunto de consenso (shingles presentes em >= 2 candidatos ativos)\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L235"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_281", "label": "Aplica a prioridade final estrita: newspaper4k > readability > trafilatura.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L281"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_292", "label": "Seleciona o melhor candidato quando existe consenso (PRD \u00a77.5): 1. Ordenar por\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L292"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_323", "label": "Seleciona o candidato quando N\u00c3O existe consenso (PRD \u00a77.6): - Com 3 candidatos\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L323"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_374", "label": "Orquestrador determin\u00edstico completo para um \u00fanico artigo. Classifica\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L374"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_431", "label": "Salva dados em JSON de forma at\u00f4mica utilizando arquivo tempor\u00e1rio e rename.", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L431"}, {"id": "$graphify-root$_scripts_select_article_extractor_rationale_455", "label": "L\u00ea o JSON de entrada, valida a estrutura, processa todos os artigos e grava o\u2026", "file_type": "rationale", "source_file": "scripts/select_article_extractor.py", "source_location": "L455"}], "edges": [{"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "html", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "tempfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "unicodedata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "collections", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extractorname", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extractorname", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L41", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L62", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L78", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L90", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_normalize_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_normalize_text", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L106", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L147", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L167", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_form_active_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L211", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_form_active_set", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L211", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_form_active_set", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L211", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_form_active_set", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L211", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L234", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L234", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L289", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L289", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L289", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L322", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L322", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L322", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L373", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "any", "relation": "references", "context": "generic_arg", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L373", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L373", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L430", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L430", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L430", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_process_batch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L452", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L452", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L452", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L452", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_parse_args", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L523", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_parse_args", "target": "namespace", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L523", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_py", "target": "$graphify-root$_scripts_select_article_extractor_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L544", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L171", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_normalize_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L188", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "target": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L189", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L318", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L344", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L379", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_form_active_set", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L382", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L386", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L408", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L411", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "target": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L413", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L432", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L459", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L491", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L506", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_process_batch", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L508", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_main", "target": "$graphify-root$_scripts_select_article_extractor_parse_args", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L545", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_main", "target": "$graphify-root$_scripts_select_article_extractor_process_batch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L547", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_34", "target": "$graphify-root$_scripts_select_article_extractor_extractorname", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L34", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_42", "target": "$graphify-root$_scripts_select_article_extractor_candidatestatus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L42", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_63", "target": "$graphify-root$_scripts_select_article_extractor_extractorcandidate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L63", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_79", "target": "$graphify-root$_scripts_select_article_extractor_articleselectionresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L79", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_91", "target": "$graphify-root$_scripts_select_article_extractor_batchprocessingresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L91", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_107", "target": "$graphify-root$_scripts_select_article_extractor_normalize_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L107", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_148", "target": "$graphify-root$_scripts_select_article_extractor_generate_shingles", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L148", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_168", "target": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L168", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_212", "target": "$graphify-root$_scripts_select_article_extractor_form_active_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L212", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_235", "target": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L235", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_281", "target": "$graphify-root$_scripts_select_article_extractor_break_priority_tie", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L281", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_292", "target": "$graphify-root$_scripts_select_article_extractor_select_with_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L292", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_323", "target": "$graphify-root$_scripts_select_article_extractor_select_without_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L323", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_374", "target": "$graphify-root$_scripts_select_article_extractor_select_article_extractor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L374", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_431", "target": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L431", "weight": 1.0}, {"source": "$graphify-root$_scripts_select_article_extractor_rationale_455", "target": "$graphify-root$_scripts_select_article_extractor_process_batch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/select_article_extractor.py", "source_location": "L455", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L118"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "unescape", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L122", "receiver": "html"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L125", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L128", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L131", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "normalize", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L134", "receiver": "unicodedata"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "lower", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L137", "receiver": "s"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "strip", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L140", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "sub", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L140", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_normalize_text", "callee": "findall", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L143", "receiver": "re"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L169", "receiver": "article_dict"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L170"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L175", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L177", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L179", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L183", "receiver": "lib_data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "strip", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_extract_candidate_data", "callee": "str", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L202"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_form_active_set", "callee": "values", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L218", "receiver": "candidates"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_form_active_set", "callee": "values", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L222", "receiver": "candidates"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "callee": "Counter", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L247", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_calculate_consensus_metrics", "callee": "items", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L252", "receiver": "shingle_counts"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "resolve", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L432", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "mkdir", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L433", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "mkstemp", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L435", "receiver": "tempfile"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "dump", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L441", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L441"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "dump", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L443", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L443"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L444", "receiver": "f"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "replace", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L445", "receiver": "os"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "exists", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L447", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_atomic_save_json", "callee": "remove", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L448", "receiver": "os"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "resolve", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L459", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "is_file", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L460", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "FileNotFoundError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L461", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "load", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L465", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L465"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L467", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L469"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L470", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "get", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L472", "receiver": "data"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "list", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L473"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "ValueError", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L474", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "resolve", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L480", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "Counter", "is_member_call": false, "source_file": "scripts/select_article_extractor.py", "source_location": "L483", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "dict", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L486"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "append", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L492", "receiver": "selections"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_process_batch", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L499", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "ArgumentParser", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L524", "receiver": "argparse"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L527", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "Path", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L527"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L528", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "Path", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L531"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L535", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "int", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "scripts/select_article_extractor.py", "source_location": "L536"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "add_argument", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L538", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_parse_args", "callee": "parse_args", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L541", "receiver": "parser"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L562", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "dumps", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L562", "receiver": "json"}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L566", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L569", "receiver": null}, {"caller_nid": "$graphify-root$_scripts_select_article_extractor_main", "callee": "write", "is_member_call": true, "source_file": "scripts/select_article_extractor.py", "source_location": "L572", "receiver": null}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.47-s2/db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6.json b/graphify-out/cache/ast/v0.9.47-s2/db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6.json new file mode 100644 index 0000000..bafe0b5 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/db8b8702249e41e00c89cfcba0c76be591c320e8c42c9ef9a1098bb764097da6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_md", "label": "json-schema.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", "label": "JSON Schema Contract: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_1_input_json_schema", "label": "1. Input JSON Schema", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_2_output_json_schema", "label": "2. Output JSON Schema", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L52"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_1_input_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_json_schema_contract_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_contracts_json_schema_2_output_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/contracts/json-schema.md", "source_location": "L52", "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/dc4ac38cf36367e4e1a574761e853b27b760b70e94903f463082267669296d27.json b/graphify-out/cache/ast/v0.9.47-s2/dc4ac38cf36367e4e1a574761e853b27b760b70e94903f463082267669296d27.json new file mode 100644 index 0000000..c440a31 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/dc4ac38cf36367e4e1a574761e853b27b760b70e94903f463082267669296d27.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "label": "quickstart.md", "file_type": "document", "node_kind": "page", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "label": "Quickstart: Deterministic Article Content Selection", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L1"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_1_pr\u00e9_requisitos", "label": "1. Pr\u00e9-requisitos", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L7"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "label": "2. Execu\u00e7\u00e3o R\u00e1pida via CLI", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L14"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_1_selecionar_o_melhor_extrator_para_uma_extra\u00e7\u00e3o_existente", "label": "Cen\u00e1rio 1: Selecionar o melhor extrator para uma extra\u00e7\u00e3o existente", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L16"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_2_especificar_caminho_de_sa\u00edda_customizado_e_modo_verboso", "label": "Cen\u00e1rio 2: Especificar caminho de sa\u00edda customizado e modo verboso", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L24"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_3_execu\u00e7\u00e3o_dos_testes_automatizados", "label": "3. Execu\u00e7\u00e3o dos Testes Automatizados", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L33"}, {"id": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_4_valida\u00e7\u00e3o_program\u00e1tica_uso_como_m\u00f3dulo_python", "label": "4. Valida\u00e7\u00e3o Program\u00e1tica / Uso como M\u00f3dulo Python", "file_type": "document", "node_kind": "heading", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L43"}], "edges": [{"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_md", "target": "$graphify-root$_specs_004_deterministic_content_selection_spec_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L3", "weight": 1.0, "target_file": "$graphify-root$/specs/004-deterministic-content-selection/spec.md"}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_1_pr\u00e9_requisitos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_1_selecionar_o_melhor_extrator_para_uma_extra\u00e7\u00e3o_existente", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_2_execu\u00e7\u00e3o_r\u00e1pida_via_cli", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_cen\u00e1rio_2_especificar_caminho_de_sa\u00edda_customizado_e_modo_verboso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_3_execu\u00e7\u00e3o_dos_testes_automatizados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L33", "weight": 1.0}, {"source": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_quickstart_deterministic_article_content_selection", "target": "$graphify-root$_specs_004_deterministic_content_selection_quickstart_4_valida\u00e7\u00e3o_program\u00e1tica_uso_como_m\u00f3dulo_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "specs/004-deterministic-content-selection/quickstart.md", "source_location": "L43", "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/fa80f48a34fa5ef51315ad4644eee701d6fadfa33415d944e8987caf56a8e5c2.json b/graphify-out/cache/ast/v0.9.47-s2/fa80f48a34fa5ef51315ad4644eee701d6fadfa33415d944e8987caf56a8e5c2.json new file mode 100644 index 0000000..d820211 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.47-s2/fa80f48a34fa5ef51315ad4644eee701d6fadfa33415d944e8987caf56a8e5c2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tests_test_select_article_extractor_py", "label": "test_select_article_extractor.py", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "label": "test_normalize_text_empty_and_invalid()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L38", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "label": "test_normalize_text_html_entities_and_tags()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L45", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "label": "test_normalize_text_markdown_links()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L51", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "label": "test_normalize_text_nfkc_unicode_and_punctuation()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L57", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "label": "test_generate_shingles_sliding_window()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L69", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "label": "test_generate_shingles_short_text()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L77", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "label": "test_generate_shingles_empty()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L85", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "label": "test_ct_001_three_candidates_clear_winner()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L94", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "label": "test_ct_002_technical_tie_smallest_shingles()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L110", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "label": "test_ct_003_technical_tie_priority_fallback()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L126", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "label": "test_ct_004_three_candidates_no_consensus()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L148", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "label": "test_ct_005_two_candidates_no_consensus()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L164", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "label": "test_ct_006_single_usable_candidate()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L178", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "label": "test_ct_007_degraded_candidates_only()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L190", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "label": "test_ct_008_all_candidates_unavailable()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L203", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "label": "test_ct_009_small_fragment_loses_due_to_low_coverage()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L215", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "label": "test_ct_010_excessive_boilerplate_loses_due_to_low_support()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L232", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "label": "test_ct_011_partial_content_loses_due_to_low_coverage()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L250", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "label": "test_ct_012_recalculate_existing_selected_extractor()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L263", "_callable": true}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/tests/test_select_article_extractor.py"}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "label": "test_ct_013_empty_articles_list()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L290", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "label": "test_ct_014_invalid_json_fails_atomically()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L309", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "label": "test_integration_reference_file()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L326", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "label": "test_cli_execution_success()", "file_type": "code", "source_file": "tests/test_select_article_extractor.py", "source_location": "L348", "_callable": true}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_1", "label": "Su\u00edte de Testes Automatizados para o Seletor Determin\u00edstico de Extrator. Cobre\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_95", "label": "CT-001: Tr\u00eas candidatos com consenso e um vencedor claro -> Selecionar o maior\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L95"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_111", "label": "CT-002: Dois ou mais candidatos dentro de 0,03 do maior score -> Selecionar o\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L111"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_127", "label": "CT-003: Empate t\u00e9cnico e mesma quantidade de shingles -> Aplicar prioridade\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L127"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_149", "label": "CT-004: Tr\u00eas candidatos sem consenso -> Selecionar a quantidade mediana de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L149"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_165", "label": "CT-005: Dois candidatos sem consenso -> Selecionar a maior quantidade de\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L165"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_179", "label": "CT-006: Somente um candidato utiliz\u00e1vel -> Selecionar esse candidato.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L179"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_191", "label": "CT-007: Nenhum utiliz\u00e1vel, mas existe candidato degradado -> Executar o\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L191"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_204", "label": "CT-008: Todos os candidatos indispon\u00edveis -> Selecionar newspaper4k.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L204"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_216", "label": "CT-009: Readability retorna apenas um fragmento pequeno enquanto os outros\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L216"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_233", "label": "CT-010: Um candidato cont\u00e9m o conte\u00fado comum e muito conte\u00fado excedente ->\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L233"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_251", "label": "CT-011: Um candidato cont\u00e9m somente parte do conte\u00fado comum -> Perde cobertura\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L251"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_264", "label": "CT-012: A entrada j\u00e1 cont\u00e9m selected_extractor -> Recalcular e substituir\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L264"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_291", "label": "CT-013: articles est\u00e1 vazio -> Gerar sa\u00edda v\u00e1lida com articles vazio.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L291"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_310", "label": "CT-014: JSON inv\u00e1lido -> N\u00e3o gerar sa\u00edda.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L310"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_327", "label": "Testa o processamento em lote completo sobre o arquivo real\u2026", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L327"}, {"id": "$graphify-root$_tests_test_select_article_extractor_rationale_349", "label": "Testa a execu\u00e7\u00e3o via CLI com retorno 0 e sum\u00e1rio JSON no stdout.", "file_type": "rationale", "source_file": "tests/test_select_article_extractor.py", "source_location": "L349"}], "edges": [{"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "tempfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "scripts_select_article_extractor", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L38", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L45", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L51", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L57", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L69", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L77", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L85", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L94", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L110", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L126", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L148", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L164", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L178", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L190", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L203", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L215", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L232", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L250", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L263", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L263", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L290", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L290", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L309", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L309", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L326", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L326", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_py", "target": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L348", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "target": "path", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L348", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L280", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L297", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L328", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_1", "target": "$graphify-root$_tests_test_select_article_extractor_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_95", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L95", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_111", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L111", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_127", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L127", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_149", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L149", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_165", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L165", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_179", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L179", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_191", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L191", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_204", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L204", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_216", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L216", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_233", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L233", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_251", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L251", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_264", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L264", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_291", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L291", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_310", "target": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L310", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_327", "target": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L327", "weight": 1.0}, {"source": "$graphify-root$_tests_test_select_article_extractor_rationale_349", "target": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests/test_select_article_extractor.py", "source_location": "L349", "weight": 1.0}], "raw_calls": [{"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L39", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L40", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L41", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_empty_and_invalid", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L42", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_html_entities_and_tags", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L47", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_markdown_links", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L53", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_normalize_text_nfkc_unicode_and_punctuation", "callee": "normalize_text", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L60", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_sliding_window", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L71", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_short_text", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L80", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_generate_shingles_empty", "callee": "generate_shingles", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L86", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_001_three_candidates_clear_winner", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L104", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_002_technical_tie_smallest_shingles", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L121", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L134", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_003_technical_tie_priority_fallback", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L144", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_004_three_candidates_no_consensus", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L159", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_005_two_candidates_no_consensus", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L173", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_006_single_usable_candidate", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L185", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_007_degraded_candidates_only", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L198", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_008_all_candidates_unavailable", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L210", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_009_small_fragment_loses_due_to_low_coverage", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L227", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_010_excessive_boilerplate_loses_due_to_low_support", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L244", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_011_partial_content_loses_due_to_low_coverage", "callee": "select_article_extractor", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L259", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L277", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L277", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L279", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L281", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L284", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_012_recalculate_existing_selected_extractor", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L284"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L294", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L294", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L296", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L298", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L301", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_013_empty_articles_list", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L301"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L312", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "raises", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L315", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L315"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L316", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_ct_014_invalid_json_fails_atomically", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L318", "receiver": "expected_out"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L329", "receiver": "ref_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "skip", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L330", "receiver": "pytest"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "process_batch", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L333", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L337", "receiver": "out_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "load", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L340", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_integration_reference_file", "callee": "f", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "tests/test_select_article_extractor.py", "source_location": "L340"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "callee": "write_text", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L361", "receiver": "in_file"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "callee": "dumps", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L361", "receiver": "json"}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "callee": "main", "is_member_call": false, "source_file": "tests/test_select_article_extractor.py", "source_location": "L364", "receiver": null}, {"caller_nid": "$graphify-root$_tests_test_select_article_extractor_test_cli_execution_success", "callee": "exists", "is_member_call": true, "source_file": "tests/test_select_article_extractor.py", "source_location": "L366", "receiver": "out_file"}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json index 1ba2269..489c1e5 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":313,"mtime_ns":1787240110134720000,"indexed_at_ns":1787240513253720300,"word_count":29},"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":15049,"mtime_ns":1787264334449844300,"indexed_at_ns":1787264516559452000,"word_count":1899,"hashes":{"readme.md":"42e10af009afb4936c6b585a4392ac94c84ff695a2ab33ff2655bf84b053c553"}},"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"}}} \ 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":313,"mtime_ns":1787240110134720000,"indexed_at_ns":1787240513253720300,"word_count":29},"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":21395,"mtime_ns":1787274445463162200,"indexed_at_ns":1787274452239721500,"word_count":2606,"hashes":{"readme.md":"391a52f77897cbbe1a555fcf94d432c1b7669343ecbf3b8336a941e5c10931d5"}},"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":21476,"mtime_ns":1787273522903319000,"indexed_at_ns":1787273545925952600,"word_count":2083,"hashes":{"scripts/select_article_extractor.py":"cb68f74508ae41345d6ecaaf83418f460dff21cbfc81770bc5f6f136890ecfd5"}},"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":2192,"mtime_ns":1787274324146791400,"indexed_at_ns":1787274399622292000,"word_count":241,"hashes":{"specs/004-deterministic-content-selection/quickstart.md":"33763f18c72242a3b8ddc296b18cc0c7a35c490165a78cd21d021263d43add3b"}},"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":23724,"mtime_ns":1787274189777748800,"indexed_at_ns":1787274205164191000,"word_count":2232,"hashes":{"tests/test_select_article_extractor.py":"29b062645f2d57b34075195586c9d66d1f48f287082dcc75409c9b175e7a30dd"}}} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html index c140efe..24a4f11 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -63,12 +63,12 @@
-
1000 nodes · 1220 edges · 115 communities
+
1235 nodes · 1548 edges · 131 communities