{
  "schemaVersion": 1,
  "produto": "Simulador de Manobras",
  "tipo": "caso técnico",
  "verificado_em": "2026-10-30",
  "autor": "Jeremias Cardoso",
  "relacao_comercial": "nenhuma; o sistema é do autor",
  "metodo": "Leitura do código e da documentação do repositório (somente leitura). O sistema não foi executado e a suíte não foi rodada nesta revisão; os totais de testes vêm dos registros do próprio repositório. Os trechos são literais, exceto as substituições entre colchetes.",
  "contagem": {
    "regra": "Arquivos versionados (git ls-files) no commit indicado. Linha de código: linha não branca que não é só comentário (// e /* */ em JavaScript e CSS; <!-- --> em HTML). Aplicação: arquivos da raiz e das pastas modelo, componentes, tela, bancada-2 e servico-catalogo, sem os pacotes gerados por build (bancada-2/runtime*). Testes: pasta test. Ficam fora relatórios, documentos, experimentos e ferramentas.",
    "categorias": {
      "aplicacao_js": {
        "arquivos": 336,
        "linhas_fisicas": 73856,
        "linhas_nao_brancas": 70449,
        "linhas_de_codigo": 68853
      },
      "paginas_html": {
        "arquivos": 9,
        "linhas_fisicas": 1205,
        "linhas_nao_brancas": 1168,
        "linhas_de_codigo": 1165
      },
      "estilos_css": {
        "arquivos": 24,
        "linhas_fisicas": 10643,
        "linhas_nao_brancas": 9244,
        "linhas_de_codigo": 8897
      },
      "testes": {
        "arquivos": 475,
        "linhas_fisicas": 71805,
        "linhas_nao_brancas": 67611,
        "linhas_de_codigo": 65933
      }
    },
    "arquivos_de_teste_no_npm_test": 111,
    "historico_git": {
      "commits": 166,
      "primeiro": "2026-08-05",
      "ultimo": "2026-10-27",
      "tags": 0
    }
  },
  "substituicoes": [
    "[subestação]"
  ],
  "limites": [
    "Não é laudo independente de segurança elétrica nem de conformidade com norma ou procedimento de rede.",
    "O sistema não foi executado e a suíte não foi rodada nesta revisão.",
    "O repositório não registra uso em treinamento com operadores; o texto não afirma ganho de aprendizado.",
    "Não se publicam nomes de empresa, de pessoas, de subestações, de regiões nem códigos de equipamento."
  ],
  "fontes": [
    {
      "repositorio": "Simulador de Manobras",
      "commit": "c250850353fcb91f317cdcafe2735be3e1f0b9a9",
      "data_do_commit": "2026-10-27"
    }
  ],
  "alegacoes": [
    {
      "id": "o-que-e",
      "alegacao": "Aplicação web local e didática para representar unifilares, ensaiar manobras e montar planos de manobras.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        44,
        44
      ],
      "trecho": "Aplicação web local e didática para representar unifilares, ensaiar manobras e montar planos de"
    },
    {
      "id": "sem-scada",
      "alegacao": "Não se conecta a SCADA, banco de produção nem equipamento real.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        52,
        52
      ],
      "trecho": "O sistema não se conecta a SCADA, banco de produção ou equipamentos reais. Ele não substitui"
    },
    {
      "id": "nao-substitui",
      "alegacao": "Não substitui estudo elétrico, aprovação de engenharia nem procedimento operacional.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        53,
        53
      ],
      "trecho": "estudo elétrico, aprovação de engenharia nem procedimento operacional."
    },
    {
      "id": "sem-fluxo",
      "alegacao": "O motor não propaga entre subestações nem tem comando remoto, SCADA, telemetria ou cálculo de fluxo.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        56,
        56
      ],
      "trecho": "O serviço auxiliar mantém P6F. Não há propagação entre SEs, comando remoto, SCADA, telemetria ou cálculo de fluxo. Os quatro enlaces multi-SE continuam `estado: null`, `statusOperacional: \"PENDING\"` e `manobravel: false`."
    },
    {
      "id": "cinco-acessos",
      "alegacao": "O simulador reúne cinco subestações na mesma sessão e no mesmo plano; duas são só consulta.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        45,
        47
      ],
      "trecho": "reúne cinco\nacessos na mesma sessão e no mesmo plano: [subestação], [subestação], [subestação], [subestação] e [subestação]. [subestação] e [subestação] preservam\ncomandos locais com limites didáticos; [subestação] e [subestação] são consulta limitada, sem manobras."
    },
    {
      "id": "sem-aceite-navegacao",
      "alegacao": "A navegação está em qualificação e não equivale a aceite do produto nem a homologação operacional.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        48,
        48
      ],
      "trecho": "navegação está em qualificação e não equivale a aceite do produto ou homologação operacional."
    },
    {
      "id": "independente",
      "alegacao": "Desde 18/08/2026 é um repositório independente do SIGCOT.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        117,
        118
      ],
      "trecho": "Desde 2026-08-18 este é um repositório independente. Código, histórico Git, memória, estado e\ndocumentação não pertencem mais ao repositório do SIGCOT."
    },
    {
      "id": "js-svg",
      "alegacao": "A bancada é escrita em JavaScript, HTML e SVG nativos.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-BANCADA-CRIACAO.md",
      "linhas": [
        9,
        9
      ],
      "trecho": "A bancada é uma tela isolada em JavaScript, HTML e SVG nativos. O documento é declarativo e usa `schemaVersion=1`; edição, conexões, intertravamentos, validação, simulação e serialização ficam em módulos separados do DOM. A persistência usa `localStorage` e a publicação local guarda um snapshot JSON versionado e não editável pela interface."
    },
    {
      "id": "svg",
      "alegacao": "Os unifilares são desenhados em SVG.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "componentes/unifilar.js",
      "linhas": [
        4,
        4
      ],
      "trecho": "  var SVG_NS = \"http://www.w3.org/2000/svg\";"
    },
    {
      "id": "maxgraph",
      "alegacao": "O editor visual usa a biblioteca maxGraph 0.24.0.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "package.json",
      "linhas": [
        138,
        138
      ],
      "trecho": "    \"@maxgraph/core\": \"0.24.0\","
    },
    {
      "id": "localstorage",
      "alegacao": "Os dados ficam no armazenamento do navegador; a publicação local é um snapshot JSON versionado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-BANCADA-CRIACAO.md",
      "linhas": [
        9,
        9
      ],
      "trecho": "A bancada é uma tela isolada em JavaScript, HTML e SVG nativos. O documento é declarativo e usa `schemaVersion=1`; edição, conexões, intertravamentos, validação, simulação e serialização ficam em módulos separados do DOM. A persistência usa `localStorage` e a publicação local guarda um snapshot JSON versionado e não editável pela interface."
    },
    {
      "id": "pacote",
      "alegacao": "A distribuição é um ZIP portátil com atalhos para abrir direto ou servir só na própria máquina, e manifesto SHA-256.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        284,
        284
      ],
      "trecho": "inclui launchers para abrir diretamente ou servir somente em loopback, além de manifesto SHA-256."
    },
    {
      "id": "sem-instalar",
      "alegacao": "O pacote não instala programas e não envia arquivos pela internet.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "distribuicao-bancada/LEIA-ME-PRIMEIRO.txt",
      "linhas": [
        14,
        14
      ],
      "trecho": "O pacote não instala programas e não envia arquivos pela internet. Rascunhos e"
    },
    {
      "id": "versao",
      "alegacao": "A versão do pacote piloto é a 0.1.0.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-BANCADA-CRIACAO.md",
      "linhas": [
        74,
        74
      ],
      "trecho": "O pacote portátil de homologação é gerado por `npm run build:pacote` em `dist/Bancada-Unifilar-Piloto-v0.1.0.zip`. Ele inclui a aplicação, as referências visuais, launcher Windows direto sem Node/Python, alternativa localhost, roteiro do participante, formulário e gerador local de contribuição."
    },
    {
      "id": "sem-servidor",
      "alegacao": "Arquitetura alvo de 16/10/2026: serviço local com navegador, dados por participante e troca de arquivos, sem servidor central.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        11,
        11
      ],
      "trecho": "Serviço local com navegador, dados por participante e troca de arquivos; sem servidor central."
    },
    {
      "id": "texto-nao-executa",
      "alegacao": "Nenhum texto importado ou digitado é executado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-BANCADA-CRIACAO.md",
      "linhas": [
        54,
        54
      ],
      "trecho": "Nenhum texto importado ou digitado é executado: a interface usa `textContent` e APIs DOM fixas, sem `eval` ou `innerHTML` com entrada do usuário."
    },
    {
      "id": "cinco-dimensoes",
      "alegacao": "Posição mecânica, energização, autorização, topologia e intertravamento são dimensões distintas.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        2685,
        2685
      ],
      "trecho": "Posição mecânica, energização, autorização, topologia e intertravamento são dimensões distintas."
    },
    {
      "id": "pending-falha-fechado",
      "alegacao": "Fato elétrico ausente permanece null/PENDING e falha fechado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        323,
        323
      ],
      "trecho": "- Fato elétrico ausente permanece `null/PENDING` e falha fechado."
    },
    {
      "id": "motor-entrada",
      "alegacao": "O motor recebe topologia, posições mecânicas e condições de fontes e devolve uma projeção congelada.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        19,
        19
      ],
      "trecho": "`modelo/rede-eletrica-local.js` é o motor compartilhado. Ele recebe uma topologia canônica, posições mecânicas e condições de fontes e retorna uma projeção congelada de nós, segmentos e equipamentos. Topologia e projeção publicam `schemaVersion: 1`; os mapas-objeto da projeção não possuem protótipo. O módulo é independente de DOM, plano de manobras, [subestação] e enlaces."
    },
    {
      "id": "chaves-fechadas",
      "alegacao": "O cálculo percorre só chaves fechadas; barra nunca é fonte; valor desconhecido dá PENDING, nunca ENERGIZADO.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        31,
        31
      ],
      "trecho": "O cálculo percorre somente chaves locais fechadas. Barras nunca são fontes. As 9 LTs [subestação] e 6 LTs [subestação] iniciam `LIGADA`; transformadores e reatores não são fontes. Valor ausente ou desconhecido produz `PENDING`, nunca `ENERGIZADO`."
    },
    {
      "id": "percorrer",
      "alegacao": "A energização é a alcançabilidade a partir das fontes ligadas.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "modelo/rede-eletrica-local.js",
      "linhas": [
        607,
        607
      ],
      "trecho": "    const energizados = percorrer(grafo.adjacencia, origensLigadas);"
    },
    {
      "id": "propaga-pending",
      "alegacao": "Chaves e fontes desconhecidas propagam PENDING.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "modelo/rede-eletrica-local.js",
      "linhas": [
        610,
        610
      ],
      "trecho": "    propagarPending(grafo.adjacencia, pending, energizados, grafo.desconhecidas);"
    },
    {
      "id": "completo",
      "alegacao": "O resultado só é completo sem chave nem fonte desconhecida.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "modelo/rede-eletrica-local.js",
      "linhas": [
        642,
        642
      ],
      "trecho": "      completo: grafo.desconhecidas.length === 0 && fontesDesconhecidas.length === 0,"
    },
    {
      "id": "terra-nao-aplicavel",
      "alegacao": "Chave de aterramento não recebe estado elétrico.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        39,
        39
      ],
      "trecho": "Chaves de aterramento sempre recebem estado elétrico `NAO_APLICAVEL` e permanecem brancas abertas ou fechadas. A lâmina e `aria-pressed` comunicam somente a posição mecânica."
    },
    {
      "id": "cores",
      "alegacao": "Preto é caminho energizado e branco é sem caminho.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        35,
        35
      ],
      "trecho": "Preto (`#1e1e1e`) significa caminho energizado. Branco (`#f5f5f5`) significa sem caminho; `PENDING` também é branco, mas mantém tracejado. Linhas, barras, equipamentos, terras e estados PENDING brancos recebem contorno/halo `#4a5258`, com contraste gráfico de 4,28:1 sobre o fundo `#bebebe`, sem mudar a semântica branca. Atributos `data-estado-eletrico`, `data-intertravamento`, `data-codigo-regra` e `data-impedimentos` evitam depender apenas de cor. A posição mecânica continua em `aria-pressed`; o rótulo acessível combina posição, estado elétrico e bloqueio. Reconstruções do SVG e dos controles de condição restauram o foco pela identidade canônica `data-equipment`/`data-terminal-id`."
    },
    {
      "id": "forma-cor",
      "alegacao": "Forma mostra o estado de manobra; cor mostra a tensão.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        77,
        77
      ],
      "trecho": "> **Forma = estado de manobra. Cor = tensão. Nunca uma substituindo a outra.**"
    },
    {
      "id": "energia-automatica",
      "alegacao": "Na energia automática, a energização se atualiza pelas fontes declaradas e pela conectividade.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        104,
        104
      ],
      "trecho": "**Energia automática** agora usa fontes declaradas e conectividade para atualizar"
    },
    {
      "id": "energia-informada",
      "alegacao": "Na energia informada, a desenergização é premissa do usuário, não cálculo.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        220,
        220
      ],
      "trecho": "   de desenergização**. É uma premissa do usuário, não cálculo nem medição. Cada"
    },
    {
      "id": "regra-seccionadora",
      "alegacao": "Seccionadora adjacente a disjuntor exige o disjuntor aberto.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        47,
        47
      ],
      "trecho": "- Seccionadora adjacente a DJ exige o DJ adjacente aberto."
    },
    {
      "id": "regra-terra",
      "alegacao": "Terra abre sempre; fecha só com o circuito desenergizado e a seccionadora de isolamento aberta.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        49,
        49
      ],
      "trecho": "- Terra abre sempre; fecha somente com circuito desenergizado e seccionadora de isolamento aberta."
    },
    {
      "id": "regra-disjuntor",
      "alegacao": "Disjuntor fecha com as duas seccionadoras adjacentes fechadas e só quando todo aterramento alcançável está aberto.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        51,
        51
      ],
      "trecho": "- DJ abre sempre; fecha com as duas seccionadoras adjacentes fechadas e somente quando todo aterramento alcançável está explicitamente `ABERTO`. Terra ausente, `PENDING` ou inválida bloqueia com `ESTADO_MECANICO_NAO_CONFIRMADO`."
    },
    {
      "id": "dj-candidato",
      "alegacao": "Para achar os terras alcançáveis, o grafo é montado como se o disjuntor candidato estivesse fechado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "modelo/rede-eletrica-local.js",
      "linhas": [
        764,
        764
      ],
      "trecho": "    const grafo = criarAdjacencia(topologia, posicoes, dj.id);"
    },
    {
      "id": "recusa",
      "alegacao": "Recusa não altera posição, plano nem condição simulada.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        52,
        52
      ],
      "trecho": "- Recusa não altera posição, plano nem condição simulada. Aceite altera uma posição e materializa exatamente um passo canônico."
    },
    {
      "id": "motivo-regra",
      "alegacao": "A recusa mostra o motivo e o código da regra.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "tela/simulador-[subestação].js",
      "linhas": [
        1389,
        1389
      ],
      "trecho": "        + acao.motivo + \" Regra: \" + acao.codigoRegra"
    },
    {
      "id": "sem-depender-cor",
      "alegacao": "Atributos com o código da regra e os impedimentos evitam depender só de cor.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        35,
        35
      ],
      "trecho": "Preto (`#1e1e1e`) significa caminho energizado. Branco (`#f5f5f5`) significa sem caminho; `PENDING` também é branco, mas mantém tracejado. Linhas, barras, equipamentos, terras e estados PENDING brancos recebem contorno/halo `#4a5258`, com contraste gráfico de 4,28:1 sobre o fundo `#bebebe`, sem mudar a semântica branca. Atributos `data-estado-eletrico`, `data-intertravamento`, `data-codigo-regra` e `data-impedimentos` evitam depender apenas de cor. A posição mecânica continua em `aria-pressed`; o rótulo acessível combina posição, estado elétrico e bloqueio. Reconstruções do SVG e dos controles de condição restauram o foco pela identidade canônica `data-equipment`/`data-terminal-id`."
    },
    {
      "id": "passo-por-manobra",
      "alegacao": "Cada manobra efetiva cria um passo no plano.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        60,
        60
      ],
      "trecho": "separadamente, sem ser inferida das posições. Cada manobra efetiva cria um passo."
    },
    {
      "id": "plano-editavel",
      "alegacao": "O plano é uma lista editável.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "modelo/plano-manobras.js",
      "linhas": [
        99,
        99
      ],
      "trecho": "  function editarItem(itens, id, campo, valor) {"
    },
    {
      "id": "robo-deterministico",
      "alegacao": "O robô da bancada é determinístico: conexões, cadastro e regras definem as propostas.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "BANCADA-COMPLETA.md",
      "linhas": [
        8,
        9
      ],
      "trecho": "O bot é determinístico:\nconexões, cadastro e regras registradas definem suas propostas e decisões."
    },
    {
      "id": "previa",
      "alegacao": "Preparar liberação só calcula a prévia; executar é ação do usuário, passo a passo ou em sequência.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "bancada-2/src/bot-bancada-ui.js",
      "linhas": [
        443,
        443
      ],
      "trecho": "    node('p','Clique em um equipamento no unifilar para conferir sua posição e comandar pelo botão. Preparar liberação apenas calcula a prévia; Executar próximo passo ou Executar sequência realiza as manobras.',content);"
    },
    {
      "id": "previa-ordem",
      "alegacao": "A prévia abre disjuntores, depois seccionadoras, depois fecha terras.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "bancada-2/src/bot-operacional.mjs",
      "linhas": [
        33,
        33
      ],
      "trecho": "    pending=[...unique(scope.breakers).map(id=>({id,operation:'ABRIR'})),"
    },
    {
      "id": "perimetro",
      "alegacao": "Perímetro incompleto recusa a prévia.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "bancada-2/src/bot-operacional.mjs",
      "linhas": [
        22,
        22
      ],
      "trecho": "  if(!scope.breakers.length||!scope.isolators.length)throw Error('Perímetro incompleto; confira disjuntores e isoladoras do alvo.');"
    },
    {
      "id": "autoria-lt",
      "alegacao": "A autoria assistida de linha propõe regras; nomes de equipamento não definem funções.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        190,
        190
      ],
      "trecho": "**Propor abertura de LT**. Nomes e finais de tags não definem essas funções."
    },
    {
      "id": "aceitar-rejeitar",
      "alegacao": "A proposta é aceita ou rejeitada por uma pessoa.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        193,
        193
      ],
      "trecho": "existentes. **Rejeitar** mantém o desenho; **Aceitar** incorpora a macro,"
    },
    {
      "id": "gerador-nao-presume",
      "alegacao": "O gerador não cria posições nem presume energização.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        201,
        201
      ],
      "trecho": "pendentes. O gerador não cria posições nem presume energização."
    },
    {
      "id": "alcance-autoria",
      "alegacao": "O ensaio suporta um disjuntor por ponta e exige os dois extremos no mesmo desenho.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        227,
        227
      ],
      "trecho": "O ensaio suporta 1 DJ por ponta, lateral/meio e arranjo misto, com dois extremos"
    },
    {
      "id": "roteiro-consultivo",
      "alegacao": "O roteiro guiado é consultivo e nunca executa equipamento.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        2697,
        2697
      ],
      "trecho": "Roteiro guiado é consultivo: deriva das regras canônicas"
    },
    {
      "id": "ref-global",
      "alegacao": "Com várias subestações, todo elemento tem referência global {seId, id}.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-CONTRATO-MULTI-SE.md",
      "linhas": [
        11,
        11
      ],
      "trecho": "O modelo público usa referências globais `{ seId, id }`. Cada subestação é representada por `{ seId, elementos }`, e cada enlace por `{ id, modo, circuito, distanciaKm, pontas, estado }`."
    },
    {
      "id": "plano-global",
      "alegacao": "O plano pertence ao estado global.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-CONTRATO-MULTI-SE.md",
      "linhas": [
        13,
        13
      ],
      "trecho": "O catálogo é formado pelos elementos de cada SE, enquanto `plano` pertence exclusivamente ao estado global. `chaveReferencia` identifica uma ponta e `chaveEnlace` identifica o par canônico de pontas, independentemente da ordem."
    },
    {
      "id": "enlace-estrutural",
      "alegacao": "Enlaces entre subestações são estruturais, não superfícies de comando remoto.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        325,
        325
      ],
      "trecho": "- Enlaces entre subestações são estruturais; não são superfícies de comando remoto."
    },
    {
      "id": "sem-estado-remoto",
      "alegacao": "Estado remoto duplicado é proibido em qualquer enlace.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-CONTRATO-MULTI-SE.md",
      "linhas": [
        25,
        25
      ],
      "trecho": "`remoteState`, `estadoRemoto` e `remotoManual` são proibidos em qualquer enlace, simulado ou vinculado."
    },
    {
      "id": "lts-cenario",
      "alegacao": "A condição externa de cada linha é entrada de cenário, não comando remoto.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        7,
        7
      ],
      "trecho": "[subestação] e [subestação] precisam simular intertravamentos e indicar caminho elétrico no pátio principal, sem transformar o simulador em SCADA e sem alterar os quatro enlaces estruturais multi-SE. O plano é global, mas o cálculo elétrico desta onda é exclusivamente local. A condição externa de cada uma das 15 LTs é uma entrada de cenário, não um comando remoto."
    },
    {
      "id": "linha-viva",
      "alegacao": "Cenário que o simulador precisa mostrar: o terminal remoto desligado e a linha ainda viva.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        153,
        153
      ],
      "trecho": "Com a chave de linha fechada, a própria SE energiza a linha pelo seu terminal, mesmo com o outro lado aberto. É a situação clássica e perigosa que o simulador precisa mostrar: o operador desliga o terminal remoto, acha que a linha morreu, e ela continua viva."
    },
    {
      "id": "importacao",
      "alegacao": "A importação de JSON é transacional: tudo é validado numa variável temporária.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-BANCADA-CRIACAO.md",
      "linhas": [
        42,
        42
      ],
      "trecho": "A importação é transacional: JSON bruto é analisado e validado integralmente em uma variável temporária; somente um candidato seguro substitui o rascunho. Objetos `null`, campos desconhecidos, IDs perigosos ou duplicados, enumerações incompatíveis, referências órfãs, propriedades profundas e regras/portas adulteradas são rejeitados com mensagem PT-BR sem contaminar o estado atual."
    },
    {
      "id": "importacao-capacidade",
      "alegacao": "JSON importado não concede capacidade nem forja topologia.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        2733,
        2733
      ],
      "trecho": "JSON importado não pode conceder capacidade nem forjar topologia."
    },
    {
      "id": "proto",
      "alegacao": "Chaves reservadas como __proto__ são recusadas.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        2743,
        2743
      ],
      "trecho": "chaves reservadas como `__proto__`, `constructor` e `toString` são recusadas"
    },
    {
      "id": "limites-doc",
      "alegacao": "Limites por documento: 250 componentes, 500 conexões e 250 regras.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-BANCADA-CRIACAO.md",
      "linhas": [
        47,
        47
      ],
      "trecho": "- 250 componentes, 500 conexões e 250 regras;"
    },
    {
      "id": "catalogo-20",
      "alegacao": "O catálogo do editor tem 20 tipos de componente.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        106,
        106
      ],
      "trecho": "| adicionar componentes livremente | sim (catálogo de 20 tipos) |"
    },
    {
      "id": "equipamentos-173",
      "alegacao": "O piloto mais completo reúne 173 equipamentos.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        150,
        150
      ],
      "trecho": "reúne os 173 equipamentos, posições e vínculos pendentes e os contratos da próxima etapa."
    },
    {
      "id": "fichas",
      "alegacao": "272 fichas de abrir e fechar para 136 equipamentos com posição mecânica.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        166,
        166
      ],
      "trecho": "173 equipamentos [subestação] em 25 conjuntos, com 272 fichas de abrir/fechar para os 136"
    },
    {
      "id": "cenarios-485",
      "alegacao": "O maior executor de cenários consolida 485 cenários e 18 combinações mínimas.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        178,
        178
      ],
      "trecho": "A [T120-E](experimentos/t120e/index.html) consolida **485 cenários e 18 combinações mínimas**, incluindo barras, terras alcançáveis/isolados, alimentação nos dois sentidos e auxiliares CA/CC. Os 24 códigos de regra aplicáveis à entrada [subestação] foram observados; três regras genéricas têm exclusões de alcance documentadas. [Relatório e critérios](relatorios/t120e-combinacoes-2026-09-09/RELATORIO.md). Próximo: **T121-A, bot na interface real da [subestação]**."
    },
    {
      "id": "regras-24",
      "alegacao": "Os 24 códigos de regra aplicáveis à subestação de referência foram observados.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        178,
        178
      ],
      "trecho": "A [T120-E](experimentos/t120e/index.html) consolida **485 cenários e 18 combinações mínimas**, incluindo barras, terras alcançáveis/isolados, alimentação nos dois sentidos e auxiliares CA/CC. Os 24 códigos de regra aplicáveis à entrada [subestação] foram observados; três regras genéricas têm exclusões de alcance documentadas. [Relatório e critérios](relatorios/t120e-combinacoes-2026-09-09/RELATORIO.md). Próximo: **T121-A, bot na interface real da [subestação]**."
    },
    {
      "id": "testar-140",
      "alegacao": "O botão Testar roda os casos numa cópia isolada; um exemplo reúne 140 casos.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        99,
        99
      ],
      "trecho": "[exemplo dos disjuntores](bancada-2.html?exemplo=lt-disjuntores) reúne 140 casos no"
    },
    {
      "id": "node-test",
      "alegacao": "Os testes usam o executor nativo do Node.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "test/modelo.test.js",
      "linhas": [
        3,
        3
      ],
      "trecho": "const test = require(\"node:test\");"
    },
    {
      "id": "chromium",
      "alegacao": "Testes de interface abrem um Chromium real.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "test/t200-bancada-ui.test.js",
      "linhas": [
        2,
        2
      ],
      "trecho": "const {chromium}=require('playwright'),{fixture}=require('./fixture-t200.cjs');"
    },
    {
      "id": "sem-chromium-reprova",
      "alegacao": "Ausência de Chromium reprova, em vez de aprovar sem testar.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        264,
        264
      ],
      "trecho": "`tap/` e `resumo.json`. Ausência de Chromium reprova (código 3): instale o navegador ou defina"
    },
    {
      "id": "suite-1371",
      "alegacao": "Total registrado em 19/10/2026: 1.371 testes, 1.371 aprovados, 0 falhas, 0 pulados.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        49,
        49
      ],
      "trecho": "npm test da guarda 020 (19/10/2026):** O comando único saiu com código 0, das 18:53 às 19:14 UTC. O runner registrou 1371 testes, 1371 aprovações, 0 falhas, 0 cancelados, 0 pulados"
    },
    {
      "id": "suite-22min",
      "alegacao": "A suíte completa leva cerca de 22 minutos, com Chromium.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        31,
        31
      ],
      "trecho": "cerca de 22 min, com Chromium"
    },
    {
      "id": "suite-8-falhas",
      "alegacao": "Uma rodada anterior registrou 8 falhas em 1.371.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        53,
        53
      ],
      "trecho": "Parada do npm test (19/10/2026):** O comando único `npm test` saiu com código 1, das 18:01 às 18:18 UTC. O runner registrou 1371 testes, 1363 aprovações, 8 falhas"
    },
    {
      "id": "verde-vermelho",
      "alegacao": "Verificação que não sabe ficar vermelha não é verde; toda checagem nova é provada por mutação.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        3378,
        3378
      ],
      "trecho": "que não sabe ficar vermelho não é verde"
    },
    {
      "id": "rodadas-agosto",
      "alegacao": "O guia de novos unifilares reúne os erros das rodadas de 07 e 08/08/2026.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        3,
        3
      ],
      "trecho": "**Origem:** lições da construção do unifilar da SE [subestação] (rodadas R1 → R5, 07–08/08/2026)."
    },
    {
      "id": "barra-fonte",
      "alegacao": "O erro mais grave e persistente sobreviveu três rodadas.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        118,
        118
      ],
      "trecho": "**O erro mais grave e o mais persistente** — sobreviveu três rodadas."
    },
    {
      "id": "barra-caminho",
      "alegacao": "As barras energizam quando há caminho fechado até uma fonte.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        125,
        125
      ],
      "trecho": "As únicas fontes são as **linhas de transmissão**. As barras energizam quando existe caminho fechado até alguma delas. Consequência prática: com todas as linhas fora, o unifilar inteiro fica branco — que é o comportamento real."
    },
    {
      "id": "dj-identico",
      "alegacao": "Na rodada 2, um disjuntor fechado ficou visualmente idêntico a um aberto.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        84,
        84
      ],
      "trecho": "Colapsar os dois em \"claro\" apaga a distinção mais crítica da manobra: *chave aberta com tensão* × *chave fechada sem tensão*. Na R2 isso aconteceu e um disjuntor **fechado** ficou visualmente idêntico a um aberto."
    },
    {
      "id": "booleano-unico",
      "alegacao": "Um único booleano era usado dos dois lados da seccionadora.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        161,
        161
      ],
      "trecho": "O erro que motivou a R5: com a `[equipamento]` aberta e o remoto [subestação] desligado, fechar os DJs pintava o traço **depois** da chave. A causa era um único booleano (`lt2`) usado tanto aquém quanto além da seccionadora."
    },
    {
      "id": "dois-lados",
      "alegacao": "Toda chave de linha é uma fronteira de dois lados.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        159,
        159
      ],
      "trecho": "### 3.6 Toda chave de linha é uma fronteira de dois lados"
    },
    {
      "id": "terra-religar",
      "alegacao": "O modelo chegou a exigir a terra fechada para religar o disjuntor.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        184,
        184
      ],
      "trecho": "Tratá-las juntas produz o pior erro possível: o modelo passa a **exigir a terra fechada para religar o disjuntor**."
    },
    {
      "id": "suite-invertida",
      "alegacao": "A suíte passou inteira com o intertravamento invertido.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        284,
        284
      ],
      "trecho": "Aconteceu duas vezes na [subestação]: a suíte inteira passando com o intertravamento **invertido**, porque os testes validavam a regra como foi escrita, não contra a sequência real de manobra."
    },
    {
      "id": "roteiro-operador",
      "alegacao": "O teste é escrito a partir do roteiro do operador, não do código.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        286,
        286
      ],
      "trecho": "**Escreva o teste a partir do roteiro do operador**, não do código."
    },
    {
      "id": "16-condutores",
      "alegacao": "A auditoria achou 16 condutores sem marcação que nenhum teste pegava.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "GUIA-NOVO-UNIFILAR.md",
      "linhas": [
        299,
        299
      ],
      "trecho": "Vale muito: um script que abre a página, desliga todas as fontes e **lista todo elemento que continua escuro**. Foi assim que apareceram 16 condutores sem `data-seg` que nenhum teste pegava."
    },
    {
      "id": "layout-data",
      "alegacao": "Lição de 01/09/2026 sobre corrigir layout.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        3362,
        3362
      ],
      "trecho": "**v56 — 2026-09-01:** consolidada a lição mais cara da T111: **corrigir layout sem"
    },
    {
      "id": "layout-pior",
      "alegacao": "Uma correção de layout sem o caso de aceite antes trocou um defeito por outro pior.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        3363,
        3363
      ],
      "trecho": "escrever antes o caso de aceite da faixa afetada trocou um defeito por outro pior."
    },
    {
      "id": "layout-duas-resolucoes",
      "alegacao": "O aceite passava porque só visitava duas resoluções.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        3366,
        3366
      ],
      "trecho": "A suíte de aceite passava 16/16 porque só visita 1600×1000 e 390×844"
    },
    {
      "id": "layout-mesmo-commit",
      "alegacao": "O teste da faixa entra no mesmo commit.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        3368,
        3368
      ],
      "trecho": "layout, o teste da faixa entra **no mesmo commit**"
    },
    {
      "id": "has-16x",
      "alegacao": "Um seletor fez o custo de cada redesenho subir cerca de 16 vezes.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        208,
        208
      ],
      "trecho": "o custo por redesenho subiu cerca de 16 vezes."
    },
    {
      "id": "has-correcao",
      "alegacao": "Marcar o predicado por JS removeu o custo sem diferença visual.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        209,
        209
      ],
      "trecho": "Marcar o predicado no elemento por JS e usar seletor de atributo removeu o custo sem diferença visual"
    },
    {
      "id": "owner-padrao",
      "alegacao": "Um valor padrão fazia todo ativo sem titular declarado ser tratado como próprio.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        27,
        27
      ],
      "trecho": "Propriedade de ativos (lição de 23/10/2026):** `opts.owner ?? 'OWN'` faz o modelo dar como próprio, por omissão, todo ativo sem titular declarado."
    },
    {
      "id": "rc-homologado",
      "alegacao": "Em 20/08/2026, uma nota interna se declarou Release Candidate Homologado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "docs/RELEASE-NOTES-v0.1.0.md",
      "linhas": [
        5,
        5
      ],
      "trecho": "**Status:** Release Candidate Homologado (RC1 / Final)  "
    },
    {
      "id": "sem-homologacao",
      "alegacao": "A publicação de referência é didática e não constitui homologação operacional.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        327,
        327
      ],
      "trecho": "- A Bancada 2.0 (`bancada-2.html`) publica documentos genéricos no registro local de consulta. A [subestação] v1 possui publicação específica distribuída com o sistema, validada para simulação e planejamento didáticos; não constitui homologação operacional."
    },
    {
      "id": "selo-local",
      "alegacao": "Toda publicação local leva o selo LOCAL / NÃO HOMOLOGADO.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        21,
        21
      ],
      "trecho": "- a publicação é um snapshot **local**, imutável, com selo **LOCAL / NÃO HOMOLOGADO**;"
    },
    {
      "id": "sem-org",
      "alegacao": "Publicação para a organização: não existe.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MANUAL-BANCADA-UNIFILARES.md",
      "linhas": [
        113,
        113
      ],
      "trecho": "| publicar para a organização | **não** |"
    },
    {
      "id": "aceite-t200",
      "alegacao": "A bancada completa foi aceita pelo dono em 29/09/2026.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        29,
        29
      ],
      "trecho": "foi implementada, qualificada localmente e aceita pelo dono em 29/09/2026 (T200)."
    },
    {
      "id": "produto-nao-aprovado",
      "alegacao": "Na reavaliação de 16/10/2026, o produto ficou como não aprovado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "estado/estado.json",
      "linhas": [
        17,
        17
      ],
      "trecho": "\"produto_aprovado\": false,"
    },
    {
      "id": "pausado",
      "alegacao": "Em 20/10/2026: produto sem aceite e nenhuma continuação automática.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        18,
        18
      ],
      "trecho": "**Pausa da noite de 20/10/2026:** trabalho encerrado por pedido do dono, com checkpoint documental e cópias restauráveis do código em qualificação. Progresso e pendências estão no [roteiro de retomada](docs/planejamento/RETOMADA-2026-10-21-VALE.md) e em `estado/estado.json`. Produto sem aceite10/10; M01aberta, M02HOLD e T202pausada. Nenhuma continuação automática."
    },
    {
      "id": "bloqueada",
      "alegacao": "Em 25/10/2026 a rodada fechou como BLOQUEADA, sem aceite, por decisão de Jeremias.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        15,
        15
      ],
      "trecho": "a rodada fechou como BLOQUEADA, sem aceite e sem exceção, por decisão de Jeremias"
    },
    {
      "id": "100-concluido",
      "alegacao": "A memória do projeto chegou a descrever modelos como 100% concluídos e validados.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        25,
        25
      ],
      "trecho": "os descrevia como \"100% Concluído e Validado\""
    },
    {
      "id": "aceite-t201",
      "alegacao": "A primeira subestação piloto foi aceita pelo dono em 29/09/2026 e tem publicação local.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        30,
        30
      ],
      "trecho": "(T201) foi aceita pelo dono em 29/09/2026 e possui publicação local."
    },
    {
      "id": "ui-projecao",
      "alegacao": "O motor é testável sem navegador e a interface é projeção, não fonte de verdade.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "ADR-GRAFO-ELETRICO-LOCAL-P7B.md",
      "linhas": [
        64,
        64
      ],
      "trecho": "O comportamento local fica testável sem navegador e a UI passa a ser projeção, não fonte de verdade."
    },
    {
      "id": "lote-nao-qualificado",
      "alegacao": "O lote descrito como concluído é registrado como candidato não qualificado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "MEMORIA-PROJETO.md",
      "linhas": [
        25,
        25
      ],
      "trecho": "candidato MC04, não qualificado"
    },
    {
      "id": "hospedagem-futura",
      "alegacao": "Hospedagem, identidade institucional e publicação operacional ficam para etapas seguintes.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        183,
        183
      ],
      "trecho": "A [T122-B](experimentos/t122b/index.html) entrega **participantes, papéis, suspensão e backup/restauração pela interface**, com conferência antes/depois, cópia de resgate e recibo verificado. Doze testes API novos e oito casos Chromium aprovados; recuperação de 65 SEs/64 LTs em banco novo. A regressão da T122-A permanece aprovada. [Guia de uso](servico-catalogo/README.md). A [T123-A](experimentos/t123a/index.html) acrescenta projetos completos na Bancada compartilhada, revisão base, histórico e backup dos desenhos. Foram aprovados 30 testes API e 28 cenários de navegador, com recuperação de 65 desenhos. A [T124-A](experimentos/t124a/index.html) acrescenta o vão G01 compilado por dados e a condição atual da SE salva por equipe, com revisão, reabertura e backup v3. Padrão inicial: fechados, exceto terras e seccionadoras -6/-7 abertas. [Guia da condição](experimentos/t124a/README.md). A [T124-B](experimentos/t124b/index.html) acrescenta fontes nas duas barras e na outra ponta, terras externos, sincronismo informado e impedimentos configuráveis. A proposta [subestação] é selecionada para ensaio; particularidades [subestação] aguardam conferência. Trocar contexto preserva posições/passos e registra suas premissas. [Guia e limites](experimentos/t124b/README.md). A [T124-C](experimentos/t124c/index.html) aplica a família ao G02 (LT JINS/JSU C1), com códigos e associações próprios, acesso a ensaios independentes e arquivos vinculados ao conjunto. [Guia e conferência](experimentos/t124c/README.md). A [T124-D](experimentos/t124d/index.html) acrescenta a cadeia G03 com três DJs e duas derivações, 11 equipamentos/22 ações, contexto do transformador e um passo por manobra. [Guia e fronteiras](experimentos/t124d/README.md). A [T124-E](experimentos/t124e/index.html) acrescenta G04 por configuração e reúne os quatro conjuntos de 500 kV: 38 equipamentos e 76 direções executadas pelo navegador. [Roteiro da rodada humana](experimentos/t124e/roteiro.html). Verificação final: 93 modelo/API e 55 cenários UI PASS; npm 730 PASS/0 FAIL/7 skips históricos. **Ponto atual: conferência humana G01–G04.** Próximo ciclo T124-F: incorporar observações e definir regras próprias de seleção de barras e bypass de 230/138 kV por conjunto. Hospedagem, identidade institucional e publicação operacional continuam nas etapas seguintes."
    },
    {
      "id": "dados-proibidos",
      "alegacao": "É proibido usar dados pessoais, ordens reais ou conteúdo classificado.",
      "repositorio": "Simulador de Manobras",
      "arquivo": "README.md",
      "linhas": [
        322,
        322
      ],
      "trecho": "- Não use dados pessoais, ordens reais ou conteúdo classificado."
    }
  ]
}
