{
  "schemaVersion": 3,
  "revision": "2026-10-12-outro-loss-retry",
  "unit": "basis-points",
  "totalWeightBp": 10000,
  "totals": {
    "verifiedBp": 8567,
    "partialBp": 1053,
    "sumBp": 9620
  },
  "scope": {
    "pt": "100% significa Mega Man X1 completo e fiel, do início aos créditos, conforme ENDGAME. X2, X3, personagens cruzados e novos modos têm escopos separados. O inventário inclui explicitamente os objetos ainda não identificados; não promete que a pesquisa do elenco já acabou.",
    "en": "100% means a complete, faithful Mega Man X1 from opening to credits under ENDGAME. X2, X3, cross-game characters and new modes are separate scopes. The inventory explicitly includes unresolved objects; it does not claim roster research is finished."
  },
  "rules": [
    {
      "pt": "Pesos representam partes do produto, não horas, número de testes, commits ou gravações.",
      "en": "Weights describe product scope, not hours, test counts, commits or recordings."
    },
    {
      "pt": "Subetapas verificadas somam o peso inteiro. Revisão 2026-10-03-partial-credit (David, 2026-10-03: \"as provas devem contar as parciais também, não só as inteiras\"): uma subetapa não verificada cujas partes um redutor ou varredura commitado conta recebe `partial` {seen, total, $source} e soma floor(peso × seen / total) até ser verificada; sem contagem de partes soma zero. Só contam listas de partes fechadas: passos de chefe com catálogo limitado ou limite de catálogo aberto e visuais de inimigo com catálogo aberto ficam sem parcial. Os totais mostram verificado, parcial e a soma separadamente; o indicador principal é a soma, rotulada. Pais mostram a soma dos filhos, sem pontuação adicional. Nenhum peso mudou. Aplicação 2026-10-04 (coordenador, mesma revisão; nenhum peso mudou): a regra também lê as listas de classes de terreno das fases, o censo de população, as quatro partes de campaign.integration, o inventário de chamadas de som das armas, as listas de poses das armas e as obrigações do Shotgun Ice carregado; as contagens de chefe vêm da varredura de chefes commitada mais recente; um catálogo enumerado de apresentação de chefe, sem limite e sem pendência aberta, é uma lista fechada na qual partes de som só contam dentro de uma janela com APU conferido.",
      "en": "Verified substeps earn their whole weight. Revision 2026-10-03-partial-credit (David, 2026-10-03: \"partial proofs count too, not only whole ones\"): an unverified substep whose parts a committed reducer or sweep counts carries `partial` {seen, total, $source} and earns floor(weight × seen / total) until verified; a step without a part count earns zero. Only closed part lists count: boss steps with a bounded catalogue or an open catalogue limit and enemy visuals with an open catalogue get no partial. Totals report verified, partial and their sum separately; the headline is the sum, labelled. Parents sum children without additional credit. No weight changed. Applied 2026-10-04 (coordinator, same revision; no weight changed): the rule also reads the stage terrain class lists, the population census, the four parts of campaign.integration, the weapon sound-call inventory, weapon pose lists and the Shotgun Ice charged obligations; boss counts come from the newest committed boss sweep; an enumerated boss presentation catalogue with no bound and no open limit is a closed list in which sound parts count only inside an APU-gated window."
    },
    {
      "pt": "A mesma família de inimigo conta uma vez; fases contam sua colocação e integração, não repetem sua IA. Aliases e projéteis-filhos não viram novos inimigos.",
      "en": "Each enemy family counts once; stages own placement and integration, not duplicate AI. Aliases and child projectiles are not new enemies."
    },
    {
      "pt": "Armas possuem funcionamento geral; cada chefe possui sua matriz de dano específica. Filhos com definição própria, como Eaglet, são pontuados na sua família; o emissor conta só disparo/seleção. Demais filhos ficam no recurso dono.",
      "en": "Weapons own general behavior; each boss owns its target-specific damage matrix. Children with dedicated definitions, such as Eaglet, earn credit in their family; the emitter owns only launch/selection. Other children stay with their owner."
    },
    {
      "pt": "Não aplicável exige evidência de origem; ausência de observação não prova ausência de ataque, som ou comportamento.",
      "en": "Not applicable requires source evidence; absence of observation does not prove absence of attacks, sound or behavior."
    },
    {
      "pt": "100% exige todas as linhas verificadas, nenhum objeto do censo sem dono, gates ENDGAME e aceite final do dono. Um arquivo existente ou GIF bonito não prova fidelidade.",
      "en": "100% requires every row verified, no unowned census object, ENDGAME gates and final owner acceptance. An existing file or attractive GIF does not prove fidelity."
    },
    {
      "pt": "Este é um novo denominador editorial. Mudanças de peso e auditoria de trabalho antigo são recalibração, não progresso de gameplay nem novidade de +1%.",
      "en": "This is a new editorial denominator. Weight changes and audits of earlier work are recalibration, not gameplay progress or +1% news."
    },
    {
      "pt": "Os pesos das famílias são provisórios até classificar todo o censo. Uma nova família exige revisão pública que redistribua os mesmos 10000 pontos-base; nunca se remove escopo para terminar antes.",
      "en": "Family weights are provisional until the census is classified. A new family requires a public revision redistributing the same 10000 basis points; scope is never removed to finish sooner."
    },
    {
      "pt": "Referências em linhas pendentes são contexto e critério, não evidência de conclusão. Verificado preserva o limite escrito de cada teste.",
      "en": "References on pending rows are context and acceptance criteria, not completion evidence. Verified preserves each test's stated boundary."
    },
    {
      "pt": "Revisão 2026-09-23 (desde 2026-09-19-granular-v1): nova família enemy.rush_roader (FM, OID 0x2A, com o emissor interno 0x1C) com 75 pontos-base, tirados da auditoria do censo (a linha 0x2A sai; as outras 82 linhas passam a 2 ou 3). Recalibração declarada, não progresso: o total da área e o verificado não mudam. A linha do censo 0x1C fica: ela vem de launch-octopus e continua sem dono. Metodologia 2026-09-24 (card L2, sem repesagem): no modo ROM-first (megaman-x.exe --rom-first) o gate de estado (ENDGAME §2, unidade e quadro) vale pela antiga redação \"medido na origem\", ghost, estatístico e vídeo/diff_stats para movimento, câmera e comportamento, e o gate de pixels para imagens; um passo só pontua quando sua aceitação escrita é atendida.",
      "en": "Revision 2026-09-23 (from 2026-09-19-granular-v1): new family enemy.rush_roader (FM, OID 0x2A, with its internal 0x1C emitter) at 75 basis points, taken from the census audit (the 0x2A row leaves; the other 82 rows become 2 or 3). Disclosed recalibration, not progress: the area total and the verified total are unchanged. The 0x1C census row stays: it comes from launch-octopus and is still unresolved. Methodology 2026-09-24 (card L2, no reweighting): in the ROM-first mode (megaman-x.exe --rom-first) the state gate (ENDGAME §2, unit and frame) stands for the old wording \"measured in the source\", ghost, statistical and video/diff_stats for motion, camera and behaviour, and the pixel gate for pictures; a step is credited only when its written acceptance is met."
    },
    {
      "pt": "Revisão 2026-09-25-granular-v3 (card L18, a partir da granular-v2; David 2026-09-25: todos os inimigos na lista, pontos pela importância). Inventário: a tabela de objetos da ROM 80:F8DD tem 107 ids (KB do censo 2026-09-23); cada um agora é membro de uma família, parte de um chefe, item ou fase (B2, E35, E36), ou uma linha do censo com o motivo citado. Novos: 28 famílias de inimigos (os 35 ids do E36 sem recurso, unidos onde o E36 nomeia um grupo: 0x11 com 0x1A, 0x12, 0x1B; 0x1E com 0x1F; 0x57 com 0x3A; 0x59 com 0x58, 0x5A; 0x6A com 0x68; e 0x46, colocado 5 vezes em SE pela lista da ROM, S30); o subchefe 0x21 de LO (colocado duas vezes, trava a câmera em 82:AF1B como os subchefes do B2, encontro separado do submarino 0x28, E35); a linha do censo 0x46. Método: totais das áreas mantidos (razão inimigos/chefes do código próprio 0,64 contra 0,83 do ledger, dentro da faixa de fator 2; as outras áreas não são código da tabela de objetos). Inimigos: as linhas do censo mantêm seus pesos (0x46: 2); os outros 1273 pontos-base vão às 45 famílias por (código + ocorrência + tempo) / 3 (instruções próprias, KB do censo; metade da fatia de colocações e metade da de fases nas listas da ROM do S30, entradas de emissores contadas para a família que criam; slot-frames nas 23 execuções verificadas do E35), inteiros pelo maior resto, no mínimo 5. Chefes: 23 partes iguais (6 x 79, 17 x 78). As subetapas acompanham seu recurso; nenhum status ou evidência mudou. Recalibração declarada, não progresso: verificado 3486 -> 2994 pontos-base.",
      "en": "Revision 2026-09-25-granular-v3 (card L18, from granular-v2; David 2026-09-25: every enemy in the list, points by importance). Inventory: the ROM object table 80:F8DD holds 107 ids (census KB 2026-09-23); each is now a family member, a boss, item or stage part (B2, E35, E36), or a census row with its cited reason. Added: 28 enemy families (E36's 35 ids without a feature, merged where E36 names one group: 0x11 with 0x1A, 0x12, 0x1B; 0x1E with 0x1F; 0x57 with 0x3A; 0x59 with 0x58, 0x5A; 0x6A with 0x68; plus 0x46, placed 5 times in SE by the ROM list, S30); the LO mid-boss 0x21 (placed twice, locks the camera at 82:AF1B like B2's mid-bosses, an encounter separate from the submarine 0x28, E35); the census row 0x46. Method: group totals kept (enemy/boss own-code ratio 0.64 against the ledger's 0.83, inside the factor-2 band; the other groups are not object-table code). Enemies: census rows keep their weights (0x46: 2); the other 1273 bp go to the 45 families by (code + occurrence + time) / 3 (own instructions, census KB; half placement and half stage share in S30's ROM lists, emitter entries counted for the family they make; slot-frames in E35's 23 verified runs), integers by largest remainder, 5 bp at least. Bosses: 23 equal shares (6 x 79, 17 x 78). Steps scale with their feature; no status or evidence changed. Disclosed recalibration, not progress: verified 3486 -> 2994 bp."
    },
    {
      "pt": "W37, evidência composta (T5-intake-from-branch-state; David, 2026-09-27: \"sim, aprovo\"): um take do hunter com o mesmo estado inicial e os mesmos inputs da fonte até N pode combinar a fonte verificada com WRAM igual e imagens exatas em [início, S] com o take verificado pelos mesmos gates em [S, fim], iniciado do estado da fonte em S <= N. Registrar S, a fonte e seu registro verificado, hashes do estado/inputs e do checkpoint; validar o estado de retomada contra a fonte. Os quadros anteriores a S pertencem à evidência da fonte por determinismo. Isso não altera tolerâncias, pesos ou créditos; cada parte exigida pela aceitação continua precisando ser vista.",
      "en": "W37, composed evidence (T5-intake-from-branch-state; David, 2026-09-27: \"sim, aprovo\"): a hunter take with the same initial state and source inputs through N may combine the source verified WRAM-equal and picture-exact over [start, S] with the take verified by the same gates over [S, end], starting from the source state at S <= N. Record S, the source and its verified record, state/input and checkpoint hashes; validate the resumed state against the source. Frames before S belong to the source evidence by determinism. This changes no tolerances, weights or credits; every part required by the acceptance must still be seen."
    },
    {
      "pt": "Revisão 2026-10-01-unreachable-scope (David, 2026-10-01: \"sim eu aprovo\"): uma parte que o mapa da própria ROM prova inalcançável no jogo (fora da área que a câmera alcança, sob chão sólido, além da borda) sai do escopo da etapa, com prova registrada em knowledge_base/mmx1/rom/unreachable_parts_2026-10-01.json (imagem, coordenadas, motivo); a etapa fecha quando tudo o que é alcançável foi visto em gravações verificadas. Revisão de metodologia declarada, não progresso. Primeira aplicação (tools/oracle/post/unreachable_parts.py): 0 partes provadas de 57 examinadas; sem limite de câmera citado da ROM, nenhuma célula ou colocação candidata fica longe o bastante da área alcançável. Segunda aplicação 2026-10-02 (knowledge_base/mmx1/rom/unreachable_parts_2026-10-02.json, camera_borders_2026-10-02.json: bordas dos checkpoints em 86:A780 decodificadas, todo escritor de $1E5C/$1E6E e a morte no buraco 80:E11E citados): 0 de 57 provadas; a união de todos os valores de borda inferior que a ROM pode pôr numa fase ainda alcança a janela de câmera de cada candidata, então a prova precisa de qual escritor roda onde. Nenhum status ou peso mudou.",
      "en": "Revision 2026-10-01-unreachable-scope (David, 2026-10-01: \"sim eu aprovo\"): a part that the ROM's own map proves unreachable in play (outside the area the camera reaches, under solid floor, beyond the map edge) leaves the step's scope, with its proof recorded in knowledge_base/mmx1/rom/unreachable_parts_2026-10-01.json (image, coordinates, reason); the step closes when everything reachable was seen in verified takes. Disclosed methodology revision, not progress. First application (tools/oracle/post/unreachable_parts.py): 0 of 57 examined parts proven; without a ROM-cited camera bound no candidate cell or placement lies far enough from the reachable area. Second application 2026-10-02 (knowledge_base/mmx1/rom/unreachable_parts_2026-10-02.json, camera_borders_2026-10-02.json: 86:A780 checkpoint borders decoded, every $1E5C/$1E6E writer and the pit death 80:E11E cited): 0 of 57 proven; the union of every bottom value the ROM can set in a stage still reaches each candidate's camera window, so a proof needs which writer runs where. No status or weight changed."
    },
    {
      "pt": "Revisão 2026-10-12-equality-witness (David, 2026-10-12: \"aprovo as mudanças todas sugeridas\", sobre docs/plans/2026-10-12-efficiency-review.md). (a) Testemunha por igualdade: uma parte conta como vista quando o jogo original, levado ao estado que a produz, e o nosso port dão a mesma WRAM em todos os quadros comparados e, se a parte é de imagem, a mesma imagem byte a byte nos quadros dela. O estado vem de uma gravação verificada ou é injetado só das duas formas que David aprovou em 2026-09-28 e 2026-09-30: a semente do RNG ($0BA6/$0BA7, 84:9086) com um valor que o próprio gerador produz, ou um bloco coerente copiado de um take verificado e aplicado onde o jogo relê esse estado (carga da fase, checkpoint, entrada de sala); nenhum valor solto inventado. O original é sempre a referência: um ramo coberto só no port não testemunha nada. Cada testemunha vai para knowledge_base/mmx1/rom/equality_witnesses_<data>_<card>.json com a parte, a origem do estado (take, quadro, ponto de aplicação ou semente), os hashes da captura do original e da execução do port e os quadros comparados; o catálogo marca `witness: equality`, e a wiki pode dizer que a parte nunca foi vista em jogo real. (b) Take verificado: para partes de estado, dano e som basta WRAM igual em todos os quadros da janela; para partes de imagem o quadro testemunhado tem de ser igual byte a byte; a imagem exata do take inteiro deixa de ser condição de testemunha e segue medida no motor (x1.presentation). Revisão de metodologia declarada, não progresso: nenhum peso ou status mudou neste commit; a contagem entra quando tools/refresh_partial_credit.py ler esse KB e o intake separar WRAM de imagem (docs/plans/2026-10-12-equality-witness-plan.md). A lista de pedidos a voluntários sai do site quando fechar por esta regra.",
      "en": "Revision 2026-10-12-equality-witness (David, 2026-10-12: \"aprovo as mudanças todas sugeridas\", on docs/plans/2026-10-12-efficiency-review.md). (a) Witness by equality: a part counts as seen when the original game, driven to the state that produces it, and our port give the same WRAM on every compared frame and, for a picture part, the same picture byte for byte on its frames. The state comes from a verified recording or is injected in only the two ways David approved on 2026-09-28 and 2026-09-30: the RNG seed ($0BA6/$0BA7, 84:9086) with a value the generator itself produces, or a coherent block copied from a verified take and applied where the game re-reads that state (stage load, checkpoint, room entry); no loose invented value. The original is always the reference: a branch covered only in the port witnesses nothing. Each witness goes to knowledge_base/mmx1/rom/equality_witnesses_<date>_<card>.json with the part, the state's origin (take, frame, application point or seed), the hashes of the original's capture and of the port's run, and the frames compared; the catalogue marks `witness: equality`, and the wiki may say the part was never seen in real play. (b) Verified take: for state, damage and sound parts WRAM equal on every frame of the window suffices; for picture parts the witnessed frame must be byte-exact; whole-take picture exactness stops being a witness condition and stays measured in the engine (x1.presentation). Disclosed methodology revision, not progress: no weight or status changed in this commit; counting starts when tools/refresh_partial_credit.py reads that KB and the intake separates WRAM from pictures (docs/plans/2026-10-12-equality-witness-plan.md). The volunteer request list leaves the site once it closes under this rule."
    },
    {
      "pt": "Revisão 2026-10-12-enemy-sound-r38 (decisão do coordenador em 2026-10-12, sob o mandato noturno de David, divulgada no flight recorder e no resumo da manhã; carta R140): o padrão R38 das partes de som de chefe vale para as partes de som dos catálogos visuais de inimigos. Uma parte de som conta como vista quando (a) uma testemunha nomeia o take e o quadro dela e (b) esse quadro cai dentro de uma janela de áudio da campanha do mesmo take que passa no teste de inteireza de gated_windows (WRAM, leituras de porta e quadros do APU N de N até o fim). É a mesma barra de evidência das partes de som de chefe, não um afrouxamento: uma janela que não é inteira não conta nada, e uma parte sem take ou quadro continua não vista. Revisão de metodologia declarada: das 86 partes de som de inimigos com testemunha da E45 ou método a, 80 caem em janelas inteiras e 6 não têm take nem quadro (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json; janelas de campaign_audio_2026-09-25.json, campaign_audio_2026-10-08_r34.json e campaign_audio_2026-10-08_r35.json).",
      "en": "Revision 2026-10-12-enemy-sound-r38 (coordinator ruling, 2026-10-12, under David's overnight mandate, disclosed in the flight recorder and the morning summary; card R140): the R38 standard for boss sound parts applies to the sound parts of the enemy visual catalogues. A sound part counts as seen when (a) a witness names its take and frame and (b) that frame lies inside a campaign audio window of the same take that passes gated_windows' wholeness test (WRAM, port reads and APU frames N of N to its end). This is the same evidence bar as boss sound parts, not a loosening: a window that is not whole counts nothing, and a part with no take or frame stays unseen. Disclosed methodology revision: of the 86 enemy sound parts with an E45 witness or method a, 80 lie inside whole windows and 6 have no take or frame (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json; windows of campaign_audio_2026-09-25.json, campaign_audio_2026-10-08_r34.json and campaign_audio_2026-10-08_r35.json)."
    },
    {
      "pt": "Revisão 2026-10-12-outro-loss-retry (decisão do coordenador em 2026-10-12; carta L89, evidência da carta B35): os passos de saída de chefe (outro) também contam as linhas de um KB datado de perda e retorno do jogador. Uma parte conta como vista quando a linha nomeia o take, os quadros da morte e da restauração do encontro, e o portão de quadros é igual N de N sobre a janela inteira do take, com a restauração dentro dela; uma linha sem quadro de restauração, ou com portão desigual ou parcial, não conta nada. É a mesma barra dos registros de morte de ramo da R16 que o teste de outro já aceita: um take verificado com a perda e o encontro restaurado, sob portão. Primeiro KB: knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json (submarino: vol-b5-submarine-death-1, morte 1545, restauração 3116, portão 4937 de 4937; Utuboros: vol-b5-utuboros-death-1, morte 4482, restauração 9063, portão 13652 de 13652).",
      "en": "Revision 2026-10-12-outro-loss-retry (coordinator decision, 2026-10-12; card L89, evidence from card B35): boss outro steps also count the rows of a dated player loss-retry KB. A part counts as seen when its row names the take, the death and encounter-restore frames, and a frame gate equal N of N over the take's whole window with the restore inside it; a row with no restore frame, or with an unequal or partial gate, counts nothing. This is the same bar as the R16 branch-death records the outro test already accepts: a verified take with the loss and the restored encounter, gated. First KB: knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json (submarine: vol-b5-submarine-death-1, death 1545, restore 3116, gate 4937 of 4937; Utuboros: vol-b5-utuboros-death-1, death 4482, restore 9063, gate 13652 of 13652)."
    }
  ],
  "categories": [
    {
      "id": "player",
      "title": {
        "pt": "X: movimento e sobrevivência",
        "en": "X: movement and survival"
      },
      "weightBp": 1200
    },
    {
      "id": "weapons",
      "title": {
        "pt": "Armas",
        "en": "Weapons"
      },
      "weightBp": 1000
    },
    {
      "id": "enemies",
      "title": {
        "pt": "Inimigos reutilizáveis e cobertura do censo",
        "en": "Reusable enemies and census coverage"
      },
      "weightBp": 1500
    },
    {
      "id": "bosses",
      "title": {
        "pt": "Chefes e subchefes",
        "en": "Bosses and minibosses"
      },
      "weightBp": 1800
    },
    {
      "id": "stages",
      "title": {
        "pt": "As 13 fases",
        "en": "All 13 stages"
      },
      "weightBp": 2600
    },
    {
      "id": "objects",
      "title": {
        "pt": "Melhorias, itens e mecanismos",
        "en": "Upgrades, items and mechanisms"
      },
      "weightBp": 700
    },
    {
      "id": "campaign",
      "title": {
        "pt": "Campanha, menus e apresentação",
        "en": "Campaign, menus and presentation"
      },
      "weightBp": 800
    },
    {
      "id": "delivery",
      "title": {
        "pt": "Distribuição e aceitação final",
        "en": "Delivery and final acceptance"
      },
      "weightBp": 400
    }
  ],
  "features": [
    {
      "id": "player.ground",
      "category": "player",
      "title": {
        "pt": "Andar e mudar de direção",
        "en": "Walk and turn"
      },
      "steps": [
        {
          "id": "player.ground.measured",
          "category": "player",
          "title": {
            "pt": "Arranque ao andar após parada curta ou longa",
            "en": "Walk startup after short or long stops"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Arranque ao andar após parada curta ou longa conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Walk startup after short or long stops as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_walk_start_ramp_contract_test.cpp"
          ],
          "note": {
            "pt": "Aceito no escopo do contrato citado; não certifica casos fora dele.",
            "en": "Accepted within the cited contract scope; does not certify cases outside it."
          }
        },
        {
          "id": "player.ground.remaining",
          "category": "player",
          "title": {
            "pt": "Andar e mudar de direção — cobertura completa",
            "en": "Walk and turn — complete coverage"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/player_steps_2026-09-26.json",
            "tools/tests/test_player_steps.py"
          ],
          "note": {
            "pt": "2026-09-26 (gang G2, regra do W37): rotina de X 81:812E (tabela 81:82A6, despacho 81:82A3) nas 62 execuções com WRAM igual do enemy_evidence_v4 (1.017.907 quadros), imagens exatas em todo quadro contado. Parado $00 (81:82EE), virar $02 (81:839D) e andar $04 (81:8408): cada subestado $0BAB nas duas direções, mais arrancar, parar, virar parado, virar andando e sair andando de uma borda: 22 de 22 partes vistas. Limite: nível de estado; os resíduos de instrução do P50 (81:8478 andar a meia taxa no piso 84:93FF, 81:9E58 parado no nível 8) ficam no KB com a etapa dona.",
            "en": "2026-09-26 (gang G2, W37's rule): X's routine 81:812E (table 81:82A6, dispatch 81:82A3) over the 62 WRAM-equal runs of enemy_evidence_v4 (1.017.907 frames), pictures exact on every counted frame. Idle $00 (81:82EE), turn $02 (81:839D) and walk $04 (81:8408): every $0BAB sub-state in both facings, plus start, stop, turn from idle, turn into a walk and walking off a ledge: 22 of 22 parts seen. Bound: state level; P50's instruction residuals (81:8478 half-rate walk on the 84:93FF floor, 81:9E58 idle in level 8) are listed in the KB under their owner steps."
          }
        }
      ]
    },
    {
      "id": "player.jump",
      "category": "player",
      "title": {
        "pt": "Pular e soltar o botão no ar",
        "en": "Jump and release in mid-air"
      },
      "steps": [
        {
          "id": "player.jump.measured",
          "category": "player",
          "title": {
            "pt": "Soltar o salto reinicia a queda a partir de velocidade vertical zero",
            "en": "Jump release restarts falling from zero vertical speed"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Soltar o salto reinicia a queda a partir de velocidade vertical zero conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Jump release restarts falling from zero vertical speed as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_jump_release_ghost_test.cpp"
          ],
          "note": {
            "pt": "Aceito no escopo do contrato citado; não certifica casos fora dele.",
            "en": "Accepted within the cited contract scope; does not certify cases outside it."
          }
        },
        {
          "id": "player.jump.remaining",
          "category": "player",
          "title": {
            "pt": "Pular e soltar o botão no ar — cobertura completa",
            "en": "Jump and release in mid-air — complete coverage"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/player_steps_2026-09-26.json",
            "tools/tests/test_player_steps.py"
          ],
          "note": {
            "pt": "2026-09-26 (gang G2, regra do W37): rotina de X 81:812E (tabela 81:82A6, despacho 81:82A3) nas 62 execuções com WRAM igual do enemy_evidence_v4 (1.017.907 quadros), imagens exatas em todo quadro contado. Subida $06 (81:8486, subestados $00/$02/$04), queda $08 (81:8522) e pouso $0A (81:8600) nas duas direções; soltar no ar ($06->$08 sem B, 81:84F1..81:84FA) e o topo com B segurado (81:84E7..81:84EE); saltar parado e andando; pouso: 24 de 24 partes vistas. Limite: nível de estado; os resíduos do P50 (80:B8F2/80:B8FA teste de tela, 81:8599/81:859D $3E/$3F no ar, 81:9D11 objeto montado) ficam no KB com os donos.",
            "en": "2026-09-26 (gang G2, W37's rule): X's routine 81:812E (table 81:82A6, dispatch 81:82A3) over the 62 WRAM-equal runs of enemy_evidence_v4 (1.017.907 frames), pictures exact on every counted frame. Ascending $06 (81:8486, sub-states $00/$02/$04), descending $08 (81:8522) and landing $0A (81:8600) in both facings; release in mid-air ($06->$08 with B not held, 81:84F1..81:84FA) and the apex fall with B held (81:84E7..81:84EE); take-off from idle and walk; landing: 24 of 24 parts seen. Bound: state level; P50's residuals (80:B8F2/80:B8FA on-screen test, 81:8599/81:859D $3E/$3F in the air, 81:9D11 ridden object) are listed in the KB with their owners."
          }
        }
      ]
    },
    {
      "id": "player.dash",
      "category": "player",
      "title": {
        "pt": "Dash e salto com dash",
        "en": "Dash and dash jump"
      },
      "steps": [
        {
          "id": "player.dash.measured",
          "category": "player",
          "title": {
            "pt": "Pousar de dash-jump andando sem repetir o arranque",
            "en": "Land from dash jump walking without restarting walk startup"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Pousar de dash-jump andando sem repetir o arranque conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Land from dash jump walking without restarting walk startup as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_dash_jump_landing_walk_ghost_test.cpp"
          ],
          "note": {
            "pt": "Aceito no escopo do contrato citado; não certifica casos fora dele.",
            "en": "Accepted within the cited contract scope; does not certify cases outside it."
          }
        },
        {
          "id": "player.dash.remaining",
          "category": "player",
          "title": {
            "pt": "Dash e salto com dash — cobertura completa",
            "en": "Dash and dash jump — complete coverage"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/player_steps_2026-09-26.json",
            "tools/tests/test_player_steps.py"
          ],
          "note": {
            "pt": "2026-09-26 (gang G2, regra do W37): rotina de X 81:812E (tabela 81:82A6, despacho 81:82A3) nas 62 execuções com WRAM igual do enemy_evidence_v4 (1.017.907 quadros), imagens exatas em todo quadro contado. Dash $14 (81:890E, subestados $00/$02) e fim do dash $20 (81:89AA) nas duas direções; salto com dash $14->$06 (também na água), fim do dash, dash andando e parado, dash saindo de uma borda: 20 de 20 partes vistas. Limite: nível de estado; os resíduos do P50 (81:94B9 tiro carregado, 81:94EF custo da arma, 82:8351 8 tiros ocupados) são das etapas de arma.",
            "en": "2026-09-26 (gang G2, W37's rule): X's routine 81:812E (table 81:82A6, dispatch 81:82A3) over the 62 WRAM-equal runs of enemy_evidence_v4 (1.017.907 frames), pictures exact on every counted frame. Dash $14 (81:890E, sub-states $00/$02) and dash-out $20 (81:89AA) in both facings; dash jump $14->$06 (also in water), dash-out, dash from a walk and from idle, dashing off a ledge: 20 of 20 parts seen. Bound: state level; P50's residuals (81:94B9 charged release, 81:94EF weapon cost clamp, 82:8351 all 8 shot slots busy) belong to the weapon steps."
          }
        }
      ]
    },
    {
      "id": "player.wall",
      "category": "player",
      "title": {
        "pt": "Deslizar e saltar na parede",
        "en": "Wall slide and wall jump"
      },
      "steps": [
        {
          "id": "player.wall.coverage",
          "category": "player",
          "title": {
            "pt": "Deslizar e saltar na parede",
            "en": "Wall slide and wall jump"
          },
          "weightBp": 80,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/x_routine_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/site_media_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_gate_x_routine.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L6), modo ROM-first (megaman-x.exe --rom-first): deslizar na parede (playerState $12, 81:82B8) e salto na parede ($10, 81:82B6) são a rotina do próprio ROM 81:812E. Gate de unidade do P49 exato em toda chamada gateada (deslizar 70, 47 e 64; salto 65, 54 e 59 chamadas em CP, SE e FM); WRAM do K8 igual em todo quadro das três gravações (19,009, 21,058 e 30,150); imagens exatas (V5: 19,006 de 19,008; V6: 21,056 de 21,057 e 30,148 de 30,149). As duas paredes: 67 saltos levam X para a direita e 90 para a esquerda; 75 e 67 deslizes começam com X indo para a direita e para a esquerda (varredura das capturas do K8). Clipes do W22: wall-kick CP f3394..3476, wall-slide CP f9190..9249. Limite: as três gravações (a rotina de X executou 2,469, 3,035 e 3,013 de 5,190 instruções por filme); o motor legado não é certificado.",
            "en": "2026-09-24 (card L6), ROM-first mode (megaman-x.exe --rom-first): wall slide (playerState $12, 81:82B8) and wall jump ($10, 81:82B6) are the ROM's own routine 81:812E. P49 unit gate exact on every gated call (slide 70, 47 and 64; jump 65, 54 and 59 calls in CP, SE and FM); K8 WRAM equal on every frame of the three recordings (19,009, 21,058 and 30,150); pictures exact (V5: 19,006 of 19,008; V6: 21,056 of 21,057 and 30,148 of 30,149). Both walls: 67 wall jumps carry X right and 90 left; 75 and 67 slides start with X moving right and left (scan of K8's captures). W22 clips: wall-kick CP f3394..3476, wall-slide CP f9190..9249. Bound: the three recordings (X's routine ran 2,469, 3,035 and 3,013 of 5,190 instructions per movie); the legacy engine is not certified."
          }
        },
        {
          "id": "player.wall.world-bound",
          "category": "player",
          "title": {
            "pt": "Salto na parede e borda do mundo não escalável",
            "en": "Wall-jump impulse and non-climbable world boundary"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Salto na parede e borda do mundo não escalável conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Wall-jump impulse and non-climbable world boundary as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/player_walljump_contract_test.cpp"
          ],
          "note": {
            "pt": "Contrato U67/U204; não fecha cantos, todas as superfícies nem apresentação completa.",
            "en": "U67/U204 contract; does not close corners, all surfaces or complete presentation."
          }
        }
      ]
    },
    {
      "id": "player.ladder-water",
      "category": "player",
      "title": {
        "pt": "Escadas e movimento na água",
        "en": "Ladders and underwater movement"
      },
      "steps": [
        {
          "id": "player.ladder-water.coverage",
          "category": "player",
          "title": {
            "pt": "Escadas e movimento na água",
            "en": "Ladders and underwater movement"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/player_steps_2026-09-26.json",
            "tools/tests/test_player_steps.py"
          ],
          "note": {
            "pt": "2026-09-26 (gang G2, regra do W37): rotina de X 81:812E (tabela 81:82A6, despacho 81:82A3) nas 62 execuções com WRAM igual do enemy_evidence_v4 (1.017.907 quadros), imagens exatas em todo quadro contado. Escadas: agarrar do ar $24 (81:8D33) e do chão $28 (81:8DB5), subir/descer e parar em $2A (81:8E26/81:8E33), atirar nela (81:8E18), sair no topo $26 (81:8E4F, 81:8D73), soltar com salto, passar do fim e descer no chão (81:8E58, 81:8E6A), cada estado nas duas direções. Água ($0C18 bit 0: liga em 84:955E/84:9885 com peso $21, desliga em 84:9530/84:96A3): parado, virar, andar, pular, cair, pousar, parede, dash e fim do dash na água, entrar e sair. 38 de 38 partes vistas.",
            "en": "2026-09-26 (gang G2, W37's rule): X's routine 81:812E (table 81:82A6, dispatch 81:82A3) over the 62 WRAM-equal runs of enemy_evidence_v4 (1.017.907 frames), pictures exact on every counted frame. Ladders: grab from the air $24 (81:8D33) and from the ground $28 (81:8DB5), climb up/down and hold on $2A (81:8E26/81:8E33), shoot on it (81:8E18), exit at the top $26 (81:8E4F, 81:8D73), let go with jump, run off the end and step off at the bottom (81:8E58, 81:8E6A), each state in both facings. Water ($0C18 bit 0: set 84:955E/84:9885 with weight $21, cleared 84:9530/84:96A3): idle, turn, walk, jump, fall, land, wall slide/jump, dash and dash-out in water, entering and leaving. 38 of 38 parts seen."
          }
        }
      ]
    },
    {
      "id": "player.terrain",
      "category": "player",
      "title": {
        "pt": "Chão, rampas e plataformas",
        "en": "Floors, slopes and platforms"
      },
      "steps": [
        {
          "id": "player.terrain.coverage",
          "category": "player",
          "title": {
            "pt": "Chão, rampas e plataformas",
            "en": "Floors, slopes and platforms"
          },
          "weightBp": 150,
          "status": "partial",
          "partial": {
            "seen": 35,
            "total": 36,
            "$source": "knowledge_base/mmx1/rom/player_coverage_2026-09-27.json#/steps/player.terrain.coverage (seen 35 of parts 36); read at git 8e799dcc1"
          },
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_slope_seam_contract_test.cpp"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        }
      ]
    },
    {
      "id": "player.death",
      "category": "player",
      "title": {
        "pt": "Morte e retorno ao checkpoint",
        "en": "Death and checkpoint return"
      },
      "steps": [
        {
          "id": "player.death.coverage",
          "category": "player",
          "title": {
            "pt": "Morte e retorno ao checkpoint",
            "en": "Death and checkpoint return"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_death_burst_contract_test.cpp",
            "knowledge_base/mmx1/rom/player_coverage_2026-09-27.json",
            "knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json",
            "docs/tasks/done/R111-declared-resolved-deep-items.md"
          ],
          "note": {
            "pt": "2026-10-09 (L44, regra do LG6 s2): verificado. As 17 partes estão resolvidas: as vistas nas fontes citadas e as duas formas de morte que nenhuma gravação mostra (restauração de ação e esmagamento, P55), que contam como prontas pela regra do David de 2026-10-09 (\"nessas situações podemos considerar como prontas então para o projeto\") para itens da lista docs/goal/DEEP-INVESTIGATIONS.md, cada um com uma tentativa séria registrada (knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json). Não é uma prova completa: conta pela decisão do dono.",
            "en": "2026-10-09 (L44, LG6 s2 rule): verified. All 17 parts are resolved: those seen in the cited sources and the two death causes no recording shows (action restore and crush, P55), which count as done by David's rule of 2026-10-09 for items on docs/goal/DEEP-INVESTIGATIONS.md, each with a serious attempt recorded (knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json). Not a complete proof: counted by the owner's decision."
          }
        }
      ]
    },
    {
      "id": "player.presentation",
      "category": "player",
      "title": {
        "pt": "Poses e sons de X",
        "en": "X poses and sounds"
      },
      "steps": [
        {
          "id": "player.presentation.coverage",
          "category": "player",
          "title": {
            "pt": "Poses e sons de X",
            "en": "X poses and sounds"
          },
          "weightBp": 140,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_landing_sfx_contract_test.cpp",
            "knowledge_base/mmx1/rom/player_coverage_2026-09-27.json",
            "knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json",
            "knowledge_base/mmx1/rom/x_animation_palette_catalog_2026-10-13_r150.json",
            "docs/tasks/done/R150-armoured-kneel-level-lists.md",
            "docs/tasks/done/R149-hadouken-witness-and-last-proofs.md",
            "docs/tasks/done/R148-x-anim-last-seven.md",
            "docs/tasks/done/R147-x-anim-full-trace-and-kneel.md"
          ],
          "note": {
            "pt": "2026-10-13 (L174, cartas R147 a R150): 42 de 42 partes de apresentação do X vistas ou provadas (knowledge_base/mmx1/rom/player_coverage_2026-09-27.json#/steps/player.presentation.coverage (seen 38 of parts 42); read at git eff18a3b4; plus 3 parts pose-22-00-l, pose-22-02-l, pose-22-04-l per knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json#/steps/player.presentation.coverage/parts; plus part animation-palette-catalog per knowledge_base/mmx1/rom/x_animation_palette_catalog_2026-10-13_r150.json (R150, records seen or proved)). A última, o catálogo de animações e paletas do X, fecha com 192 de 192 animações (178 vistas em gravações conferidas, 14 provadas impossíveis pela ROM, entre elas o X ajoelhado de armadura: o Zero só faz essa cena na estrada da introdução, onde o X ainda não pode ter armadura) e 21 de 21 paletas (knowledge_base/mmx1/rom/x_animation_palette_catalog_2026-10-13_r150.json).",
            "en": "2026-10-13 (L174, cards R147 to R150): 42 of 42 X presentation parts seen or proven (knowledge_base/mmx1/rom/player_coverage_2026-09-27.json#/steps/player.presentation.coverage (seen 38 of parts 42); read at git eff18a3b4; plus 3 parts pose-22-00-l, pose-22-02-l, pose-22-04-l per knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json#/steps/player.presentation.coverage/parts; plus part animation-palette-catalog per knowledge_base/mmx1/rom/x_animation_palette_catalog_2026-10-13_r150.json (R150, records seen or proved)). The last, X's animation and palette catalogue, closes with 192 of 192 animations (178 seen in verified takes, 14 proven impossible from the ROM, among them the armoured kneel: Zero only plays that scene on the intro highway, where X cannot wear armour yet) and 21 of 21 palettes (knowledge_base/mmx1/rom/x_animation_palette_catalog_2026-10-13_r150.json)."
          }
        },
        {
          "id": "player.presentation.wall-facing",
          "category": "player",
          "title": {
            "pt": "Pose de deslizamento olha para a parede; tiro e salto saem dela",
            "en": "Wall-slide pose faces the wall; shot and kick face away"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Pose de deslizamento olha para a parede; tiro e salto saem dela conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Wall-slide pose faces the wall; shot and kick face away as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/player_wallslide_facing_contract_test.cpp"
          ],
          "note": {
            "pt": "Pose de deslizamento sem tiro medida em CP; outras animações continuam abertas.",
            "en": "Non-shooting slide pose measured in CP; other animations remain open."
          }
        }
      ]
    },
    {
      "id": "player.hurt",
      "category": "player",
      "title": {
        "pt": "Receber dano e recuperar o controle",
        "en": "Take damage and recover control"
      },
      "steps": [
        {
          "id": "player.hurt.entry",
          "category": "player",
          "title": {
            "pt": "Entrada do dano sem mover X antes da hora",
            "en": "Damage entry without early movement"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_hurt_scene_contract_test.cpp",
            "knowledge_base/mmx1/player/hurt_entry_2026-09-19/measurement.json"
          ],
          "note": {
            "pt": "Casos medidos de Chill Penguin; outras direções, paredes, plataformas e revisão de jogo/áudio continuam separados.",
            "en": "Measured Chill Penguin cases; other directions, walls, platforms and owner play/audio review remain separate."
          }
        },
        {
          "id": "player.hurt.recoil",
          "category": "player",
          "title": {
            "pt": "Recuo com e sem armadura",
            "en": "Armored and unarmored recoil"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_hurt_scene_contract_test.cpp",
            "knowledge_base/mmx1/player/hurt_entry_2026-09-19/measurement.json"
          ],
          "note": {
            "pt": "Casos medidos de Chill Penguin; outras direções, paredes, plataformas e revisão de jogo/áudio continuam separados.",
            "en": "Measured Chill Penguin cases; other directions, walls, platforms and owner play/audio review remain separate."
          }
        },
        {
          "id": "player.hurt.recovery",
          "category": "player",
          "title": {
            "pt": "Recuperação e invulnerabilidade medidas",
            "en": "Measured recovery and invulnerability"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_hurt_scene_contract_test.cpp",
            "knowledge_base/mmx1/player/hurt_entry_2026-09-19/measurement.json"
          ],
          "note": {
            "pt": "Casos medidos de Chill Penguin; outras direções, paredes, plataformas e revisão de jogo/áudio continuam separados.",
            "en": "Measured Chill Penguin cases; other directions, walls, platforms and owner play/audio review remain separate."
          }
        },
        {
          "id": "player.hurt.quarter",
          "category": "player",
          "title": {
            "pt": "Pouso após dano na rampa medida",
            "en": "Hurt landing on the measured quarter ramp"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/player_hurt_scene_contract_test.cpp",
            "knowledge_base/mmx1/player/hurt_entry_2026-09-19/measurement.json",
            "knowledge_base/mmx1/player/hurt_terrain_2026-09-19/measurement.json"
          ],
          "note": {
            "pt": "Casos medidos de Chill Penguin; outras direções, paredes, plataformas e revisão de jogo/áudio continuam separados.",
            "en": "Measured Chill Penguin cases; other directions, walls, platforms and owner play/audio review remain separate."
          }
        },
        {
          "id": "player.hurt.remaining",
          "category": "player",
          "title": {
            "pt": "Dano em todos os terrenos e interações",
            "en": "Damage across all terrain and interactions"
          },
          "weightBp": 90,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/player_coverage_2026-09-27.json",
            "knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json",
            "docs/tasks/done/R111-declared-resolved-deep-items.md"
          ],
          "note": {
            "pt": "2026-10-09 (L44, regra do LG6 s2): verificado. As 55 partes estão resolvidas: as vistas nas fontes citadas e os quatro casos raros de dano (P60), que contam como prontas pela regra do David de 2026-10-09 (\"nessas situações podemos considerar como prontas então para o projeto\") para itens da lista docs/goal/DEEP-INVESTIGATIONS.md, cada um com uma tentativa séria registrada (knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json). Não é uma prova completa: conta pela decisão do dono.",
            "en": "2026-10-09 (L44, LG6 s2 rule): verified. All 55 parts are resolved: those seen in the cited sources and the four rare hurt cases (P60), which count as done by David's rule of 2026-10-09 for items on docs/goal/DEEP-INVESTIGATIONS.md, each with a serious attempt recorded (knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json). Not a complete proof: counted by the owner's decision."
          }
        }
      ]
    },
    {
      "id": "weapon.buster",
      "category": "weapons",
      "title": {
        "pt": "X-Buster",
        "en": "X-Buster"
      },
      "steps": [
        {
          "id": "weapon.buster.medium-birth",
          "category": "weapons",
          "title": {
            "pt": "Nascimento e acompanhamento do tiro médio medidos",
            "en": "Measured medium-shot birth and follow"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/buster/charge_l1_birth_2026-09-17.json"
          ],
          "note": {
            "pt": "Aceito no escopo do contrato citado; não certifica casos fora dele.",
            "en": "Accepted within the cited contract scope; does not certify cases outside it."
          },
          "family": "buster"
        },
        {
          "id": "weapon.buster.normal",
          "category": "weapons",
          "title": {
            "pt": "Tiro normal: ciclo completo",
            "en": "Normal shot: complete lifecycle"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/weapons/buster/rapid_fire_cadence_2026-09-20.json",
            "knowledge_base/mmx1/weapons/buster/shot_lifetime_2026-09-23.json",
            "knowledge_base/mmx1/weapons/buster/shot_cull_window_2026-09-23.json",
            "tests/cpp/buster_rapid_fire_ghost_test.cpp",
            "tests/cpp/buster_shot_lifetime_ghost_test.cpp"
          ],
          "note": {
            "pt": "W2+W5+W6+W7 (2026-09-23): nascimento e cadência, trajetória por quadro nos dois sentidos, saída de tela relativa à câmera; borda vertical não exercitada (tiro horizontal).",
            "en": "W2+W5+W6+W7 (2026-09-23): birth and cadence, per-frame flight both directions, camera-relative screen-edge clear; vertical edge not exercised (level shot)."
          },
          "family": "buster"
        },
        {
          "id": "weapon.buster.charged",
          "category": "weapons",
          "title": {
            "pt": "Carga completa e níveis",
            "en": "Full charge and charge levels"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_charged_cases_2026-09-25.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W32-weapon-charged-cases.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L10, a partir das fitas do W32), modo ROM-first: fita buster-levels do card W32 (a partir de tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 896 de 896 entradas de NMI, pixels exatos em 895 de 895, frame gate igual em 896 de 896 (0 divergências de instrução lida). Níveis de carga (81:97D2): nível 1 ($0C03 = 3) 30 quadros após apertar, nível 2 ($0C03 = 2) 100, nível 3 ($0C03 = 1) 178; o nível 3 só com as peças do braço (81:98C6), e o save tem $1F99 = $FF, então os três. Nível 1: aperto em f149, limiar em f179, liberação em f209; $01 (lemonCharged 81:A2D2) nasce em f209, vive 34 quadros e é liberado fora da tela à esquerda no estado 8 (81:A40D). Nível 2: aperto em f299, limiar em f399, liberação em f439; $03 (lemonChargedStrong 83:8C3E) nasce em f439, vive 25 quadros e é liberado fora da tela à esquerda no estado 8 (83:8D2F). Nível 3: aperto em f529, limiar em f707, liberação em f749; três $02 (lemonSuperCharge 83:898E) nascem em f749, f754, f754, vivem 48, 49 e 46 quadros e são liberados fora da tela à esquerda no estado 8 (83:8B65); $1D nasce em f749, vive 11 quadros e é liberado no fim da animação (83:A5F9); doze efeitos do X $00 nascem em f756..762, vivem de 20 a 26 quadros e são liberados no fim do script (81:A1A1). O objeto de carga (efeito do X $01, weaponCharging 81:A1BF) vive do nível 1 até a liberação (30, 110 e 190 quadros) e se libera quando $0C00 = 0 (81:A1D9 -> 82:8398). Limite: uma carga e uma liberação por nível; o som pertence ao passo de som.",
            "en": "2026-09-25 (card L10, from W32's tapes), ROM-first mode: card W32's tape buster-levels (from tools/oracle/fixtures/david_allweapons.mss): WRAM equal on 896 of 896 NMI entries, pixels exact 895 of 895, frame gate equal 896 of 896 (read-instruction mismatches 0). Charge levels (81:97D2): level 1 ($0C03 = 3) 30 frames after the press, level 2 ($0C03 = 2) 100, level 3 ($0C03 = 1) 178; level 3 only with the arm parts (81:98C6), and the save has $1F99 = $FF, so all three. Level 1: press f149, threshold f179, release f209; $01 (lemonCharged 81:A2D2) born f209, 34 frames, freed off screen left in state 8 (81:A40D). Level 2: press f299, threshold f399, release f439; $03 (lemonChargedStrong 83:8C3E) born f439, 25 frames, freed off screen left in state 8 (83:8D2F). Level 3: press f529, threshold f707, release f749; three $02 (lemonSuperCharge 83:898E) born f749, f754, f754, 48, 49 and 46 frames, freed off screen left in state 8 (83:8B65); $1D born f749, 11 frames, freed at its anim end (83:A5F9); twelve X-effects $00 born f756..762, 20 to 26 frames, freed at their script end (81:A1A1). The charge object (X-effect $01, weaponCharging 81:A1BF) lives from level 1 to the release (30, 110 and 190 frames) and frees itself once $0C00 = 0 (81:A1D9 -> 82:8398). Bound: one charge and release per level; sound belongs to the sound step."
          },
          "family": "buster"
        },
        {
          "id": "weapon.buster.contact",
          "category": "weapons",
          "title": {
            "pt": "Dano, colisão e ricochete",
            "en": "Damage, contact and deflection"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/buster_contact_2026-10-09_r103.json",
            "tools/oracle/post/reduce_buster_contact.py",
            "tools/tests/test_buster_contact.py",
            "docs/tasks/done/R103-buster-contact-unequal-rows.md"
          ],
          "note": {
            "pt": "2026-10-09 (L39, regra do LG6 s2 como em L38b): verificado; knowledge_base/mmx1/rom/buster_contact_2026-10-09_r103.json marca as 12 partes vistas (4 tiros do buster $00-$03 x matriz de dano, resposta de contato e rebate de linha negativa). As 43 linhas que o R58 deixou desiguais são explicadas pela própria chamada JSL 84:9B43 capturada (R103): chamadores 87:8C4E ($05), 81:C553 ($07), 81:D569 ($11) e 88:C912 ($65, rebate 84:9EEE); HP na saída igual ao instantâneo K5 do quadro seguinte em 43 de 43.",
            "en": "2026-10-09 (L39, LG6 s2 rule as in L38b): verified; knowledge_base/mmx1/rom/buster_contact_2026-10-09_r103.json marks all 12 parts seen (4 buster shots $00-$03 x damage-row matrix, contact response and negative-row deflection). The 43 rows R58 left unequal are explained by their own captured JSL 84:9B43 call (R103): callers 87:8C4E ($05), 81:C553 ($07), 81:D569 ($11) and 88:C912 ($65, deflect 84:9EEE); exit HP equals the next frame's K5 snapshot in 43 of 43."
          },
          "family": "buster"
        },
        {
          "id": "weapon.buster.presentation",
          "category": "weapons",
          "title": {
            "pt": "Sprites, poses e sons",
            "en": "Sprites, poses and sounds"
          },
          "weightBp": 25,
          "status": "partial",
          "partial": {
            "seen": 125,
            "total": 126,
            "$source": "knowledge_base/mmx1/rom/buster_presentation_parts_2026-10-09_r78.json#/parts (seen 125 of 126: aura-cell 66 of 66, shot-cell 49 of 49, sound-call 10 of 11; sound parts count only inside a whole APU-gated window of their take, R3/R38; R84 witnesses knowledge_base/mmx1/rom/buster_presentation_witnesses_2026-10-09_r84.json#/witnesses); read at git aa8068105"
          },
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/buster/weapon.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          },
          "family": "buster"
        },
        {
          "id": "weapon.buster.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso em todas as situações da campanha",
            "en": "Use across campaign situations"
          },
          "weightBp": 25,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/tests/test_weapon_poses_w41.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W41-weapon-poses-and-buster-states, regra do W37 sobre as 80 gravações com WRAM igual do W40): os estados do buster listados da ROM (tabela de OIDs 80:F68F; 81:A16D é o weapon__00 de outra lista): $00 weaponBullet_lemon_00 (81:A228, table 81:A22E: 5 states, 0 sub-tables); $01 weaponBullet_lemonCharged_01 (81:A2D2, table 81:A2DC: 5 states, 3 sub-tables); $02 weaponShot_lemonSuperCharge_02 (83:898E, table 83:899C: 5 states, 4 sub-tables); $03 weaponShot_lemonCharged_03 (83:8C3E, table 83:8C44: 5 states, 3 sub-tables); todo estado e subestado listado é visto (o estado $00 roda no quadro do nascimento). Partes de weapons_evidence_2026-09-26e: fired: 5.722 quadros, imagens 5.721 de 5.722; facing_left: 1.247 quadros, imagens 1.247 de 1.247; facing_right: 4.475 quadros, imagens 4.474 de 4.475; ground: 3.078 quadros, imagens 3.078 de 3.078; air: 2.596 quadros, imagens 2.595 de 2.596. Sem ramo de água (W37). O único quadro inexato, launch-octopus-auto f3844, é colour_math, resíduo visual (regra de resíduo do L8/L29). Limite: as gravações registradas.",
            "en": "2026-09-26 (card W41-weapon-poses-and-buster-states, W37's rule over W40's 80 WRAM-equal takes): the buster's states listed from the ROM (X-shot OID table 80:F68F; 81:A16D is weapon__00 of another list): $00 weaponBullet_lemon_00 (81:A228, table 81:A22E: 5 states, 0 sub-tables); $01 weaponBullet_lemonCharged_01 (81:A2D2, table 81:A2DC: 5 states, 3 sub-tables); $02 weaponShot_lemonSuperCharge_02 (83:898E, table 83:899C: 5 states, 4 sub-tables); $03 weaponShot_lemonCharged_03 (83:8C3E, table 83:8C44: 5 states, 3 sub-tables); every listed state and sub-state is seen in the takes (state $00 runs in the birth frame). Parts from weapons_evidence_2026-09-26e: fired: 5,722 frames, pictures 5,721 of 5,722; facing_left: 1,247 frames, pictures 1,247 of 1,247; facing_right: 4,475 frames, pictures 4,474 of 4,475; ground: 3,078 frames, pictures 3,078 of 3,078; air: 2,596 frames, pictures 2,595 of 2,596. No water branch (W37). The only inexact frame, launch-octopus-auto f3844, is colour_math, a visual residual (L8/L29's residual rule). Bound: the recorded takes."
          },
          "family": "buster"
        },
        {
          "id": "weapon.buster.shot-limit",
          "category": "weapons",
          "title": {
            "pt": "Limite de três tiros normais ativos, sem cooldown extra",
            "en": "Three live normal shots without extra cooldown"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Limite de três tiros normais ativos, sem cooldown extra conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Three live normal shots without extra cooldown as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/player_buster_ghost_test.cpp"
          ],
          "note": {
            "pt": "Contrato A5 para limite de tiros; colisão e trajetória geral ficam nas etapas restantes.",
            "en": "A5 shot-limit contract; collision and general trajectory remain in other steps."
          },
          "family": "buster"
        }
      ],
      "family": "buster"
    },
    {
      "id": "weapon.shotgun-ice",
      "category": "weapons",
      "title": {
        "pt": "Shotgun Ice",
        "en": "Shotgun Ice"
      },
      "steps": [
        {
          "id": "weapon.shotgun-ice.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/object_tables_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/showcase_clips_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L6), modo ROM-first (megaman-x.exe --rom-first): tiro normal 0x0E (mainWeaponShot_ice_0e, main 83:9807) disparado pela entrada do David nas três gravações; WRAM do K8 igual em todo quadro (19,009, 21,058 e 30,150), logo nascimento, velocidade, trajetória e duração iguais às do original. Disparado 61 vezes para a direita e 73 para a esquerda; liberado fora da tela (relativo à câmera) 49 vezes indo para a direita e 63 para a esquerda (varredura das capturas do K8). Gate de unidade do E34: 881 chamadas exatas (CP 81 de 81, SE 400 de 400, FM 400 de 400); clipe shotgun-ice do W21: WRAM 503 de 503 quadros, gate de quadros igual. Limite: o E34 executou no máximo 665 de 1885 instruções da rotina do tiro.",
            "en": "2026-09-24 (card L6), ROM-first mode (megaman-x.exe --rom-first): normal shot 0x0E (mainWeaponShot_ice_0e, main 83:9807) fired by David's input in the three recordings; K8 WRAM equal on every frame (19,009, 21,058 and 30,150), so birth, speed, trajectory and lifetime equal the original's. Launched 61 times right and 73 left; freed off the screen (camera-relative) 49 times going right and 63 going left (scan of K8's captures). E34 unit gate: 881 calls exact (CP 81 of 81, SE 400 of 400, FM 400 of 400); W21 clip shotgun-ice: WRAM 503 of 503 frames, frame gate equal. Bound: E34 ran at most 665 of 1885 instructions of the shot's routine."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/shotgun-ice/weapon.json",
            "knowledge_base/mmx1/rom/weapon_cases_w35_2026-09-25.json",
            "knowledge_base/mmx1/rom/shotgun_ice_sled_2026-10-02.json",
            "tools/tests/test_shotgun_ice_sled_capture.py",
            "knowledge_base/mmx1/rom/shotgun_ice_sled_survivor_2026-10-04.json",
            "docs/tasks/done/W45-sled-survivor-break-rereduce.md"
          ],
          "note": {
            "pt": "2026-10-02, T6, gravação verificada do David w-a: WRAM/gate 5550/5550, pixels 5549/5549. Quebras na parede com velocidade à esquerda em f3918, f4386, f4773 e f5232; cada uma gera seis peças OID $02 que caem e são liberadas (83:A54E..83:A596; 87:82B8..87:82C7). X recebe dano não letal montado em f2055, f2175, f2756, f2999 e f3186. W35 conserva carga, nascimento, estados, montaria e saída fora da tela. 9/10 obrigações, 0 bp: falta estado principal 8 do sled. 84:9E6E..84:9E94 exige que o INIMIGO sobreviva ao dano do projétil; dano recebido por X e subestado 8 não comprovam esse ramo. Ação: gravar um sled carregado atingindo um inimigo comum que sobreviva, seguido da quebra e da liberação de suas seis peças. KB knowledge_base/mmx1/rom/shotgun_ice_sled_2026-10-02.json. 2026-10-04 (W45, LG5): verificado; 10 de 10 obrigações do disparo carregado entre shotgun_ice_sled_2026-10-02.json e shotgun_ice_sled_survivor_2026-10-04.json (sigma2 f3569, quebra no estado de dano 8, seis peças liberadas até f3637); WRAM 41295 de 41295; imagens exatas 69 de 69 em f3569..3637; teste tools/tests/test_shotgun_ice_sled_capture.py.",
            "en": "2026-10-02, T6, David's verified w-a: WRAM/frame gate 5550/5550, pixels 5549/5549. Wall breaks with left-going speed at f3918, f4386, f4773 and f5232; each creates six OID $02 pieces that fall and are freed (83:A54E..83:A596; 87:82B8..87:82C7). X takes nonlethal damage while mounted at f2055, f2175, f2756, f2999 and f3186. W35 retains charge, birth, states, riding and offscreen termination. 9/10 obligations, 0 bp: sled main state 8 missing. 84:9E6E..84:9E94 requires the ENEMY to survive projectile damage; damage received by X and sub-state 8 do not prove that branch. Action: record a charged sled hitting a surviving common enemy, then breaking and freeing all six pieces. KB knowledge_base/mmx1/rom/shotgun_ice_sled_2026-10-02.json. 2026-10-04 (W45, LG5): verified; 10 of 10 charged obligations across shotgun_ice_sled_2026-10-02.json and shotgun_ice_sled_survivor_2026-10-04.json (sigma2 f3569 damage state 8 break, six pieces freed by f3637); WRAM 41295 of 41295; pictures exact 69 of 69 over f3569..3637; test tools/tests/test_shotgun_ice_sled_capture.py."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 3 (chill-penguin-new-game q17652), limit 219 (chill-penguin-new-game q17652), refill 1 (sigma1-zero-arm q21842), switch_pause 1 (sigma3-weapons-branch q22105), switch_lr 82 (boomer-kuwanger q7567), pause 2 (sigma-final-attempt-2 q4080), death 2 (boomer-kuwanger q33575), continue 4 (boomer-kuwanger q20844), empty 7 (sigma4-final-not-beaten q28057). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 3 (chill-penguin-new-game f17652), limit 219 (chill-penguin-new-game f17652), refill 1 (sigma1-zero-arm f21842), switch_pause 1 (sigma3-weapons-branch f22105), switch_lr 82 (boomer-kuwanger f7567), pause 2 (sigma-final-attempt-2 f4080), death 2 (boomer-kuwanger f33575), continue 4 (boomer-kuwanger f20844), empty 7 (sigma4-final-not-beaten f28057). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.impact",
          "category": "weapons",
          "title": {
            "pt": "Posição do efeito de impacto medido",
            "en": "Measured impact-effect position"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/STATE.md",
            "tests/cpp/gameplay_buster_impact_contract_test.cpp"
          ],
          "note": {
            "pt": "Só efeito de contato aceito; dano e interações restantes não são inferidos.",
            "en": "Only the accepted contact effect; remaining damage and interactions are not inferred."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json",
            "tools/tests/test_weapons_evidence.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W37, decisões 1-3 do coordenador, a partir das capturas K5 das gravações do R10 com WRAM igual inteira e da sigma-final-attempt-2 do R12): toda parte do critério roda nas gravações do David, com imagens exatas nos seus quadros (V12); partes do re/mmx1 por banco:endereço no KB. Vistas (contagem, primeira gravação e quadro): terrain 89 (boomer-kuwanger f12716), state_04 16 (launch-octopus-and-sting-flooded f11406), state_06 35 (boomer-kuwanger f8715), state_08 336 (boomer-kuwanger f11192). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card W37, coordinator decisions 1-3, from the K5 captures of R10's WRAM-equal whole takes and R12's sigma-final-attempt-2): every part of the acceptance runs in David's takes, pictures exact on their frames (V12); parts from re/mmx1 by bank:addr in the KB. Seen (count, first take and frame): terrain 89 (boomer-kuwanger f12716), state_04 16 (launch-octopus-and-sting-flooded f11406), state_06 35 (boomer-kuwanger f8715), state_08 336 (boomer-kuwanger f11192). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "partial",
          "partial": {
            "seen": 12,
            "total": 13,
            "$source": "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json#/observed ($0E+$17 poses with frames > 0: 12 of 13; unseen equal w44 missing); read at git 82ac4e471"
          },
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/shotgun-ice/weapon.json"
          ],
          "note": {
            "pt": "Campanhas históricas têm resultados parciais e pendências posteriores; requer reconciliação por subetapa.",
            "en": "Historical campaigns have partial results and later open issues; reconciliation is required per substep."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "partial",
          "partial": {
            "seen": 9,
            "total": 11,
            "$source": "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/shotgun-ice/calls (status gated 8 of 11 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 819478:17; the unresolved 83A46E flow -> 83:A470 is plain code (LDA #$FA00; STA $1C), no sound call, per card A29 (docs/tasks/done/A29-charge-cancel-sfx-targets.md, Result)); read at git 81572d183"
          },
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/shotgun-ice/weapon.json"
          ],
          "note": {
            "pt": "Campanhas históricas têm resultados parciais e pendências posteriores; requer reconciliação por subetapa.",
            "en": "Historical campaigns have partial results and later open issues; reconciliation is required per substep."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 202 quadros disparados, 3 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 202 (chill-penguin-new-game q17652), facing_left 70 (boomer-kuwanger q11192), facing_right 132 (chill-penguin-new-game q17652), ground 121 (chill-penguin-new-game q17652), air 72 (boomer-kuwanger q8715), state_00 1.164 (chill-penguin-new-game q17652), state_02 1.043 (chill-penguin-new-game q17652), state_04 16 (launch-octopus-and-sting-flooded q11406), state_06 35 (boomer-kuwanger q8715), state_08 336 (boomer-kuwanger q11192). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 202 fired frames, 3 with the exact drop. Seen (count, first take and frame): fired 202 (chill-penguin-new-game f17652), facing_left 70 (boomer-kuwanger f11192), facing_right 132 (chill-penguin-new-game f17652), ground 121 (chill-penguin-new-game f17652), air 72 (boomer-kuwanger f8715), state_00 1,164 (chill-penguin-new-game f17652), state_02 1,043 (chill-penguin-new-game f17652), state_04 16 (launch-octopus-and-sting-flooded f11406), state_06 35 (boomer-kuwanger f8715), state_08 336 (boomer-kuwanger f11192). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "shotgun-ice"
        },
        {
          "id": "weapon.shotgun-ice.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/weapon_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/shotgun-ice/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "shotgun-ice"
        }
      ],
      "family": "shotgun-ice"
    },
    {
      "id": "weapon.storm-tornado",
      "category": "weapons",
      "title": {
        "pt": "Storm Tornado",
        "en": "Storm Tornado"
      },
      "steps": [
        {
          "id": "weapon.storm-tornado.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/object_tables_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/showcase_clips_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L6), modo ROM-first (megaman-x.exe --rom-first): tiro normal 0x0B (mainWeaponShot_storm_0b, main 83:9550) disparado pela entrada do David nas três gravações; WRAM do K8 igual em todo quadro (19,009, 21,058 e 30,150), logo nascimento, velocidade, trajetória e duração iguais às do original. Disparado 3 vezes para a direita e 2 para a esquerda; liberado fora da tela (relativo à câmera) 3 vezes indo para a direita e 2 para a esquerda (varredura das capturas do K8). Gate de unidade do E34: 436 chamadas exatas (SE 186 de 186, FM 250 de 250); clipe storm-tornado do W21: WRAM 422 de 422 quadros, gate de quadros igual. Limite: o E34 executou no máximo 317 de 420 instruções da rotina do tiro.",
            "en": "2026-09-24 (card L6), ROM-first mode (megaman-x.exe --rom-first): normal shot 0x0B (mainWeaponShot_storm_0b, main 83:9550) fired by David's input in the three recordings; K8 WRAM equal on every frame (19,009, 21,058 and 30,150), so birth, speed, trajectory and lifetime equal the original's. Launched 3 times right and 2 left; freed off the screen (camera-relative) 3 times going right and 2 going left (scan of K8's captures). E34 unit gate: 436 calls exact (SE 186 of 186, FM 250 of 250); W21 clip storm-tornado: WRAM 422 of 422 frames, frame gate equal. Bound: E34 ran at most 317 of 420 instructions of the shot's routine."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_charged_cases_2026-09-25.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W32-weapon-charged-cases.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L10, a partir das fitas do W32), modo ROM-first: fita storm-tornado-charged-end do card W32 (a partir de tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 820 de 820 entradas de NMI, pixels exatos em 819 de 819, frame gate igual em 820 de 820 (0 divergências de instrução lida). Aperto em f173, limiar do nível 3 em f351 (178 quadros), liberação em f373. A forma carregada são dois $14 (chargeShot_storm 83:9FAA) nascidos em f373 em x 196, y 1087 e y 1279 (o segundo com +$0B ligado, 83:A0B5); cada um cumpre a sequência fixa (animação até o fim, 83:A057; 30 quadros, 83:A06C; animação até o fim, 83:A097) e CODE_83A0A4 o libera em 83:A0B0 após 55 quadros (f428), o segundo abaixo da tela. O objeto de carga (efeito do X $01) viveu 170 quadros, de f203 à liberação. Limite: uma carga e uma liberação; o som pertence ao passo de som.",
            "en": "2026-09-25 (card L10, from W32's tapes), ROM-first mode: card W32's tape storm-tornado-charged-end (from tools/oracle/fixtures/david_allweapons.mss): WRAM equal on 820 of 820 NMI entries, pixels exact 819 of 819, frame gate equal 820 of 820 (read-instruction mismatches 0). Press f173, level-3 threshold f351 (178 frames), release f373. The charged form is two $14 (chargeShot_storm 83:9FAA) born at f373 at x 196, y 1087 and y 1279 (the second with +$0B set, 83:A0B5); each runs the fixed sequence (anim to its end, 83:A057; 30 frames, 83:A06C; anim to its end, 83:A097) and CODE_83A0A4 frees it at 83:A0B0 after 55 frames (f428), the second below the view. The charge object (X-effect $01) lived 170 frames, f203 to the release. Bound: one charge and release; sound belongs to the sound step."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 2 (storm-eagle-and-spark-dark q15989), limit 107 (storm-eagle-and-spark-dark q15989), refill 1 (sigma1-zero-arm q21842), switch_pause 2 (sigma3-weapons-branch q23053), switch_lr 45 (storm-eagle-and-spark-dark q17555), pause 3 (sigma3-weapons-branch q23931), death 4 (sigma3 q20068), continue 2 (sigma2 q27298), empty 1 (sigma3-st-empty-weapons-branch q22561). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 2 (storm-eagle-and-spark-dark f15989), limit 107 (storm-eagle-and-spark-dark f15989), refill 1 (sigma1-zero-arm f21842), switch_pause 2 (sigma3-weapons-branch f23053), switch_lr 45 (storm-eagle-and-spark-dark f17555), pause 3 (sigma3-weapons-branch f23931), death 4 (sigma3 f20068), continue 2 (sigma2 f27298), empty 1 (sigma3-st-empty-weapons-branch f22561). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): state_04 14 (sigma2 q5681), state_06 7 (armored-armadillo q4971), state_08 65 (armored-armadillo q4970). Terreno não se aplica (decisão 2): os leitores de +$2B nas rotinas das armas são BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), nenhum nas rotinas desta arma, e o W38 afirma a lista completa (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: nenhuma leitura de +$2B nas suas rotinas, nenhuma gravação pode mostrá-lo). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): state_04 14 (sigma2 f5681), state_06 7 (armored-armadillo f4971), state_08 65 (armored-armadillo f4970). Terrain not applicable (decision 2): the +$2B readers among the weapons' routines are BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), none in this weapon's routines, and W38 asserts the list complete (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: no read of +$2B in its routines, no take can show it). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/tests/test_weapon_poses_w41.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W42-weapon-pose-draw-routines, regra do W37 sobre as 80 gravações com WRAM igual do W40): toda pose listada da ROM (scripts do setSpriteAnim 84:8F07 em AF:A000; argumentos escolhidos por desvio listados nos dois ramos, tools/oracle/post/build_weapon_poses.py): $0B weaponShot_storm_0b (83:9550): 38 poses; $14 chargeShot_storm_14 (83:9FAA): 31 poses; todas as 69 vistas em quadros exatos (15.813 quadros, 15.813 exatos). Os 3 pares fora da lista do próprio OID (17 quadros, todos exatos) são a pose do ocupante anterior do slot, cada um entrada de um script que outro OID inicia (set, escritores: $05 $0D; $08 $00,$06; $46 $0A). Limite: as gravações registradas.",
            "en": "2026-09-26 (card W42-weapon-pose-draw-routines, W37's rule over W40's 80 WRAM-equal takes): every pose listed from the ROM (setSpriteAnim 84:8F07 scripts from AF:A000; branch-selected arguments listed both ways, tools/oracle/post/build_weapon_poses.py): $0B weaponShot_storm_0b (83:9550): 38 poses; $14 chargeShot_storm_14 (83:9FAA): 31 poses; all 69 seen on exact frames (15,813 frames, 15,813 exact). The 3 pairs outside the OID's own listing (17 frames, all exact) are its slot's previous occupant's pose, each an entry of a script another OID starts (set, writers: $05 $0D; $08 $00,$06; $46 $0A). Bound: the recorded takes."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/storm-tornado/weapon.json",
            "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json",
            "docs/tasks/done/A31-charge-cancel-remaining-sites.md",
            "docs/tasks/done/A32-charge-cancel-site-c-owner-and-runs.md"
          ],
          "note": {
            "pt": "2026-10-12 (L118, cartas A31 e A32): 9 de 9 chamadas de som da arma, todas gated: knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/storm-tornado/calls (status gated 6 of 9 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 819478:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json#/gated 8193E6:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json#/gated 8197F8:17); read at git 6f62550a7. A32 fechou a regra de dono do local C (81:97F8) e a chamada do cancelamento de carga na entrada da armadura do Sigma 2 (knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json).",
            "en": "2026-10-12 (L118, cards A31 and A32): 9 of 9 weapon sound calls, all gated: knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/storm-tornado/calls (status gated 6 of 9 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 819478:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json#/gated 8193E6:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json#/gated 8197F8:17); read at git 6f62550a7. A32 fixed the owner rule at site C (81:97F8) and gated the charge-cancel call at the Sigma 2 ride-armor entry (knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json)."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 30 quadros disparados, 2 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 30 (storm-eagle-and-spark-dark q15989), facing_left 6 (armored-armadillo q10470), facing_right 24 (storm-eagle-and-spark-dark q15989), ground 18 (storm-eagle-and-spark-dark q15989), air 12 (armored-armadillo q5187), state_00 28 (storm-eagle-and-spark-dark q15989), state_02 54 (storm-eagle-and-spark-dark q15989), state_04 1 (sigma2 q5681), state_06 3 (armored-armadillo q4971), state_08 25 (armored-armadillo q4970). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 30 fired frames, 2 with the exact drop. Seen (count, first take and frame): fired 30 (storm-eagle-and-spark-dark f15989), facing_left 6 (armored-armadillo f10470), facing_right 24 (storm-eagle-and-spark-dark f15989), ground 18 (storm-eagle-and-spark-dark f15989), air 12 (armored-armadillo f5187), state_00 28 (storm-eagle-and-spark-dark f15989), state_02 54 (storm-eagle-and-spark-dark f15989), state_04 1 (sigma2 f5681), state_06 3 (armored-armadillo f4971), state_08 25 (armored-armadillo f4970). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "storm-tornado"
        },
        {
          "id": "weapon.storm-tornado.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/storm_tornado_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/storm-tornado/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "storm-tornado"
        }
      ],
      "family": "storm-tornado"
    },
    {
      "id": "weapon.fire-wave",
      "category": "weapons",
      "title": {
        "pt": "Fire Wave",
        "en": "Fire Wave"
      },
      "steps": [
        {
          "id": "weapon.fire-wave.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "knowledge_base/mmx1/rom/weapon_cases_w35_2026-09-25.json",
            "tools/tests/test_showcase_tapes.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L20, a partir dos KBs de casos de arma de 2026-09-24 e do W35), modo ROM-first: Fire Wave normal (objeto $0A, fireThrower 83:943D) disparado do savestate de todas as armas do David por fitas de entrada do controle, rodadas pelo original (Mesen2) e pelo programa gerado. Duas direções: fita fire-wave-both, 43 chamas para a esquerda e 44 para a direita, todas na tela: WRAM igual 696 de 696, pixels exatos 695 de 695, portão de quadros 696 de 696, leituras das portas da APU iguais 22 de 22. Nascimento: no x do X -16 px (esquerda) e +16 px (direita); velocidade e trajetória: dx -7 px por quadro por 5 quadros; +0 px por quadro por 4 quadros (esquerda) e +7 px por quadro por 5 quadros; +0 px por quadro por 4 quadros (direita), dy 0, o caminho de cada chama no KB; duração: 10 quadros do nascimento à liberação, o único ponto de liberação 83:950E no fim da animação no subestado 2 (leitura do W35). Limpeza fora da tela: fita fire-wave-edge, 50 chamas: WRAM igual 407 de 407, pixels exatos 406 de 406, portão de quadros 407 de 407; checkPlayerGear 82:80B4 (chamado em 83:94BB) achou uma chama viva a mais de 32 px à esquerda da vista em 109 quadros (337 quadros de chama) a partir de f191 (x na vista até -67) e limpou o flag de desenho +$0E (82:80D6) sem liberá-la; as chamas só são liberadas em 83:950E, fora da tela também. O teste é uma comparação sem sinal por eixo (x - câmera + $20 >= $140), então o lado direito toma o mesmo desvio. Limite: os casos destas duas fitas; acertos (estados 4, 6, 8) ficam com weapon.fire-wave.interaction.",
            "en": "2026-09-25 (card L20, from the weapon-case KBs of 2026-09-24 and W35), ROM-first mode: normal Fire Wave (object $0A, fireThrower 83:943D) fired from David's all-weapons savestate by pad-input tapes, run by the original (Mesen2) and by the generated program. Both directions: tape fire-wave-both, 43 flames left and 44 right, all on screen: WRAM equal 696 of 696, pixels exact 695 of 695, frame gate 696 of 696, APU port reads equal 22 of 22. Birth: at X's x -16 px (left) and +16 px (right); speed and trajectory: dx -7 px a frame for 5 frames; +0 px a frame for 4 frames (left) and +7 px a frame for 5 frames; +0 px a frame for 4 frames (right), dy 0, each flame's path in the KB; lifetime: 10 frames from birth to free, the one free site 83:950E at the animation's end in sub-state 2 (W35's read). Off-screen cleanup: tape fire-wave-edge, 50 flames: WRAM equal 407 of 407, pixels exact 406 of 406, frame gate 407 of 407; checkPlayerGear 82:80B4 (called at 83:94BB) found a live flame more than 32 px left of the view on 109 frames (337 flame-frames) from f191 (view x down to -67) and cleared its draw flag +$0E (82:80D6) without freeing it; flames are freed only at 83:950E, off screen too. The test is one unsigned compare per axis (x - camera + $20 >= $140), so the right side takes the same branch. Bound: the cases of these two tapes; hits (states 4, 6, 8) belong to weapon.fire-wave.interaction."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26e.json",
            "tools/tests/test_weapons_w40.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W40-weapon-remaining-steps, regra do W37 sobre 80 gravações com WRAM igual, incl. as ramificações do B6): a forma carregada $13 (chargeShot_fire_13 83:9DD4, estados $00 83:9DE4, $02 83:9E38, $04..$08 83:9E2A) com FW selecionado: limiar, 20 liberações na carga cheia ($0C03 $01 para $00; playerAmorAndCharge 81:97D2); nascimentos: primeiro sigma2 f9221, 186 quadros, imagens 186 de 186 (o estado $00 roda no quadro do nascimento); $13 estado $02: primeiro sigma2 f9221, 382 quadros, imagens 382 de 382; $13 estado $04: primeiro b6-aa-f-wave-charged-hunt f1717, 4 quadros, imagens 4 de 4; $13 estado $06: primeiro sigma2 f9248, 12 quadros, imagens 12 de 12; $13 estado $08: primeiro sigma2 f9244, 180 quadros, imagens 180 de 180; suas leituras de terreno (83:9E94, 83:9F1B) +$2B subindo: primeiro sigma2 f9221, 72 quadros, imagens 72 de 72; término slot liberado: primeiro sigma2 f9283, 184 quadros, imagens 184 de 184. Nenhum outro OID nasce enquanto ela vive. Limite: as gravações registradas.",
            "en": "2026-09-26 (card W40-weapon-remaining-steps, W37's rule over 80 WRAM-equal takes incl. B6's branch takes): the charged form $13 (chargeShot_fire_13 83:9DD4, states $00 83:9DE4, $02 83:9E38, $04..$08 83:9E2A) with FW selected: threshold, 20 releases at the full charge ($0C03 $01 to $00; playerAmorAndCharge 81:97D2); births: first sigma2 f9221, 186 frames, pictures 186 of 186 (state $00 runs in the birth frame); $13 state $02: first sigma2 f9221, 382 frames, pictures 382 of 382; $13 state $04: first b6-aa-f-wave-charged-hunt f1717, 4 frames, pictures 4 of 4; $13 state $06: first sigma2 f9248, 12 frames, pictures 12 of 12; $13 state $08: first sigma2 f9244, 180 frames, pictures 180 of 180; its terrain reads (83:9E94, 83:9F1B) +$2B rising: first sigma2 f9221, 72 frames, pictures 72 of 72; termination slot freed: first sigma2 f9283, 184 frames, pictures 184 of 184. No other OID is born while it lives. Bound: the recorded takes."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json",
            "tools/tests/test_weapons_evidence.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W37, decisões 1-3 do coordenador, a partir das capturas K5 das gravações do R10 com WRAM igual inteira e da sigma-final-attempt-2 do R12): toda parte do critério roda nas gravações do David, com imagens exatas nos seus quadros (V12); partes do re/mmx1 por banco:endereço no KB. Vistas (contagem, primeira gravação e quadro): cost 62 (flame-mammoth-lava f21942), limit 86 (chill-penguin-new-game f12567), refill 25 (chill-penguin-new-game f12219), switch_pause 1 (spark-mandrill f2751), switch_lr 50 (chill-penguin-new-game f11649), pause 3 (sting-chameleon f9833), death 1 (boomer-kuwanger f4970), continue 4 (boomer-kuwanger f20844), empty 7 (spark-mandrill f7775). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card W37, coordinator decisions 1-3, from the K5 captures of R10's WRAM-equal whole takes and R12's sigma-final-attempt-2): every part of the acceptance runs in David's takes, pictures exact on their frames (V12); parts from re/mmx1 by bank:addr in the KB. Seen (count, first take and frame): cost 62 (flame-mammoth-lava f21942), limit 86 (chill-penguin-new-game f12567), refill 25 (chill-penguin-new-game f12219), switch_pause 1 (spark-mandrill f2751), switch_lr 50 (chill-penguin-new-game f11649), pause 3 (sting-chameleon f9833), death 1 (boomer-kuwanger f4970), continue 4 (boomer-kuwanger f20844), empty 7 (spark-mandrill f7775). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26e.json",
            "tools/tests/test_weapons_w40.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W40-weapon-remaining-steps, regra do W37 sobre 80 gravações com WRAM igual, incl. as ramificações do B6): todo comportamento que o título exige é visto, imagens exatas: terrain: primeiro sigma2 f5184, 1.664 quadros, imagens 1.664 de 1.664; state_04: primeiro chill-penguin-new-game f14068, 581 quadros, imagens 581 de 581; state_06: primeiro chill-penguin-new-game f11697, 387 quadros, imagens 387 de 387; state_08: primeiro chill-penguin-new-game f11688, 4.982 quadros, imagens 4.982 de 4.982. A retenção do W38 (terreno normal vs carregado) está resolvida: as leituras de terreno são da forma carregada (83:9E94, 83:9F1B) e o +$2B do $13 sobe em 72 quadros, imagens 72 de 72, primeiro sigma2 f9221. Limite: as gravações registradas; matrizes dos chefes pertencem aos chefes.",
            "en": "2026-09-26 (card W40-weapon-remaining-steps, W37's rule over 80 WRAM-equal takes incl. B6's branch takes): every part the title needs is seen, pictures exact: terrain: first sigma2 f5184, 1,664 frames, pictures 1,664 of 1,664; state_04: first chill-penguin-new-game f14068, 581 frames, pictures 581 of 581; state_06: first chill-penguin-new-game f11697, 387 frames, pictures 387 of 387; state_08: first chill-penguin-new-game f11688, 4,982 frames, pictures 4,982 of 4,982. W38's hold (normal vs charged terrain) is resolved: the terrain reads are the charged form's (83:9E94, 83:9F1B) and $13's +$2B rises on 72 frames, pictures 72 of 72, first sigma2 f9221. Bound: the recorded takes; boss matrices belong to bosses."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/fire-wave/weapon.json",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 31 de 31 partes: as já vistas como antes, e $0A:$46:C224:$02 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 31 of 31 parts: those already seen as before, and $0A:$46:C224:$02 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "partial",
          "partial": {
            "seen": 9,
            "total": 10,
            "$source": "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/fire-wave/calls (status gated 9 of 10 sound calls); read at git 82ac4e471"
          },
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/fire-wave/weapon.json"
          ],
          "note": {
            "pt": "Campanhas históricas têm resultados parciais e pendências posteriores; requer reconciliação por subetapa.",
            "en": "Historical campaigns have partial results and later open issues; reconciliation is required per substep."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26e.json",
            "tools/tests/test_weapons_w40.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W40-weapon-remaining-steps, regra do W37 sobre 80 gravações com WRAM igual, incl. as ramificações do B6): todo comportamento é visto: fired: primeiro flame-mammoth-lava f21942, 10.641 quadros, imagens 10.632 de 10.641; facing_left: primeiro chill-penguin-new-game f12157, 3.024 quadros, imagens 3.021 de 3.024; facing_right: primeiro flame-mammoth-lava f21942, 7.617 quadros, imagens 7.611 de 7.617; ground: primeiro flame-mammoth-lava f21942, 6.153 quadros, imagens 6.144 de 6.153; air: primeiro chill-penguin-new-game f12558, 4.364 quadros, imagens 4.364 de 4.364; state_00: primeiro flame-mammoth-lava f21942, 10.623 quadros, imagens 10.614 de 10.623; state_02: primeiro flame-mammoth-lava f21942, 16.573 quadros, imagens 16.558 de 16.573; state_04: primeiro chill-penguin-new-game f14068, 581 quadros, imagens 581 de 581; state_06: primeiro chill-penguin-new-game f11697, 387 quadros, imagens 387 de 387; state_08: primeiro chill-penguin-new-game f11688, 4.982 quadros, imagens 4.982 de 4.982. Regra de resíduo do L29: as únicas imagens inexatas são 5 quadros colour_math (f5081, f5085, f5388, f5396, f6129) de spark-mandrill e suas duas ramificações (a matemática de cor do estágio escuro, resíduo visual, não da arma). Limite: as gravações registradas.",
            "en": "2026-09-26 (card W40-weapon-remaining-steps, W37's rule over 80 WRAM-equal takes incl. B6's branch takes): every part is seen: fired: first flame-mammoth-lava f21942, 10,641 frames, pictures 10,632 of 10,641; facing_left: first chill-penguin-new-game f12157, 3,024 frames, pictures 3,021 of 3,024; facing_right: first flame-mammoth-lava f21942, 7,617 frames, pictures 7,611 of 7,617; ground: first flame-mammoth-lava f21942, 6,153 frames, pictures 6,144 of 6,153; air: first chill-penguin-new-game f12558, 4,364 frames, pictures 4,364 of 4,364; state_00: first flame-mammoth-lava f21942, 10,623 frames, pictures 10,614 of 10,623; state_02: first flame-mammoth-lava f21942, 16,573 frames, pictures 16,558 of 16,573; state_04: first chill-penguin-new-game f14068, 581 frames, pictures 581 of 581; state_06: first chill-penguin-new-game f11697, 387 frames, pictures 387 of 387; state_08: first chill-penguin-new-game f11688, 4,982 frames, pictures 4,982 of 4,982. L29's residual rule: the only inexact pictures are 5 colour_math frames (f5081, f5085, f5388, f5396, f6129) of spark-mandrill and its two branches (the dark stage's colour math, a visual residual, not the weapon). Bound: the recorded takes."
          },
          "family": "fire-wave"
        },
        {
          "id": "weapon.fire-wave.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/fire_wave_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/fire-wave/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "fire-wave"
        }
      ],
      "family": "fire-wave"
    },
    {
      "id": "weapon.electric-spark",
      "category": "weapons",
      "title": {
        "pt": "Electric Spark",
        "en": "Electric Spark"
      },
      "steps": [
        {
          "id": "weapon.electric-spark.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W29-weapon-missing-cases.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: normal shot 0x0C fired by card W29's tape electric-spark-both (tools/oracle/fixtures/david_allweapons.mss): WRAM equal 672 of 672 frames, pixels exact 671 of 671, frame gate equal (read-instruction mismatches 0), APU port reads 6 of 6. Left: born f159 at x 109, 3 px per frame, freed f209 after 50 frames at x -35 (camera 0): off screen left. Right: born f429 at x 144, freed f479 after 50 frames at x 288: off screen right (X-shot slot $1228; W29 KB). Bound: one life per direction, X standing on flat ground; wall contact belongs to the interaction step.",
            "pt": "2026-09-25 (card L8), modo ROM-first: tiro normal 0x0C disparado pela fita electric-spark-both do card W29 (tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 672 de 672 quadros, pixels exatos em 671 de 671, frame gate igual (0 divergências de instrução de leitura), leituras de porta da APU 6 de 6. Esquerda: nasce em f159 em x 109, 3 px por quadro, liberado em f209 após 50 quadros em x -35 (câmera 0): fora da tela à esquerda. Direita: nasce em f429 em x 144, liberado em f479 após 50 quadros em x 288: fora da tela à direita (slot de tiro do X $1228; KB do W29). Limite: uma vida por direção, X parado em chão plano; o contato com parede é do passo de interação."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W29-weapon-missing-cases.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: card W23's clip electric-spark-charged, read by W29: WRAM equal 532 of 532 frames, pixels exact 531 of 531, frame gate equal. The charged form $15 twice: born f385 at x 212, 8 px per frame right, freed f415 after 30 frames at x 356 (camera 68): off screen right; the second born f395, 8 px per frame left, freed f420 at x 28: off screen left. The hold runs through the charge thresholds to the release under the state gate (the charge counter and level are WRAM). Bound: one charge and release, X standing; sound belongs to the sound step.",
            "pt": "2026-09-25 (card L8), modo ROM-first: clipe electric-spark-charged do card W23, lido pelo W29: WRAM igual em 532 de 532 quadros, pixels exatos em 531 de 531, frame gate igual. A forma carregada $15 duas vezes: nasce em f385 em x 212, 8 px por quadro para a direita, liberada em f415 após 30 quadros em x 356 (câmera 68): fora da tela à direita; a segunda nasce em f395, 8 px por quadro para a esquerda, liberada em f420 em x 28: fora da tela à esquerda. A carga passa pelos limiares até a liberação sob o gate de estado (contador e nível de carga estão na WRAM). Limite: uma carga e uma liberação, X parado; o som é do passo de som."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 1 (spark-mandrill q26476), limit 25 (spark-mandrill q26516), refill 1 (sigma1-zero-arm q21842), switch_pause 2 (sigma3-weapons-branch q22849), switch_lr 59 (sting-chameleon q3370), pause 1 (sigma3-weapons-branch q22931), death 1 (sigma3-es-death-weapons-branch q20195), continue 2 (sigma2 q27298), empty 2 (launch-octopus-and-sting-flooded q12935). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 1 (spark-mandrill f26476), limit 25 (spark-mandrill f26516), refill 1 (sigma1-zero-arm f21842), switch_pause 2 (sigma3-weapons-branch f22849), switch_lr 59 (sting-chameleon f3370), pause 1 (sigma3-weapons-branch f22931), death 1 (sigma3-es-death-weapons-branch f20195), continue 2 (sigma2 f27298), empty 2 (launch-octopus-and-sting-flooded f12935). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): state_04 12 (launch-octopus-and-sting-flooded q11664), state_06 21 (sting-chameleon q18917), state_08 100 (sting-chameleon q20849), state_0A 162 (spark-mandrill q26547). Terreno não se aplica (decisão 2): os leitores de +$2B nas rotinas das armas são BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), nenhum nas rotinas desta arma, e o W38 afirma a lista completa (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: nenhuma leitura de +$2B nas suas rotinas, nenhuma gravação pode mostrá-lo). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): state_04 12 (launch-octopus-and-sting-flooded f11664), state_06 21 (sting-chameleon f18917), state_08 100 (sting-chameleon f20849), state_0A 162 (spark-mandrill f26547). Terrain not applicable (decision 2): the +$2B readers among the weapons' routines are BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), none in this weapon's routines, and W38 asserts the list complete (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: no read of +$2B in its routines, no take can show it). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/oracle/post/build_weapon_poses.py",
            "build/W44/skipped.json",
            "docs/tasks/done/W44-rom-skipped-pose-entries.md"
          ],
          "note": {
            "pt": "2026-10-03 (W44): 22 de 22 poses proprias do $15 vistas em quadros exatos; os 28 pares herdados explicados; a entrada C25E (cell $03) e trocada pela ROM antes do desenho OAM em todo caminho (83:A153 -> 83:A164), excluida com a prova completa em build/W44/skipped.json; nenhuma peca X-effect $02 pertence ao Electric Spark.",
            "en": "2026-10-03 (W44): 22 of 22 own $15 poses seen on exact frames; all 28 inherited pairs explained; entry C25E (cell $03) is replaced by the ROM before the OAM draw on every path (83:A153 -> 83:A164), excluded with the complete proof in build/W44/skipped.json; no X-effect $02 piece belongs to Electric Spark."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "partial",
          "partial": {
            "seen": 7,
            "total": 8,
            "$source": "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/electric-spark/calls (status gated 6 of 8 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json#/gated 819478:17); read at git 6f62550a7"
          },
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/electric-spark/weapon.json"
          ],
          "note": {
            "pt": "Campanhas históricas têm resultados parciais e pendências posteriores; requer reconciliação por subetapa.",
            "en": "Historical campaigns have partial results and later open issues; reconciliation is required per substep."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 40 quadros disparados, 1 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 40 (spark-mandrill q26476), facing_left 14 (sting-chameleon q20841), facing_right 26 (spark-mandrill q26476), ground 30 (spark-mandrill q26476), air 9 (sting-chameleon q20841), state_00 100 (spark-mandrill q26476), state_02 111 (spark-mandrill q26476), state_04 11 (launch-octopus-and-sting-flooded q11664), state_06 9 (sting-chameleon q18917), state_08 48 (sting-chameleon q20849), state_0A 98 (spark-mandrill q26547). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 40 fired frames, 1 with the exact drop. Seen (count, first take and frame): fired 40 (spark-mandrill f26476), facing_left 14 (sting-chameleon f20841), facing_right 26 (spark-mandrill f26476), ground 30 (spark-mandrill f26476), air 9 (sting-chameleon f20841), state_00 100 (spark-mandrill f26476), state_02 111 (spark-mandrill f26476), state_04 11 (launch-octopus-and-sting-flooded f11664), state_06 9 (sting-chameleon f18917), state_08 48 (sting-chameleon f20849), state_0A 98 (spark-mandrill f26547). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "electric-spark"
        },
        {
          "id": "weapon.electric-spark.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/electric_spark_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/electric-spark/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "electric-spark"
        }
      ],
      "family": "electric-spark"
    },
    {
      "id": "weapon.rolling-shield",
      "category": "weapons",
      "title": {
        "pt": "Rolling Shield",
        "en": "Rolling Shield"
      },
      "steps": [
        {
          "id": "weapon.rolling-shield.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W29-weapon-missing-cases.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: normal shot 0x09 fired by card W29's tape rolling-shield-both (tools/oracle/fixtures/david_allweapons.mss): WRAM equal 636 of 636 frames, pixels exact 635 of 635, frame gate equal (read-instruction mismatches 0), APU port reads 4 of 4. Left: born f123 at x 109, 4 px per frame, freed f167 after 44 frames at x -35 (camera 0): off screen left. Right: born f393 at x 144, freed f436 after 43 frames at x 288: off screen right (X-shot slot $1228; W29 KB). Bound: one life per direction, X standing on flat ground; wall contact belongs to the interaction step.",
            "pt": "2026-09-25 (card L8), modo ROM-first: tiro normal 0x09 disparado pela fita rolling-shield-both do card W29 (tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 636 de 636 quadros, pixels exatos em 635 de 635, frame gate igual (0 divergências de instrução de leitura), leituras de porta da APU 4 de 4. Esquerda: nasce em f123 em x 109, 4 px por quadro, liberado em f167 após 44 quadros em x -35 (câmera 0): fora da tela à esquerda. Direita: nasce em f393 em x 144, liberado em f436 após 43 quadros em x 288: fora da tela à direita (slot de tiro do X $1228; KB do W29). Limite: uma vida por direção, X parado em chão plano; o contato com parede é do passo de interação."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_charged_cases_2026-09-25.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W32-weapon-charged-cases.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L10, a partir das fitas do W32), modo ROM-first: fita rolling-shield-charged-end do card W32 (a partir de tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 1.066 de 1.066 entradas de NMI, pixels exatos em 1.065 de 1.065, frame gate igual em 1.066 de 1.066 (0 divergências de instrução lida). Aperto em f149, limiar do nível 3 em f327 (178 quadros), liberação em f349. A forma carregada, o escudo $12 (chargeShot_shild 83:9C53), nasce em f349 e vive 236 quadros: em f573 o teste de contato com tiros inimigos 84:9BC8 encontrou o tronco do Axe Max (tiro inimigo $08, +$28 = 0), o que passa o estado 2 ao estado 8 (83:9CD5); o estado 8 o dissolve e o libera no fim da animação, em f585 (83:9D75..83:9D84). O objeto de carga (efeito do X $01) viveu 170 quadros, de f179 à liberação. Limite: um dos cinco fins do escudo; os outros quatro (ação do X $2C, $1F23 diferente de 0, $1F7B = 4, vida do X 0; 83:9CB5..83:9CC8) levam ao mesmo estado 8; o som pertence ao passo de som.",
            "en": "2026-09-25 (card L10, from W32's tapes), ROM-first mode: card W32's tape rolling-shield-charged-end (from tools/oracle/fixtures/david_allweapons.mss): WRAM equal on 1,066 of 1,066 NMI entries, pixels exact 1,065 of 1,065, frame gate equal 1,066 of 1,066 (read-instruction mismatches 0). Press f149, level-3 threshold f327 (178 frames), release f349. The charged form, the shield $12 (chargeShot_shild 83:9C53), is born at f349 and lives 236 frames: at f573 the enemy-shot contact check 84:9BC8 met Axe Max's log (enemy shot $08, +$28 = 0), which turns state 2 into state 8 (83:9CD5); state 8 dissolves it and frees it at the anim end, f585 (83:9D75..83:9D84). The charge object (X-effect $01) lived 170 frames, f179 to the release. Bound: one of the shield's five ends; the other four (X's action $2C, $1F23 not 0, $1F7B = 4, X's health 0; 83:9CB5..83:9CC8) enter the same state 8; sound belongs to the sound step."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 2 (armored-armadillo q13215), limit 176 (armored-armadillo q13215), refill 1 (sigma1-zero-arm q21842), switch_pause 1 (sigma3-weapons-branch q21863), switch_lr 49 (sigma1-zero-arm q11680), pause 4 (sigma-final-attempt-1 q12542), death 1 (sigma-final-attempt-1 q15249), continue 2 (sigma2 q27298), empty 1 (sigma3-weapons-branch q21909). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 2 (armored-armadillo f13215), limit 176 (armored-armadillo f13215), refill 1 (sigma1-zero-arm f21842), switch_pause 1 (sigma3-weapons-branch f21863), switch_lr 49 (sigma1-zero-arm f11680), pause 4 (sigma-final-attempt-1 f12542), death 1 (sigma-final-attempt-1 f15249), continue 2 (sigma2 f27298), empty 1 (sigma3-weapons-branch f21909). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json",
            "tools/tests/test_weapons_evidence.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W37, decisões 1-3 do coordenador, a partir das capturas K5 das gravações do R10 com WRAM igual inteira e da sigma-final-attempt-2 do R12): toda parte do critério roda nas gravações do David, com imagens exatas nos seus quadros (V12); partes do re/mmx1 por banco:endereço no KB. Vistas (contagem, primeira gravação e quadro): terrain 62 (armored-armadillo f13216), state_04 1 (sigma-final-attempt-1 f14587), state_06 10 (sigma1-zero-arm f12332), state_08 57 (sigma1-zero-arm f11718), projectile 4 (sigma3 f13323). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card W37, coordinator decisions 1-3, from the K5 captures of R10's WRAM-equal whole takes and R12's sigma-final-attempt-2): every part of the acceptance runs in David's takes, pictures exact on their frames (V12); parts from re/mmx1 by bank:addr in the KB. Seen (count, first take and frame): terrain 62 (armored-armadillo f13216), state_04 1 (sigma-final-attempt-1 f14587), state_06 10 (sigma1-zero-arm f12332), state_08 57 (sigma1-zero-arm f11718), projectile 4 (sigma3 f13323). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/tests/test_weapon_poses_w41.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W41-weapon-poses-and-buster-states, regra do W37 sobre as 80 gravações com WRAM igual do W40): toda pose listada da ROM (scripts de animação de AF:A000 via setSpriteAnim 84:8F07, tools/oracle/post/build_weapon_poses.py): $09 weaponShot_shild_09 (83:92EC): set $48, 7 poses; $12 chargeShot_shild_12 (83:9C53): set $8E, 24 poses; todas as 31 vistas em quadros exatos (14.821 quadros, 14.821 exatos), nenhuma pose fora da lista. Limite: as gravações registradas.",
            "en": "2026-09-26 (card W41-weapon-poses-and-buster-states, W37's rule over W40's 80 WRAM-equal takes): every pose listed from the ROM (animation scripts from AF:A000 via setSpriteAnim 84:8F07, tools/oracle/post/build_weapon_poses.py): $09 weaponShot_shild_09 (83:92EC): set $48, 7 poses; $12 chargeShot_shild_12 (83:9C53): set $8E, 24 poses; all 31 seen on exact frames (14,821 frames, 14,821 exact), no unlisted pose drawn. Bound: the recorded takes."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/rolling-shield/weapon.json",
            "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json",
            "docs/tasks/done/A31-charge-cancel-remaining-sites.md",
            "docs/tasks/done/A32-charge-cancel-site-c-owner-and-runs.md"
          ],
          "note": {
            "pt": "2026-10-12 (L118, cartas A31 e A32): 11 de 11 chamadas de som da arma, todas gated: knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/rolling-shield/calls (status gated 8 of 11 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 819478:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json#/gated 8193E6:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json#/gated 8197F8:17); read at git 6f62550a7. A32 fechou a regra de dono do local C (81:97F8) e a chamada do cancelamento de carga na entrada da armadura do Sigma 2 (knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json).",
            "en": "2026-10-12 (L118, cards A31 and A32): 11 of 11 weapon sound calls, all gated: knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/rolling-shield/calls (status gated 8 of 11 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 819478:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json#/gated 8193E6:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json#/gated 8197F8:17); read at git 6f62550a7. A32 fixed the owner rule at site C (81:97F8) and gated the charge-cancel call at the Sigma 2 ride-armor entry (knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json)."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 75 quadros disparados, 2 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 75 (armored-armadillo q13215), facing_left 32 (sigma1-zero-arm q11709), facing_right 43 (armored-armadillo q13215), ground 40 (armored-armadillo q13215), air 34 (sigma1-zero-arm q11770), state_00 72 (armored-armadillo q13215), state_02 72 (armored-armadillo q13215), state_04 1 (sigma-final-attempt-1 q14587), state_06 10 (sigma1-zero-arm q12332), state_08 57 (sigma1-zero-arm q11718). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 75 fired frames, 2 with the exact drop. Seen (count, first take and frame): fired 75 (armored-armadillo f13215), facing_left 32 (sigma1-zero-arm f11709), facing_right 43 (armored-armadillo f13215), ground 40 (armored-armadillo f13215), air 34 (sigma1-zero-arm f11770), state_00 72 (armored-armadillo f13215), state_02 72 (armored-armadillo f13215), state_04 1 (sigma-final-attempt-1 f14587), state_06 10 (sigma1-zero-arm f12332), state_08 57 (sigma1-zero-arm f11718). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "rolling-shield"
        },
        {
          "id": "weapon.rolling-shield.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/rolling_shield_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/rolling-shield/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "rolling-shield"
        }
      ],
      "family": "rolling-shield"
    },
    {
      "id": "weapon.homing-torpedo",
      "category": "weapons",
      "title": {
        "pt": "Homing Torpedo",
        "en": "Homing Torpedo"
      },
      "steps": [
        {
          "id": "weapon.homing-torpedo.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/object_tables_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/showcase_clips_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L6), modo ROM-first (megaman-x.exe --rom-first): tiro normal 0x07 (mainWeaponShot_homing_07, main 83:8E9D) disparado pela entrada do David nas três gravações; WRAM do K8 igual em todo quadro (19,009, 21,058 e 30,150), logo nascimento, velocidade, trajetória e duração iguais às do original. Disparado 41 vezes para a direita e 46 para a esquerda; liberado fora da tela (relativo à câmera) 12 vezes indo para a direita e 4 para a esquerda (varredura das capturas do K8). Gate de unidade do E34: 1200 chamadas exatas (CP 400 de 400, SE 400 de 400, FM 400 de 400); clipe homing-torpedo do W21: WRAM 374 de 374 quadros, gate de quadros igual. Limite: o E34 executou no máximo 796 de 951 instruções da rotina do tiro.",
            "en": "2026-09-24 (card L6), ROM-first mode (megaman-x.exe --rom-first): normal shot 0x07 (mainWeaponShot_homing_07, main 83:8E9D) fired by David's input in the three recordings; K8 WRAM equal on every frame (19,009, 21,058 and 30,150), so birth, speed, trajectory and lifetime equal the original's. Launched 41 times right and 46 left; freed off the screen (camera-relative) 12 times going right and 4 going left (scan of K8's captures). E34 unit gate: 1200 calls exact (CP 400 of 400, SE 400 of 400, FM 400 of 400); W21 clip homing-torpedo: WRAM 374 of 374 frames, frame gate equal. Bound: E34 ran at most 796 of 951 instructions of the shot's routine."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_charged_cases_2026-09-25.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W32-weapon-charged-cases.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L10, a partir das fitas do W32), modo ROM-first: fita homing-torpedo-charged-end do card W32 (a partir de tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 772 de 772 entradas de NMI, pixels exatos em 771 de 771, frame gate igual em 772 de 772 (0 divergências de instrução lida). Aperto em f125, limiar do nível 3 em f303 (178 quadros), liberação em f325. A forma carregada são cinco $10 (chargeShot_homingMissle 83:995D), todos nascidos em f325: um acertou o inimigo $51 e foi liberado após 5 quadros (estado 6; 83:9B3F..83:9B52); quatro foram liberados fora da tela após 29 a 52 quadros (estado 2, quando checkPlayerGear deixou +$0E = 0; 83:9B36..83:9B3C -> 83:9B52), o último em f377. O objeto de carga (efeito do X $01) viveu 170 quadros, de f155 à liberação. Limite: uma carga e uma liberação; a liberação do estado 4 (83:9B4F) não ocorreu; o som pertence ao passo de som.",
            "en": "2026-09-25 (card L10, from W32's tapes), ROM-first mode: card W32's tape homing-torpedo-charged-end (from tools/oracle/fixtures/david_allweapons.mss): WRAM equal on 772 of 772 NMI entries, pixels exact 771 of 771, frame gate equal 772 of 772 (read-instruction mismatches 0). Press f125, level-3 threshold f303 (178 frames), release f325. The charged form is five $10 (chargeShot_homingMissle 83:995D), all born at f325: one hit the enemy $51 and was freed after 5 frames (state 6; 83:9B3F..83:9B52); four were freed off screen after 29 to 52 frames (state 2, once checkPlayerGear left +$0E = 0; 83:9B36..83:9B3C -> 83:9B52), the last at f377. The charge object (X-effect $01) lived 170 frames, f155 to the release. Bound: one charge and release; the state-4 free (83:9B4F) did not occur; sound belongs to the sound step."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 1 (sigma1-zero-arm q21137), limit 112 (storm-eagle-and-spark-dark q6240), refill 22 (sigma1-zero-arm q21362), switch_pause 1 (sigma3-weapons-branch q21455), switch_lr 73 (launch-octopus-and-sting-flooded q31853), pause 1 (sigma3-weapons-branch q21537), death 1 (sigma2 q20154), continue 2 (sigma2 q27298), empty 6 (storm-eagle-and-spark-dark q22823). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 1 (sigma1-zero-arm f21137), limit 112 (storm-eagle-and-spark-dark f6240), refill 22 (sigma1-zero-arm f21362), switch_pause 1 (sigma3-weapons-branch f21455), switch_lr 73 (launch-octopus-and-sting-flooded f31853), pause 1 (sigma3-weapons-branch f21537), death 1 (sigma2 f20154), continue 2 (sigma2 f27298), empty 6 (storm-eagle-and-spark-dark f22823). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): state_04 10 (sigma1-zero-arm q21252), state_06 53 (launch-octopus-and-sting-flooded q35062), state_08 127 (storm-eagle-and-spark-dark q3822). Terreno não se aplica (decisão 2): os leitores de +$2B nas rotinas das armas são BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), nenhum nas rotinas desta arma, e o W38 afirma a lista completa (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: nenhuma leitura de +$2B nas suas rotinas, nenhuma gravação pode mostrá-lo). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): state_04 10 (sigma1-zero-arm f21252), state_06 53 (launch-octopus-and-sting-flooded f35062), state_08 127 (storm-eagle-and-spark-dark f3822). Terrain not applicable (decision 2): the +$2B readers among the weapons' routines are BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), none in this weapon's routines, and W38 asserts the list complete (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: no read of +$2B in its routines, no take can show it). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/tests/test_weapon_poses_w41.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W41-weapon-poses-and-buster-states, regra do W37 sobre as 80 gravações com WRAM igual do W40): toda pose listada da ROM (scripts de animação de AF:A000 via setSpriteAnim 84:8F07, tools/oracle/post/build_weapon_poses.py): $07 weaponShot_homing_07 (83:8E9D): set $10, 16 poses; $10 chargeShot_homingMissle_10 (83:995D): set $93, 16 poses; todas as 32 vistas em quadros exatos (12.986 quadros, 12.985 exatos), nenhuma pose fora da lista. Os únicos quadros inexatos são [['storm-eagle-and-spark-dark', 21065, 'colour_math']], colour_math: o resíduo conhecido do estágio (regra do L8/L29). Limite: as gravações registradas.",
            "en": "2026-09-26 (card W41-weapon-poses-and-buster-states, W37's rule over W40's 80 WRAM-equal takes): every pose listed from the ROM (animation scripts from AF:A000 via setSpriteAnim 84:8F07, tools/oracle/post/build_weapon_poses.py): $07 weaponShot_homing_07 (83:8E9D): set $10, 16 poses; $10 chargeShot_homingMissle_10 (83:995D): set $93, 16 poses; all 32 seen on exact frames (12,986 frames, 12,985 exact), no unlisted pose drawn. The only inexact frames are [['storm-eagle-and-spark-dark', 21065, 'colour_math']], colour_math: the stage's known residual (L8/L29's rule). Bound: the recorded takes."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/homing-torpedo/weapon.json",
            "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json",
            "knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a31.json",
            "docs/tasks/done/A31-charge-cancel-remaining-sites.md",
            "docs/tasks/done/A32-charge-cancel-site-c-owner-and-runs.md"
          ],
          "note": {
            "pt": "2026-10-12 (L118, cartas A31 e A32): 10 de 10 chamadas de som da arma, todas gated: knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/homing-torpedo/calls (status gated 7 of 10 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 8193E6:17, 819478:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json#/gated 8197F8:17); read at git 6f62550a7. A32 fechou a regra de dono do local C (81:97F8) e a chamada do cancelamento de carga na entrada da armadura do Sigma 2 (knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json).",
            "en": "2026-10-12 (L118, cards A31 and A32): 10 of 10 weapon sound calls, all gated: knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/homing-torpedo/calls (status gated 7 of 10 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 8193E6:17, 819478:17; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json#/gated 8197F8:17); read at git 6f62550a7. A32 fixed the owner rule at site C (81:97F8) and gated the charge-cancel call at the Sigma 2 ride-armor entry (knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-12_a32.json)."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 208 quadros disparados, 1 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 208 (launch-octopus-and-sting-flooded q35062), facing_left 46 (storm-eagle-and-spark-dark q14199), facing_right 162 (launch-octopus-and-sting-flooded q35062), ground 138 (launch-octopus-and-sting-flooded q35062), air 68 (storm-eagle-and-spark-dark q6231), state_00 206 (launch-octopus-and-sting-flooded q35062), state_02 181 (storm-eagle-and-spark-dark q3856), state_04 9 (sigma1-zero-arm q21252), state_06 53 (launch-octopus-and-sting-flooded q35062), state_08 111 (storm-eagle-and-spark-dark q3822). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 208 fired frames, 1 with the exact drop. Seen (count, first take and frame): fired 208 (launch-octopus-and-sting-flooded f35062), facing_left 46 (storm-eagle-and-spark-dark f14199), facing_right 162 (launch-octopus-and-sting-flooded f35062), ground 138 (launch-octopus-and-sting-flooded f35062), air 68 (storm-eagle-and-spark-dark f6231), state_00 206 (launch-octopus-and-sting-flooded f35062), state_02 181 (storm-eagle-and-spark-dark f3856), state_04 9 (sigma1-zero-arm f21252), state_06 53 (launch-octopus-and-sting-flooded f35062), state_08 111 (storm-eagle-and-spark-dark f3822). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "homing-torpedo"
        },
        {
          "id": "weapon.homing-torpedo.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/homing_torpedo_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/homing-torpedo/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "homing-torpedo"
        }
      ],
      "family": "homing-torpedo"
    },
    {
      "id": "weapon.boomerang-cutter",
      "category": "weapons",
      "title": {
        "pt": "Boomerang Cutter",
        "en": "Boomerang Cutter"
      },
      "steps": [
        {
          "id": "weapon.boomerang-cutter.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_charged_cases_2026-09-25.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W32-weapon-charged-cases.md",
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "docs/tasks/done/W29-weapon-missing-cases.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L10, a partir das fitas do W29 e do W32), modo ROM-first: nascimento, velocidade, trajetória e duração nas duas direções vêm das fitas do W29 (knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json), cujas peças terminam na tela ao voltar, após 69 quadros (W32). Saída de tela: fita boomerang-cutter-edge do card W32 (a partir de tools/oracle/fixtures/david_allweapons.mss): WRAM igual em 371 de 371 entradas de NMI, pixels exatos em 370 de 370, frame gate igual em 371 de 371 (0 divergências de instrução lida). $0D (weaponShot_cutter 82:83B0), disparado em f242 em x 22, fica no estado 2 por 20 quadros, é visto por último em x -64 (câmera x 0) e é liberado em f262 quando initPosAllign (82:8439) liga o carry -> 82:844D. O teste da ROM é simétrico entre os lados (82:806E..82:807D): x - câmera + $40 >= $180 vale quando x - câmera fica abaixo de -$40 (a soma dá a volta) ou a partir de $140, mais de 64 px fora da tela de qualquer lado, então esta fita na borda esquerda vale também para a direita. Limite: a rotina que libera na tela as peças que voltam (82:84EE nos estados 4 e 8, ou outra) não foi rastreada (W32); o som pertence ao passo de som.",
            "en": "2026-09-25 (card L10, from W29's and W32's tapes), ROM-first mode: birth, speed, trajectory and lifetime in both directions come from W29's tapes (knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json), whose pieces end on screen when they return, after 69 frames (W32). Off-screen cleanup: card W32's tape boomerang-cutter-edge (from tools/oracle/fixtures/david_allweapons.mss): WRAM equal on 371 of 371 NMI entries, pixels exact 370 of 370, frame gate equal 371 of 371 (read-instruction mismatches 0). $0D (weaponShot_cutter 82:83B0), fired at f242 at x 22, stays in state 2 for 20 frames, is last seen at x -64 (camera x 0) and is freed at f262 when initPosAllign (82:8439) sets carry -> 82:844D. The ROM's check is side-symmetric (82:806E..82:807D): x - camera + $40 >= $180 holds when x - camera is below -$40 (the sum wraps) or at least $140, more than 64 px outside the view on either side, so this left-edge tape also stands for the right edge. Bound: the routine that frees the returning pieces on screen (82:84EE for states 4 and 8, or another) was not traced (W32); sound belongs to the sound step."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W29-weapon-missing-cases.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: card W23's clip boomerang-cutter-charged, read by W29: WRAM equal 544 of 544 frames, pixels exact 543 of 543, frame gate equal. The charged form $16 is four pieces born at f397 (x 196, y 1183), each freed off screen (camera 68): f449 below (y 1307), f460 right (x 382) and left (x 9), f466 left (x 37). The hold runs through the charge thresholds to the release under the state gate (the charge counter and level are WRAM). Bound: one charge and release, X standing; sound belongs to the sound step.",
            "pt": "2026-09-25 (card L8), modo ROM-first: clipe boomerang-cutter-charged do card W23, lido pelo W29: WRAM igual em 544 de 544 quadros, pixels exatos em 543 de 543, frame gate igual. A forma carregada $16 são quatro peças nascidas em f397 (x 196, y 1183), cada uma liberada fora da tela (câmera 68): f449 abaixo (y 1307), f460 à direita (x 382) e à esquerda (x 9), f466 à esquerda (x 37). A carga passa pelos limiares até a liberação sob o gate de estado (contador e nível de carga estão na WRAM). Limite: uma carga e uma liberação, X parado; o som é do passo de som."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 5 (boomer-kuwanger q38431), limit 136 (boomer-kuwanger q38471), refill 220 (spark-mandrill q1973), switch_pause 1 (sigma3-weapons-branch q22315), switch_lr 72 (spark-mandrill q1702), pause 3 (spark-mandrill q2382), death 1 (sting-chameleon q3951), continue 3 (spark-mandrill q12472), empty 2 (launch-octopus-and-sting-flooded q12588). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 5 (boomer-kuwanger f38431), limit 136 (boomer-kuwanger f38471), refill 220 (spark-mandrill f1973), switch_pause 1 (sigma3-weapons-branch f22315), switch_lr 72 (spark-mandrill f1702), pause 3 (spark-mandrill f2382), death 1 (sting-chameleon f3951), continue 3 (spark-mandrill f12472), empty 2 (launch-octopus-and-sting-flooded f12588). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26d.json",
            "tools/tests/test_bc_catch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W39-bc-catch-pairing, regra do W37): todo comportamento que o título exige roda em gravações com WRAM igual e é visto com citações encontradas, imagens exatas nos seus quadros: terrain: primeiro armored-armadillo f10986, 243 quadros, imagens 243 de 243; state_04: primeiro launch-octopus-and-sting-flooded f11610, 13 quadros, imagens 13 de 13; state_06: primeiro spark-mandrill f1866, 36 quadros, imagens 36 de 36; state_08: primeiro spark-mandrill f1811, 177 quadros, imagens 177 de 177; return_catch: primeiro boomer-kuwanger f38500, 224 quadros, imagens 224 de 224. O pair() do W37 lia $1F93, que a captura da ROM nunca escreve (82:84D7 INC.W e 82:84DC TSB #$80 escrevem $1F94, w_player_weaponCutter_06), então toda captura contava como refil do BC (Resultado do R18); corrigido para ler $1F94, return_catch é visto 224 de 224 vezes e o refil do BC cai ao único abastecimento genuíno de cápsula de energia, sigma1-zero-arm f21842. Limite: as gravações registradas; matrizes de dano específicas de chefes pertencem aos chefes.",
            "en": "2026-09-26 (card W39-bc-catch-pairing, W37's rule): every part the title needs runs in WRAM-equal takes and is seen with cites found, pictures exact on its frames: terrain: first armored-armadillo f10986, 243 frames, pictures 243 of 243; state_04: first launch-octopus-and-sting-flooded f11610, 13 frames, pictures 13 of 13; state_06: first spark-mandrill f1866, 36 frames, pictures 36 of 36; state_08: first spark-mandrill f1811, 177 frames, pictures 177 of 177; return_catch: first boomer-kuwanger f38500, 224 frames, pictures 224 of 224. W37's pair() had read $1F93, which the ROM's catch never writes (82:84D7 INC.W and 82:84DC TSB #$80 write $1F94, w_player_weaponCutter_06), so every catch counted as a BC refill (R18's Result); fixed to read $1F94, return_catch is seen 224 of 224 times and BC's refill drops to the one genuine energy-capsule pickup, sigma1-zero-arm f21842. Bound: the recorded takes; boss-specific damage matrices belong to bosses."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/tests/test_weapon_poses_w41.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W41-weapon-poses-and-buster-states, regra do W37 sobre as 80 gravações com WRAM igual do W40): toda pose listada da ROM (scripts de animação de AF:A000 via setSpriteAnim 84:8F07, tools/oracle/post/build_weapon_poses.py): $0D weaponShot_cutter_0d (82:83B0): set $05, 8 poses; $16 chargeShot_cutter_16 (83:A1DB): set $97, 8 poses; todas as 16 vistas em quadros exatos (102.384 quadros, 102.384 exatos), nenhuma pose fora da lista. Limite: as gravações registradas.",
            "en": "2026-09-26 (card W41-weapon-poses-and-buster-states, W37's rule over W40's 80 WRAM-equal takes): every pose listed from the ROM (animation scripts from AF:A000 via setSpriteAnim 84:8F07, tools/oracle/post/build_weapon_poses.py): $0D weaponShot_cutter_0d (82:83B0): set $05, 8 poses; $16 chargeShot_cutter_16 (83:A1DB): set $97, 8 poses; all 16 seen on exact frames (102,384 frames, 102,384 exact), no unlisted pose drawn. Bound: the recorded takes."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "partial",
          "partial": {
            "seen": 8,
            "total": 9,
            "$source": "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/boomerang-cutter/calls (status gated 6 of 9 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 8193E6:17, 819478:17); read at git 81572d183"
          },
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/boomerang-cutter/weapon.json"
          ],
          "note": {
            "pt": "Campanhas históricas têm resultados parciais e pendências posteriores; requer reconciliação por subetapa.",
            "en": "Historical campaigns have partial results and later open issues; reconciliation is required per substep."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 264 quadros disparados, 5 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 264 (boomer-kuwanger q38431), facing_left 94 (spark-mandrill q6457), facing_right 170 (boomer-kuwanger q38431), ground 212 (boomer-kuwanger q38431), air 51 (spark-mandrill q1943), state_00 261 (boomer-kuwanger q38431), state_02 291 (boomer-kuwanger q38431), state_04 13 (launch-octopus-and-sting-flooded q11610), state_06 32 (spark-mandrill q1866), state_08 109 (spark-mandrill q1811). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 264 fired frames, 5 with the exact drop. Seen (count, first take and frame): fired 264 (boomer-kuwanger f38431), facing_left 94 (spark-mandrill f6457), facing_right 170 (boomer-kuwanger f38431), ground 212 (boomer-kuwanger f38431), air 51 (spark-mandrill f1943), state_00 261 (boomer-kuwanger f38431), state_02 291 (boomer-kuwanger f38431), state_04 13 (launch-octopus-and-sting-flooded f11610), state_06 32 (spark-mandrill f1866), state_08 109 (spark-mandrill f1811). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), spark-mandrill 24 (f5075, f5081), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "boomerang-cutter"
        },
        {
          "id": "weapon.boomerang-cutter.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/boomerang_cutter_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/boomerang-cutter/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "boomerang-cutter"
        }
      ],
      "family": "boomerang-cutter"
    },
    {
      "id": "weapon.chameleon-sting",
      "category": "weapons",
      "title": {
        "pt": "Chameleon Sting",
        "en": "Chameleon Sting"
      },
      "steps": [
        {
          "id": "weapon.chameleon-sting.normal",
          "category": "weapons",
          "title": {
            "pt": "Disparo normal",
            "en": "Normal shot"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar disparo normal nas duas direções: nascimento, velocidade, trajetória, duração e saída de tela, com entradas reais e comparação de origem.",
            "en": "Verify normal firing in both directions: birth, speed, trajectory, lifetime and off-screen cleanup, with actual input and source comparison."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/object_tables_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/showcase_clips_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L6), modo ROM-first (megaman-x.exe --rom-first): tiro normal 0x08 (mainWeaponShot_stinger3Way_08, main 83:91D2) disparado pela entrada do David nas três gravações; WRAM do K8 igual em todo quadro (19,009, 21,058 e 30,150), logo nascimento, velocidade, trajetória e duração iguais às do original. Disparado 35 vezes para a direita e 8 para a esquerda; liberado fora da tela (relativo à câmera) 23 vezes indo para a direita e 2 para a esquerda (varredura das capturas do K8). Gate de unidade do E34: 807 chamadas exatas (CP 301 de 301, SE 106 de 106, FM 400 de 400); clipe chameleon-sting do W21: WRAM 431 de 431 quadros, gate de quadros igual. Limite: o E34 executou no máximo 329 de 415 instruções da rotina do tiro.",
            "en": "2026-09-24 (card L6), ROM-first mode (megaman-x.exe --rom-first): normal shot 0x08 (mainWeaponShot_stinger3Way_08, main 83:91D2) fired by David's input in the three recordings; K8 WRAM equal on every frame (19,009, 21,058 and 30,150), so birth, speed, trajectory and lifetime equal the original's. Launched 35 times right and 8 left; freed off the screen (camera-relative) 23 times going right and 2 going left (scan of K8's captures). E34 unit gate: 807 calls exact (CP 301 of 301, SE 106 of 106, FM 400 of 400); W21 clip chameleon-sting: WRAM 431 of 431 frames, frame gate equal. Bound: E34 ran at most 329 of 415 instructions of the shot's routine."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.charged",
          "category": "weapons",
          "title": {
            "pt": "Disparo carregado",
            "en": "Charged shot"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar limiar de carga, liberação, todos os objetos/estados exclusivos e encerramento da forma carregada.",
            "en": "Verify charge threshold, release, all exclusive objects/states and charged-form termination."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_cases_2026-09-24.json",
            "tools/oracle/showcase_tapes.py",
            "tools/tests/test_showcase_tapes.py",
            "docs/tasks/done/W29-weapon-missing-cases.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: card W29's tape chameleon-sting-charged-life (W23's charge from tools/oracle/fixtures/david_allweapons.mss, then 900 neutral frames): WRAM equal 1,234 of 1,234 frames, pixels exact 1,233 of 1,233, frame gate equal (read-instruction mismatches 0), APU port reads 6 of 6. Its only exclusive object, the charged form $11 (OID +9, 81:951C; W29), is born at f337 in X-shot slot $1228 at x 223, stays 481 frames and is freed at f818 on screen (its own termination). The hold runs through the charge thresholds to the release under the state gate (the charge counter and level are WRAM). Bound: one charge and release, X standing; sound belongs to the sound step.",
            "pt": "2026-09-25 (card L8), modo ROM-first: fita chameleon-sting-charged-life do card W29 (a carga do W23 a partir de tools/oracle/fixtures/david_allweapons.mss, depois 900 quadros neutros): WRAM igual em 1.234 de 1.234 quadros, pixels exatos em 1.233 de 1.233, frame gate igual (0 divergências de instrução de leitura), leituras de porta da APU 6 de 6. Seu único objeto exclusivo, a forma carregada $11 (OID +9, 81:951C; W29), nasce em f337 no slot de tiro do X $1228 em x 223, dura 481 quadros e é liberado em f818 na tela (seu próprio término). A carga passa pelos limiares até a liberação sob o gate de estado (contador e nível de carga estão na WRAM). Limite: uma carga e uma liberação, X parado; o som é do passo de som."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.lifecycle",
          "category": "weapons",
          "title": {
            "pt": "Entrada, munição e ciclo de vida",
            "en": "Input, ammo and lifecycle"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar custo, limite de projéteis, recarga, troca de arma e comportamento ao pausar, morrer ou ficar sem munição.",
            "en": "Verify cost, projectile limit, refill, weapon switching and behavior on pause, death or empty ammo."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): cost 2 (sting-chameleon q24547), limit 241 (sting-chameleon q24547), refill 3 (sigma1-zero-arm q21842), switch_pause 3 (sigma3-weapons-branch q21659), switch_lr 71 (launch-octopus-and-sting-flooded q10236), pause 2 (sigma1-zero-arm q32291), death 2 (sigma3-weapons-branch q25130), continue 2 (sigma2 q27298), empty 1 (sigma2 q19767). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): cost 2 (sting-chameleon f24547), limit 241 (sting-chameleon f24547), refill 3 (sigma1-zero-arm f21842), switch_pause 3 (sigma3-weapons-branch f21659), switch_lr 71 (launch-octopus-and-sting-flooded f10236), pause 2 (sigma1-zero-arm f32291), death 2 (sigma3-weapons-branch f25130), continue 2 (sigma2 f27298), empty 1 (sigma2 f19767). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.interaction",
          "category": "weapons",
          "title": {
            "pt": "Colisão e efeitos de contato",
            "en": "Collision and contact effects"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar contato com terreno, alvos comuns e projéteis: fragmentos, retorno, absorção ou efeitos próprios; matrizes específicas dos chefes pertencem aos chefes.",
            "en": "Verify terrain, common targets and projectile contact: fragments, return, absorption or exclusive effects; boss-specific damage matrices belong to bosses."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json",
            "tools/tests/test_weapons_branch.py"
          ],
          "note": {
            "pt": "2026-09-26 (card R18, decisões 1-3 do coordenador; regra do W37 com a decisão 2): toda parte que o título pede roda em gravações com WRAM igual inteira: as 23 do W38 (capturas K5) e as gravações ramificadas do R18 a partir da sigma3, suas linhas 1..N byte a byte e depois entradas montadas (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 de 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 de 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 de 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 de 23629). Vistas (contagem, primeira gravação e quadro): state_04 16 (launch-octopus-and-sting-flooded q10580), state_06 34 (launch-octopus-and-sting-flooded q35285), state_08 208 (launch-octopus-and-sting-flooded q10492), state_0A 278 (sting-chameleon q24569). Terreno não se aplica (decisão 2): os leitores de +$2B nas rotinas das armas são BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), nenhum nas rotinas desta arma, e o W38 afirma a lista completa (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: nenhuma leitura de +$2B nas suas rotinas, nenhuma gravação pode mostrá-lo). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json.",
            "en": "2026-09-26 (card R18, coordinator decisions 1-3; W37's rule with decision 2): every part the title needs runs in WRAM-equal whole takes: W38's 23 (K5 captures) and R18's branch takes of sigma3, its lines 1..N byte for byte then crafted inputs (tools/oracle/branch_take.py): sigma3-weapons-branch N 21330 (WRAM 25329 of 25329), sigma3-cs-death-weapons-branch N 19960 (WRAM 23161 of 23161), sigma3-es-death-weapons-branch N 19960 (WRAM 23121 of 23121), sigma3-st-empty-weapons-branch N 21330 (WRAM 23629 of 23629). Seen (count, first take and frame): state_04 16 (launch-octopus-and-sting-flooded f10580), state_06 34 (launch-octopus-and-sting-flooded f35285), state_08 208 (launch-octopus-and-sting-flooded f10492), state_0A 278 (sting-chameleon f24569). Terrain not applicable (decision 2): the +$2B readers among the weapons' routines are BC 82:86E8, FW 83:9E94, RS 83:93BB, SI 83:98C9 (W37, KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26.json), none in this weapon's routines, and W38 asserts the list complete (KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json: no read of +$2B in its routines, no take can show it). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26c.json."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.visual",
          "category": "weapons",
          "title": {
            "pt": "Sprites e animação",
            "en": "Sprites and animation"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar cada pose/célula, paleta, âncora e sequência de animação do projétil e de seus filhos com a origem.",
            "en": "Compare each projectile/child pose, palette, anchor and animation sequence against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapon_poses_2026-09-26.json",
            "tools/tests/test_weapon_poses_w41.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W42-weapon-pose-draw-routines, seguimento G1, regra do W37 sobre as 80 gravações com WRAM igual do W40): toda pose listada da ROM (scripts do setSpriteAnim 84:8F07 em AF:A000; argumentos escolhidos por desvio listados nos dois ramos, tools/oracle/post/build_weapon_poses.py): $08 weaponShot_stinger3Way_08 (83:91D2): 16 poses; $11 chargeShot_camaFlash_11 (83:9B7D): 0 poses; todas as 16 vistas em quadros exatos (11.555 quadros, 11.555 exatos). Os 29 pares fora da lista do próprio OID (7.161 quadros, todos exatos) são a pose do ocupante anterior do slot, cada um entrada de um script que outro OID inicia (set, escritores: $08 $00,$06; $0E $01,$1C; $0E $02; $0E $02,$02; $0F $08; $10 $07; $10 $07,$07; $44 $0E; $46 $0A; $48 $09; $54 $1D; $8C $13). Os pares com ponteiro 0000 célula $00 (1, 11 quadros, todos exatos, todos em quadros de nascimento do slot) mostram um slot zerado por CODE_FN_80DB3F (80:DB3F limpa $0BA8..$1F49 na entrada de cada modo de jogo; o despawn 82:83A3 mantém +$14/+$17) e não animado desde então: +$14/+$15/+$17 do slot ficaram zerados do início da gravação, ou de um quadro com $0BA8..$1F49 inteiro zerado (a limpeza), até o nascimento. Limite: as gravações registradas.",
            "en": "2026-09-26 (card W42-weapon-pose-draw-routines, follow-up G1, W37's rule over W40's 80 WRAM-equal takes): every pose listed from the ROM (setSpriteAnim 84:8F07 scripts from AF:A000; branch-selected arguments listed both ways, tools/oracle/post/build_weapon_poses.py): $08 weaponShot_stinger3Way_08 (83:91D2): 16 poses; $11 chargeShot_camaFlash_11 (83:9B7D): 0 poses; all 16 seen on exact frames (11,555 frames, 11,555 exact). The 29 pairs outside the OID's own listing (7,161 frames, all exact) are its slot's previous occupant's pose, each an entry of a script another OID starts (set, writers: $08 $00,$06; $0E $01,$1C; $0E $02; $0E $02,$02; $0F $08; $10 $07; $10 $07,$07; $44 $0E; $46 $0A; $48 $09; $54 $1D; $8C $13). Pairs with pointer 0000 cell $00 (1, 11 frames, all exact, all on slot birth frames) show a slot zeroed by CODE_FN_80DB3F (80:DB3F clears $0BA8..$1F49 on game-mode entry; despawn 82:83A3 keeps +$14/+$17) and not animated since: the slot's +$14/+$15/+$17 stayed zero from the take start, or from a frame whose whole $0BA8..$1F49 is zero (the clear), to the birth. Bound: the recorded takes."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.sound",
          "category": "weapons",
          "title": {
            "pt": "Som medido ou silêncio comprovado",
            "en": "Measured sound or proven silence"
          },
          "weightBp": 5,
          "status": "partial",
          "partial": {
            "seen": 9,
            "total": 10,
            "$source": "knowledge_base/mmx1/rom/weapon_sfx_2026-09-27.json#/weapons/chameleon-sting/calls (status gated 7 of 10 sound calls; knowledge_base/mmx1/rom/charge_cancel_sfx_2026-10-09_r62.json#/gated 8193E6:17, 819478:17); read at git 81572d183"
          },
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md",
            "knowledge_base/mmx1/weapons/chameleon-sting/weapon.json"
          ],
          "note": {
            "pt": "Campanhas históricas têm resultados parciais e pendências posteriores; requer reconciliação por subetapa.",
            "en": "Historical campaigns have partial results and later open issues; reconciliation is required per substep."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.campaign",
          "category": "weapons",
          "title": {
            "pt": "Uso e interações na campanha",
            "en": "Campaign use and interactions"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Validar uso após aquisição na campanha, ambos os sentidos, ar/chão/água e interações próprias sem regressões nem substitutos provisórios.",
            "en": "Validate use after campaign acquisition, both facings, air/ground/water and weapon-specific interactions without regressions or provisional substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json",
            "tools/tests/test_weapons_fired_by_creator.py"
          ],
          "note": {
            "pt": "2026-09-26 (card W38, decisões 1-3 do coordenador; regra do W37): toda parte que o título pede roda nas gravações do David com WRAM igual inteira (capturas K5 das 22 do W37 e da vile-zero-with-arm do R14), tiros disparados rastreados pelo criador, o caminho de disparo 81:9536 (OID arma/2 + 6, +9 no nível 3; um sítio filho 83:8BA9..83:A28D só roda dentro de um objeto vivo da arma); conferência pela queda de energia: 212 quadros disparados, 2 com a queda exata. Vistas (contagem, primeira gravação e quadro): fired 212 (sting-chameleon q24547), facing_left 87 (launch-octopus-and-sting-flooded q10628), facing_right 125 (sting-chameleon q24547), ground 122 (sting-chameleon q24547), air 87 (launch-octopus-and-sting-flooded q10489), state_00 490 (sting-chameleon q24547), state_02 490 (sting-chameleon q24547), state_04 11 (launch-octopus-and-sting-flooded q10580), state_06 34 (launch-octopus-and-sting-flooded q35285), state_08 188 (launch-octopus-and-sting-flooded q10492), state_0A 257 (sting-chameleon q24569). Imagens exatas em todo quadro visto (V12); resíduos de imagem em outros quadros dessas gravações, nomeados pela leitura do L29 (passo visual): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json.",
            "en": "2026-09-26 (card W38, coordinator decisions 1-3; W37's rule): every part the title needs runs in David's WRAM-equal whole takes (K5 captures of W37's 22 and R14's vile-zero-with-arm), fired shots traced by their creator, the fire path 81:9536 (OID weapon/2 + 6, +9 at level 3; a child site 83:8BA9..83:A28D runs only inside a live object of the weapon); energy drop cross-check: 212 fired frames, 2 with the exact drop. Seen (count, first take and frame): fired 212 (sting-chameleon f24547), facing_left 87 (launch-octopus-and-sting-flooded f10628), facing_right 125 (sting-chameleon f24547), ground 122 (sting-chameleon f24547), air 87 (launch-octopus-and-sting-flooded f10489), state_00 490 (sting-chameleon f24547), state_02 490 (sting-chameleon f24547), state_04 11 (launch-octopus-and-sting-flooded f10580), state_06 34 (launch-octopus-and-sting-flooded f35285), state_08 188 (launch-octopus-and-sting-flooded f10492), state_0A 257 (sting-chameleon f24569). Pictures exact on every seen frame (V12); residual pictures elsewhere in those takes, named under L29's reading (visual step): sigma2 1 (f6893), storm-eagle-and-spark-dark 1 (f21065). KB knowledge_base/mmx1/rom/weapons_evidence_2026-09-26b.json."
          },
          "family": "chameleon-sting"
        },
        {
          "id": "weapon.chameleon-sting.normal-config",
          "category": "weapons",
          "title": {
            "pt": "Parâmetros do tiro normal carregados da medição",
            "en": "Normal-shot parameters loaded from source measurements"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Parâmetros do tiro normal carregados da medição conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Normal-shot parameters loaded from source measurements as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/chameleon_sting_kb_contract_test.cpp",
            "knowledge_base/mmx1/weapons/chameleon-sting/weapon.json"
          ],
          "note": {
            "pt": "Contrato de configuração do motor, não trajetória completa, todos os alvos ou apresentação.",
            "en": "Engine configuration contract, not complete trajectory, every target or presentation."
          },
          "family": "chameleon-sting"
        }
      ],
      "family": "chameleon-sting"
    },
    {
      "id": "enemy.intro_spikeball",
      "category": "enemies",
      "title": {
        "pt": "Bola voadora de espinhos",
        "en": "Flying spike ball"
      },
      "steps": [
        {
          "id": "enemy.intro_spikeball.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x15 (rótulo do censo spiky, main 82:9BD2) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 5 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 20 de 20 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro). Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x15 (census label spiky, main 82:9BD2) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 5 state words (+$01, +$02); ROM placements on screen 20 of 20 (M4 entries matched by OID and finder 3, first-frame offset 0 px). By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_spikeball"
        },
        {
          "id": "enemy.intro_spikeball.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x15 (rótulo do censo spiky, main 82:9BD2) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot (82:8358) nem loadEnitySlotBase (82:8321) (rotinas do censo): a ausência de ataque tem respaldo na origem. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x15 (census label spiky, main 82:9BD2) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot (82:8358) nor loadEnitySlotBase (82:8321) (census routines): no-attack backed by source. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_spikeball"
        },
        {
          "id": "enemy.intro_spikeball.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x15 (rótulo do censo spiky, main 82:9BD2) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 49 (buster 30, fire-wave 6, homing-torpedo 10, chameleon-sting 3); mortes 23 (buster 14, fire-wave 4, homing-torpedo 4, chameleon-sting 1); X sofreu dano a até 32 px dele 5 vezes (ex.: armored-armadillo-auto_1_7731 f4264). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x15 (census label spiky, main 82:9BD2) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 49 (buster 30, fire-wave 6, homing-torpedo 10, chameleon-sting 3); deaths 23 (buster 14, fire-wave 4, homing-torpedo 4, chameleon-sting 1); X damaged within 32 px of it 5 times (e.g. armored-armadillo-auto_1_7731 f4264). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_spikeball"
        },
        {
          "id": "enemy.intro_spikeball.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 7,
          "status": "partial",
          "partial": {
            "seen": 39,
            "total": 40,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.intro_spikeball.visual (picture parts seen 36 of parts_total 40; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.intro_spikeball.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.34%. Não vale 0.34% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.34% total, not 0.34% per stage. An existing definition does not prove every case."
          },
          "family": "intro_spikeball"
        },
        {
          "id": "enemy.intro_spikeball.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x15 (rótulo do censo spiky, main 82:9BD2) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 23 (explosões do finder 1: 0x02 x24, 0x09 x4); drops 0x01 x3, 0x02 x3 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; nenhum filho: o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches), então filhos sobreviventes não se aplicam; liberações fora da tela 19; posicionamentos reaparecidos 11; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x15 (census label spiky, main 82:9BD2) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, sigma1-zero-arm_2_35588, sigma2_2_41296), 4,348 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 23 (finder-1 blasts 0x02 x24, 0x09 x4); drops 0x01 x3, 0x02 x3 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; no child: its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches), so surviving children do not apply; off-screen frees 19; respawned placements 11; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_spikeball"
        },
        {
          "id": "enemy.intro_spikeball.left-drift",
          "category": "enemies",
          "title": {
            "pt": "Deslocamento constante para esquerda, sem oscilar",
            "en": "Constant leftward drift without vertical bobbing"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Deslocamento constante para esquerda, sem oscilar conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Constant leftward drift without vertical bobbing as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/intro_highway_enemy_contract_test.cpp"
          ],
          "note": {
            "pt": "Velocidade medida e HP/contato configurados; animação, hitbox e drops permanecem parciais.",
            "en": "Measured speed and configured HP/contact; animation, hitbox and drops remain partial."
          },
          "family": "intro_spikeball"
        }
      ],
      "family": "intro_spikeball",
      "sourceOid": "0x15",
      "tableContext": "enemy-object table",
      "placements": {
        "armored-armadillo": 4,
        "chill-penguin": 8,
        "intro-highway": 2,
        "sigma-1": 2,
        "sigma-2": 2
      }
    },
    {
      "id": "enemy.intro_robot",
      "category": "enemies",
      "title": {
        "pt": "Robô de canhão OID 0x29",
        "en": "Cannon robot OID 0x29"
      },
      "steps": [
        {
          "id": "enemy.intro_robot.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x29 (rótulo do censo gunVolt, main 82:D9EF) rodou em 6 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 4 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 14 de 14 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro); execuções geradas 2, por 0x41 x2. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x29 (census label gunVolt, main 82:D9EF) ran in 6 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 4 state words (+$01, +$02); ROM placements on screen 14 of 14 (M4 entries matched by OID and finder 3, first-frame offset 0 px); spawned runs 2, by 0x41 x2. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_robot"
        },
        {
          "id": "enemy.intro_robot.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x29 (rótulo do censo gunVolt, main 82:D9EF) rodou em 6 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x0E x39; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x29 (census label gunVolt, main 82:D9EF) ran in 6 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x0E x39; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_robot"
        },
        {
          "id": "enemy.intro_robot.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x29 (rótulo do censo gunVolt, main 82:D9EF) rodou em 6 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 370 (buster 100, fire-wave 229, boomerang-cutter 23, homing-torpedo 3, shotgun-ice 9, electric-spark 6); mortes 27 (buster 6, fire-wave 15, boomerang-cutter 4, shotgun-ice 1, electric-spark 1); X sofreu dano a até 32 px dele 2 vezes (ex.: spark-mandrill-auto_1_2901 f1395). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x29 (census label gunVolt, main 82:D9EF) ran in 6 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 370 (buster 100, fire-wave 229, boomerang-cutter 23, homing-torpedo 3, shotgun-ice 9, electric-spark 6); deaths 27 (buster 6, fire-wave 15, boomerang-cutter 4, shotgun-ice 1, electric-spark 1); X damaged within 32 px of it 2 times (e.g. spark-mandrill-auto_1_2901 f1395). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_robot"
        },
        {
          "id": "enemy.intro_robot.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 6,
          "status": "partial",
          "partial": {
            "seen": 42,
            "total": 43,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.intro_robot.visual (picture parts seen 37 of parts_total 43; 4 sound parts whose witness frame lies inside a whole APU-gated window of the same take (4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.intro_robot.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.29%. Não vale 0.29% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.29% total, not 0.29% per stage. An existing definition does not prove every case."
          },
          "family": "intro_robot"
        },
        {
          "id": "enemy.intro_robot.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x29 (rótulo do censo gunVolt, main 82:D9EF) rodou em 6 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 27 (explosões do finder 1: 0x02 x27, 0x09 x4, 0x10 x2); drops 0x01 x1, 0x02 x4, 0x0F x1 (objetos do finder 0, 1 a 55 quadros após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 13, ainda vivos 2+ quadros depois 12; liberações fora da tela 11; posicionamentos reaparecidos 10; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x29 (census label gunVolt, main 82:D9EF) ran in 6 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill-auto_1_2901, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 6,811 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 27 (finder-1 blasts 0x02 x27, 0x09 x4, 0x10 x2); drops 0x01 x1, 0x02 x4, 0x0F x1 (finder-0 objects, 1..55 frames after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 13, still alive 2+ frames later 12; off-screen frees 11; respawned placements 10; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_robot"
        },
        {
          "id": "enemy.intro_robot.action6",
          "category": "enemies",
          "title": {
            "pt": "Ataque parado com tiro no instante medido",
            "en": "Stationary attack with shot at the measured instant"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Ataque parado com tiro no instante medido conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Stationary attack with shot at the measured instant as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/intro_highway_enemy_contract_test.cpp",
            "knowledge_base/mmx1/enemies/intro_robot/shot_visual.json"
          ],
          "note": {
            "pt": "Ação6 de 91 updates, tiro no +80; scheduler/RNG completo e alcance não certificados.",
            "en": "91-update action6, shot at +80; complete scheduler/RNG and range not certified."
          },
          "family": "intro_robot"
        }
      ],
      "family": "intro_robot",
      "sourceOid": "0x29",
      "tableContext": "enemy-object table",
      "placements": {
        "intro-highway": 3,
        "sigma-1": 2,
        "spark-mandrill": 5,
        "storm-eagle": 2
      }
    },
    {
      "id": "enemy.intro_helicopter",
      "category": "enemies",
      "title": {
        "pt": "Helicóptero OID 0x0F",
        "en": "Helicopter OID 0x0F"
      },
      "steps": [
        {
          "id": "enemy.intro_helicopter.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "partial",
          "partial": {
            "seen": 16,
            "total": 17,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.intro_helicopter.motion (seen 16 of parts_total 17); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.18%. Não vale 0.18% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.18% total, not 0.18% per stage. An existing definition does not prove every case."
          },
          "family": "intro_helicopter"
        },
        {
          "id": "enemy.intro_helicopter.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "partial",
          "partial": {
            "seen": 17,
            "total": 18,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.intro_helicopter.attack (seen 17 of parts_total 18); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.18%. Não vale 0.18% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.18% total, not 0.18% per stage. An existing definition does not prove every case."
          },
          "family": "intro_helicopter"
        },
        {
          "id": "enemy.intro_helicopter.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "partial",
          "partial": {
            "seen": 18,
            "total": 19,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.intro_helicopter.contact (seen 18 of parts_total 19); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.18%. Não vale 0.18% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.18% total, not 0.18% per stage. An existing definition does not prove every case."
          },
          "family": "intro_helicopter"
        },
        {
          "id": "enemy.intro_helicopter.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 3,
          "status": "partial",
          "partial": {
            "seen": 62,
            "total": 64,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.intro_helicopter.visual (picture parts seen 59 of parts_total 64; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.intro_helicopter.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.18%. Não vale 0.18% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.18% total, not 0.18% per stage. An existing definition does not prove every case."
          },
          "family": "intro_helicopter"
        },
        {
          "id": "enemy.intro_helicopter.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x0F (rótulo do censo crusher, main 82:9689) rodou em 1 execuções verificadas (intro-highway_1_15577), 1,233 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 8 (explosões do finder 1: 0x09 x1, 0x02 x3); drops 0x02 x4 (objetos do finder 0, 0 a 106 quadros após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 8, ainda vivos 2+ quadros depois 5; liberações fora da tela 3; posicionamentos reaparecidos 1; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x0F (census label crusher, main 82:9689) ran in 1 verified runs (intro-highway_1_15577), 1,233 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 8 (finder-1 blasts 0x09 x1, 0x02 x3); drops 0x02 x4 (finder-0 objects, 0..106 frames after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 8, still alive 2+ frames later 5; off-screen frees 3; respawned placements 1; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "intro_helicopter"
        }
      ],
      "family": "intro_helicopter",
      "sourceOid": "0x0F",
      "tableContext": "enemy-object table",
      "placements": {
        "intro-highway": 12
      }
    },
    {
      "id": "enemy.axemax",
      "category": "enemies",
      "title": {
        "pt": "Axe Max",
        "en": "Axe Max"
      },
      "steps": [
        {
          "id": "enemy.axemax.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x0B (rótulo do censo axeMax, main 81:D033) rodou em 5 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 6,833 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 15 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 5 de 5 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro). Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x0B (census label axeMax, main 81:D033) ran in 5 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 6,833 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 15 state words (+$01, +$02); ROM placements on screen 5 of 5 (M4 entries matched by OID and finder 3, first-frame offset 0 px). By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 1,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x0B (rótulo do censo axeMax, main 81:D033) rodou em 5 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 6,833 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x08 x107; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x0B (census label axeMax, main 81:D033) ran in 5 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 6,833 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x08 x107; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x0B (rótulo do censo axeMax, main 81:D033) rodou em 5 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 6,833 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 92 (buster 74, fire-wave 18); mortes 9 (buster 8, fire-wave 1); X sofreu dano a até 32 px dele 1 vezes (ex.: launch-octopus-and-sting-flooded_2_38342 f29516). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x0B (census label axeMax, main 81:D033) ran in 5 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 6,833 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 92 (buster 74, fire-wave 18); deaths 9 (buster 8, fire-wave 1); X damaged within 32 px of it 1 times (e.g. launch-octopus-and-sting-flooded_2_38342 f29516). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.visual",
          "category": "enemies",
          "title": {
            "pt": "Corpo e machado: composição e âncora",
            "en": "Body and axe: composition and anchor"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "docs/evidence/2026-07-22-fe57bc-axemax-composition-runtime/verdict.json",
            "tests/cpp/axemax_body_axe_contract_test.cpp",
            "tests/cpp/axemax_ground_anchor_contract_test.cpp"
          ],
          "note": {
            "pt": "FE5.7B/C: composição do corpo/machado e âncoras aceitas. A pilha e seus logs pertencem a contato/ataque, ainda parciais.",
            "en": "FE5.7B/C: accepted body/axe composition and anchors. Stack/logs belong to still-partial contact/attack."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "docs/tasks/done/E47-drop-reach-exclusion.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.24%. Não vale 0.24% por fase. Definição existente não comprova todos os casos. 2026-10-04 (E47, LG5): verificado; toda parte vista ou excluída pela fonte (6 vistas, 1 excluídas, de 7); drop excluído: nenhum caminho até 84:A384 (enemy_drop_reach_2026-10-04.json, 0 acertos de solidez); enemy_step_sweep summary.complete_candidates.",
            "en": "Reusable family: 0.24% total, not 0.24% per stage. An existing definition does not prove every case. 2026-10-04 (E47, LG5): verified; every part seen or excluded by source (6 seen, 1 excluded, of 7); drop excluded: no path to 84:A384 (enemy_drop_reach_2026-10-04.json, 0 soundness hits); enemy_step_sweep summary.complete_candidates."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.stack-boxes",
          "category": "enemies",
          "title": {
            "pt": "Colisão pelos boxes medidos dos troncos da abertura",
            "en": "Opening-stack collision through measured log boxes"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Colisão pelos boxes medidos dos troncos da abertura conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Opening-stack collision through measured log boxes as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/cp_opening_enemy_contract_test.cpp",
            "tools/tests/test_axemax_stack_runtime.py",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Só pilha medida de CP; alinhamento visual e outras aparições aguardam revisão do dono.",
            "en": "Only the measured CP stack; visual alignment and other placements await owner review."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.log-cadence",
          "category": "enemies",
          "title": {
            "pt": "Sequência de dois troncos e velocidade de voo",
            "en": "Two-log volley sequence and flight speed"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Sequência de dois troncos e velocidade de voo conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Two-log volley sequence and flight speed as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/cp_opening_enemy_contract_test.cpp"
          ],
          "note": {
            "pt": "Cadência medida e contrato de voo; casos de restock e interação completa ainda parciais.",
            "en": "Measured cadence and flight contract; restock cases and full interactions remain partial."
          },
          "family": "axemax"
        },
        {
          "id": "enemy.axemax.audio",
          "category": "enemies",
          "title": {
            "pt": "Sons do corpo, lançamento e morte, ou silêncio comprovado",
            "en": "Body, launch and death sounds, or proven silence"
          },
          "weightBp": 2,
          "status": "pending",
          "partial": {
            "seen": 3,
            "total": 4,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.axemax.audio (seen 2 of parts_total 4); read at git abdfbe94c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.axemax.audio/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar eventos de disparo, carga, contato e término; silêncio só fecha com controle positivo na medição.",
            "en": "Compare firing, charging, contact and termination audio events; silence closes only with a positive capture control."
          },
          "evidence": [
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          },
          "family": "axemax"
        }
      ],
      "family": "axemax",
      "sourceOid": "0x0B",
      "tableContext": "enemy-object table",
      "placements": {
        "chill-penguin": 2,
        "sting-chameleon": 3
      }
    },
    {
      "id": "enemy.walker",
      "category": "enemies",
      "title": {
        "pt": "Walker",
        "en": "Walker"
      },
      "steps": [
        {
          "id": "enemy.walker.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x51 exato em 400 de 400 chamadas do gate (966 vistas; 1,301 de 2,628 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x51's generated handler exact on 400 of 400 gated calls (966 seen; 1,301 of 2,628 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "walker"
        },
        {
          "id": "enemy.walker.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x51 exato em 400 de 400 chamadas do gate (966 vistas; 1,301 de 2,628 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7); todo handler de tiro inimigo que o filme executa exato (E33, 7 de 7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x51's generated handler exact on 400 of 400 gated calls (966 seen; 1,301 of 2,628 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7); every enemy-shot handler the movie runs exact (E33, 7 of 7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "walker"
        },
        {
          "id": "enemy.walker.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x51 exato em 400 de 400 chamadas do gate (966 vistas; 1,301 de 2,628 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x51's generated handler exact on 400 of 400 gated calls (966 seen; 1,301 of 2,628 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "walker"
        },
        {
          "id": "enemy.walker.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 2,
          "status": "partial",
          "partial": {
            "seen": 19,
            "total": 24,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.walker.visual (picture parts seen 16 of parts_total 24; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.walker.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.12%. Não vale 0.12% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.12% total, not 0.12% per stage. An existing definition does not prove every case."
          },
          "family": "walker"
        },
        {
          "id": "enemy.walker.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json",
            "tools/tests/test_overnight_hunt_credit.py",
            "docs/tasks/done/E44-overnight-hunt-credit.md"
          ],
          "note": {
            "pt": "E44: todas as partes do ciclo de vida vistas pela regra E40. e43-walker-death-child-hunt: mortes f5570/7736/7834; filhos vivos até f5579/7797/7859, atribuídos ao pai no nascimento. WRAM 9479/9479 e imagens 9478/9478; T2 preserva os bytes. ROM 80:FB46 -> 87:D607. Família contada uma vez.",
            "en": "E44: every lifecycle part seen under the E40 rule. e43-walker-death-child-hunt: deaths f5570/7736/7834; children alive through f5579/7797/7859, attributed to their parent at birth. WRAM 9479/9479 and pictures 9478/9478; T2 retains identical bytes. ROM 80:FB46 -> 87:D607. Family counted once."
          },
          "family": "walker"
        },
        {
          "id": "enemy.walker.source-hop",
          "category": "enemies",
          "title": {
            "pt": "Primeiro salto, direção inicial e apoio medidos",
            "en": "Measured first hop, initial facing and support"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Primeiro salto, direção inicial e apoio medidos conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Measured first hop, initial facing and support as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/cp_opening_enemy_contract_test.cpp",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "T1.7l aceito; disparos, RNG compartilhado e diferença na morte permanecem pendentes.",
            "en": "T1.7l accepted; firing, shared RNG and death mismatch remain pending."
          },
          "family": "walker"
        }
      ],
      "family": "walker",
      "sourceOid": "0x51",
      "tableContext": "enemy-object table",
      "placements": {
        "chill-penguin": 5
      }
    },
    {
      "id": "enemy.bat",
      "category": "enemies",
      "title": {
        "pt": "Morcego lançador de minas (0x19)",
        "en": "Mine-dropping bat (0x19)"
      },
      "steps": [
        {
          "id": "enemy.bat.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x19 (rótulo do censo bombBeen, main 82:9F52) rodou em 3 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577), 2,314 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 8 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 10 de 10 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro). Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x19 (census label bombBeen, main 82:9F52) ran in 3 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577), 2,314 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 8 state words (+$01, +$02); ROM placements on screen 10 of 10 (M4 entries matched by OID and finder 3, first-frame offset 0 px). By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "bat"
        },
        {
          "id": "enemy.bat.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x19 (rótulo do censo bombBeen, main 82:9F52) rodou em 3 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577), 2,314 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x0B x23; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x19 (census label bombBeen, main 82:9F52) ran in 3 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577), 2,314 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x0B x23; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "bat"
        },
        {
          "id": "enemy.bat.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x19 (rótulo do censo bombBeen, main 82:9F52) rodou em 3 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577), 2,314 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 18 (buster 18); mortes 6 (buster 6); X sofreu dano a até 32 px dele 2 vezes (ex.: intro-highway_1_15577 f6186). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x19 (census label bombBeen, main 82:9F52) ran in 3 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577), 2,314 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 18 (buster 18); deaths 6 (buster 6); X damaged within 32 px of it 2 times (e.g. intro-highway_1_15577 f6186). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "bat"
        },
        {
          "id": "enemy.bat.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 3,
          "status": "partial",
          "partial": {
            "seen": 37,
            "total": 45,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.bat.visual (picture parts seen 31 of parts_total 45; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.bat.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 3 method-f parts child:1428:0B:cell:24:AFB650, child:1428:0B:cell:24:AFB653, child:1428:0B:cell:24:AFB656 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.bat.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.17%. Não vale 0.17% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.17% total, not 0.17% per stage. An existing definition does not prove every case."
          },
          "family": "bat"
        },
        {
          "id": "enemy.bat.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "docs/tasks/done/E47-drop-reach-exclusion.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.17%. Não vale 0.17% por fase. Definição existente não comprova todos os casos. 2026-10-04 (E47, LG5): verificado; toda parte vista ou excluída pela fonte (6 vistas, 1 excluídas, de 7); drop excluído: nenhum caminho até 84:A384 (enemy_drop_reach_2026-10-04.json, 0 acertos de solidez); enemy_step_sweep summary.complete_candidates.",
            "en": "Reusable family: 0.17% total, not 0.17% per stage. An existing definition does not prove every case. 2026-10-04 (E47, LG5): verified; every part seen or excluded by source (6 seen, 1 excluded, of 7); drop excluded: no path to 84:A384 (enemy_drop_reach_2026-10-04.json, 0 soundness hits); enemy_step_sweep summary.complete_candidates."
          },
          "family": "bat"
        },
        {
          "id": "enemy.bat.patrol",
          "category": "enemies",
          "title": {
            "pt": "Patrulha horizontal e pausa para lançar minas",
            "en": "Horizontal patrol and mine-dropping hover"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Patrulha horizontal e pausa para lançar minas conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Horizontal patrol and mine-dropping hover as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/cp_opening_enemy_contract_test.cpp"
          ],
          "note": {
            "pt": "FSM U19 medida; ativação e repetição em todos os contextos ainda não fechadas.",
            "en": "Measured U19 FSM; activation and repetition in every context are not yet closed."
          },
          "family": "bat"
        },
        {
          "id": "enemy.bat.mine-drop",
          "category": "enemies",
          "title": {
            "pt": "Duas minas nos momentos medidos da pausa",
            "en": "Two mines at the measured hover moments"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Duas minas nos momentos medidos da pausa conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Two mines at the measured hover moments as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/cp_opening_enemy_contract_test.cpp"
          ],
          "note": {
            "pt": "Nascimento das minas e dano configurado aceitos; pouso em todas as rampas e ciclo de vida continuam separados.",
            "en": "Mine birth and configured damage accepted; landing across all slopes and lifecycle remain separate."
          },
          "family": "bat"
        }
      ],
      "family": "bat",
      "sourceOid": "0x19",
      "tableContext": "enemy-object table",
      "placements": {
        "chill-penguin": 4,
        "intro-highway": 6
      }
    },
    {
      "id": "enemy.cp_bat",
      "category": "enemies",
      "title": {
        "pt": "Morcego de voo irregular (0x2D)",
        "en": "Drifting bat (0x2D)"
      },
      "steps": [
        {
          "id": "enemy.cp_bat.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 89 de 89 partes: as já vistas como antes, e placement:armored-armadillo:0, placement:armored-armadillo:62 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 89 of 89 parts: those already seen as before, and placement:armored-armadillo:0, placement:armored-armadillo:62 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "cp_bat"
        },
        {
          "id": "enemy.cp_bat.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 18,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 90 de 90 partes: as já vistas como antes, e placement:armored-armadillo:0, placement:armored-armadillo:62 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 90 of 90 parts: those already seen as before, and placement:armored-armadillo:0, placement:armored-armadillo:62 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "cp_bat"
        },
        {
          "id": "enemy.cp_bat.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 18,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 91 de 91 partes: as já vistas como antes, e placement:armored-armadillo:0, placement:armored-armadillo:62 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 91 of 91 parts: those already seen as before, and placement:armored-armadillo:0, placement:armored-armadillo:62 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "cp_bat"
        },
        {
          "id": "enemy.cp_bat.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 17,
          "status": "partial",
          "partial": {
            "seen": 53,
            "total": 55,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.cp_bat.visual (picture parts seen 46 of parts_total 55; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 4 method-f parts 2D:cell:4B:AFC4B0, 2D:cell:4B:AFC4B3, 2D:cell:4B:AFC4B6, 2D:cell:4B:AFC4B9 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e53.json#/steps/enemy.cp_bat.visual/parts (exclusion_proof cites the ROM by bank:addr, card E53)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.88%. Não vale 0.88% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.88% total, not 0.88% per stage. An existing definition does not prove every case."
          },
          "family": "cp_bat"
        },
        {
          "id": "enemy.cp_bat.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 17,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x2D (rótulo do censo batBone, main 87:A07F) rodou em 6 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, sigma3_2_26312), 30,959 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 60 (explosões do finder 1: 0x02 x73, 0x09 x28, 0x10 x4); drops 0x01 x8, 0x02 x4 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; nenhum filho: o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches), então filhos sobreviventes não se aplicam; liberações fora da tela 90; posicionamentos reaparecidos 13; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x2D (census label batBone, main 87:A07F) ran in 6 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, sigma3_2_26312), 30,959 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 60 (finder-1 blasts 0x02 x73, 0x09 x28, 0x10 x4); drops 0x01 x8, 0x02 x4 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; no child: its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches), so surviving children do not apply; off-screen frees 90; respawned placements 13; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "cp_bat"
        },
        {
          "id": "enemy.cp_bat.drift-law",
          "category": "enemies",
          "title": {
            "pt": "Ficar pendurado e voar nas direções medidas",
            "en": "Hang and drift along measured directions"
          },
          "weightBp": 12,
          "status": "verified",
          "acceptance": {
            "pt": "Ficar pendurado e voar nas direções medidas conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Hang and drift along measured directions as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/enemy_bat_drift_ghost_test.cpp",
            "knowledge_base/mmx1/enemies/oid_0x2D_bat_family_pending/direction_law.json"
          ],
          "note": {
            "pt": "Ghost e distribuição de direções aceitos; ativação e comportamento completo em outras fases continuam abertos.",
            "en": "Accepted ghost and direction distribution; activation and complete behavior in other stages remain open."
          },
          "family": "cp_bat"
        }
      ],
      "family": "cp_bat",
      "sourceOid": "0x2D",
      "tableContext": "enemy-object table",
      "placements": {
        "armored-armadillo": 58,
        "chill-penguin": 8,
        "sigma-2": 12,
        "sigma-3": 3
      }
    },
    {
      "id": "enemy.mad_pecker",
      "category": "enemies",
      "title": {
        "pt": "Snow Shooter",
        "en": "Snow Shooter"
      },
      "steps": [
        {
          "id": "enemy.mad_pecker.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x53 exato em 400 de 400 chamadas do gate (690 vistas; 871 de 1,206 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos. Nome dos créditos finais (84:E3B6); id mantido.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x53's generated handler exact on 400 of 400 gated calls (690 seen; 871 of 1,206 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7). Bound: observed states only; lifecycle, visuals and sound stay open. Name from the ending credits (84:E3B6); id kept."
          },
          "family": "mad_pecker"
        },
        {
          "id": "enemy.mad_pecker.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x53 exato em 400 de 400 chamadas do gate (690 vistas; 871 de 1,206 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7); todo handler de tiro inimigo que o filme executa exato (E33, 7 de 7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x53's generated handler exact on 400 of 400 gated calls (690 seen; 871 of 1,206 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7); every enemy-shot handler the movie runs exact (E33, 7 of 7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "mad_pecker"
        },
        {
          "id": "enemy.mad_pecker.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x53 exato em 400 de 400 chamadas do gate (690 vistas; 871 de 1,206 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x53's generated handler exact on 400 of 400 gated calls (690 seen; 871 of 1,206 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "mad_pecker"
        },
        {
          "id": "enemy.mad_pecker.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 2,
          "status": "partial",
          "partial": {
            "seen": 16,
            "total": 18,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.mad_pecker.visual (picture parts seen 9 of parts_total 18; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.mad_pecker.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 4 method-f parts 53:cell:88:AFDB03, 53:cell:88:AFDB06, 53:cell:88:AFDB09, 53:cell:88:AFDB0C per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.mad_pecker.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.10%. Não vale 0.10% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.10% total, not 0.10% per stage. An existing definition does not prove every case."
          },
          "family": "mad_pecker"
        },
        {
          "id": "enemy.mad_pecker.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_seeded_drops_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "docs/tasks/done/E46-seeded-enemy-drops.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.10%. Não vale 0.10% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.10% total, not 0.10% per stage. An existing definition does not prove every case."
          },
          "family": "mad_pecker"
        }
      ],
      "family": "mad_pecker",
      "sourceOid": "0x53",
      "tableContext": "enemy-object table",
      "placements": {
        "chill-penguin": 5
      }
    },
    {
      "id": "enemy.se_drone",
      "category": "enemies",
      "title": {
        "pt": "Drone rotor (0x49)",
        "en": "Rotor drone (0x49)"
      },
      "steps": [
        {
          "id": "enemy.se_drone.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x49 (rótulo do censo skyClaw, main 87:C387) rodou em 7 execuções verificadas (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 7 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 20 de 20 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro); execuções geradas 12, por 0x28 x12. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x49 (census label skyClaw, main 87:C387) ran in 7 verified runs (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 7 state words (+$01, +$02); ROM placements on screen 20 of 20 (M4 entries matched by OID and finder 3, first-frame offset 0 px); spawned runs 12, by 0x28 x12. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_drone"
        },
        {
          "id": "enemy.se_drone.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x49 (rótulo do censo skyClaw, main 87:C387) rodou em 7 execuções verificadas (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x4A x3; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x49 (census label skyClaw, main 87:C387) ran in 7 verified runs (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x4A x3; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_drone"
        },
        {
          "id": "enemy.se_drone.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x49 (rótulo do censo skyClaw, main 87:C387) rodou em 7 execuções verificadas (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 56 (buster 40, fire-wave 9, homing-torpedo 2, boomerang-cutter 5); mortes 42 (buster 25, fire-wave 7, homing-torpedo 4, boomerang-cutter 6); X sofreu dano a até 32 px dele 7 vezes (ex.: flame-mammoth_2_30151 f4043). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x49 (census label skyClaw, main 87:C387) ran in 7 verified runs (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 56 (buster 40, fire-wave 9, homing-torpedo 2, boomerang-cutter 5); deaths 42 (buster 25, fire-wave 7, homing-torpedo 4, boomerang-cutter 6); X damaged within 32 px of it 7 times (e.g. flame-mammoth_2_30151 f4043). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_drone"
        },
        {
          "id": "enemy.se_drone.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 8,
          "status": "partial",
          "partial": {
            "seen": 19,
            "total": 20,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.se_drone.visual (picture parts seen 16 of parts_total 20; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/flame-mammoth-arm-capsule_1_13555, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/flame-mammoth-lava_2_23048); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.se_drone.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.38%. Não vale 0.38% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.38% total, not 0.38% per stage. An existing definition does not prove every case."
          },
          "family": "se_drone"
        },
        {
          "id": "enemy.se_drone.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x49 (rótulo do censo skyClaw, main 87:C387) rodou em 7 execuções verificadas (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 42 (explosões do finder 1: 0x02 x40, 0x2B x336, 0x09 x12); drops 0x03 x1 (objetos do finder 0, 124 quadros após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 2, ainda vivos 2+ quadros depois 2; liberações fora da tela 56; posicionamentos reaparecidos 27; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x49 (census label skyClaw, main 87:C387) ran in 7 verified runs (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 13,254 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 42 (finder-1 blasts 0x02 x40, 0x2B x336, 0x09 x12); drops 0x03 x1 (finder-0 objects, 124 frames after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 2, still alive 2+ frames later 2; off-screen frees 56; respawned placements 27; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_drone"
        },
        {
          "id": "enemy.se_drone.single-flight",
          "category": "enemies",
          "title": {
            "pt": "Voo horizontal nos dois sentidos, sem deslocamento duplicado",
            "en": "Horizontal flight in both directions without duplicate movement"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Voo horizontal nos dois sentidos, sem deslocamento duplicado conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Horizontal flight in both directions without duplicate movement as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/enemy_se_drone_motion_contract_test.cpp",
            "tests/cpp/enemy_se_drone_integration_contract_test.cpp"
          ],
          "note": {
            "pt": "Somente a sequência de inicialização e movimento horizontal medida; contato e ciclo de vida separados.",
            "en": "Only measured initialization and horizontal movement; contact and lifecycle remain separate."
          },
          "family": "se_drone"
        }
      ],
      "family": "se_drone",
      "sourceOid": "0x49",
      "tableContext": "enemy-object table",
      "placements": {
        "flame-mammoth": 3,
        "launch-octopus": 1,
        "storm-eagle": 13
      }
    },
    {
      "id": "enemy.se_met",
      "category": "enemies",
      "title": {
        "pt": "Met protegido (0x2E)",
        "en": "Shielded Met (0x2E)"
      },
      "steps": [
        {
          "id": "enemy.se_met.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x2E (rótulo do censo metC15, main 83:C387) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 10 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 20 de 20 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro). Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x2E (census label metC15, main 83:C387) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 10 state words (+$01, +$02); ROM placements on screen 20 of 20 (M4 entries matched by OID and finder 3, first-frame offset 0 px). By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_met"
        },
        {
          "id": "enemy.se_met.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x2E (rótulo do censo metC15, main 83:C387) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x10 x6; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x2E (census label metC15, main 83:C387) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x10 x6; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_met"
        },
        {
          "id": "enemy.se_met.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x2E (rótulo do censo metC15, main 83:C387) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 19 (buster 4, fire-wave 8, shotgun-ice 1, homing-torpedo 4, boomerang-cutter 2); mortes 15 (fire-wave 4, shotgun-ice 1, homing-torpedo 6, buster 1, boomerang-cutter 3); X sofreu dano a até 32 px dele 7 vezes (ex.: armored-armadillo-auto_1_7731 f2873). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x2E (census label metC15, main 83:C387) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 19 (buster 4, fire-wave 8, shotgun-ice 1, homing-torpedo 4, boomerang-cutter 2); deaths 15 (fire-wave 4, shotgun-ice 1, homing-torpedo 6, buster 1, boomerang-cutter 3); X damaged within 32 px of it 7 times (e.g. armored-armadillo-auto_1_7731 f2873). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_met"
        },
        {
          "id": "enemy.se_met.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 6,
          "status": "partial",
          "partial": {
            "seen": 22,
            "total": 23,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.se_met.visual (picture parts seen 18 of parts_total 23; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts 2E:cell:4D:AFC549 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.se_met.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.33%. Não vale 0.33% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.33% total, not 0.33% per stage. An existing definition does not prove every case."
          },
          "family": "se_met"
        },
        {
          "id": "enemy.se_met.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x2E (rótulo do censo metC15, main 83:C387) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 15 (explosões do finder 1: 0x02 x16, 0x09 x8); drops 0x01 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 3, ainda vivos 2+ quadros depois 3; liberações fora da tela 20; posicionamentos reaparecidos 3; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x2E (census label metC15, main 83:C387) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 7,856 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 15 (finder-1 blasts 0x02 x16, 0x09 x8); drops 0x01 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 3, still alive 2+ frames later 3; off-screen frees 20; respawned placements 3; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_met"
        }
      ],
      "family": "se_met",
      "sourceOid": "0x2E",
      "tableContext": "enemy-object table",
      "placements": {
        "armored-armadillo": 6,
        "sigma-1": 6,
        "storm-eagle": 4
      }
    },
    {
      "id": "enemy.stretch_bird",
      "category": "enemies",
      "title": {
        "pt": "Ave extensível OID 0x04",
        "en": "Stretch bird OID 0x04"
      },
      "steps": [
        {
          "id": "enemy.stretch_bird.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x04 (rótulo do censo flamingle, main 81:C034) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 7 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 17 de 17 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro). Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x04 (census label flamingle, main 81:C034) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 7 state words (+$01, +$02); ROM placements on screen 17 of 17 (M4 entries matched by OID and finder 3, first-frame offset 0 px). By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "stretch_bird"
        },
        {
          "id": "enemy.stretch_bird.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x04 (rótulo do censo flamingle, main 81:C034) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x03 x3; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x04 (census label flamingle, main 81:C034) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x03 x3; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "stretch_bird"
        },
        {
          "id": "enemy.stretch_bird.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x04 (rótulo do censo flamingle, main 81:C034) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 204 (buster 87, boomerang-cutter 9, fire-wave 108); mortes 34 (buster 17, boomerang-cutter 2, fire-wave 15); X sofreu dano a até 32 px dele 4 vezes (ex.: armored-armadillo-auto_1_7731 f1687). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x04 (census label flamingle, main 81:C034) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 204 (buster 87, boomerang-cutter 9, fire-wave 108); deaths 34 (buster 17, boomerang-cutter 2, fire-wave 15); X damaged within 32 px of it 4 times (e.g. armored-armadillo-auto_1_7731 f1687). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "stretch_bird"
        },
        {
          "id": "enemy.stretch_bird.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 9,
          "status": "partial",
          "partial": {
            "seen": 56,
            "total": 57,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.stretch_bird.visual (picture parts seen 49 of parts_total 57; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 5a1d9b4c3; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.stretch_bird.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 4 method-f parts 04:cell:09:AFA91E, 04:cell:09:AFA921, 04:cell:09:AFA924, 04:cell:09:AFA927 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-14_e57.json#/steps/enemy.stretch_bird.visual/parts (exclusion_proof cites the ROM by bank:addr, card E57)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.47%. Não vale 0.47% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.47% total, not 0.47% per stage. An existing definition does not prove every case."
          },
          "family": "stretch_bird"
        },
        {
          "id": "enemy.stretch_bird.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x04 (rótulo do censo flamingle, main 81:C034) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 34 (explosões do finder 1: 0x02 x103, 0x09 x12, 0x10 x1); drops 0x01 x3, 0x02 x3 (objetos do finder 0, 1 a 57 quadros após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 1, ainda vivos 2+ quadros depois 1; liberações fora da tela 6; posicionamentos reaparecidos 9; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x04 (census label flamingle, main 81:C034) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 22,821 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 34 (finder-1 blasts 0x02 x103, 0x09 x12, 0x10 x1); drops 0x01 x3, 0x02 x3 (finder-0 objects, 1..57 frames after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 1, still alive 2+ frames later 1; off-screen frees 6; respawned placements 9; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "stretch_bird"
        }
      ],
      "family": "stretch_bird",
      "sourceOid": "0x04",
      "tableContext": "enemy-object table",
      "placements": {
        "armored-armadillo": 4,
        "chill-penguin": 3,
        "sigma-2": 4,
        "spark-mandrill": 5
      }
    },
    {
      "id": "enemy.se_strider",
      "category": "enemies",
      "title": {
        "pt": "Andarilho OID 0x27",
        "en": "Strider OID 0x27"
      },
      "steps": [
        {
          "id": "enemy.se_strider.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x27 (rótulo do censo deerball, main 82:D1E5) rodou em 5 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 2,781 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 8 palavras de estado (+$01, +$02); posicionamentos da ROM na tela: 10 de 10 (entradas do M4 conferidas por OID e finder 3, deslocamento de 0 px no primeiro quadro); execuções geradas 3, por 0x22 x3. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x27 (census label deerball, main 82:D1E5) ran in 5 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 2,781 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 8 state words (+$01, +$02); ROM placements on screen 10 of 10 (M4 entries matched by OID and finder 3, first-frame offset 0 px); spawned runs 3, by 0x22 x3. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_strider"
        },
        {
          "id": "enemy.se_strider.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x27 (rótulo do censo deerball, main 82:D1E5) rodou em 5 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 2,781 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x0D x49; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x27 (census label deerball, main 82:D1E5) ran in 5 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 2,781 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x0D x49; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_strider"
        },
        {
          "id": "enemy.se_strider.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "tools/oracle/post/enemy_step_sweep.py",
            "tools/tests/test_enemy_step_sweep.py",
            "docs/tasks/done/E45-enemy-step-sweep.md"
          ],
          "note": {
            "pt": "2026-09-30 (E45): 14/14 partes de contato em tomadas verificadas (imagens e WRAM exatas, atribuição E35), incluindo as posições 85/89 do Spark Mandrill e o contato com o X em f4676.",
            "en": "2026-09-30 (E45): 14/14 contact parts in verified takes (pictures and WRAM exact, E35 attribution), including Spark Mandrill placements 85/89 and contact with X at f4676."
          },
          "family": "se_strider"
        },
        {
          "id": "enemy.se_strider.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 5,
          "status": "partial",
          "partial": {
            "seen": 44,
            "total": 57,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.se_strider.visual (picture parts seen 39 of parts_total 57; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577); other sound parts count unseen, rules R3/R38/R140); read at git 1a92dbe8c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.se_strider.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 2 method-f parts 27:cell:31:AFBBC6, 27:cell:31:AFBBA7 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json#/steps/enemy.se_strider.visual/parts (exclusion_proof cites the ROM by bank:addr, card E55)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.27%. Não vale 0.27% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.27% total, not 0.27% per stage. An existing definition does not prove every case."
          },
          "family": "se_strider"
        },
        {
          "id": "enemy.se_strider.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x27 (rótulo do censo deerball, main 82:D1E5) rodou em 5 execuções verificadas (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 2,781 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 15 (explosões do finder 1: 0x02 x15, 0x09 x3); drops 0x01 x3 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 2, ainda vivos 2+ quadros depois 2; liberações fora da tela 6; posicionamentos reaparecidos 3; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x27 (census label deerball, main 82:D1E5) ran in 5 verified runs (intro-highway_1_15577, sigma1-zero-arm_2_35588, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 2,781 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 15 (finder-1 blasts 0x02 x15, 0x09 x3); drops 0x01 x3 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 2, still alive 2+ frames later 2; off-screen frees 6; respawned placements 3; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_strider"
        },
        {
          "id": "enemy.se_strider.stepped-walk",
          "category": "enemies",
          "title": {
            "pt": "Andar em passos por pose e escolher direção ao nascer",
            "en": "Walk in pose-linked steps and choose facing at birth"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Andar em passos por pose e escolher direção ao nascer conforme os casos da referência citada, sem ampliar seu escopo.",
            "en": "Walk in pose-linked steps and choose facing at birth as covered by the cited reference cases, without expanding their scope."
          },
          "evidence": [
            "tests/cpp/enemy_se_strider_ghost_test.cpp"
          ],
          "note": {
            "pt": "Lei de deslocamento por célula e salto inicial; teste não certifica duração de cada célula nem toda ativação.",
            "en": "Per-cell displacement and spawn hop; test does not certify every cell duration or full activation."
          },
          "family": "se_strider"
        }
      ],
      "family": "se_strider",
      "sourceOid": "0x27",
      "tableContext": "enemy-object table",
      "placements": {
        "intro-highway": 2,
        "sigma-1": 3,
        "spark-mandrill": 2,
        "storm-eagle": 1
      }
    },
    {
      "id": "enemy.se_mech",
      "category": "enemies",
      "title": {
        "pt": "Robô OID 0x41 — identidade em análise",
        "en": "Robot OID 0x41 — identity under review"
      },
      "steps": [
        {
          "id": "enemy.se_mech.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 3,
          "status": "partial",
          "partial": {
            "seen": 4,
            "total": 5,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.se_mech.motion (seen 4 of parts_total 5); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.13%. Não vale 0.13% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.13% total, not 0.13% per stage. An existing definition does not prove every case."
          },
          "family": "se_mech"
        },
        {
          "id": "enemy.se_mech.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 3,
          "status": "partial",
          "partial": {
            "seen": 5,
            "total": 6,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.se_mech.attack (seen 5 of parts_total 6); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.13%. Não vale 0.13% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.13% total, not 0.13% per stage. An existing definition does not prove every case."
          },
          "family": "se_mech"
        },
        {
          "id": "enemy.se_mech.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 3,
          "status": "partial",
          "partial": {
            "seen": 4,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.se_mech.contact (seen 4 of parts_total 7); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.13%. Não vale 0.13% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.13% total, not 0.13% per stage. An existing definition does not prove every case."
          },
          "family": "se_mech"
        },
        {
          "id": "enemy.se_mech.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 2,
          "status": "partial",
          "partial": {
            "seen": 62,
            "total": 79,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.se_mech.visual (picture parts seen 39 of parts_total 79; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/storm-eagle-and-spark-dark_2_25920); other sound parts count unseen, rules R3/R38/R140); read at git 5a1d9b4c3; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.se_mech.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 20 method-f parts child:1928:10:cell:32:AFBC01, child:1928:10:cell:32:AFBC04, child:1928:10:cell:32:AFBC09, child:1928:10:cell:32:AFBC0C, child:1928:10:cell:32:AFBC0F, child:1928:10:cell:32:AFBC12, child:1928:10:cell:32:AFBC15, child:1928:10:cell:32:AFBC18, child:1928:10:cell:32:AFBC1B, child:1928:10:cell:32:AFBC1E, child:1928:10:cell:32:AFBC21, child:1928:10:cell:32:AFBC24, child:1928:10:cell:32:AFBC27, child:1928:10:cell:32:AFBC2A, child:1928:10:cell:32:AFBC2D, child:1928:10:cell:32:AFBC30, child:1928:10:cell:32:AFBC33, child:1928:10:cell:32:AFBC36, child:1928:10:cell:32:AFBC39, child:1928:10:cell:32:AFBC3C per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-14_e57.json#/steps/enemy.se_mech.visual/parts (exclusion_proof cites the ROM by bank:addr, card E57)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.13%. Não vale 0.13% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.13% total, not 0.13% per stage. An existing definition does not prove every case."
          },
          "family": "se_mech"
        },
        {
          "id": "enemy.se_mech.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 2,
          "status": "partial",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.se_mech.lifecycle (seen 4 of parts_total 7; method-f parts counted as seen 1 of 1: drop (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.13%. Não vale 0.13% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.13% total, not 0.13% per stage. An existing definition does not prove every case."
          },
          "family": "se_mech"
        }
      ],
      "family": "se_mech",
      "sourceOid": "0x41",
      "tableContext": "enemy-object table",
      "placements": {
        "storm-eagle": 1
      }
    },
    {
      "id": "enemy.se_turret",
      "category": "enemies",
      "title": {
        "pt": "Torreta OID 0x50",
        "en": "Turret OID 0x50"
      },
      "steps": [
        {
          "id": "enemy.se_turret.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_storm-eagle_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x50 exato em 204 de 204 chamadas do gate, todas as chamadas da gravação de SE (779 de 1,141 instruções executadas; E31), WRAM igual em todo quadro da gravação de SE (K8), suas 2 colocações da ROM (M4, só SE) vistas na tela e exatas em pixels (V6: 90 de 90 e 102 de 102 quadros; F7). Limite: só os estados observados; ciclo de vida, visual e som continuam abertos.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): OID 0x50's generated handler exact on 204 of 204 gated calls, every call of the SE recording (779 of 1,141 instructions run; E31), WRAM equal on every frame of the SE recording (K8), its 2 ROM placements (M4, SE only) on screen and pixel-exact (V6: 90 of 90 and 102 of 102 frames; F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "se_turret"
        },
        {
          "id": "enemy.se_turret.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_storm-eagle_2026-09-23.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x50 exato em 204 de 204 chamadas do gate, todas as chamadas da gravação de SE (779 de 1,141 instruções executadas; E31), WRAM igual em todo quadro da gravação de SE (K8), suas 2 colocações da ROM (M4, só SE) vistas na tela e exatas em pixels (V6: 90 de 90 e 102 de 102 quadros; F7); todo handler de tiro inimigo que o filme roda exato (E33, 4 de 4). Limite: só os estados observados; ciclo de vida, visual e som continuam abertos.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): OID 0x50's generated handler exact on 204 of 204 gated calls, every call of the SE recording (779 of 1,141 instructions run; E31), WRAM equal on every frame of the SE recording (K8), its 2 ROM placements (M4, SE only) on screen and pixel-exact (V6: 90 of 90 and 102 of 102 frames; F7); every enemy-shot handler the movie runs exact (E33, 4 of 4). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "se_turret"
        },
        {
          "id": "enemy.se_turret.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_storm-eagle_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x50 exato em 204 de 204 chamadas do gate, todas as chamadas da gravação de SE (779 de 1,141 instruções executadas; E31), WRAM igual em todo quadro da gravação de SE (K8), suas 2 colocações da ROM (M4, só SE) vistas na tela e exatas em pixels (V6: 90 de 90 e 102 de 102 quadros; F7). Limite: só os estados observados; ciclo de vida, visual e som continuam abertos.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): OID 0x50's generated handler exact on 204 of 204 gated calls, every call of the SE recording (779 of 1,141 instructions run; E31), WRAM equal on every frame of the SE recording (K8), its 2 ROM placements (M4, SE only) on screen and pixel-exact (V6: 90 of 90 and 102 of 102 frames; F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "se_turret"
        },
        {
          "id": "enemy.se_turret.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 2,
          "status": "partial",
          "partial": {
            "seen": 30,
            "total": 31,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.se_turret.visual (picture parts seen 27 of parts_total 31; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/storm-eagle-and-spark-dark_2_25920); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.se_turret.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.09%. Não vale 0.09% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.09% total, not 0.09% per stage. An existing definition does not prove every case."
          },
          "family": "se_turret"
        },
        {
          "id": "enemy.se_turret.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 1,
          "status": "partial",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.se_turret.lifecycle (seen 4 of parts_total 7; method-f parts counted as seen 1 of 1: drop (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.09%. Não vale 0.09% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.09% total, not 0.09% per stage. An existing definition does not prove every case."
          },
          "family": "se_turret"
        }
      ],
      "family": "se_turret",
      "sourceOid": "0x50",
      "tableContext": "enemy-object table",
      "placements": {
        "storm-eagle": 2
      }
    },
    {
      "id": "enemy.se_eaglet",
      "category": "enemies",
      "title": {
        "pt": "Filhote de Storm Eagle",
        "en": "Storm Eagle eaglet"
      },
      "steps": [
        {
          "id": "enemy.se_eaglet.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 1,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x56 (rótulo do censo stormEagle, main 87:E2B9) rodou em 3 execuções verificadas (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,341 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Movimento: 2 palavras de estado (+$01, +$02); nenhum posicionamento na ROM; execuções geradas 20, por 0x55 x20. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): não tem posicionamento na ROM; o movimento, e toda a sua evidência aqui, vem das instâncias geradas (a 0x55 o gera; execuções geradas 20). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x56 (census label stormEagle, main 87:E2B9) ran in 3 verified runs (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,341 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Motion: 2 state words (+$01, +$02); no ROM placement; spawned runs 20, by 0x55 x20. By the state gate, every observed state, facing and transition is the ROM routine's own. Judgment (E35, accepted by the coordinator): it has no ROM placement; its motion, and all its evidence here, comes from its spawned instances (0x55 spawns it; spawned runs 20). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_eaglet"
        },
        {
          "id": "enemy.se_eaglet.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 1,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x56 (rótulo do censo stormEagle, main 87:E2B9) rodou em 3 execuções verificadas (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,341 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot (82:8358) nem loadEnitySlotBase (82:8321) (rotinas do censo): a ausência de ataque tem respaldo na origem. Julgamento (E35, aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E35, aceito pelo coordenador): não tem posicionamento na ROM; o movimento, e toda a sua evidência aqui, vem das instâncias geradas (a 0x55 o gera; execuções geradas 20). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x56 (census label stormEagle, main 87:E2B9) ran in 3 verified runs (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,341 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot (82:8358) nor loadEnitySlotBase (82:8321) (census routines): no-attack backed by source. Judgment (E35, accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E35, accepted by the coordinator): it has no ROM placement; its motion, and all its evidence here, comes from its spawned instances (0x55 spawns it; spawned runs 20). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_eaglet"
        },
        {
          "id": "enemy.se_eaglet.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 1,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x56 (rótulo do censo stormEagle, main 87:E2B9) rodou em 3 execuções verificadas (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,341 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Contato: quedas de HP 0 (none); mortes 4 (chameleon-sting 2, electric-spark 2); X sofreu dano a até 32 px dele 4 vezes (ex.: sigma2_2_41296 f11771). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (E35, aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E35, aceito pelo coordenador): não tem posicionamento na ROM; o movimento, e toda a sua evidência aqui, vem das instâncias geradas (a 0x55 o gera; execuções geradas 20). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x56 (census label stormEagle, main 87:E2B9) ran in 3 verified runs (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,341 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Contact: HP drops 0 (none); deaths 4 (chameleon-sting 2, electric-spark 2); X damaged within 32 px of it 4 times (e.g. sigma2_2_41296 f11771). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35, accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E35, accepted by the coordinator): it has no ROM placement; its motion, and all its evidence here, comes from its spawned instances (0x55 spawns it; spawned runs 20). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "se_eaglet"
        },
        {
          "id": "enemy.se_eaglet.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 1,
          "status": "partial",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.se_eaglet.visual (picture parts seen 3 of parts_total 7; 1 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/storm-eagle-and-spark-dark_2_25920); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.se_eaglet.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Filho do ataque de Storm Eagle com definição de runtime própria. Aqui pontua o filhote; no chefe só a criação/seleção do ataque, sem duplicar a IA.",
            "en": "Storm Eagle attack child with its own runtime definition. This row owns the eaglet; boss credit covers attack creation/selection only, without duplicate AI."
          },
          "family": "se_eaglet"
        },
        {
          "id": "enemy.se_eaglet.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 1,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "docs/tasks/done/E47-drop-reach-exclusion.md"
          ],
          "note": {
            "pt": "Filho do ataque de Storm Eagle com definição de runtime própria. Aqui pontua o filhote; no chefe só a criação/seleção do ataque, sem duplicar a IA. 2026-10-04 (E47, LG5): verificado; toda parte vista ou excluída pela fonte (4 vistas, 3 excluídas, de 7); drop excluído: nenhum caminho até 84:A384 (enemy_drop_reach_2026-10-04.json, 0 acertos de solidez); enemy_step_sweep summary.complete_candidates.",
            "en": "Storm Eagle attack child with its own runtime definition. This row owns the eaglet; boss credit covers attack creation/selection only, without duplicate AI. 2026-10-04 (E47, LG5): verified; every part seen or excluded by source (4 seen, 3 excluded, of 7); drop excluded: no path to 84:A384 (enemy_drop_reach_2026-10-04.json, 0 soundness hits); enemy_step_sweep summary.complete_candidates."
          },
          "family": "se_eaglet"
        }
      ],
      "family": "se_eaglet",
      "sourceOid": "0x56",
      "tableContext": "enemy-object table",
      "placements": {}
    },
    {
      "id": "enemy.cp_snowball",
      "category": "enemies",
      "title": {
        "pt": "Bola de neve OID 0x54",
        "en": "Snowball OID 0x54"
      },
      "steps": [
        {
          "id": "enemy.cp_snowball.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x54 exato em 302 de 302 chamadas do gate (302 vistas; 1,313 de 2,437 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x54's generated handler exact on 302 of 302 gated calls (302 seen; 1,313 of 2,437 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "cp_snowball"
        },
        {
          "id": "enemy.cp_snowball.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x54 exato em 302 de 302 chamadas do gate (302 vistas; 1,313 de 2,437 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7); todo handler de tiro inimigo que o filme executa exato (E33, 7 de 7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x54's generated handler exact on 302 of 302 gated calls (302 seen; 1,313 of 2,437 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7); every enemy-shot handler the movie runs exact (E33, 7 of 7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "cp_snowball"
        },
        {
          "id": "enemy.cp_snowball.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/placements_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "tools/tests/test_gate_movie_handlers.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o handler gerado do OID 0x54 exato em 302 de 302 chamadas do gate (302 vistas; 1,313 de 2,437 instruções executadas; E30), WRAM igual em todo quadro da gravação de CP (K8), suas 5 colocações da ROM (M4, só CP) na tela e exatas em pixels (V5, F7). Limite: só os estados observados; ciclo de vida, visual e som seguem abertos.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): OID 0x54's generated handler exact on 302 of 302 gated calls (302 seen; 1,313 of 2,437 instructions run; E30), WRAM equal on every frame of the CP recording (K8), its 5 ROM placements (M4, CP only) on screen and pixel-exact (V5, F7). Bound: observed states only; lifecycle, visuals and sound stay open."
          },
          "family": "cp_snowball"
        },
        {
          "id": "enemy.cp_snowball.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 2,
          "status": "partial",
          "partial": {
            "seen": 19,
            "total": 20,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.cp_snowball.visual (picture parts seen 15 of parts_total 20; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.cp_snowball.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.12%. Não vale 0.12% por fase. Definição existente não comprova todos os casos.",
            "en": "Reusable family: 0.12% total, not 0.12% per stage. An existing definition does not prove every case."
          },
          "family": "cp_snowball"
        },
        {
          "id": "enemy.cp_snowball.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "tools/tests/test_enemy_drop_reach.py",
            "docs/tasks/done/E49-drop-reach-id-store-sites.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.12%. Não vale 0.12% por fase. Definição existente não comprova todos os casos. 2026-10-04 (E49, LG6): verificado; toda parte vista ou excluída pela fonte (5 vistas, 2 excluídas, de 7); drop excluído: o membro 0x54 não tem caminho até 84:A384, 0 acertos de solidez, rastreio de D conferido (19 sítios, 0 chamadas desbalanceadas) em enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates.",
            "en": "Reusable family: 0.12% total, not 0.12% per stage. An existing definition does not prove every case. 2026-10-04 (E49, LG6): verified; every part seen or excluded by source (5 seen, 2 excluded, of 7); drop excluded: member 0x54 has no path to 84:A384, 0 soundness hits, D trace checked (19 sites, 0 unbalanced callees) in enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates."
          },
          "family": "cp_snowball"
        }
      ],
      "family": "cp_snowball",
      "sourceOid": "0x54",
      "tableContext": "enemy-object table",
      "placements": {
        "chill-penguin": 5
      }
    },
    {
      "id": "enemy.rush_roader",
      "category": "enemies",
      "title": {
        "pt": "Robô azul / monte de sucata do FM (0x2A, dois subtipos)",
        "en": "FM blue robot / junk heap (0x2A, two subtypes)"
      },
      "steps": [
        {
          "id": "enemy.rush_roader.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_flame-mammoth_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json"
          ],
          "note": {
            "pt": "Modo ROM-first (card L5): 0x2A (main 87:9B70) só nasce dos 9 emissores 0x1C da FM (tabela 80F59A, main 83:FEA0; lista 85:8EBE params 0x03 x6, 0x00 x3; nenhuma outra fase). O subtipo de cada filho (slot +$0B, lido em 87:9BC1) é gravado em 83:FF25..83:FF30 pelo bit 1 do RNG: 0x00 ou 0x01 em todo emissor. E32: 400 de 7.290 chamadas exatas, subtipo 0x00 em 384 e 0x01 em 16; K8 30.150 de 30.150 quadros iguais (slots 0x2A só com 0x00 e 0x01, até f19541); V6 9 de 9 emissores na tela exatos; E33 FM 6 de 6 tiros. O emissor não tem gate unitário (só o de quadro).",
            "en": "ROM-first mode (card L5): 0x2A (main 87:9B70) is spawned only by FM's 9 0x1C emitters (table 80F59A, main 83:FEA0; list 85:8EBE params 0x03 x6, 0x00 x3; no other stage). Each child's subtype (slot +$0B, read at 87:9BC1) is set at 83:FF25..83:FF30 from RNG bit 1: 0x00 or 0x01 for every emitter. E32: 400 of 7,290 calls exact, subtype 0x00 in 384 and 0x01 in 16; K8 30,150 of 30,150 frames equal (0x2A slots hold only 0x00 and 0x01, to f19541); V6 9 of 9 emitters on screen exact; E33 FM shots 6 of 6. The emitter has no unit gate (frame gate only)."
          },
          "family": "rush_roader"
        },
        {
          "id": "enemy.rush_roader.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_flame-mammoth_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json"
          ],
          "note": {
            "pt": "Modo ROM-first (card L5): 0x2A (main 87:9B70) só nasce dos 9 emissores 0x1C da FM (tabela 80F59A, main 83:FEA0; lista 85:8EBE params 0x03 x6, 0x00 x3; nenhuma outra fase). O subtipo de cada filho (slot +$0B, lido em 87:9BC1) é gravado em 83:FF25..83:FF30 pelo bit 1 do RNG: 0x00 ou 0x01 em todo emissor. E32: 400 de 7.290 chamadas exatas, subtipo 0x00 em 384 e 0x01 em 16; K8 30.150 de 30.150 quadros iguais (slots 0x2A só com 0x00 e 0x01, até f19541); V6 9 de 9 emissores na tela exatos; E33 FM 6 de 6 tiros. O emissor não tem gate unitário (só o de quadro).",
            "en": "ROM-first mode (card L5): 0x2A (main 87:9B70) is spawned only by FM's 9 0x1C emitters (table 80F59A, main 83:FEA0; list 85:8EBE params 0x03 x6, 0x00 x3; no other stage). Each child's subtype (slot +$0B, read at 87:9BC1) is set at 83:FF25..83:FF30 from RNG bit 1: 0x00 or 0x01 for every emitter. E32: 400 of 7,290 calls exact, subtype 0x00 in 384 and 0x01 in 16; K8 30,150 of 30,150 frames equal (0x2A slots hold only 0x00 and 0x01, to f19541); V6 9 of 9 emitters on screen exact; E33 FM shots 6 of 6. The emitter has no unit gate (frame gate only)."
          },
          "family": "rush_roader"
        },
        {
          "id": "enemy.rush_roader.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/handler_gate_flame-mammoth_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/rom/shot_gate_2026-09-24.json"
          ],
          "note": {
            "pt": "Modo ROM-first (card L5): 0x2A (main 87:9B70) só nasce dos 9 emissores 0x1C da FM (tabela 80F59A, main 83:FEA0; lista 85:8EBE params 0x03 x6, 0x00 x3; nenhuma outra fase). O subtipo de cada filho (slot +$0B, lido em 87:9BC1) é gravado em 83:FF25..83:FF30 pelo bit 1 do RNG: 0x00 ou 0x01 em todo emissor. E32: 400 de 7.290 chamadas exatas, subtipo 0x00 em 384 e 0x01 em 16; K8 30.150 de 30.150 quadros iguais (slots 0x2A só com 0x00 e 0x01, até f19541); V6 9 de 9 emissores na tela exatos; E33 FM 6 de 6 tiros. O emissor não tem gate unitário (só o de quadro).",
            "en": "ROM-first mode (card L5): 0x2A (main 87:9B70) is spawned only by FM's 9 0x1C emitters (table 80F59A, main 83:FEA0; list 85:8EBE params 0x03 x6, 0x00 x3; no other stage). Each child's subtype (slot +$0B, read at 87:9BC1) is set at 83:FF25..83:FF30 from RNG bit 1: 0x00 or 0x01 for every emitter. E32: 400 of 7,290 calls exact, subtype 0x00 in 384 and 0x01 in 16; K8 30,150 of 30,150 frames equal (0x2A slots hold only 0x00 and 0x01, to f19541); V6 9 of 9 emitters on screen exact; E33 FM shots 6 of 6. The emitter has no unit gate (frame gate only)."
          },
          "family": "rush_roader"
        },
        {
          "id": "enemy.rush_roader.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 6,
          "status": "partial",
          "partial": {
            "seen": 76,
            "total": 79,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.rush_roader.visual (picture parts seen 45 of parts_total 79; 4 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/flame-mammoth-arm-capsule_1_13555, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/flame-mammoth-lava_2_23048); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.rush_roader.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 21 method-f parts child:1928:28:cell:42:AFC10A, child:1928:28:cell:42:AFC10D, child:1928:28:cell:42:AFC110, child:1928:28:cell:42:AFC113, child:1928:28:cell:42:AFC116, child:1928:28:cell:42:AFC119, child:1928:28:cell:42:AFC11C, child:1928:28:cell:42:AFC11F, child:1928:28:cell:42:AFC122, child:1928:28:cell:42:AFC125, child:1928:28:cell:42:AFC128, child:1928:28:cell:42:AFC12D, child:1928:28:cell:42:AFC130, child:1928:28:cell:42:AFC133, child:1928:28:cell:42:AFC136, child:1928:28:cell:42:AFC139, child:1928:28:cell:42:AFC13C, child:1928:28:cell:42:AFC13F, child:1928:28:cell:42:AFC142, child:1928:28:cell:42:AFC145, child:1928:28:cell:42:AFC148 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e52.json#/steps/enemy.rush_roader.visual/parts (exclusion_proof cites the ROM by bank:addr, card E52); plus 5 method-f parts child:1928:28:cell:42:AFC0F9, child:1928:28:cell:42:AFC0FC, child:1928:28:cell:42:AFC0FF, child:1928:28:cell:42:AFC102, child:1928:28:cell:42:AFC105 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.rush_roader.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "content/x1/enemies/enemy_defs.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Família reutilizável: total 0.33%. Não vale 0.33% por fase. Definição existente não comprova todos os casos. Inclui o emissor interno 0x1C da FM (sem família própria).",
            "en": "Reusable family: 0.33% total, not 0.33% per stage. An existing definition does not prove every case. Includes FM's internal 0x1C emitter (no family of its own)."
          },
          "family": "rush_roader"
        },
        {
          "id": "enemy.rush_roader.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35), modo ROM-first: a OID 0x2A (rótulo do censo utuborosBrokHead, main 87:9B70) rodou em 4 execuções verificadas (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104), 13,413 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas do V12. Ciclo de vida: mortes 21 (explosões do finder 1: 0x28 x70, 0x02 x21, 0x09 x13); drops 0x02 x6, 0x01 x1 (objetos do finder 0, 1 a 81 quadros após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 2, ainda vivos 2+ quadros depois 1; liberações fora da tela 54; posicionamentos reaparecidos 0 (não tem posicionamento na ROM; ver o julgamento abaixo); duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (E35, aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E35, aceito pelo coordenador): não tem posicionamento na ROM (é gerado só pelos emissores finder-2 0x1C de FM; execuções geradas 90), então o reaparecimento é o dos emissores gerando-o de novo. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L15, from E35), ROM-first mode: OID 0x2A (census label utuborosBrokHead, main 87:9B70) ran in 4 verified runs (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104), 13,413 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among V12's not-exact pictures. Lifecycle: deaths 21 (finder-1 blasts 0x28 x70, 0x02 x21, 0x09 x13); drops 0x02 x6, 0x01 x1 (finder-0 objects, 1..81 frames after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 2, still alive 2+ frames later 1; off-screen frees 54; respawned placements 0 (it has no ROM placement; see the judgment below); duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35, accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E35, accepted by the coordinator): it has no ROM placement (spawned only by FM's finder-2 0x1C emitters; spawned runs 90), so its respawn is the emitters spawning it again. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "rush_roader"
        }
      ],
      "family": "rush_roader",
      "sourceOid": "0x2A",
      "tableContext": "enemy-object table",
      "placements": {
        "flame-mammoth": 9
      }
    },
    {
      "id": "enemy.oid_01",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x01 (rótulo hoganmer): SC, FM, SE, BK, Sigma 1, Sigma 2",
        "en": "Object 0x01 (label hoganmer): SC, FM, SE, BK, Sigma 1, Sigma 2"
      },
      "steps": [
        {
          "id": "enemy.oid_01.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_01 (membros 0x01; granular-v3, L18). Criação e contextos de posicionamento: todos os 18 posicionamentos da ROM (sting-chameleon 1, flame-mammoth 4, storm-eagle 3, boomer-kuwanger 2, sigma-1 6, sigma-2 2) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 9, bottom 2, top 7. Os membros rodaram em execuções verificadas (E35): 0x01 em 10 execuções, 12,639 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_01 (members 0x01; granular-v3, L18). Creation and placement contexts: all 18 of its ROM placements (sting-chameleon 1, flame-mammoth 4, storm-eagle 3, boomer-kuwanger 2, sigma-1 6, sigma-2 2) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 9, bottom 2, top 7. Members ran in verified runs (E35): 0x01 in 10 runs, 12,639 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_01"
        },
        {
          "id": "enemy.oid_01.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v4.py",
            "docs/tasks/done/E41-hunt-batch-enemy-gaps.md"
          ],
          "note": {
            "pt": "2026-09-26, E41/W37: todas as partes vistas pelo redutor E40 inalterado em 77 execuções com WRAM igual; imagens exatas nos quadros citados. enemy.oid_01, stub 80:F9B6, rotina 83:AE81. storm-eagle entry 21, first on screen f2785; 80:F9B6 -> 83:AE81",
            "en": "2026-09-26, E41/W37: every part seen under unchanged E40 attribution rules over 77 WRAM-equal runs; pictures exact on cited frames. enemy.oid_01, stub 80:F9B6, main 83:AE81. storm-eagle entry 21, first on screen f2785; 80:F9B6 -> 83:AE81"
          },
          "family": "oid_01"
        },
        {
          "id": "enemy.oid_01.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v4.py",
            "docs/tasks/done/E41-hunt-batch-enemy-gaps.md"
          ],
          "note": {
            "pt": "2026-09-26, E41/W37: todas as partes vistas pelo redutor E40 inalterado em 77 execuções com WRAM igual; imagens exatas nos quadros citados. enemy.oid_01, stub 80:F9B6, rotina 83:AE81. storm-eagle entry 21, first on screen f2785; 80:F9B6 -> 83:AE81",
            "en": "2026-09-26, E41/W37: every part seen under unchanged E40 attribution rules over 77 WRAM-equal runs; pictures exact on cited frames. enemy.oid_01, stub 80:F9B6, main 83:AE81. storm-eagle entry 21, first on screen f2785; 80:F9B6 -> 83:AE81"
          },
          "family": "oid_01"
        },
        {
          "id": "enemy.oid_01.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 8,
          "status": "pending",
          "partial": {
            "seen": 23,
            "total": 28,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_01.visual (picture parts seen 20 of parts_total 28; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_01.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x01 (E36); 0.40% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x01 (E36); 0.40% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_01"
        },
        {
          "id": "enemy.oid_01.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_01, OID 0x01 (rótulo do censo hoganmer, main 83:AE81) rodou em 10 execuções verificadas (boomer-kuwanger_1_40070, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sting-chameleon-auto_1_5497, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 12,639 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 13 (explosões do finder 1: 0x02 x13, 0x04 x36, 0x09 x12); drops 0x02 x1, 0x01 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 9, ainda vivos 2+ quadros depois 9; liberações fora da tela 27; posicionamentos reaparecidos 9; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_01, OID 0x01 (census label hoganmer, main 83:AE81) ran in 10 verified runs (boomer-kuwanger_1_40070, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sting-chameleon-auto_1_5497, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 12,639 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 13 (finder-1 blasts 0x02 x13, 0x04 x36, 0x09 x12); drops 0x02 x1, 0x01 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 9, still alive 2+ frames later 9; off-screen frees 27; respawned placements 9; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_01"
        }
      ],
      "family": "oid_01",
      "sourceOid": "0x01",
      "tableContext": "enemy-object table",
      "placements": {
        "sting-chameleon": 1,
        "flame-mammoth": 4,
        "storm-eagle": 3,
        "boomer-kuwanger": 2,
        "sigma-1": 6,
        "sigma-2": 2
      },
      "memberOids": [
        "0x01"
      ]
    },
    {
      "id": "enemy.oid_06",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x06 (rótulo boomerKuwanger): SC",
        "en": "Object 0x06 (label boomerKuwanger): SC"
      },
      "steps": [
        {
          "id": "enemy.oid_06.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_06 (membros 0x06; granular-v3, L18). Criação e contextos de posicionamento: todos os 4 posicionamentos da ROM (sting-chameleon 4) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 4. Os membros rodaram em execuções verificadas (E35): 0x06 em 3 execuções, 4,211 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_06 (members 0x06; granular-v3, L18). Creation and placement contexts: all 4 of its ROM placements (sting-chameleon 4) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 4. Members ran in verified runs (E35): 0x06 in 3 runs, 4,211 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_06"
        },
        {
          "id": "enemy.oid_06.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_06, OID 0x06 (rótulo do censo boomerKuwanger, main 81:C24B) rodou em 3 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 4,211 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x05 x22; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_06, OID 0x06 (census label boomerKuwanger, main 81:C24B) ran in 3 verified runs (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 4,211 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x05 x22; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_06"
        },
        {
          "id": "enemy.oid_06.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_06, OID 0x06 (rótulo do censo boomerKuwanger, main 81:C24B) rodou em 3 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 4,211 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 5 (fire-wave 1, buster 4); mortes 0 (none); X sofreu dano a até 32 px dele 2 vezes (ex.: launch-octopus-and-sting-flooded_2_38342 f31333). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_06, OID 0x06 (census label boomerKuwanger, main 81:C24B) ran in 3 verified runs (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 4,211 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 5 (fire-wave 1, buster 4); deaths 0 (none); X damaged within 32 px of it 2 times (e.g. launch-octopus-and-sting-flooded_2_38342 f31333). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_06"
        },
        {
          "id": "enemy.oid_06.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 49,
            "total": 53,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_06.visual (picture parts seen 45 of parts_total 53; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/launch-octopus-and-sting-flooded_2_38342, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_06.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x06 (E36; o rótulo não é o chefe de BK (0x05)); 0.14% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x06 (E36; the label is not BK's boss (0x05)); 0.14% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_06"
        },
        {
          "id": "enemy.oid_06.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/oid06_lifecycle_2026-09-29.json",
            "tools/oracle/post/oid06_lifecycle.py",
            "docs/tasks/done/T1A-oid06-lifecycle-intake.md"
          ],
          "note": {
            "pt": "2026-09-29 (T1A): 7/7 obrigações em tomadas verificadas (WRAM 290/290, imagens 289/289): 2 mortes, 2 drops, 4 filhos ligados ao pai e 0 sobreviventes, 24 liberações fora da tela, 6 reposicionamentos sem duplicata. Regras E35.",
            "en": "2026-09-29 (T1A): 7/7 obligations in verified takes (WRAM 290/290, pictures 289/289): 2 deaths, 2 drops, 4 parent-linked children and 0 survivors, 24 off-screen frees, 6 respawns without duplicates. E35 rules."
          },
          "family": "oid_06"
        }
      ],
      "family": "oid_06",
      "sourceOid": "0x06",
      "tableContext": "enemy-object table",
      "placements": {
        "sting-chameleon": 4
      },
      "memberOids": [
        "0x06"
      ]
    },
    {
      "id": "enemy.oid_0d",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x0D (rótulo rushRoader): SM, Sigma 3",
        "en": "Object 0x0D (label rushRoader): SM, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_0d.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_0d (membros 0x0D; granular-v3, L18). Criação e contextos de posicionamento: todos os 8 posicionamentos da ROM (spark-mandrill 7, sigma-3 1) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 5, bottom 3. Os membros rodaram em execuções verificadas (E35): 0x0D em 3 execuções, 3,343 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_0d (members 0x0D; granular-v3, L18). Creation and placement contexts: all 8 of its ROM placements (spark-mandrill 7, sigma-3 1) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 5, bottom 3. Members ran in verified runs (E35): 0x0D in 3 runs, 3,343 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_0d"
        },
        {
          "id": "enemy.oid_0d.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_0d, OID 0x0D (rótulo do censo rushRoader, main 88:8F2A) rodou em 3 execuções verificadas (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches): a ausência de ataque tem respaldo na origem. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_0d, OID 0x0D (census label rushRoader, main 88:8F2A) ran in 3 verified runs (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches): no-attack backed by source. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_0d"
        },
        {
          "id": "enemy.oid_0d.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_0d, OID 0x0D (rótulo do censo rushRoader, main 88:8F2A) rodou em 3 execuções verificadas (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 41 (boomerang-cutter 5, shotgun-ice 7, buster 16, homing-torpedo 8, chameleon-sting 5); mortes 17 (electric-spark 1, boomerang-cutter 2, shotgun-ice 2, buster 6, homing-torpedo 4, chameleon-sting 2); X sofreu dano a até 32 px dele 6 vezes (ex.: spark-mandrill_1_27368 f9093). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_0d, OID 0x0D (census label rushRoader, main 88:8F2A) ran in 3 verified runs (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 41 (boomerang-cutter 5, shotgun-ice 7, buster 16, homing-torpedo 8, chameleon-sting 5); deaths 17 (electric-spark 1, boomerang-cutter 2, shotgun-ice 2, buster 6, homing-torpedo 4, chameleon-sting 2); X damaged within 32 px of it 6 times (e.g. spark-mandrill_1_27368 f9093). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_0d"
        },
        {
          "id": "enemy.oid_0d.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 16,
            "total": 19,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_0d.visual (picture parts seen 13 of parts_total 19; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma3_2_26312, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/spark-mandrill_1_27368); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_0d.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x0D (E36; não é enemy.rush_roader (0x2A)); 0.22% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x0D (E36; not enemy.rush_roader (0x2A)); 0.22% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_0d"
        },
        {
          "id": "enemy.oid_0d.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_0d, OID 0x0D (rótulo do censo rushRoader, main 88:8F2A) rodou em 3 execuções verificadas (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 17 (explosões do finder 1: 0x02 x17, 0x09 x14); drops 0x01 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; nenhum filho: o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches), então filhos sobreviventes não se aplicam; liberações fora da tela 9; posicionamentos reaparecidos 7; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_0d, OID 0x0D (census label rushRoader, main 88:8F2A) ran in 3 verified runs (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 17 (finder-1 blasts 0x02 x17, 0x09 x14); drops 0x01 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; no child: its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches), so surviving children do not apply; off-screen frees 9; respawned placements 7; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_0d"
        }
      ],
      "family": "oid_0d",
      "sourceOid": "0x0D",
      "tableContext": "enemy-object table",
      "placements": {
        "spark-mandrill": 7,
        "sigma-3": 1
      },
      "memberOids": [
        "0x0D"
      ]
    },
    {
      "id": "enemy.oid_10",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x10 (rótulo sineFaller): BK, Sigma 1, Sigma 2, Sigma 3",
        "en": "Object 0x10 (label sineFaller): BK, Sigma 1, Sigma 2, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_10.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_10 (membros 0x10; granular-v3, L18); os posicionamentos incluem as entradas do emissor 0x05 do finder 2 (tabela 80:F59A), que gera a 0x10 (E36), como o L18 as conta. Criação e contextos de posicionamento: todos os 12 posicionamentos da ROM (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 9, top 3. Os membros rodaram em execuções verificadas (E35): 0x10 em 5 execuções, 5,325 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_10 (members 0x10; granular-v3, L18); its placements include the entries of finder-2 emitter 0x05 (table 80:F59A), which makes 0x10 (E36), as L18 counts them. Creation and placement contexts: all 12 of its ROM placements (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 9, top 3. Members ran in verified runs (E35): 0x10 in 5 runs, 5,325 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_10"
        },
        {
          "id": "enemy.oid_10.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_10, OID 0x10 (rótulo do censo sineFaller, main 81:D2DF) rodou em 5 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x10 x1, es:0x27 x1; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x05 x13) e por inimigos 0x10 x1, 0x13 x1, 0x17 x1, execuções geradas 33; então a checagem de posicionamento na tela do E35 não tem o que testar. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_10, OID 0x10 (census label sineFaller, main 81:D2DF) ran in 5 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x10 x1, es:0x27 x1; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x05 x13) and by enemies 0x10 x1, 0x13 x1, 0x17 x1, spawned runs 33; so E35's on-screen placement check has nothing to test. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_10"
        },
        {
          "id": "enemy.oid_10.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_10, OID 0x10 (rótulo do censo sineFaller, main 81:D2DF) rodou em 5 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 14 (buster 9, fire-wave 5); mortes 8 (buster 5, fire-wave 3); X sofreu dano a até 32 px dele 10 vezes (ex.: boomer-kuwanger_1_40070 f22259). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x05 x13) e por inimigos 0x10 x1, 0x13 x1, 0x17 x1, execuções geradas 33; então a checagem de posicionamento na tela do E35 não tem o que testar. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_10, OID 0x10 (census label sineFaller, main 81:D2DF) ran in 5 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 14 (buster 9, fire-wave 5); deaths 8 (buster 5, fire-wave 3); X damaged within 32 px of it 10 times (e.g. boomer-kuwanger_1_40070 f22259). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x05 x13) and by enemies 0x10 x1, 0x13 x1, 0x17 x1, spawned runs 33; so E35's on-screen placement check has nothing to test. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_10"
        },
        {
          "id": "enemy.oid_10.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 5,
          "status": "pending",
          "partial": {
            "seen": 41,
            "total": 42,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_10.visual (picture parts seen 10 of parts_total 42; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_10.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 28 method-f parts 10:cell:13:AFACC8, 10:cell:13:AFACCB, 10:cell:13:AFACCE, 10:cell:13:AFACD1, 10:cell:13:AFACD4, 10:cell:13:AFACD7, 10:cell:13:AFACDA, 10:cell:13:AFACDD, 10:cell:13:AFACE0, 10:cell:13:AFACE3, 10:cell:13:AFACE6, 10:cell:13:AFACE9, 10:cell:13:AFACEC, 10:cell:13:AFACEF, 10:cell:13:AFACF4, 10:cell:13:AFACF7, 10:cell:13:AFACFA, 10:cell:13:AFACFD, 10:cell:13:AFAD00, 10:cell:13:AFAD03, 10:cell:13:AFAD08, 10:cell:13:AFAD0B, 10:cell:13:AFAD0E, 10:cell:13:AFAD11, 10:cell:13:AFAD16, 10:cell:13:AFAD19, 10:cell:13:AFAD1C, 10:cell:13:AFAD1F per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e53.json#/steps/enemy.oid_10.visual/parts (exclusion_proof cites the ROM by bank:addr, card E53)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x10 (E36); 0.26% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x10 (E36); 0.26% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_10"
        },
        {
          "id": "enemy.oid_10.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_10, OID 0x10 (rótulo do censo sineFaller, main 81:D2DF) rodou em 5 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 8 (explosões do finder 1: 0x02 x8, 0x09 x2, 0x10 x1); drops 0x01 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 1, ainda vivos 2+ quadros depois 1; liberações fora da tela 20; posicionamentos reaparecidos 0 (não tem posicionamento da ROM no finder 3; ver o julgamento abaixo); duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x05 x13) e por inimigos 0x10 x1, 0x13 x1, 0x17 x1, execuções geradas 33; então a checagem de posicionamento na tela do E35 não tem o que testar, e o seu reaparecimento é o dos emissores gerando-o de novo. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_10, OID 0x10 (census label sineFaller, main 81:D2DF) ran in 5 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 8 (finder-1 blasts 0x02 x8, 0x09 x2, 0x10 x1); drops 0x01 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 1, still alive 2+ frames later 1; off-screen frees 20; respawned placements 0 (it has no finder-3 ROM placement; see the judgment below); duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (boomer-kuwanger 2, sigma-1 3, sigma-2 4, sigma-3 3) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x05 x13) and by enemies 0x10 x1, 0x13 x1, 0x17 x1, spawned runs 33; so E35's on-screen placement check has nothing to test, and its respawn is the emitters spawning it again. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_10"
        }
      ],
      "family": "oid_10",
      "sourceOid": "0x10",
      "tableContext": "enemy-object table",
      "placements": {
        "boomer-kuwanger": 2,
        "sigma-1": 3,
        "sigma-2": 4,
        "sigma-3": 3
      },
      "memberOids": [
        "0x10"
      ]
    },
    {
      "id": "enemy.oid_11",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x11 (rótulo roadAttacker) com 0x1A, 0x12, 0x1B: IH",
        "en": "Object 0x11 (label roadAttacker) with 0x1A, 0x12, 0x1B: IH"
      },
      "steps": [
        {
          "id": "enemy.oid_11.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_11 (membros 0x11, 0x1A, 0x12, 0x1B; granular-v3, L18); os posicionamentos incluem as entradas do emissor 0x0E do finder 2 (tabela 80:F59A), que gera a 0x1A (E36), como o L18 as conta. Criação e contextos de posicionamento: todos os 4 posicionamentos da ROM (intro-highway 4) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 4. Os membros rodaram em execuções verificadas (E35): 0x11 em 1 execuções, 3,146 slot-frames; 0x1A em 1 execuções, 5,508 slot-frames; 0x12 em 1 execuções, 3,142 slot-frames; 0x1B em 1 execuções, 676 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_11 (members 0x11, 0x1A, 0x12, 0x1B; granular-v3, L18); its placements include the entries of finder-2 emitter 0x0E (table 80:F59A), which makes 0x1A (E36), as L18 counts them. Creation and placement contexts: all 4 of its ROM placements (intro-highway 4) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 4. Members ran in verified runs (E35): 0x11 in 1 runs, 3,146 slot-frames; 0x1A in 1 runs, 5,508 slot-frames; 0x12 in 1 runs, 3,142 slot-frames; 0x1B in 1 runs, 676 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_11"
        },
        {
          "id": "enemy.oid_11.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 12,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_11, OIDs membros 0x11, 0x1A, 0x12, 0x1B (rótulos do censo roadAttacker, roadAttackDeploy, -, -; mains 81:D551, 88:93A4, 81:DCD0, 82:A0E5) rodou em 1 execução verificada (intro-highway_1_15577), 12,472 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x12 x7, en:0x11 x4, en:0x1B x4, en:0x3C x1, es:0x0A x6; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x11 runs 7, slot-frames 3,146, mortes 5; 0x1A runs 1, slot-frames 5,508, mortes 0; 0x12 runs 7, slot-frames 3,142, mortes 2; 0x1B runs 4, slot-frames 676, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_11, member OIDs 0x11, 0x1A, 0x12, 0x1B (census labels roadAttacker, roadAttackDeploy, -, -; mains 81:D551, 88:93A4, 81:DCD0, 82:A0E5) ran in 1 verified run (intro-highway_1_15577), 12,472 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x12 x7, en:0x11 x4, en:0x1B x4, en:0x3C x1, es:0x0A x6; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x11 runs 7, slot-frames 3,146, deaths 5; 0x1A runs 1, slot-frames 5,508, deaths 0; 0x12 runs 7, slot-frames 3,142, deaths 2; 0x1B runs 4, slot-frames 676, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_11"
        },
        {
          "id": "enemy.oid_11.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 12,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_11, OIDs membros 0x11, 0x1A, 0x12, 0x1B (rótulos do censo roadAttacker, roadAttackDeploy, -, -; mains 81:D551, 88:93A4, 81:DCD0, 82:A0E5) rodou em 1 execução verificada (intro-highway_1_15577), 12,472 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 41 (buster 41); mortes 7 (buster 7); X sofreu dano a até 32 px dele 2 vezes (ex.: intro-highway_1_15577 f8047). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x11 runs 7, slot-frames 3,146, mortes 5; 0x1A runs 1, slot-frames 5,508, mortes 0; 0x12 runs 7, slot-frames 3,142, mortes 2; 0x1B runs 4, slot-frames 676, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_11, member OIDs 0x11, 0x1A, 0x12, 0x1B (census labels roadAttacker, roadAttackDeploy, -, -; mains 81:D551, 88:93A4, 81:DCD0, 82:A0E5) ran in 1 verified run (intro-highway_1_15577), 12,472 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 41 (buster 41); deaths 7 (buster 7); X damaged within 32 px of it 2 times (e.g. intro-highway_1_15577 f8047). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x11 runs 7, slot-frames 3,146, deaths 5; 0x1A runs 1, slot-frames 5,508, deaths 0; 0x12 runs 7, slot-frames 3,142, deaths 2; 0x1B runs 4, slot-frames 676, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_11"
        },
        {
          "id": "enemy.oid_11.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 12,
          "status": "pending",
          "partial": {
            "seen": 313,
            "total": 379,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_11.visual (picture parts seen 271 of parts_total 379; 10 sound parts whose witness frame lies inside a whole APU-gated window of the same take (10 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_11.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 29 method-f parts child:0E68:33:cell:53:AFC8B0, child:0E68:33:cell:53:AFC8B3, child:0E68:33:cell:53:AFC8B6, child:0E68:33:cell:53:AFC8B9, child:0E68:33:cell:53:AFC8BC, child:0E68:33:cell:53:AFC8BF, child:0E68:33:cell:53:AFC8C2, child:0E68:33:cell:53:AFC8C5, child:0E68:33:cell:53:AFC8C8, child:0E68:33:cell:53:AFC8EB, child:0E68:33:cell:53:AFC8F4, child:0E68:33:cell:53:AFE4F7, child:0E68:33:cell:53:AFE6DE, child:0E68:33:cell:53:AFE6E1, child:0E68:33:cell:53:AFE6E4, child:0E68:33:cell:53:AFE6E7, child:0E68:33:cell:53:AFE6EA, child:0E68:33:cell:53:AFE6ED, child:0E68:33:cell:53:AFE6F0, child:0E68:33:cell:53:AFE6F3, child:0E68:33:cell:53:AFE6F6, child:0E68:33:cell:53:AFE6F9, child:0E68:33:cell:53:AFE6FC, child:0E68:33:cell:53:AFE6FF, child:0E68:33:cell:53:AFE702, child:0E68:33:cell:53:AFE705, child:0E68:33:cell:53:AFE708, child:0E68:33:cell:53:AFE70B, child:0E68:33:cell:53:AFE70E per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e52.json#/steps/enemy.oid_11.visual/parts (exclusion_proof cites the ROM by bank:addr, card E52); plus 2 method-f parts 1B:cell:29:AFB7AE, 1B:cell:29:AFB7C2 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.oid_11.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x11, 0x1A, 0x12, 0x1B (E36); 0.61% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x11, 0x1A, 0x12, 0x1B (E36); 0.61% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_11"
        },
        {
          "id": "enemy.oid_11.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 12,
          "status": "pending",
          "partial": {
            "seen": 8,
            "total": 10,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_11.lifecycle (seen 8 of parts_total 10); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x11, 0x1A, 0x12, 0x1B (E36); 0.61% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x11, 0x1A, 0x12, 0x1B (E36); 0.61% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_11"
        }
      ],
      "family": "oid_11",
      "sourceOid": "0x11",
      "tableContext": "enemy-object table",
      "placements": {
        "intro-highway": 4
      },
      "memberOids": [
        "0x11",
        "0x1A",
        "0x12",
        "0x1B"
      ]
    },
    {
      "id": "enemy.oid_13",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x13 (rótulo dodgeBlaster): BK, Sigma 1, Sigma 2",
        "en": "Object 0x13 (label dodgeBlaster): BK, Sigma 1, Sigma 2"
      },
      "steps": [
        {
          "id": "enemy.oid_13.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_13 (membros 0x13; granular-v3, L18). Criação e contextos de posicionamento: todos os 13 posicionamentos da ROM (boomer-kuwanger 5, sigma-1 5, sigma-2 3) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): top 13. Os membros rodaram em execuções verificadas (E35): 0x13 em 4 execuções, 13,108 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_13 (members 0x13; granular-v3, L18). Creation and placement contexts: all 13 of its ROM placements (boomer-kuwanger 5, sigma-1 5, sigma-2 3) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): top 13. Members ran in verified runs (E35): 0x13 in 4 runs, 13,108 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_13"
        },
        {
          "id": "enemy.oid_13.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_13, OID 0x13 (rótulo do censo dodgeBlaster, main 82:99A6) rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x02 x40, en:0x10 x1; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_13, OID 0x13 (census label dodgeBlaster, main 82:99A6) ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x02 x40, en:0x10 x1; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_13"
        },
        {
          "id": "enemy.oid_13.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_13, OID 0x13 (rótulo do censo dodgeBlaster, main 82:99A6) rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 30 (buster 28, fire-wave 1, rolling-shield 1); mortes 14 (buster 14); X sofreu dano a até 32 px dele 7 vezes (ex.: boomer-kuwanger_1_40070 f6369). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_13, OID 0x13 (census label dodgeBlaster, main 82:99A6) ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 30 (buster 28, fire-wave 1, rolling-shield 1); deaths 14 (buster 14); X damaged within 32 px of it 7 times (e.g. boomer-kuwanger_1_40070 f6369). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_13"
        },
        {
          "id": "enemy.oid_13.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 7,
          "status": "pending",
          "partial": {
            "seen": 18,
            "total": 19,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_13.visual (picture parts seen 15 of parts_total 19; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/boomer-kuwanger_1_40070); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_13.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x13 (E36); 0.34% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x13 (E36); 0.34% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_13"
        },
        {
          "id": "enemy.oid_13.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_13, OID 0x13 (rótulo do censo dodgeBlaster, main 82:99A6) rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 14 (explosões do finder 1: 0x02 x14, 0x09 x4); drops 0x02 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 3, ainda vivos 2+ quadros depois 3; liberações fora da tela 24; posicionamentos reaparecidos 13; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_13, OID 0x13 (census label dodgeBlaster, main 82:99A6) ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 14 (finder-1 blasts 0x02 x14, 0x09 x4); drops 0x02 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 3, still alive 2+ frames later 3; off-screen frees 24; respawned placements 13; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_13"
        }
      ],
      "family": "oid_13",
      "sourceOid": "0x13",
      "tableContext": "enemy-object table",
      "placements": {
        "boomer-kuwanger": 5,
        "sigma-1": 5,
        "sigma-2": 3
      },
      "memberOids": [
        "0x13"
      ]
    },
    {
      "id": "enemy.oid_17",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x17 (rótulo turnCanon): SM, BK, Sigma 1, Sigma 2, Sigma 3",
        "en": "Object 0x17 (label turnCanon): SM, BK, Sigma 1, Sigma 2, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_17.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 22,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_17 (membros 0x17; granular-v3, L18). Criação e contextos de posicionamento: todos os 24 posicionamentos da ROM (spark-mandrill 8, boomer-kuwanger 1, sigma-1 5, sigma-2 2, sigma-3 8) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 19, top 5. Os membros rodaram em execuções verificadas (E35): 0x17 em 7 execuções, 69,949 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_17 (members 0x17; granular-v3, L18). Creation and placement contexts: all 24 of its ROM placements (spark-mandrill 8, boomer-kuwanger 1, sigma-1 5, sigma-2 2, sigma-3 8) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 19, top 5. Members ran in verified runs (E35): 0x17 in 7 runs, 69,949 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_17"
        },
        {
          "id": "enemy.oid_17.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 22,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_17, OID 0x17 (rótulo do censo turnCanon, main 87:9944) rodou em 7 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x27 x600, es:0x13 x536, en:0x10 x1; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_17, OID 0x17 (census label turnCanon, main 87:9944) ran in 7 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x27 x600, es:0x13 x536, en:0x10 x1; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_17"
        },
        {
          "id": "enemy.oid_17.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 22,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_17, OID 0x17 (rótulo do censo turnCanon, main 87:9944) rodou em 7 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 92 (buster 34, boomerang-cutter 9, fire-wave 36, homing-torpedo 13); mortes 23 (buster 10, fire-wave 7, boomerang-cutter 1, homing-torpedo 5); X sofreu dano a até 32 px dele 9 vezes (ex.: boomer-kuwanger_1_40070 f30609). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_17, OID 0x17 (census label turnCanon, main 87:9944) ran in 7 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 92 (buster 34, boomerang-cutter 9, fire-wave 36, homing-torpedo 13); deaths 23 (buster 10, fire-wave 7, boomerang-cutter 1, homing-torpedo 5); X damaged within 32 px of it 9 times (e.g. boomer-kuwanger_1_40070 f30609). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_17"
        },
        {
          "id": "enemy.oid_17.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 22,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json",
            "knowledge_base/mmx1/rom/ride_armor_reach_2026-10-14_ai8c.json",
            "knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json",
            "docs/tasks/done/AI8b-ride-armor-reach-proof.md",
            "docs/tasks/done/AI8c-oid-17-spawn-sites.md",
            "docs/tasks/done/E54-enemy-sound-parts-windows.md",
            "docs/tasks/done/KB1-enemy-visual-catalogue-h42.md",
            "docs/tasks/done\\E51-deflect-sound-method-f-kb.md"
          ],
          "note": {
            "pt": "2026-10-14 (L235, cartas AI8b, AI8c, AI8d): 49 de 49 partes vistas ou provadas (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_17.visual (picture parts seen 43 of parts_total 49; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296); other sound parts count unseen, rules R3/R38/R140); read at git 335da1734; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_17.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 1 method-f parts sound:849E6A per knowledge_base/mmx1/rom/ride_armor_reach_2026-10-14_ai8c.json#/steps/enemy.oid_17.visual/parts (exclusion_proof cites the ROM by bank:addr, card AI8c); plus 2 method-f parts 17:cell:8D:AFDD33, 17:cell:8D:AFDD91 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json#/steps/enemy.oid_17.visual/parts (exclusion_proof cites the ROM by bank:addr, card E55)); o som do soco da Ride Armor (84:9E6A) não alcança nenhum OID $17: todos os pontos que criam o $17 e todos os escritores de +09/+0A de um slot foram lidos na ROM, e os $17 do Sigma 2 ficam 257 px acima da armadura.",
            "en": "2026-10-14 (L235, cards AI8b, AI8c, AI8d): 49 of 49 parts seen or proven (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_17.visual (picture parts seen 43 of parts_total 49; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296); other sound parts count unseen, rules R3/R38/R140); read at git 335da1734; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_17.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 1 method-f parts sound:849E6A per knowledge_base/mmx1/rom/ride_armor_reach_2026-10-14_ai8c.json#/steps/enemy.oid_17.visual/parts (exclusion_proof cites the ROM by bank:addr, card AI8c); plus 2 method-f parts 17:cell:8D:AFDD33, 17:cell:8D:AFDD91 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json#/steps/enemy.oid_17.visual/parts (exclusion_proof cites the ROM by bank:addr, card E55)); the Ride Armor punch sound (84:9E6A) reaches no OID $17: every spawn site of $17 and every writer of a slot's +09/+0A was read from the ROM, and the Sigma 2 $17s sit 257 px above the armor."
          },
          "family": "oid_17"
        },
        {
          "id": "enemy.oid_17.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 21,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_17, OID 0x17 (rótulo do censo turnCanon, main 87:9944) rodou em 7 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 23 (explosões do finder 1: 0x09 x17, 0x02 x16); drops 0x02 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 32, ainda vivos 2+ quadros depois 32; liberações fora da tela 33; posicionamentos reaparecidos 12; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_17, OID 0x17 (census label turnCanon, main 87:9944) ran in 7 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 23 (finder-1 blasts 0x09 x17, 0x02 x16); drops 0x02 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 32, still alive 2+ frames later 32; off-screen frees 33; respawned placements 12; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_17"
        }
      ],
      "family": "oid_17",
      "sourceOid": "0x17",
      "tableContext": "enemy-object table",
      "placements": {
        "spark-mandrill": 8,
        "boomer-kuwanger": 1,
        "sigma-1": 5,
        "sigma-2": 2,
        "sigma-3": 8
      },
      "memberOids": [
        "0x17"
      ]
    },
    {
      "id": "enemy.oid_18",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x18 (rótulo fallingRocks): SC",
        "en": "Object 0x18 (label fallingRocks): SC"
      },
      "steps": [
        {
          "id": "enemy.oid_18.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_18 (membros 0x18; granular-v3, L18). Criação e contextos de posicionamento: todos os 2 posicionamentos da ROM (sting-chameleon 2) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 2. Os membros rodaram em execuções verificadas (E35): 0x18 em 3 execuções, 23,385 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_18 (members 0x18; granular-v3, L18). Creation and placement contexts: all 2 of its ROM placements (sting-chameleon 2) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 2. Members ran in verified runs (E35): 0x18 in 3 runs, 23,385 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_18"
        },
        {
          "id": "enemy.oid_18.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_18, OID 0x18 (rótulo do censo fallingRocks, main 83:BBD2) rodou em 3 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 23,385 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x18 x13, en:0x4D x1; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_18, OID 0x18 (census label fallingRocks, main 83:BBD2) ran in 3 verified runs (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 23,385 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x18 x13, en:0x4D x1; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_18"
        },
        {
          "id": "enemy.oid_18.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_18, OID 0x18 (rótulo do censo fallingRocks, main 83:BBD2) rodou em 3 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 23,385 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 0 (none); mortes 15 (fire-wave 1, electric-spark 2, boomerang-cutter 1, shotgun-ice 1, buster 10); X sofreu dano a até 32 px dele 8 vezes (ex.: launch-octopus-and-sting-flooded_2_38342 f33693). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_18, OID 0x18 (census label fallingRocks, main 83:BBD2) ran in 3 verified runs (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 23,385 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 0 (none); deaths 15 (fire-wave 1, electric-spark 2, boomerang-cutter 1, shotgun-ice 1, buster 10); X damaged within 32 px of it 8 times (e.g. launch-octopus-and-sting-flooded_2_38342 f33693). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_18"
        },
        {
          "id": "enemy.oid_18.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 8,
          "status": "pending",
          "partial": {
            "seen": 16,
            "total": 18,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_18.visual (picture parts seen 14 of parts_total 18; 1 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_18.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x18 (E36); 0.41% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x18 (E36); 0.41% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_18"
        },
        {
          "id": "enemy.oid_18.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v4.py",
            "docs/tasks/done/E41-hunt-batch-enemy-gaps.md"
          ],
          "note": {
            "pt": "2026-09-26, E41/W37: todas as partes vistas pelo redutor E40 inalterado em 77 execuções com WRAM igual; imagens exatas nos quadros citados. enemy.oid_18, stub 80:FA29, rotina 83:BBD2. E40 unchanged death/drop proximity attribution: finder-0 $01 f2814, $02 f3170; 80:FA29 -> 83:BBD2",
            "en": "2026-09-26, E41/W37: every part seen under unchanged E40 attribution rules over 77 WRAM-equal runs; pictures exact on cited frames. enemy.oid_18, stub 80:FA29, main 83:BBD2. E40 unchanged death/drop proximity attribution: finder-0 $01 f2814, $02 f3170; 80:FA29 -> 83:BBD2"
          },
          "family": "oid_18"
        }
      ],
      "family": "oid_18",
      "sourceOid": "0x18",
      "tableContext": "enemy-object table",
      "placements": {
        "sting-chameleon": 2
      },
      "memberOids": [
        "0x18"
      ]
    },
    {
      "id": "enemy.oid_1c",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x1C (rótulo seaAttacker): LO",
        "en": "Object 0x1C (label seaAttacker): LO"
      },
      "steps": [
        {
          "id": "enemy.oid_1c.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_1c (membros 0x1C; granular-v3, L18); os posicionamentos incluem as entradas do emissor 0x0F do finder 2 (tabela 80:F59A), que gera a 0x1C (E36), como o L18 as conta. Criação e contextos de posicionamento: todos os 5 posicionamentos da ROM (launch-octopus 5) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): bottom 1, right 4. Os membros rodaram em execuções verificadas (E35): 0x1C em 2 execuções, 3,454 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_1c (members 0x1C; granular-v3, L18); its placements include the entries of finder-2 emitter 0x0F (table 80:F59A), which makes 0x1C (E36), as L18 counts them. Creation and placement contexts: all 5 of its ROM placements (launch-octopus 5) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): bottom 1, right 4. Members ran in verified runs (E35): 0x1C in 2 runs, 3,454 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1c"
        },
        {
          "id": "enemy.oid_1c.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1c, OID 0x1C (rótulo do censo seaAttacker, main 82:A190) rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches): a ausência de ataque tem respaldo na origem. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (launch-octopus 5) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x0F x34), execuções geradas 34; então a checagem de posicionamento na tela do E35 não tem o que testar. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1c, OID 0x1C (census label seaAttacker, main 82:A190) ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches): no-attack backed by source. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (launch-octopus 5) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x0F x34), spawned runs 34; so E35's on-screen placement check has nothing to test. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1c"
        },
        {
          "id": "enemy.oid_1c.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1c, OID 0x1C (rótulo do censo seaAttacker, main 82:A190) rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 8 (buster 8); mortes 8 (buster 8); X sofreu dano a até 32 px dele 4 vezes (ex.: launch-octopus-and-sting-flooded_2_38342 f3172). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (launch-octopus 5) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x0F x34), execuções geradas 34; então a checagem de posicionamento na tela do E35 não tem o que testar. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1c, OID 0x1C (census label seaAttacker, main 82:A190) ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 8 (buster 8); deaths 8 (buster 8); X damaged within 32 px of it 4 times (e.g. launch-octopus-and-sting-flooded_2_38342 f3172). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (launch-octopus 5) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x0F x34), spawned runs 34; so E35's on-screen placement check has nothing to test. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1c"
        },
        {
          "id": "enemy.oid_1c.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 2,
          "status": "pending",
          "partial": {
            "seen": 18,
            "total": 19,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_1c.visual (picture parts seen 15 of parts_total 19; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/launch-octopus-and-sting-flooded_2_38342); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_1c.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x1C (E36); 0.12% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x1C (E36); 0.12% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_1c"
        },
        {
          "id": "enemy.oid_1c.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1c, OID 0x1C (rótulo do censo seaAttacker, main 82:A190) rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 8 (explosões do finder 1: 0x02 x8, 0x09 x2); drops 0x02 x3, 0x01 x2 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; nenhum filho: o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches), então filhos sobreviventes não se aplicam; liberações fora da tela 26; posicionamentos reaparecidos 0 (não tem posicionamento da ROM no finder 3; ver o julgamento abaixo); duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (launch-octopus 5) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x0F x34), execuções geradas 34; então a checagem de posicionamento na tela do E35 não tem o que testar, e o seu reaparecimento é o dos emissores gerando-o de novo. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1c, OID 0x1C (census label seaAttacker, main 82:A190) ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 8 (finder-1 blasts 0x02 x8, 0x09 x2); drops 0x02 x3, 0x01 x2 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; no child: its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches), so surviving children do not apply; off-screen frees 26; respawned placements 0 (it has no finder-3 ROM placement; see the judgment below); duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (launch-octopus 5) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x0F x34), spawned runs 34; so E35's on-screen placement check has nothing to test, and its respawn is the emitters spawning it again. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1c"
        }
      ],
      "family": "oid_1c",
      "sourceOid": "0x1C",
      "tableContext": "enemy-object table",
      "placements": {
        "launch-octopus": 5
      },
      "memberOids": [
        "0x1C"
      ]
    },
    {
      "id": "enemy.oid_1d",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x1D (rótulo gulpferd): LO, Sigma 3",
        "en": "Object 0x1D (label gulpferd): LO, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_1d.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_1d (membros 0x1D; granular-v3, L18). Criação e contextos de posicionamento: todos os 14 posicionamentos da ROM (launch-octopus 9, sigma-3 5) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 12, bottom 2. Os membros rodaram em execuções verificadas (E35): 0x1D em 2 execuções, 5,381 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_1d (members 0x1D; granular-v3, L18). Creation and placement contexts: all 14 of its ROM placements (launch-octopus 9, sigma-3 5) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 12, bottom 2. Members ran in verified runs (E35): 0x1D in 2 runs, 5,381 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1d"
        },
        {
          "id": "enemy.oid_1d.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1d, OID 0x1D (rótulo do censo gulpferd, main 82:A341) rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 5,381 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches): a ausência de ataque tem respaldo na origem. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1d, OID 0x1D (census label gulpferd, main 82:A341) ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 5,381 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches): no-attack backed by source. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1d"
        },
        {
          "id": "enemy.oid_1d.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1d, OID 0x1D (rótulo do censo gulpferd, main 82:A341) rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 5,381 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 75 (buster 75); mortes 10 (buster 10); X sofreu dano a até 32 px dele 4 vezes (ex.: launch-octopus-and-sting-flooded_2_38342 f5506). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1d, OID 0x1D (census label gulpferd, main 82:A341) ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 5,381 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 75 (buster 75); deaths 10 (buster 10); X damaged within 32 px of it 4 times (e.g. launch-octopus-and-sting-flooded_2_38342 f5506). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1d"
        },
        {
          "id": "enemy.oid_1d.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 7,
          "status": "pending",
          "partial": {
            "seen": 65,
            "total": 67,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_1d.visual (picture parts seen 61 of parts_total 67; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/launch-octopus-and-sting-flooded_2_38342); other sound parts count unseen, rules R3/R38/R140); read at git 5a1d9b4c3; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_1d.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 1 method-f parts 1D:cell:2A:AFB878 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-14_e57.json#/steps/enemy.oid_1d.visual/parts (exclusion_proof cites the ROM by bank:addr, card E57)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x1D (E36); 0.35% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x1D (E36); 0.35% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_1d"
        },
        {
          "id": "enemy.oid_1d.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "tools/tests/test_enemy_drop_reach.py",
            "docs/tasks/done/E49-drop-reach-id-store-sites.md"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x1D (E36); 0.35% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto. 2026-10-04 (E49, LG6): verificado; toda parte vista ou excluída pela fonte (5 vistas, 2 excluídas, de 7); drop excluído: o membro 0x1D não tem caminho até 84:A384, 0 acertos de solidez, rastreio de D conferido (19 sítios, 0 chamadas desbalanceadas) em enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x1D (E36); 0.35% in total, once, not per stage. Pending: nothing credited; the references are context. 2026-10-04 (E49, LG6): verified; every part seen or excluded by source (5 seen, 2 excluded, of 7); drop excluded: member 0x1D has no path to 84:A384, 0 soundness hits, D trace checked (19 sites, 0 unbalanced callees) in enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates."
          },
          "family": "oid_1d"
        }
      ],
      "family": "oid_1d",
      "sourceOid": "0x1D",
      "tableContext": "enemy-object table",
      "placements": {
        "launch-octopus": 9,
        "sigma-3": 5
      },
      "memberOids": [
        "0x1D"
      ]
    },
    {
      "id": "enemy.oid_1e",
      "category": "enemies",
      "title": {
        "pt": "Mad Pecker (0x1E) with its worms (0x1F): SC",
        "en": "Mad Pecker (0x1E) with its worms (0x1F): SC"
      },
      "steps": [
        {
          "id": "enemy.oid_1e.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_1e (membros 0x1E, 0x1F; granular-v3, L18). Criação e contextos de posicionamento: todos os 3 posicionamentos da ROM (sting-chameleon 3) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 3. Os membros rodaram em execuções verificadas (E35): 0x1E em 2 execuções, 1,508 slot-frames; 0x1F em 2 execuções, 1,672 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado. Name from the ending credits (84:E68F); id kept.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_1e (members 0x1E, 0x1F; granular-v3, L18). Creation and placement contexts: all 3 of its ROM placements (sting-chameleon 3) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 3. Members ran in verified runs (E35): 0x1E in 2 runs, 1,508 slot-frames; 0x1F in 2 runs, 1,672 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified. Name from the ending credits (84:E68F); id kept."
          },
          "family": "oid_1e"
        },
        {
          "id": "enemy.oid_1e.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1e, OIDs membros 0x1E, 0x1F (rótulos do censo madPeker, creeper; mains 82:A7DB, 82:A990) rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 3,180 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x1F x8; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x1E runs 6, slot-frames 1,508, mortes 2; 0x1F runs 8, slot-frames 1,672, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1e, member OIDs 0x1E, 0x1F (census labels madPeker, creeper; mains 82:A7DB, 82:A990) ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 3,180 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x1F x8; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x1E runs 6, slot-frames 1,508, deaths 2; 0x1F runs 8, slot-frames 1,672, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1e"
        },
        {
          "id": "enemy.oid_1e.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_1e, OIDs membros 0x1E, 0x1F (rótulos do censo madPeker, creeper; mains 82:A7DB, 82:A990) rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 3,180 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 11 (buster 11); mortes 2 (buster 2); X sofreu dano a até 32 px dele 3 vezes (ex.: sting-chameleon_1_25606 f14168). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x1E runs 6, slot-frames 1,508, mortes 2; 0x1F runs 8, slot-frames 1,672, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_1e, member OIDs 0x1E, 0x1F (census labels madPeker, creeper; mains 82:A7DB, 82:A990) ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 3,180 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 11 (buster 11); deaths 2 (buster 2); X damaged within 32 px of it 3 times (e.g. sting-chameleon_1_25606 f14168). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x1E runs 6, slot-frames 1,508, deaths 2; 0x1F runs 8, slot-frames 1,672, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_1e"
        },
        {
          "id": "enemy.oid_1e.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 36,
            "total": 37,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_1e.visual (picture parts seen 33 of parts_total 37; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_1e.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x1E, 0x1F (E36; não é enemy.mad_pecker (0x53)); 0.19% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x1E, 0x1F (E36; not enemy.mad_pecker (0x53)); 0.19% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_1e"
        },
        {
          "id": "enemy.oid_1e.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 8,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_1e.lifecycle (seen 6 of parts_total 8); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x1E, 0x1F (E36; não é enemy.mad_pecker (0x53)); 0.19% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x1E, 0x1F (E36; not enemy.mad_pecker (0x53)); 0.19% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_1e"
        }
      ],
      "family": "oid_1e",
      "sourceOid": "0x1E",
      "tableContext": "enemy-object table",
      "placements": {
        "sting-chameleon": 3
      },
      "memberOids": [
        "0x1E",
        "0x1F"
      ]
    },
    {
      "id": "enemy.oid_20",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x20 (rótulo amenHopper): LO, SC",
        "en": "Object 0x20 (label amenHopper): LO, SC"
      },
      "steps": [
        {
          "id": "enemy.oid_20.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_20 (membros 0x20; granular-v3, L18). Criação e contextos de posicionamento: todos os 15 posicionamentos da ROM (launch-octopus 4, sting-chameleon 11) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 15. Os membros rodaram em execuções verificadas (E35): 0x20 em 4 execuções, 5,296 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_20 (members 0x20; granular-v3, L18). Creation and placement contexts: all 15 of its ROM placements (launch-octopus 4, sting-chameleon 11) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 15. Members ran in verified runs (E35): 0x20 in 4 runs, 5,296 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_20"
        },
        {
          "id": "enemy.oid_20.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_20, OID 0x20 (rótulo do censo amenHopper, main 82:AAD7) rodou em 4 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x08 x6, es:0x0C x7; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_20, OID 0x20 (census label amenHopper, main 82:AAD7) ran in 4 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x08 x6, es:0x0C x7; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_20"
        },
        {
          "id": "enemy.oid_20.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_20, OID 0x20 (rótulo do censo amenHopper, main 82:AAD7) rodou em 4 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 20 (buster 15, fire-wave 4, electric-spark 1); mortes 21 (buster 16, fire-wave 4, electric-spark 1); X sofreu dano a até 32 px dele 8 vezes (ex.: launch-octopus-and-sting-flooded_2_38342 f1561). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_20, OID 0x20 (census label amenHopper, main 82:AAD7) ran in 4 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 20 (buster 15, fire-wave 4, electric-spark 1); deaths 21 (buster 16, fire-wave 4, electric-spark 1); X damaged within 32 px of it 8 times (e.g. launch-octopus-and-sting-flooded_2_38342 f1561). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_20"
        },
        {
          "id": "enemy.oid_20.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 5,
          "status": "pending",
          "partial": {
            "seen": 32,
            "total": 39,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_20.visual (picture parts seen 26 of parts_total 39; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 1a92dbe8c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_20.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 2 method-f parts 20:cell:2E:AFB9FF, child:1928:0C:cell:1A:AFAFFD per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json#/steps/enemy.oid_20.visual/parts (exclusion_proof cites the ROM by bank:addr, card E55)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x20 (E36); 0.28% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x20 (E36); 0.28% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_20"
        },
        {
          "id": "enemy.oid_20.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_20, OID 0x20 (rótulo do censo amenHopper, main 82:AAD7) rodou em 4 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 21 (explosões do finder 1: 0x02 x21, 0x09 x5); drops 0x02 x6, 0x01 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 5, ainda vivos 2+ quadros depois 4; liberações fora da tela 11; posicionamentos reaparecidos 7; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_20, OID 0x20 (census label amenHopper, main 82:AAD7) ran in 4 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 21 (finder-1 blasts 0x02 x21, 0x09 x5); drops 0x02 x6, 0x01 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 5, still alive 2+ frames later 4; off-screen frees 11; respawned placements 7; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_20"
        }
      ],
      "family": "oid_20",
      "sourceOid": "0x20",
      "tableContext": "enemy-object table",
      "placements": {
        "launch-octopus": 4,
        "sting-chameleon": 11
      },
      "memberOids": [
        "0x20"
      ]
    },
    {
      "id": "enemy.oid_2f",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x2F (rótulo armorSoldir): SC, CP, Sigma 2",
        "en": "Object 0x2F (label armorSoldir): SC, CP, Sigma 2"
      },
      "steps": [
        {
          "id": "enemy.oid_2f.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_2f (membros 0x2F; granular-v3, L18). Criação e contextos de posicionamento: todos os 10 posicionamentos da ROM (sting-chameleon 3, chill-penguin 2, sigma-2 5) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 10. Os membros rodaram em execuções verificadas (E35): 0x2F em 4 execuções, 3,812 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_2f (members 0x2F; granular-v3, L18). Creation and placement contexts: all 10 of its ROM placements (sting-chameleon 3, chill-penguin 2, sigma-2 5) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 10. Members ran in verified runs (E35): 0x2F in 4 runs, 3,812 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_2f"
        },
        {
          "id": "enemy.oid_2f.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 7,
          "status": "pending",
          "partial": {
            "seen": 11,
            "total": 13,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_2f.attack (seen 11 of parts_total 13); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_2f"
        },
        {
          "id": "enemy.oid_2f.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "pending",
          "partial": {
            "seen": 13,
            "total": 14,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_2f.contact (seen 13 of parts_total 14); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_2f"
        },
        {
          "id": "enemy.oid_2f.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 7,
          "status": "pending",
          "partial": {
            "seen": 106,
            "total": 118,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_2f.visual (picture parts seen 93 of parts_total 118; 11 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296, 10 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_2f.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 1 method-f parts 2F:cell:4F:AFC45E per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.oid_2f.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_2f"
        },
        {
          "id": "enemy.oid_2f.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "tools/tests/test_enemy_drop_reach.py",
            "docs/tasks/done/E49-drop-reach-id-store-sites.md"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto. 2026-10-04 (E49, LG6): verificado; toda parte vista ou excluída pela fonte (5 vistas, 2 excluídas, de 7); drop excluído: o membro 0x2F não tem caminho até 84:A384, 0 acertos de solidez, rastreio de D conferido (19 sítios, 0 chamadas desbalanceadas) em enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x2F (E36); 0.34% in total, once, not per stage. Pending: nothing credited; the references are context. 2026-10-04 (E49, LG6): verified; every part seen or excluded by source (5 seen, 2 excluded, of 7); drop excluded: member 0x2F has no path to 84:A384, 0 soundness hits, D trace checked (19 sites, 0 unbalanced callees) in enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates."
          },
          "family": "oid_2f"
        }
      ],
      "family": "oid_2f",
      "sourceOid": "0x2F",
      "tableContext": "enemy-object table",
      "placements": {
        "sting-chameleon": 3,
        "chill-penguin": 2,
        "sigma-2": 5
      },
      "memberOids": [
        "0x2F"
      ]
    },
    {
      "id": "enemy.oid_30",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x30 (rótulo digLouber): AA, FM, Sigma 2, Sigma 3",
        "en": "Object 0x30 (label digLouber): AA, FM, Sigma 2, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_30.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_30 (membros 0x30; granular-v3, L18). Criação e contextos de posicionamento: todos os 36 posicionamentos da ROM (armored-armadillo 16, flame-mammoth 13, sigma-2 3, sigma-3 4) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 28, left 4, top 2, bottom 2. Os membros rodaram em execuções verificadas (E35): 0x30 em 7 execuções, 15,106 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_30 (members 0x30; granular-v3, L18). Creation and placement contexts: all 36 of its ROM placements (armored-armadillo 16, flame-mammoth 13, sigma-2 3, sigma-3 4) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 28, left 4, top 2, bottom 2. Members ran in verified runs (E35): 0x30 in 7 runs, 15,106 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_30"
        },
        {
          "id": "enemy.oid_30.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_30, OID 0x30 (rótulo do censo digLouber, main 83:CE03) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x14 x101; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_30, OID 0x30 (census label digLouber, main 83:CE03) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x14 x101; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_30"
        },
        {
          "id": "enemy.oid_30.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 10,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_30, OID 0x30 (rótulo do censo digLouber, main 83:CE03) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 178 (buster 40, storm-tornado 2, boomerang-cutter 40, shotgun-ice 17, homing-torpedo 19, fire-wave 57, rolling-shield 1, electric-spark 2); mortes 72 (buster 11, storm-tornado 4, boomerang-cutter 27, shotgun-ice 10, homing-torpedo 3, fire-wave 13, rolling-shield 2, electric-spark 2); X sofreu dano a até 32 px dele 5 vezes (ex.: flame-mammoth-lava_2_23048 f8141). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_30, OID 0x30 (census label digLouber, main 83:CE03) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 178 (buster 40, storm-tornado 2, boomerang-cutter 40, shotgun-ice 17, homing-torpedo 19, fire-wave 57, rolling-shield 1, electric-spark 2); deaths 72 (buster 11, storm-tornado 4, boomerang-cutter 27, shotgun-ice 10, homing-torpedo 3, fire-wave 13, rolling-shield 2, electric-spark 2); X damaged within 32 px of it 5 times (e.g. flame-mammoth-lava_2_23048 f8141). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_30"
        },
        {
          "id": "enemy.oid_30.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json",
            "docs/tasks/done/E51-deflect-sound-method-f-kb.md",
            "docs/tasks/done/E50-owner-damage-row-deflects.md"
          ],
          "note": {
            "pt": "2026-10-12 (L138, cartas E50 e E51): 23 de 23 partes de desenho, animação e som do inimigo 0x30 vistas ou provadas (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json#/steps/enemy.oid_30.visual (picture parts seen 19 of parts_total 23; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296); other sound parts count unseen, rules R3/R38/R140); read at git abdfbe94c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_30.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)). A última, o som de ricochete $10 (84:9F0B), é provada pela ROM: só um byte $80 na linha de dano chega a ele (84:9E45-84:9E4D), e as linhas deste inimigo não têm $80 para nenhum tiro do X (knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json).",
            "en": "2026-10-12 (L138, cards E50 and E51): 23 of 23 drawing, animation and sound parts of enemy 0x30 seen or proven (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json#/steps/enemy.oid_30.visual (picture parts seen 19 of parts_total 23; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296); other sound parts count unseen, rules R3/R38/R140); read at git abdfbe94c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_30.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)). The last, the deflect sound $10 (84:9F0B), is proven from the ROM: only a $80 byte in the damage row reaches it (84:9E45-84:9E4D), and this enemy's rows hold no $80 for any X shot (knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json)."
          },
          "family": "oid_30"
        },
        {
          "id": "enemy.oid_30.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_30, OID 0x30 (rótulo do censo digLouber, main 83:CE03) rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 72 (explosões do finder 1: 0x02 x75, 0x09 x29, 0x10 x1); drops 0x02 x9 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 19, ainda vivos 2+ quadros depois 18; liberações fora da tela 49; posicionamentos reaparecidos 26; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_30, OID 0x30 (census label digLouber, main 83:CE03) ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 72 (finder-1 blasts 0x02 x75, 0x09 x29, 0x10 x1); drops 0x02 x9 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 19, still alive 2+ frames later 18; off-screen frees 49; respawned placements 26; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_30"
        }
      ],
      "family": "oid_30",
      "sourceOid": "0x30",
      "tableContext": "enemy-object table",
      "placements": {
        "armored-armadillo": 16,
        "flame-mammoth": 13,
        "sigma-2": 3,
        "sigma-3": 4
      },
      "memberOids": [
        "0x30"
      ]
    },
    {
      "id": "enemy.oid_34",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x34 (rótulo cragMan): SC",
        "en": "Object 0x34 (label cragMan): SC"
      },
      "steps": [
        {
          "id": "enemy.oid_34.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_34 (membros 0x34; granular-v3, L18). Criação e contextos de posicionamento: todos os 5 posicionamentos da ROM (sting-chameleon 5) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 5. Os membros rodaram em execuções verificadas (E35): 0x34 em 2 execuções, 2,923 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_34 (members 0x34; granular-v3, L18). Creation and placement contexts: all 5 of its ROM placements (sting-chameleon 5) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 5. Members ran in verified runs (E35): 0x34 in 2 runs, 2,923 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_34"
        },
        {
          "id": "enemy.oid_34.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_34, OID 0x34 (rótulo do censo cragMan, main 83:D85C) rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 2,923 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x18 x3, es:0x17 x2; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_34, OID 0x34 (census label cragMan, main 83:D85C) ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 2,923 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x18 x3, es:0x17 x2; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_34"
        },
        {
          "id": "enemy.oid_34.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_34, OID 0x34 (rótulo do censo cragMan, main 83:D85C) rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 2,923 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 30 (buster 30); mortes 2 (buster 2); X sofreu dano a até 32 px dele 4 vezes (ex.: sting-chameleon-auto_1_5497 f2510). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_34, OID 0x34 (census label cragMan, main 83:D85C) ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 2,923 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 30 (buster 30); deaths 2 (buster 2); X damaged within 32 px of it 4 times (e.g. sting-chameleon-auto_1_5497 f2510). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_34"
        },
        {
          "id": "enemy.oid_34.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 40,
            "total": 43,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_34.visual (picture parts seen 35 of parts_total 43; 4 sound parts whose witness frame lies inside a whole APU-gated window of the same take (4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts 34:cell:0A:AFA97F per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.oid_34.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x34 (E36); 0.17% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x34 (E36); 0.17% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_34"
        },
        {
          "id": "enemy.oid_34.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_34.lifecycle (seen 5 of parts_total 7); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x34 (E36); 0.17% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x34 (E36); 0.17% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_34"
        }
      ],
      "family": "oid_34",
      "sourceOid": "0x34",
      "tableContext": "enemy-object table",
      "placements": {
        "sting-chameleon": 5
      },
      "memberOids": [
        "0x34"
      ]
    },
    {
      "id": "enemy.oid_35",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x35 (rótulo metalWing): AA",
        "en": "Object 0x35 (label metalWing): AA"
      },
      "steps": [
        {
          "id": "enemy.oid_35.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_35 (membros 0x35; granular-v3, L18). Criação e contextos de posicionamento: todos os 9 posicionamentos da ROM (armored-armadillo 9) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 9. Os membros rodaram em execuções verificadas (E35): 0x35 em 1 execuções, 2,882 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_35 (members 0x35; granular-v3, L18). Creation and placement contexts: all 9 of its ROM placements (armored-armadillo 9) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 9. Members ran in verified runs (E35): 0x35 in 1 runs, 2,882 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_35"
        },
        {
          "id": "enemy.oid_35.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v4.py",
            "docs/tasks/done/E40-enemy-remaining-steps.md"
          ],
          "note": {
            "pt": "2026-09-26 (card E40, regra do E37 sobre 62 execuções com WRAM igual em todos os quadros, R14, R15 e os takes de ramo e caça incluídos), modo ROM-first: família enemy.oid_35 (0x35 stub 80:FABA, main 83:DB9B). Evidência: knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json families.enemy.oid_35.steps.attack; imagens exatas nos seus quadros; toda parte do critério vista.",
            "en": "2026-09-26 (card E40, E37's rule over 62 runs WRAM equal on every frame, R14, R15 and the branch and hunt takes included), ROM-first: family enemy.oid_35 (0x35 stub 80:FABA, main 83:DB9B). ran in 5 verified runs, 25085 slot-frames (armored-armadillo-death-branch_1_11865 f6733..7450, armored-armadillo_1_15055 f6733..7450, b6-aa-f-wave-normal-hunt_1_9233 f6733..7450 ...), WRAM equal on every frame of each (V12 wram_equal = frames + 1; R8, R9, R12, R14, R15 intake wram_equal N of N; branch and hunt takes WRAM equal N of N, pictures exact on every frame) no child observed, and its handler reaches neither findEnemyShotEmptySlot (82:8358) nor loadEnitySlotBase (82:8321) (census routines): no-attack backed by source Pictures exact on its frames; every part of the criterion seen."
          },
          "family": "oid_35"
        },
        {
          "id": "enemy.oid_35.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v4.py",
            "docs/tasks/done/E40-enemy-remaining-steps.md"
          ],
          "note": {
            "pt": "2026-09-26 (card E40, regra do E37 sobre 62 execuções com WRAM igual em todos os quadros, R14, R15 e os takes de ramo e caça incluídos), modo ROM-first: família enemy.oid_35 (0x35 stub 80:FABA, main 83:DB9B). Evidência: knowledge_base/mmx1/rom/enemy_evidence_v4_2026-09-26.json families.enemy.oid_35.steps.contact; imagens exatas nos seus quadros; toda parte do critério vista.",
            "en": "2026-09-26 (card E40, E37's rule over 62 runs WRAM equal on every frame, R14, R15 and the branch and hunt takes included), ROM-first: family enemy.oid_35 (0x35 stub 80:FABA, main 83:DB9B). ran in 5 verified runs, 25085 slot-frames (armored-armadillo-death-branch_1_11865 f6733..7450, armored-armadillo_1_15055 f6733..7450, b6-aa-f-wave-normal-hunt_1_9233 f6733..7450 ...), WRAM equal on every frame of each (V12 wram_equal = frames + 1; R8, R9, R12, R14, R15 intake wram_equal N of N; branch and hunt takes WRAM equal N of N, pictures exact on every frame) HP drops 37 {'boomerang-cutter': 12, 'fire-wave': 13, 'rolling-shield': 2, 'chameleon-sting': 2, 'buster': 8}; deaths 17 {'boomerang-cutter': 4, 'fire-wave': 6, 'chameleon-sting': 2, 'buster': 5}; X damaged <= 32 px from it 5 times [('armored-armadillo-death-branch_1_11865', 7152, 2), ('armored-armadillo_1_15055', 7152, 2)] Pictures exact on its frames; every part of the criterion seen."
          },
          "family": "oid_35"
        },
        {
          "id": "enemy.oid_35.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 59,
            "total": 61,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_35.visual (picture parts seen 57 of parts_total 61; 1 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_35.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x35 (E36); 0.17% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x35 (E36); 0.17% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_35"
        },
        {
          "id": "enemy.oid_35.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "tools/tests/test_enemy_drop_reach.py",
            "docs/tasks/done/E49-drop-reach-id-store-sites.md"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x35 (E36); 0.17% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto. 2026-10-04 (E49, LG6): verificado; toda parte vista ou excluída pela fonte (5 vistas, 2 excluídas, de 7); drop excluído: o membro 0x35 não tem caminho até 84:A384, 0 acertos de solidez, rastreio de D conferido (19 sítios, 0 chamadas desbalanceadas) em enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x35 (E36); 0.17% in total, once, not per stage. Pending: nothing credited; the references are context. 2026-10-04 (E49, LG6): verified; every part seen or excluded by source (5 seen, 2 excluded, of 7); drop excluded: member 0x35 has no path to 84:A384, 0 soundness hits, D trace checked (19 sites, 0 unbalanced callees) in enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates."
          },
          "family": "oid_35"
        }
      ],
      "family": "oid_35",
      "sourceOid": "0x35",
      "tableContext": "enemy-object table",
      "placements": {
        "armored-armadillo": 9
      },
      "memberOids": [
        "0x35"
      ]
    },
    {
      "id": "enemy.oid_36",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x36 (rótulo jamminger): IH, SC, BK, CP, Sigma 1",
        "en": "Object 0x36 (label jamminger): IH, SC, BK, CP, Sigma 1"
      },
      "steps": [
        {
          "id": "enemy.oid_36.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_36 (membros 0x36; granular-v3, L18). Criação e contextos de posicionamento: todos os 31 posicionamentos da ROM (intro-highway 5, sting-chameleon 3, boomer-kuwanger 6, chill-penguin 6, sigma-1 11) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 24, top 6, left 1. Os membros rodaram em execuções verificadas (E35): 0x36 em 7 execuções, 4,697 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_36 (members 0x36; granular-v3, L18). Creation and placement contexts: all 31 of its ROM placements (intro-highway 5, sting-chameleon 3, boomer-kuwanger 6, chill-penguin 6, sigma-1 11) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 24, top 6, left 1. Members ran in verified runs (E35): 0x36 in 7 runs, 4,697 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_36"
        },
        {
          "id": "enemy.oid_36.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "build/HN3/session8-oid36-reduction.json",
            "docs/tasks/done/HN3-port-planner.md"
          ],
          "note": {
            "pt": "2026-09-30 HN3: cobertura observada do T1 mais o último posicionamento ausente (CP entrada 43, finder 3 OID $36, registro $FAD9, na tela). O redutor E35/T1 sem mudança nas regras cobre todas as partes: ataque 34/34, contato 35/35. O branch hn3-hn2-t1-oid36-chill-entry43-hunt verifica 309/309 quadros WRAM e 308/308 imagens. Escopo: casos ROM-first observados; não certifica o motor legado.",
            "en": "2026-09-30 HN3: T1 existing observed-case coverage plus the last missing placement (CP entry 43, finder 3 OID $36, record $FAD9, on screen). The unchanged E35/T1 reducer now has all acceptance parts: attack 34/34, contact 35/35. Winning branch hn3-hn2-t1-oid36-chill-entry43-hunt verifies 309/309 WRAM frames and 308/308 pixels. Scope is the observed ROM-first cases; no legacy-engine certification."
          },
          "family": "oid_36"
        },
        {
          "id": "enemy.oid_36.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "build/HN3/session8-oid36-reduction.json",
            "docs/tasks/done/HN3-port-planner.md"
          ],
          "note": {
            "pt": "2026-09-30 HN3: cobertura observada do T1 mais o último posicionamento ausente (CP entrada 43, finder 3 OID $36, registro $FAD9, na tela). O redutor E35/T1 sem mudança nas regras cobre todas as partes: ataque 34/34, contato 35/35. O branch hn3-hn2-t1-oid36-chill-entry43-hunt verifica 309/309 quadros WRAM e 308/308 imagens. Escopo: casos ROM-first observados; não certifica o motor legado.",
            "en": "2026-09-30 HN3: T1 existing observed-case coverage plus the last missing placement (CP entry 43, finder 3 OID $36, record $FAD9, on screen). The unchanged E35/T1 reducer now has all acceptance parts: attack 34/34, contact 35/35. Winning branch hn3-hn2-t1-oid36-chill-entry43-hunt verifies 309/309 WRAM frames and 308/308 pixels. Scope is the observed ROM-first cases; no legacy-engine certification."
          },
          "family": "oid_36"
        },
        {
          "id": "enemy.oid_36.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json",
            "docs/tasks/done/E51-deflect-sound-method-f-kb.md",
            "docs/tasks/done/E50-owner-damage-row-deflects.md"
          ],
          "note": {
            "pt": "2026-10-12 (L138, cartas E50 e E51): 14 de 14 partes de desenho, animação e som do inimigo 0x36 vistas ou provadas (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json#/steps/enemy.oid_36.visual (picture parts seen 10 of parts_total 14; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git abdfbe94c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_36.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)). A última, o som de ricochete $10 (84:9F0B), é provada pela ROM: só um byte $80 na linha de dano chega a ele (84:9E45-84:9E4D), e as linhas deste inimigo não têm $80 para nenhum tiro do X (knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json).",
            "en": "2026-10-12 (L138, cards E50 and E51): 14 of 14 drawing, animation and sound parts of enemy 0x36 seen or proven (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-11_r132.json#/steps/enemy.oid_36.visual (picture parts seen 10 of parts_total 14; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606); other sound parts count unseen, rules R3/R38/R140); read at git abdfbe94c; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_36.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)). The last, the deflect sound $10 (84:9F0B), is proven from the ROM: only a $80 byte in the damage row reaches it (84:9E45-84:9E4D), and this enemy's rows hold no $80 for any X shot (knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json)."
          },
          "family": "oid_36"
        },
        {
          "id": "enemy.oid_36.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_36, OID 0x36 (rótulo do censo jamminger, main 83:DD67) rodou em 7 execuções verificadas (boomer-kuwanger_1_40070, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, items-collection_2_15104, sigma1-zero-arm_2_35588, sting-chameleon_1_25606), 4,697 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 27 (explosões do finder 1: 0x02 x29, 0x09 x7); drops 0x02 x3, 0x01 x4 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; nenhum filho: o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches), então filhos sobreviventes não se aplicam; liberações fora da tela 16; posicionamentos reaparecidos 9; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_36, OID 0x36 (census label jamminger, main 83:DD67) ran in 7 verified runs (boomer-kuwanger_1_40070, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, items-collection_2_15104, sigma1-zero-arm_2_35588, sting-chameleon_1_25606), 4,697 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 27 (finder-1 blasts 0x02 x29, 0x09 x7); drops 0x02 x3, 0x01 x4 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; no child: its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches), so surviving children do not apply; off-screen frees 16; respawned placements 9; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_36"
        }
      ],
      "family": "oid_36",
      "sourceOid": "0x36",
      "tableContext": "enemy-object table",
      "placements": {
        "intro-highway": 5,
        "sting-chameleon": 3,
        "boomer-kuwanger": 6,
        "chill-penguin": 6,
        "sigma-1": 11
      },
      "memberOids": [
        "0x36"
      ]
    },
    {
      "id": "enemy.oid_37",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x37 (rótulo hotarion): SM",
        "en": "Object 0x37 (label hotarion): SM"
      },
      "steps": [
        {
          "id": "enemy.oid_37.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 12 de 12 partes: as já vistas como antes, e placement:spark-mandrill:84 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 12 of 12 parts: those already seen as before, and placement:spark-mandrill:84 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "oid_37"
        },
        {
          "id": "enemy.oid_37.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 13 de 13 partes: as já vistas como antes, e placement:spark-mandrill:84 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 13 of 13 parts: those already seen as before, and placement:spark-mandrill:84 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "oid_37"
        },
        {
          "id": "enemy.oid_37.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 14 de 14 partes: as já vistas como antes, e placement:spark-mandrill:84 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 14 of 14 parts: those already seen as before, and placement:spark-mandrill:84 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          },
          "family": "oid_37"
        },
        {
          "id": "enemy.oid_37.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 5,
          "status": "pending",
          "partial": {
            "seen": 7,
            "total": 8,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_37.visual (picture parts seen 3 of parts_total 8; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/spark-mandrill_1_27368); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_37.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x37 (E36); 0.25% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x37 (E36); 0.25% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_37"
        },
        {
          "id": "enemy.oid_37.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 5,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_37.lifecycle (seen 5 of parts_total 7; method-f parts counted as seen 1 of 1: live-child (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x37 (E36); 0.25% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x37 (E36); 0.25% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_37"
        }
      ],
      "family": "oid_37",
      "sourceOid": "0x37",
      "tableContext": "enemy-object table",
      "placements": {
        "spark-mandrill": 10
      },
      "memberOids": [
        "0x37"
      ]
    },
    {
      "id": "enemy.oid_3b",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x3B (rótulo ladderJadder): BK",
        "en": "Object 0x3B (label ladderJadder): BK"
      },
      "steps": [
        {
          "id": "enemy.oid_3b.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_3b (membros 0x3B; granular-v3, L18). Criação e contextos de posicionamento: todos os 4 posicionamentos da ROM (boomer-kuwanger 4) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): top 4. Os membros rodaram em execuções verificadas (E35): 0x3B em 2 execuções, 3,747 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_3b (members 0x3B; granular-v3, L18). Creation and placement contexts: all 4 of its ROM placements (boomer-kuwanger 4) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): top 4. Members ran in verified runs (E35): 0x3B in 2 runs, 3,747 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_3b"
        },
        {
          "id": "enemy.oid_3b.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_3b, OID 0x3B (rótulo do censo ladderJadder, main 87:A9DF) rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104), 3,747 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches): a ausência de ataque tem respaldo na origem. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_3b, OID 0x3B (census label ladderJadder, main 87:A9DF) ran in 2 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104), 3,747 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches): no-attack backed by source. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_3b"
        },
        {
          "id": "enemy.oid_3b.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json",
            "knowledge_base/mmx1/rom/h45b_found_takes_2026-10-15.json"
          ],
          "note": {
            "pt": "2026-10-15 (L258, carta H45b): 8 de 8 partes (knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_3b.contact (seen 7 of parts_total 8); read at git db50620f5; plus 1 parts contact-X per knowledge_base/mmx1/rom/h45b_found_takes_2026-10-15.json#/rows/enemy.oid_3b.contact/parts); a que faltava, o contato do OID $3B com o X, foi vista na caçada verificada h45-20-oid-3b-contact-hunt no quadro f11312.",
            "en": "2026-10-15 (L258, card H45b): 8 of 8 parts (knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_3b.contact (seen 7 of parts_total 8); read at git db50620f5; plus 1 parts contact-X per knowledge_base/mmx1/rom/h45b_found_takes_2026-10-15.json#/rows/enemy.oid_3b.contact/parts); the missing one, OID $3B's contact with X, was seen in the verified hunt take h45-20-oid-3b-contact-hunt at f11312."
          },
          "family": "oid_3b"
        },
        {
          "id": "enemy.oid_3b.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 19,
            "total": 20,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_3b.visual (picture parts seen 4 of parts_total 20; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/boomer-kuwanger_1_40070); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_3b.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 12 method-f parts 3B:cell:78:AFD7C2, 3B:cell:78:AFD7C5, 3B:cell:78:AFD7C8, 3B:cell:78:AFD7CB, 3B:cell:78:AFD7D0, 3B:cell:78:AFD7D3, 3B:cell:78:AFD7D6, 3B:cell:78:AFD7D9, 3B:cell:78:AFD7DE, 3B:cell:78:AFD7E1, 3B:cell:78:AFD7E4, 3B:cell:78:AFD7E7 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e53.json#/steps/enemy.oid_3b.visual/parts (exclusion_proof cites the ROM by bank:addr, card E53)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x3B (E36); 0.15% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x3B (E36); 0.15% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_3b"
        },
        {
          "id": "enemy.oid_3b.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_step_sweep_2026-09-30.json",
            "knowledge_base/mmx1/rom/enemy_drop_reach_2026-10-04.json",
            "tools/tests/test_enemy_drop_reach.py",
            "docs/tasks/done/E49-drop-reach-id-store-sites.md"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x3B (E36); 0.15% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto. 2026-10-04 (E49, LG6): verificado; toda parte vista ou excluída pela fonte (5 vistas, 2 excluídas, de 7); drop excluído: o membro 0x3B não tem caminho até 84:A384, 0 acertos de solidez, rastreio de D conferido (19 sítios, 0 chamadas desbalanceadas) em enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x3B (E36); 0.15% in total, once, not per stage. Pending: nothing credited; the references are context. 2026-10-04 (E49, LG6): verified; every part seen or excluded by source (5 seen, 2 excluded, of 7); drop excluded: member 0x3B has no path to 84:A384, 0 soundness hits, D trace checked (19 sites, 0 unbalanced callees) in enemy_drop_reach_2026-10-04.json; enemy_step_sweep summary.complete_candidates."
          },
          "family": "oid_3b"
        }
      ],
      "family": "oid_3b",
      "sourceOid": "0x3B",
      "tableContext": "enemy-object table",
      "placements": {
        "boomer-kuwanger": 4
      },
      "memberOids": [
        "0x3B"
      ]
    },
    {
      "id": "enemy.oid_3f",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x3F (rótulo slidePlatform): BK",
        "en": "Object 0x3F (label slidePlatform): BK"
      },
      "steps": [
        {
          "id": "enemy.oid_3f.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_3f (membros 0x3F; granular-v3, L18); os posicionamentos incluem as entradas do emissor 0x1E do finder 2 (tabela 80:F59A), que gera a 0x3F (E36), como o L18 as conta. Criação e contextos de posicionamento: todos os 8 posicionamentos da ROM (boomer-kuwanger 8) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): top 8. Os membros rodaram em execuções verificadas (E35): 0x3F em 2 execuções, 26,791 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_3f (members 0x3F; granular-v3, L18); its placements include the entries of finder-2 emitter 0x1E (table 80:F59A), which makes 0x3F (E36), as L18 counts them. Creation and placement contexts: all 8 of its ROM placements (boomer-kuwanger 8) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): top 8. Members ran in verified runs (E35): 0x3F in 2 runs, 26,791 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_3f"
        },
        {
          "id": "enemy.oid_3f.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_3f, OID 0x3F (rótulo do censo slidePlatform, main 87:B216) rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104), 26,791 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x13 x34; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (boomer-kuwanger 8) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x1E x76), execuções geradas 76; então a checagem de posicionamento na tela do E35 não tem o que testar. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_3f, OID 0x3F (census label slidePlatform, main 87:B216) ran in 2 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104), 26,791 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x13 x34; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (boomer-kuwanger 8) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x1E x76), spawned runs 76; so E35's on-screen placement check has nothing to test. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_3f"
        },
        {
          "id": "enemy.oid_3f.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 8,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_3f, OID 0x3F (rótulo do censo slidePlatform, main 87:B216) rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104), 26,791 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 38 (shotgun-ice 11, fire-wave 5, buster 22); mortes 15 (shotgun-ice 7, fire-wave 1, buster 7); X sofreu dano a até 32 px dele 2 vezes (ex.: boomer-kuwanger_1_40070 f13479). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador, como o L15 julgou o rush_roader): não tem posicionamento da ROM no finder 3 (rom_placements vazio no KB); os seus posicionamentos no ledger (boomer-kuwanger 8) são entradas de emissor, e o KB registra os seus nascimentos pelos emissores (finder-2 0x1E x76), execuções geradas 76; então a checagem de posicionamento na tela do E35 não tem o que testar. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_3f, OID 0x3F (census label slidePlatform, main 87:B216) ran in 2 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104), 26,791 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 38 (shotgun-ice 11, fire-wave 5, buster 22); deaths 15 (shotgun-ice 7, fire-wave 1, buster 7); X damaged within 32 px of it 2 times (e.g. boomer-kuwanger_1_40070 f13479). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator, as L15 judged rush_roader): it has no finder-3 ROM placement (KB rom_placements empty); its ledger placements (boomer-kuwanger 8) are emitter entries, and the KB records its spawns by the emitters (finder-2 0x1E x76), spawned runs 76; so E35's on-screen placement check has nothing to test. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_3f"
        },
        {
          "id": "enemy.oid_3f.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 8,
          "status": "pending",
          "partial": {
            "seen": 14,
            "total": 15,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_3f.visual (picture parts seen 10 of parts_total 15; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/boomer-kuwanger_1_40070); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_3f.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x3F (E36); 0.41% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x3F (E36); 0.41% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_3f"
        },
        {
          "id": "enemy.oid_3f.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 8,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_3f.lifecycle (seen 4 of parts_total 7; method-f parts counted as seen 2 of 2: drop, respawn (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x3F (E36); 0.41% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x3F (E36); 0.41% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_3f"
        }
      ],
      "family": "oid_3f",
      "sourceOid": "0x3F",
      "tableContext": "enemy-object table",
      "placements": {
        "boomer-kuwanger": 8
      },
      "memberOids": [
        "0x3F"
      ]
    },
    {
      "id": "enemy.oid_40",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x40 (rótulo spring): Sigma 1",
        "en": "Object 0x40 (label spring): Sigma 1"
      },
      "steps": [
        {
          "id": "enemy.oid_40.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_40 (membros 0x40; granular-v3, L18). Criação e contextos de posicionamento: todos os 6 posicionamentos da ROM (sigma-1 6) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 6. Os membros rodaram em execuções verificadas (E35): 0x40 em 1 execuções, 1,214 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_40 (members 0x40; granular-v3, L18). Creation and placement contexts: all 6 of its ROM placements (sigma-1 6) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 6. Members ran in verified runs (E35): 0x40 in 1 runs, 1,214 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_40"
        },
        {
          "id": "enemy.oid_40.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_40, OID 0x40 (rótulo do censo spring, main 87:B443) rodou em 1 execução verificada (sigma1-zero-arm_2_35588), 1,214 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches): a ausência de ataque tem respaldo na origem. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_40, OID 0x40 (census label spring, main 87:B443) ran in 1 verified run (sigma1-zero-arm_2_35588), 1,214 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches): no-attack backed by source. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_40"
        },
        {
          "id": "enemy.oid_40.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 2,
          "status": "pending",
          "partial": {
            "seen": 9,
            "total": 10,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_40.contact (seen 9 of parts_total 10); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x40 (E36); 0.08% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x40 (E36); 0.08% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_40"
        },
        {
          "id": "enemy.oid_40.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 1,
          "status": "pending",
          "partial": {
            "seen": 27,
            "total": 30,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_40.visual (picture parts seen 26 of parts_total 30; 1 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma1-zero-arm_2_35588); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x40 (E36); 0.08% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x40 (E36); 0.08% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_40"
        },
        {
          "id": "enemy.oid_40.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 1,
          "status": "pending",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_40.lifecycle (seen 3 of parts_total 7; method-f parts counted as seen 2 of 2: drop, live-child (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x40 (E36); 0.08% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x40 (E36); 0.08% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_40"
        }
      ],
      "family": "oid_40",
      "sourceOid": "0x40",
      "tableContext": "enemy-object table",
      "placements": {
        "sigma-1": 6
      },
      "memberOids": [
        "0x40"
      ]
    },
    {
      "id": "enemy.oid_44",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x44 (rótulo laserTrap): BK, Sigma 1, Sigma 3",
        "en": "Object 0x44 (label laserTrap): BK, Sigma 1, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_44.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_44 (membros 0x44; granular-v3, L18). Criação e contextos de posicionamento: todos os 11 posicionamentos da ROM (boomer-kuwanger 5, sigma-1 3, sigma-3 3) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 11. Os membros rodaram em execuções verificadas (E35): 0x44 em 4 execuções, 7,148 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_44 (members 0x44; granular-v3, L18). Creation and placement contexts: all 11 of its ROM placements (boomer-kuwanger 5, sigma-1 3, sigma-3 3) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 11. Members ran in verified runs (E35): 0x44 in 4 runs, 7,148 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_44"
        },
        {
          "id": "enemy.oid_44.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_44, OID 0x44 (rótulo do censo laserTrap, main 87:BA72) rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312), 7,148 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: es:0x1C x37; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_44, OID 0x44 (census label laserTrap, main 87:BA72) ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312), 7,148 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: es:0x1C x37; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_44"
        },
        {
          "id": "enemy.oid_44.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 14,
            "total": 15,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_44.contact (seen 14 of parts_total 15); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x44 (E36); 0.22% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x44 (E36); 0.22% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_44"
        },
        {
          "id": "enemy.oid_44.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 20,
            "total": 26,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_44.visual (picture parts seen 18 of parts_total 26; 2 sound parts whose witness frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/boomer-kuwanger_1_40070); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x44 (E36); 0.22% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x44 (E36); 0.22% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_44"
        },
        {
          "id": "enemy.oid_44.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_44.lifecycle (seen 4 of parts_total 7; method-f parts counted as seen 1 of 1: drop (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x44 (E36); 0.22% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x44 (E36); 0.22% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_44"
        }
      ],
      "family": "oid_44",
      "sourceOid": "0x44",
      "tableContext": "enemy-object table",
      "placements": {
        "boomer-kuwanger": 5,
        "sigma-1": 3,
        "sigma-3": 3
      },
      "memberOids": [
        "0x44"
      ]
    },
    {
      "id": "enemy.oid_46",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x46 (rótulo airPortGasTank): SE",
        "en": "Object 0x46 (label airPortGasTank): SE"
      },
      "steps": [
        {
          "id": "enemy.oid_46.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 2,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_46.motion (seen 6 of parts_total 7); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_46"
        },
        {
          "id": "enemy.oid_46.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 2,
          "status": "pending",
          "partial": {
            "seen": 7,
            "total": 8,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_46.attack (seen 6 of parts_total 8; method-f parts counted as seen 1 of 1: attack-children (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_46"
        },
        {
          "id": "enemy.oid_46.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 1,
          "status": "pending",
          "partial": {
            "seen": 7,
            "total": 9,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_46.contact (seen 7 of parts_total 9); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_46"
        },
        {
          "id": "enemy.oid_46.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 1,
          "status": "pending",
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_46"
        },
        {
          "id": "enemy.oid_46.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 1,
          "status": "pending",
          "partial": {
            "seen": 5,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_46.lifecycle (seen 3 of parts_total 7; method-f parts counted as seen 2 of 2: drop, live-child (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x46 (E36); 0.07% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_46"
        }
      ],
      "family": "oid_46",
      "sourceOid": "0x46",
      "tableContext": "enemy-object table",
      "placements": {
        "storm-eagle": 5
      },
      "memberOids": [
        "0x46"
      ]
    },
    {
      "id": "enemy.oid_4f",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x4F (rótulo rollingGabyool): FM",
        "en": "Object 0x4F (label rollingGabyool): FM"
      },
      "steps": [
        {
          "id": "enemy.oid_4f.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_4f (membros 0x4F; granular-v3, L18). Criação e contextos de posicionamento: todos os 7 posicionamentos da ROM (flame-mammoth 7) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 7. Os membros rodaram em execuções verificadas (E35): 0x4F em 2 execuções, 7,103 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_4f (members 0x4F; granular-v3, L18). Creation and placement contexts: all 7 of its ROM placements (flame-mammoth 7) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 7. Members ran in verified runs (E35): 0x4F in 2 runs, 7,103 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_4f"
        },
        {
          "id": "enemy.oid_4f.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_4f, OID 0x4F (rótulo do censo rollingGabyool, main 87:D119) rodou em 2 execuções verificadas (flame-mammoth-lava_2_23048, flame-mammoth_2_30151), 7,103 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: nenhum filho observado, e o handler não alcança findEnemyShotEmptySlot nem loadEnitySlotBase (KB identity.reaches): a ausência de ataque tem respaldo na origem. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_4f, OID 0x4F (census label rollingGabyool, main 87:D119) ran in 2 verified runs (flame-mammoth-lava_2_23048, flame-mammoth_2_30151), 7,103 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: no child observed, and its handler reaches neither findEnemyShotEmptySlot nor loadEnitySlotBase (KB identity.reaches): no-attack backed by source. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_4f"
        },
        {
          "id": "enemy.oid_4f.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_4f, OID 0x4F (rótulo do censo rollingGabyool, main 87:D119) rodou em 2 execuções verificadas (flame-mammoth-lava_2_23048, flame-mammoth_2_30151), 7,103 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 5 (buster 3, chameleon-sting 2); mortes 0 (none); X sofreu dano a até 32 px dele 2 vezes (ex.: flame-mammoth_2_30151 f20330). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_4f, OID 0x4F (census label rollingGabyool, main 87:D119) ran in 2 verified runs (flame-mammoth-lava_2_23048, flame-mammoth_2_30151), 7,103 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 5 (buster 3, chameleon-sting 2); deaths 0 (none); X damaged within 32 px of it 2 times (e.g. flame-mammoth_2_30151 f20330). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_4f"
        },
        {
          "id": "enemy.oid_4f.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 11,
            "total": 14,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_4f.visual (picture parts seen 11 of parts_total 14; sound parts count unseen, rule R3); read at git 9a29651ff"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x4F (E36); 0.20% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x4F (E36); 0.20% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_4f"
        },
        {
          "id": "enemy.oid_4f.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_4f.lifecycle (seen 4 of parts_total 7; method-f parts counted as seen 2 of 2: drop, live-child (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x4F (E36); 0.20% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x4F (E36); 0.20% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_4f"
        }
      ],
      "family": "oid_4f",
      "sourceOid": "0x4F",
      "tableContext": "enemy-object table",
      "placements": {
        "flame-mammoth": 7
      },
      "memberOids": [
        "0x4F"
      ]
    },
    {
      "id": "enemy.oid_57",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x57 (rótulo igloo) com 0x3A: CP",
        "en": "Object 0x57 (label igloo) with 0x3A: CP"
      },
      "steps": [
        {
          "id": "enemy.oid_57.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_57 (membros 0x57, 0x3A; granular-v3, L18). Criação e contextos de posicionamento: todos os 7 posicionamentos da ROM (chill-penguin 7) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 7. Os membros rodaram em execuções verificadas (E35): 0x57 em 2 execuções, 1,696 slot-frames; 0x3A em 2 execuções, 538 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_57 (members 0x57, 0x3A; granular-v3, L18). Creation and placement contexts: all 7 of its ROM placements (chill-penguin 7) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 7. Members ran in verified runs (E35): 0x57 in 2 runs, 1,696 slot-frames; 0x3A in 2 runs, 538 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_57"
        },
        {
          "id": "enemy.oid_57.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 5,
          "status": "pending",
          "partial": {
            "seen": 10,
            "total": 11,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_57.attack (seen 10 of parts_total 11); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x57, 0x3A (E36); 0.22% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x57, 0x3A (E36); 0.22% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_57"
        },
        {
          "id": "enemy.oid_57.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 10,
            "total": 12,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_57.contact (seen 10 of parts_total 12); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x57, 0x3A (E36); 0.22% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x57, 0x3A (E36); 0.22% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_57"
        },
        {
          "id": "enemy.oid_57.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json",
            "docs/tasks/done/E55-enemy-cells-rest.md",
            "docs/tasks/done/A27-enemy-sfx-per-family.md",
            "docs/tasks/done/R140-enemy-sound-parts-gated.md",
            "docs/tasks/done/KB1-enemy-visual-catalogue-h42.md"
          ],
          "note": {
            "pt": "2026-10-13 (L196, carta E55): 49 de 49 partes vistas ou provadas (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_57.visual (picture parts seen 44 of parts_total 49; 4 sound parts whose witness frame lies inside a whole APU-gated window of the same take (4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 1a92dbe8c; plus 1 method-f parts 3A:cell:64:AFCEB8 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json#/steps/enemy.oid_57.visual/parts (exclusion_proof cites the ROM by bank:addr, card E55)): 44 quadros vistos em gravações conferidas, 4 sons dentro da janela de áudio inteira de chill-penguin-new-game, e o quadro AF:CEB8 que a ROM nunca desenha (o estado 8 em 83:E631 troca a animação na mesma chamada).",
            "en": "2026-10-13 (L196, card E55): 49 of 49 parts seen or proven (knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_57.visual (picture parts seen 44 of parts_total 49; 4 sound parts whose witness frame lies inside a whole APU-gated window of the same take (4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068); other sound parts count unseen, rules R3/R38/R140); read at git 1a92dbe8c; plus 1 method-f parts 3A:cell:64:AFCEB8 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e55.json#/steps/enemy.oid_57.visual/parts (exclusion_proof cites the ROM by bank:addr, card E55)): 44 cells seen in verified takes, 4 sounds inside chill-penguin-new-game's whole audio window, and cell AF:CEB8 the ROM never draws (state 8 at 83:E631 replaces the animation in the same call)."
          },
          "family": "oid_57"
        },
        {
          "id": "enemy.oid_57.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_57, OIDs membros 0x57, 0x3A (rótulos do censo igloo, tomBot; mains 87:E354, 83:E404) rodou em 2 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010), 2,234 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 9 (explosões do finder 1: 0x2B x149, 0x02 x13); drops 0x02 x1 (objetos do finder 0, 1 quadro após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 1, ainda vivos 2+ quadros depois 1; liberações fora da tela 5; posicionamentos reaparecidos 1; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x57 runs 6, slot-frames 1,696, mortes 6; 0x3A runs 10, slot-frames 538, mortes 3). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_57, member OIDs 0x57, 0x3A (census labels igloo, tomBot; mains 87:E354, 83:E404) ran in 2 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010), 2,234 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 9 (finder-1 blasts 0x2B x149, 0x02 x13); drops 0x02 x1 (finder-0 objects, 1 frame after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 1, still alive 2+ frames later 1; off-screen frees 5; respawned placements 1; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x57 runs 6, slot-frames 1,696, deaths 6; 0x3A runs 10, slot-frames 538, deaths 3). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_57"
        }
      ],
      "family": "oid_57",
      "sourceOid": "0x57",
      "tableContext": "enemy-object table",
      "placements": {
        "chill-penguin": 7
      },
      "memberOids": [
        "0x57",
        "0x3A"
      ]
    },
    {
      "id": "enemy.oid_59",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x59 (rótulo longPillar) com 0x58, 0x5A: SE",
        "en": "Object 0x59 (label longPillar) with 0x58, 0x5A: SE"
      },
      "steps": [
        {
          "id": "enemy.oid_59.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_59 (membros 0x59, 0x58, 0x5A; granular-v3, L18). Criação e contextos de posicionamento: todos os 1 posicionamentos da ROM (storm-eagle 1) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 1. Os membros rodaram em execuções verificadas (E35): 0x59 em 2 execuções, 759 slot-frames; 0x58 em 2 execuções, 57 slot-frames; 0x5A em 2 execuções, 757 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_59 (members 0x59, 0x58, 0x5A; granular-v3, L18). Creation and placement contexts: all 1 of its ROM placements (storm-eagle 1) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 1. Members ran in verified runs (E35): 0x59 in 2 runs, 759 slot-frames; 0x58 in 2 runs, 57 slot-frames; 0x5A in 2 runs, 757 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_59"
        },
        {
          "id": "enemy.oid_59.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_59, OIDs membros 0x59, 0x58, 0x5A (rótulos do censo longPillar, -, -; mains 87:E7D4, 87:E547, 87:EB09) rodou em 2 execuções verificadas (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,573 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x58 x2; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x59 runs 2, slot-frames 759, mortes 0; 0x58 runs 2, slot-frames 57, mortes 1; 0x5A runs 2, slot-frames 757, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_59, member OIDs 0x59, 0x58, 0x5A (census labels longPillar, -, -; mains 87:E7D4, 87:E547, 87:EB09) ran in 2 verified runs (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 1,573 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x58 x2; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x59 runs 2, slot-frames 759, deaths 0; 0x58 runs 2, slot-frames 57, deaths 1; 0x5A runs 2, slot-frames 757, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_59"
        },
        {
          "id": "enemy.oid_59.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_59.contact (seen 6 of parts_total 7); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x59, 0x58, 0x5A (E36); 0.20% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x59, 0x58, 0x5A (E36); 0.20% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_59"
        },
        {
          "id": "enemy.oid_59.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 25,
            "total": 29,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_59.visual (picture parts seen 23 of parts_total 29; 1 sound parts whose witness frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/storm-eagle-and-spark-dark_2_25920); other sound parts count unseen, rules R3/R38/R140); read at git 9a29651ff; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_59.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x59, 0x58, 0x5A (E36); 0.20% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x59, 0x58, 0x5A (E36); 0.20% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_59"
        },
        {
          "id": "enemy.oid_59.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 7,
            "total": 9,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_59.lifecycle (seen 6 of parts_total 9; method-f parts counted as seen 1 of 1: drop (exclusion_proof cites the ROM by bank:addr, card R59)); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x59, 0x58, 0x5A (E36); 0.20% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x59, 0x58, 0x5A (E36); 0.20% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_59"
        }
      ],
      "family": "oid_59",
      "sourceOid": "0x59",
      "tableContext": "enemy-object table",
      "placements": {
        "storm-eagle": 1
      },
      "memberOids": [
        "0x59",
        "0x58",
        "0x5A"
      ]
    },
    {
      "id": "enemy.oid_5b",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x5B (rótulo megaTortoise): LO, SM, BK, Sigma 1, Sigma 3",
        "en": "Object 0x5B (label megaTortoise): LO, SM, BK, Sigma 1, Sigma 3"
      },
      "steps": [
        {
          "id": "enemy.oid_5b.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 7,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_5b (membros 0x5B; granular-v3, L18). Criação e contextos de posicionamento: todos os 15 posicionamentos da ROM (launch-octopus 2, spark-mandrill 3, boomer-kuwanger 4, sigma-1 5, sigma-3 1) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): right 10, top 5. Os membros rodaram em execuções verificadas (E35): 0x5B em 8 execuções, 8,273 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_5b (members 0x5B; granular-v3, L18). Creation and placement contexts: all 15 of its ROM placements (launch-octopus 2, spark-mandrill 3, boomer-kuwanger 4, sigma-1 5, sigma-3 1) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): right 10, top 5. Members ran in verified runs (E35): 0x5B in 8 runs, 8,273 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_5b"
        },
        {
          "id": "enemy.oid_5b.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_5b, OID 0x5B (rótulo do censo megaTortoise, main 87:EBFE) rodou em 8 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x4A x5, es:0x25 x83; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_5b, OID 0x5B (census label megaTortoise, main 87:EBFE) ran in 8 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x4A x5, es:0x25 x83; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_5b"
        },
        {
          "id": "enemy.oid_5b.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_5b, OID 0x5B (rótulo do censo megaTortoise, main 87:EBFE) rodou em 8 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 377 (buster 191, fire-wave 149, shotgun-ice 14, homing-torpedo 3, chameleon-sting 20); mortes 24 (buster 10, fire-wave 10, shotgun-ice 1, chameleon-sting 3); X sofreu dano a até 32 px dele 3 vezes (ex.: boomer-kuwanger_1_40070 f22698). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_5b, OID 0x5B (census label megaTortoise, main 87:EBFE) ran in 8 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 377 (buster 191, fire-wave 149, shotgun-ice 14, homing-torpedo 3, chameleon-sting 20); deaths 24 (buster 10, fire-wave 10, shotgun-ice 1, chameleon-sting 3); X damaged within 32 px of it 3 times (e.g. boomer-kuwanger_1_40070 f22698). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_5b"
        },
        {
          "id": "enemy.oid_5b.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 6,
          "status": "pending",
          "partial": {
            "seen": 28,
            "total": 29,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_5b.visual (picture parts seen 23 of parts_total 29; 3 sound parts whose witness frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/boomer-kuwanger_1_40070); other sound parts count unseen, rules R3/R38/R140); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_5b.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 1 method-f parts 5B:cell:98:AFE1A5 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.oid_5b.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x5B (E36); 0.31% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x5B (E36); 0.31% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_5b"
        },
        {
          "id": "enemy.oid_5b.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 6,
          "status": "verified",
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_5b, OID 0x5B (rótulo do censo megaTortoise, main 87:EBFE) rodou em 8 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ciclo de vida: mortes 24 (explosões do finder 1: 0x02 x24, 0x09 x14); drops 0x02 x7, 0x01 x2, 0x13 x1 (objetos do finder 0, 1 a 217 quadros após a morte), com o RNG ($0BA6) dentro da WRAM igual; filhos vivos na sua morte 33, ainda vivos 2+ quadros depois 32; liberações fora da tela 6; posicionamentos reaparecidos 7; duplicatas 0; com a WRAM igual em todos os quadros, os slots de objeto são iguais aos do original, então não há objeto duplicado nem órfão. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os drops (objeto do finder 0 nascido a até 48 px de uma morte, em até 240 quadros), os filhos (nascidos a até 48 px) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_5b, OID 0x5B (census label megaTortoise, main 87:EBFE) ran in 8 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1); no frame of its windows is among the runs' not-exact pictures. Lifecycle: deaths 24 (finder-1 blasts 0x02 x24, 0x09 x14); drops 0x02 x7, 0x01 x2, 0x13 x1 (finder-0 objects, 1..217 frames after the death), the RNG ($0BA6) inside the equal WRAM; children alive at its death 33, still alive 2+ frames later 32; off-screen frees 6; respawned placements 7; duplicates 0; with WRAM equal on every frame the object slots equal the original's, so no duplicate or orphan object. Judgment (E35's rule, run by E37; accepted by the coordinator): drops (a finder-0 object born within 48 px of a death, within 240 frames), children (born within 48 px) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_5b"
        }
      ],
      "family": "oid_5b",
      "sourceOid": "0x5B",
      "tableContext": "enemy-object table",
      "placements": {
        "launch-octopus": 2,
        "spark-mandrill": 3,
        "boomer-kuwanger": 4,
        "sigma-1": 5,
        "sigma-3": 1
      },
      "memberOids": [
        "0x5B"
      ]
    },
    {
      "id": "enemy.oid_6a",
      "category": "enemies",
      "title": {
        "pt": "Objeto 0x6A (rótulo vileFinalForm) com 0x68: Sigma 4",
        "en": "Object 0x6A (label vileFinalForm) with 0x68: Sigma 4"
      },
      "steps": [
        {
          "id": "enemy.oid_6a.motion",
          "category": "enemies",
          "title": {
            "pt": "Ativação, movimento e direção",
            "en": "Activation, movement and facing"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Validar criação, ativação pela câmera/jogador, todos os estados de movimento, direção e transições observados; repetir em cenários representativos das aparições.",
            "en": "Validate creation, camera/player activation, every observed movement state, facing and transition; repeat in representative placement contexts."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30, E35 e E36 na granular-v3), modo ROM-first: família enemy.oid_6a (membros 0x6A, 0x68; granular-v3, L18). Criação e contextos de posicionamento: todos os 2 posicionamentos da ROM (sigma-4 2) nasceram na posição da ROM (slot +$0C = registro de WRAM $7E:FA02 + 5 * i, 80:DD91; deslocamento de 0 px no primeiro quadro) numa execução verificada (S30). Ativação: o gatilho de cada primeiro nascimento é a janela da câmera que continha a entrada (80:DC36): top 2. Os membros rodaram em execuções verificadas (E35): 0x6A em 1 execuções, 1,680 slot-frames; 0x68 em 1 execuções, 2,757 slot-frames; com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Regra: a regra de posicionamento do L15 (todo posicionamento nasceu na posição da ROM numa execução verificada), aplicada pela decisão do coordenador de 2026-09-25 16:55. Pelo portão de estado, todo estado, orientação e transição observados são os da própria rotina da ROM. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30, E35 and E36 on granular-v3), ROM-first mode: family enemy.oid_6a (members 0x6A, 0x68; granular-v3, L18). Creation and placement contexts: all 2 of its ROM placements (sigma-4 2) spawned at their ROM position (slot +$0C = WRAM record $7E:FA02 + 5 * i, 80:DD91; offset 0 px on the first frame) in a verified run (S30). Activation: each first spawn's trigger is the camera window that held the entry (80:DC36): top 2. Members ran in verified runs (E35): 0x6A in 1 runs, 1,680 slot-frames; 0x68 in 1 runs, 2,757 slot-frames; WRAM equal on every frame of each (E35 runs: wram_equal = frames). Rule: L15's placement rule (every placement spawned at its ROM position in a verified run), applied by the coordinator's decision of 2026-09-25 16:55. By the state gate, every observed state, facing and transition is the ROM routine's own. Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_6a"
        },
        {
          "id": "enemy.oid_6a.attack",
          "category": "enemies",
          "title": {
            "pt": "Ataques e projéteis, ou ausência comprovada",
            "en": "Attacks and projectiles, or proven absence"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Mapear e integrar cada ataque e condição observados, posições de nascimento, filhos e regras de RNG; ausência de ataque exige origem que a sustente.",
            "en": "Map and integrate every observed attack and condition, spawn positions, children and RNG rules; no-attack behavior requires supporting source evidence."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_6a, OIDs membros 0x6A, 0x68 (rótulos do censo vileFinalForm, vile; mains 88:D942, 88:D8A9) rodou em 4 execuções verificadas (sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929, sigma-final-win_2_44618, sigma4-final-not-beaten_2_37016), 9,188 slot-frames, com WRAM igual em todos os quadros de cada uma (sigma-final-attempt-1_1_15997 (R8): intake wram_equal 15,997 de 15,997; sigma-final-attempt-2_1_22929 (R12): intake wram_equal 22,929 de 22,929; sigma-final-win_2_44618 (R9): intake wram_equal 44,617 de 44,617; V12 wram_equal = quadros + 1 nas outras 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Ataque: tiros e inimigos gerados nascidos a até 48 px dele: en:0x6A x44; as posições de nascimento e o RNG ($0BA6) estão dentro da WRAM igual. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): os filhos (nascidos a até 48 px) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x6A runs 44, slot-frames 3,816, mortes 0; 0x68 runs 20, slot-frames 5,372, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_6a, member OIDs 0x6A, 0x68 (census labels vileFinalForm, vile; mains 88:D942, 88:D8A9) ran in 4 verified runs (sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929, sigma-final-win_2_44618, sigma4-final-not-beaten_2_37016), 9,188 slot-frames, WRAM equal on every frame of each (sigma-final-attempt-1_1_15997 (R8): intake wram_equal 15,997 of 15,997; sigma-final-attempt-2_1_22929 (R12): intake wram_equal 22,929 of 22,929; sigma-final-win_2_44618 (R9): intake wram_equal 44,617 of 44,617; V12 wram_equal = frames + 1 for the other 1); no frame of its windows is among the runs' not-exact pictures. Attack: shots and spawned enemies born within 48 px of it: en:0x6A x44; their spawn positions and the RNG ($0BA6) are inside the equal WRAM. Judgment (E35's rule, run by E37; accepted by the coordinator): children (born within 48 px) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x6A runs 44, slot-frames 3,816, deaths 0; 0x68 runs 20, slot-frames 5,372, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_6a"
        },
        {
          "id": "enemy.oid_6a.contact",
          "category": "enemies",
          "title": {
            "pt": "Contato, HP e reação às armas",
            "en": "Contact, HP and weapon response"
          },
          "weightBp": 4,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar caixas, HP, dano de contato, reações às armas, imunidades e colisão com terreno nas situações observadas.",
            "en": "Verify boxes, HP, contact damage, weapon responses, immunities and terrain collision in observed situations."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_v3_2026-09-26.json",
            "tools/tests/test_enemy_evidence_v3.py",
            "docs/tasks/done/E37-enemy-evidence-v3-families.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L28, a partir do E37), modo ROM-first: a família enemy.oid_6a, OIDs membros 0x6A, 0x68 (rótulos do censo vileFinalForm, vile; mains 88:D942, 88:D8A9) rodou em 4 execuções verificadas (sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929, sigma-final-win_2_44618, sigma4-final-not-beaten_2_37016), 9,188 slot-frames, com WRAM igual em todos os quadros de cada uma (sigma-final-attempt-1_1_15997 (R8): intake wram_equal 15,997 de 15,997; sigma-final-attempt-2_1_22929 (R12): intake wram_equal 22,929 de 22,929; sigma-final-win_2_44618 (R9): intake wram_equal 44,617 de 44,617; V12 wram_equal = quadros + 1 nas outras 1); nenhum quadro das suas janelas está entre as imagens não exatas das execuções. Contato: quedas de HP 8 (buster 8); mortes 0 (none); X sofreu dano a até 32 px dele 2 vezes (ex.: sigma4-final-not-beaten_2_37016 f7084). Pelo portão de estado, as caixas, imunidades e colisão com o terreno dessas situações são as da própria rotina da ROM. Julgamento (regra do E35, rodada pelo E37; aceito pelo coordenador): o contato com o X (a vida do X cai a até 32 px dele, mais perto que qualquer tiro inimigo) e as mortes (liberado na tela com um tiro do X ativo e uma explosão do finder 1 a até 32 px, em até 2 quadros) são atribuídos ao inimigo mais próximo por proximidade; é uma regra de análise, não um ponteiro da ROM, e o comportamento em si é provado pelo portão de estado da execução inteira. Julgamento (E37, aceito pelo coordenador): a família é julgada pela união das OIDs dos seus membros (granular-v3, L18), e todo membro rodou numa execução verificada (KB runtime.members: 0x6A runs 44, slot-frames 3,816, mortes 0; 0x68 runs 20, slot-frames 5,372, mortes 0). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card L28, from E37), ROM-first mode: family enemy.oid_6a, member OIDs 0x6A, 0x68 (census labels vileFinalForm, vile; mains 88:D942, 88:D8A9) ran in 4 verified runs (sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929, sigma-final-win_2_44618, sigma4-final-not-beaten_2_37016), 9,188 slot-frames, WRAM equal on every frame of each (sigma-final-attempt-1_1_15997 (R8): intake wram_equal 15,997 of 15,997; sigma-final-attempt-2_1_22929 (R12): intake wram_equal 22,929 of 22,929; sigma-final-win_2_44618 (R9): intake wram_equal 44,617 of 44,617; V12 wram_equal = frames + 1 for the other 1); no frame of its windows is among the runs' not-exact pictures. Contact: HP drops 8 (buster 8); deaths 0 (none); X damaged within 32 px of it 2 times (e.g. sigma4-final-not-beaten_2_37016 f7084). By the state gate, the boxes, immunities and terrain collision of these situations are the ROM routine's own. Judgment (E35's rule, run by E37; accepted by the coordinator): contact with X (X's health drops within 32 px of it, nearer than any enemy shot) and deaths (freed on screen with an X shot live and a finder-1 blast within 32 px, within 2 frames) are assigned to the nearest enemy by proximity; this is an analysis rule, not a ROM pointer, and the behaviour itself is proven by the whole-run state gate. Judgment (E37, accepted by the coordinator): the family is judged on the union of its member OIDs (granular-v3, L18), and every member ran in a verified run (KB runtime.members: 0x6A runs 44, slot-frames 3,816, deaths 0; 0x68 runs 20, slot-frames 5,372, deaths 0). Bound: the situations observed in these runs; the legacy engine is not certified."
          },
          "family": "oid_6a"
        },
        {
          "id": "enemy.oid_6a.visual",
          "category": "enemies",
          "title": {
            "pt": "Desenho, animação e áudio",
            "en": "Rendering, animation and audio"
          },
          "weightBp": 4,
          "status": "pending",
          "partial": {
            "seen": 19,
            "total": 22,
            "$source": "knowledge_base/mmx1/rom/enemy_visual_catalogue_2026-10-13_e54.json#/steps/enemy.oid_6a.visual (picture parts seen 17 of parts_total 22; sound parts count unseen, rule R3); read at git 718c88ce4; plus 1 method-f parts sound:849F0B per knowledge_base/mmx1/rom/enemy_deflect_sound_unreachable_2026-10-12_e51.json#/steps/enemy.oid_6a.visual/parts (exclusion_proof cites the ROM by bank:addr, card E51); plus 1 method-f parts 6A:cell:2C:AFB9A2 per knowledge_base/mmx1/rom/enemy_visual_unreachable_2026-10-13_e56.json#/steps/enemy.oid_6a.visual/parts (exclusion_proof cites the ROM by bank:addr, card E56)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e animações e atribuir sons próprios sem substituir arte ou áudio por aproximações.",
            "en": "Compare all poses, palettes, anchors and animations and attribute entity sounds without approximate art/audio substitutes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x6A, 0x68 (E36); 0.19% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x6A, 0x68 (E36); 0.19% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_6a"
        },
        {
          "id": "enemy.oid_6a.lifecycle",
          "category": "enemies",
          "title": {
            "pt": "Morte, drops, saída e reaparecimento",
            "en": "Death, drops, culling and respawn"
          },
          "weightBp": 3,
          "status": "pending",
          "partial": {
            "seen": 7,
            "total": 8,
            "$source": "knowledge_base/mmx1/rom/enemy_step_sweep_2026-10-08-r60.json#/steps/enemy.oid_6a.lifecycle (seen 7 of parts_total 8); read at git b64b30669"
          },
          "acceptance": {
            "pt": "Validar morte, drops com RNG correto, filhos restantes, descarte fora de tela e reaparecimento sem objetos duplicados ou órfãos.",
            "en": "Validate death, drops with correct RNG, surviving children, off-screen culling and respawn without duplicate or orphan objects."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "Família da ROM, revisão granular-v3 (card L18, 2026-09-25): ids 0x6A, 0x68 (E36); 0.19% no total, uma vez, não por fase. Pendente: nada creditado; as referências são contexto.",
            "en": "ROM family, revision granular-v3 (card L18, 2026-09-25): ids 0x6A, 0x68 (E36); 0.19% in total, once, not per stage. Pending: nothing credited; the references are context."
          },
          "family": "oid_6a"
        }
      ],
      "family": "oid_6a",
      "sourceOid": "0x6A",
      "tableContext": "enemy-object table",
      "placements": {
        "sigma-4": 2
      },
      "memberOids": [
        "0x6A",
        "0x68"
      ]
    },
    {
      "id": "census.0x01",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x01 — identidade e cobertura",
        "en": "Census object 0x01 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x01.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x01 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9B6, main 83:AE81 (rótulo do censo hoganmer). Recurso dono: enemy.oid_01 (recurso da granular-v3, L18; membros 0x01); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 10 execuções verificadas (boomer-kuwanger_1_40070, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sting-chameleon-auto_1_5497, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 12,639 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_01 com peso redistribuído (40 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x01 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9B6, main 83:AE81 (census label hoganmer). Owning feature: enemy.oid_01 (granular-v3 feature, L18; members 0x01); E36: shootable; placed (stage lists). Runtime coverage: ran in 10 verified runs (boomer-kuwanger_1_40070, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sting-chameleon-auto_1_5497, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 12,639 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_01 with redistributed weight (40 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x01",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x02",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x02 — identidade e cobertura",
        "en": "Census object 0x02 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x02.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x02 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9BB, main 81:B516 (rótulo do censo chillPingu). Recurso dono: boss.chill-penguin (únicos ids de inimigo ativos no $1F0C f16125 de chill-penguin-new-game, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Cobertura de runtime: rodou em 3 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296), 16,087 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x02 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9BB, main 81:B516 (census label chillPingu). Owning feature: boss.chill-penguin (only enemy ids active at $1F0C f16125 of chill-penguin-new-game, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Runtime coverage: ran in 3 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296), 16,087 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x02",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x03",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x03 — identidade e cobertura",
        "en": "Census object 0x03 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x03.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x03 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9C0, main 84:AE47 (rótulo do censo slimVolt). Recurso dono: boss.thunder-slimer (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 2 execuções verificadas (spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 5,078 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x03 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9C0, main 84:AE47 (census label slimVolt). Owning feature: boss.thunder-slimer (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 2 verified runs (spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 5,078 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x03",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x05",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x05 — identidade e cobertura",
        "en": "Census object 0x05 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x05.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x05 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9CA, main 87:8A7E (rótulo do censo flammingle). Recurso dono: boss.boomer-kuwanger (únicos ids de inimigo ativos no $1F0C f36858 de boomer-kuwanger, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Cobertura de runtime: rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, sigma1-zero-arm_2_35588), 9,102 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x05 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9CA, main 87:8A7E (census label flammingle). Owning feature: boss.boomer-kuwanger (only enemy ids active at $1F0C f36858 of boomer-kuwanger, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Runtime coverage: ran in 2 verified runs (boomer-kuwanger_1_40070, sigma1-zero-arm_2_35588), 9,102 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x05",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x06",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x06 — identidade e cobertura",
        "en": "Census object 0x06 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x06.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x06 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9CF, main 81:C24B (rótulo do censo boomerKuwanger). Recurso dono: enemy.oid_06 (recurso da granular-v3, L18; membros 0x06); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 3 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 4,211 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_06 com peso redistribuído (14 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x06 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9CF, main 81:C24B (census label boomerKuwanger). Owning feature: enemy.oid_06 (granular-v3 feature, L18; members 0x06); E36: shootable; placed (stage lists). Runtime coverage: ran in 3 verified runs (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 4,211 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_06 with redistributed weight (14 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x06",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x07",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x07 — identidade e cobertura",
        "en": "Census object 0x07 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x07.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x07 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9D4, main 81:C433 (rótulo do censo planty). Recurso dono: boss.launch-octopus (únicos ids de inimigo ativos no $1F0C f26872 de launch-octopus-and-sting-flooded, knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json). Cobertura de runtime: rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 10,127 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x07 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9D4, main 81:C433 (census label planty). Owning feature: boss.launch-octopus (only enemy ids active at $1F0C f26872 of launch-octopus-and-sting-flooded, knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json). Runtime coverage: ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 10,127 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x07",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x08",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x08 — identidade e cobertura",
        "en": "Census object 0x08 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x08.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x08 de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9D9, main 81:CB06 (rótulo do censo lunchOctopus). Recurso dono: boss.launch-octopus. E36: filho da 0x07, com o subtipo copiado do +$0B da 0x07 (sítios 81:C8F6 JSL.L loadEnitySlotBase; 81:C8FF LDA.B #$08; 81:C901 STA.W $000A,X; 81:C906 STA.W $000B,X); o dono da 0x07 é o boss.launch-octopus (L15); a única escrita da 0x08 na tabela de inimigos é a da 0x07. A linha do censo do pai (census.0x07.ownership) está verificada com dono boss.launch-octopus. Cobertura de runtime (E35): rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 1,280 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x08 of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9D9, main 81:CB06 (census label lunchOctopus). Owning feature: boss.launch-octopus. E36: child of 0x07, subtype copied from 0x07's +$0B (sites 81:C8F6 JSL.L loadEnitySlotBase; 81:C8FF LDA.B #$08; 81:C901 STA.W $000A,X; 81:C906 STA.W $000B,X); 0x07 is boss.launch-octopus's owner (L15); the only enemy-table write of 0x08 is 0x07's. The parent's census row (census.0x07.ownership) is verified with owner boss.launch-octopus. Runtime coverage (E35): ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 1,280 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x08",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x0a",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x0A — identidade e cobertura",
        "en": "Census object 0x0A — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x0a.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x0A de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9E3, main 88:853E (rótulo do censo stingCameleon). Recurso dono: boss.sting-chameleon. E36: é um Maverick: alcança a rotina compartilhada de chefe 84:A677 (STZ w_bossDefeatInvFlag $1F0C em 84:AA56), que só 0x02 0x05 0x07 0x0A 0x0C 0x14 0x31 0x52 0x65 alcançam; posicionado em sting-chameleon (entrada 74) e sigma-3 (entrada 23): é o único id de 84:A677 da fase SC, e o seu posicionamento de revanche na sigma-3. Cobertura de runtime (E35): rodou em 2 execuções verificadas (sigma3_2_26312, sting-chameleon_1_25606), 6,352 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x0A of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9E3, main 88:853E (census label stingCameleon). Owning feature: boss.sting-chameleon. E36: a Maverick: it reaches the shared boss routine 84:A677 (STZ w_bossDefeatInvFlag $1F0C at 84:AA56), which only 0x02 0x05 0x07 0x0A 0x0C 0x14 0x31 0x52 0x65 reach; placed at sting-chameleon entry 74 and sigma-3 entry 23: the SC stage's only 84:A677 id, and its sigma-3 rematch placement. Runtime coverage (E35): ran in 2 verified runs (sigma3_2_26312, sting-chameleon_1_25606), 6,352 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x0A",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x0c",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x0C — identidade e cobertura",
        "en": "Census object 0x0C — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x0c.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x0C de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9ED, main 87:91A7 (rótulo do censo mammoth). Recurso dono: boss.flame-mammoth (únicos ids de inimigo ativos no $1F0C f20359 de flame-mammoth-lava, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Cobertura de runtime: rodou em 3 execuções verificadas (flame-mammoth-lava_2_23048, flame-mammoth_2_30151, sigma3_2_26312), 14,231 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x0C of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9ED, main 87:91A7 (census label mammoth). Owning feature: boss.flame-mammoth (only enemy ids active at $1F0C f20359 of flame-mammoth-lava, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Runtime coverage: ran in 3 verified runs (flame-mammoth-lava_2_23048, flame-mammoth_2_30151, sigma3_2_26312), 14,231 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x0C",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x0d",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x0D — identidade e cobertura",
        "en": "Census object 0x0D — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x0d.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x0D de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9F2, main 88:8F2A (rótulo do censo rushRoader). Recurso dono: enemy.oid_0d (recurso da granular-v3, L18; membros 0x0D); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 3 execuções verificadas (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_0d com peso redistribuído (22 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x0D of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9F2, main 88:8F2A (census label rushRoader). Owning feature: enemy.oid_0d (granular-v3 feature, L18; members 0x0D); E36: shootable; placed (stage lists). Runtime coverage: ran in 3 verified runs (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 3,343 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_0d with redistributed weight (22 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x0D",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x0e",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x0E — identidade e cobertura",
        "en": "Census object 0x0E — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x0e.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x0E de 80:F8DD mainEventTable (JMP 80:D544), stub 80F9F7, main 82:95A4 (rótulo do censo mammothTrunk). Recurso dono: boss.flame-mammoth (únicos ids de inimigo ativos no $1F0C f20359 de flame-mammoth-lava, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Cobertura de runtime: rodou em 3 execuções verificadas (flame-mammoth-lava_2_23048, flame-mammoth_2_30151, sigma3_2_26312), 13,429 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui. Julgamento (E35, aceito pelo coordenador): a 0x0E divide a derrota do Flame Mammoth com a 0x0C (as duas são os únicos ids de inimigo ativos no $1F0C f20359 de flame-mammoth-lava), então é creditada ao recurso do Flame Mammoth, como a 0x0C.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x0E of 80:F8DD mainEventTable (JMP 80:D544), stub 80F9F7, main 82:95A4 (census label mammothTrunk). Owning feature: boss.flame-mammoth (only enemy ids active at $1F0C f20359 of flame-mammoth-lava, knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json). Runtime coverage: ran in 3 verified runs (flame-mammoth-lava_2_23048, flame-mammoth_2_30151, sigma3_2_26312), 13,429 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here. Judgment (E35, accepted by the coordinator): 0x0E shares Flame Mammoth's defeat with 0x0C (both are the only enemy ids active at $1F0C f20359 of flame-mammoth-lava), so it is credited to Flame Mammoth's feature, as 0x0C is."
          }
        }
      ],
      "sourceOid": "0x0E",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x10",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x10 — identidade e cobertura",
        "en": "Census object 0x10 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x10.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x10 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA01, main 81:D2DF (rótulo do censo sineFaller). Recurso dono: enemy.oid_10 (recurso da granular-v3, L18; membros 0x10); E36: shootable; made by finder-2 emitter 0x05 (table 80:F59A). Cobertura de runtime: rodou em 5 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_10 com peso redistribuído (26 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x10 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA01, main 81:D2DF (census label sineFaller). Owning feature: enemy.oid_10 (granular-v3 feature, L18; members 0x10); E36: shootable; made by finder-2 emitter 0x05 (table 80:F59A). Runtime coverage: ran in 5 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312), 5,325 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_10 with redistributed weight (26 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x10",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x11",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x11 — identidade e cobertura",
        "en": "Census object 0x11 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x11.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x11 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA06, main 81:D551 (rótulo do censo roadAttacker). Recurso dono: enemy.oid_11 (recurso da granular-v3, L18; membros 0x11, 0x1A, 0x12, 0x1B); E36: shootable; placed in the intro, also made by 0x1A; makes 0x12 and 0x1B. Cobertura de runtime: rodou em 1 execuções verificadas (intro-highway_1_15577), 3,146 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_11 com peso redistribuído (61 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x11 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA06, main 81:D551 (census label roadAttacker). Owning feature: enemy.oid_11 (granular-v3 feature, L18; members 0x11, 0x1A, 0x12, 0x1B); E36: shootable; placed in the intro, also made by 0x1A; makes 0x12 and 0x1B. Runtime coverage: ran in 1 verified runs (intro-highway_1_15577), 3,146 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_11 with redistributed weight (61 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x11",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x12",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x12 — identidade e cobertura",
        "en": "Census object 0x12 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x12.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x12 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA0B, main 81:DCD0 (rótulo do censo ). Recurso dono: enemy.oid_11 (recurso da granular-v3, L18; membros 0x11, 0x1A, 0x12, 0x1B); E36: child of 0x11, not shootable. Cobertura de runtime: rodou em 1 execuções verificadas (intro-highway_1_15577), 3,142 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_11 com peso redistribuído (61 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x12 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA0B, main 81:DCD0 (census label ). Owning feature: enemy.oid_11 (granular-v3 feature, L18; members 0x11, 0x1A, 0x12, 0x1B); E36: child of 0x11, not shootable. Runtime coverage: ran in 1 verified runs (intro-highway_1_15577), 3,142 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_11 with redistributed weight (61 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x12",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x13",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x13 — identidade e cobertura",
        "en": "Census object 0x13 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x13.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x13 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA10, main 82:99A6 (rótulo do censo dodgeBlaster). Recurso dono: enemy.oid_13 (recurso da granular-v3, L18; membros 0x13); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_13 com peso redistribuído (34 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x13 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA10, main 82:99A6 (census label dodgeBlaster). Owning feature: enemy.oid_13 (granular-v3 feature, L18; members 0x13); E36: shootable; placed (stage lists). Runtime coverage: ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296), 13,108 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_13 with redistributed weight (34 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x13",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x14",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x14 — identidade e cobertura",
        "en": "Census object 0x14 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x14.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x14 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA15, main 83:B144 (rótulo do censo armadillo). Recurso dono: boss.armored-armadillo (únicos ids de inimigo ativos no $1F0C f11646 de armored-armadillo, knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json). Cobertura de runtime: rodou em 2 execuções verificadas (armored-armadillo_1_15055, sigma3_2_26312), 5,882 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x14 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA15, main 83:B144 (census label armadillo). Owning feature: boss.armored-armadillo (only enemy ids active at $1F0C f11646 of armored-armadillo, knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json). Runtime coverage: ran in 2 verified runs (armored-armadillo_1_15055, sigma3_2_26312), 5,882 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x14",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x16",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x16 — identidade e cobertura",
        "en": "Census object 0x16 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x16.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, rastreio do criador em 27 gravações inteiras com WRAM igual; regra do L16): tipo e tabela: OID 0x16 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA1F, main 87:9794 (rótulo do censo floatPlatform). Recurso dono: object.moving-platforms, pela decisão do coordenador de 2026-09-26 sobre a decisão 2, cujo teste é o comportamento: a rotina da 0x16 chega a 84:AB81, onde 84:AB94-84:ABA9 somam o movimento do próprio objeto ($05 - $22, $08 - $24) a w_player_xPos e w_player_yPos, então ela carrega o X na superfície; o passo verificado de object.moving-platforms do O1 cita 87:9794, o main da 0x16; não se exige a mesma rotina de 82:C715 (alcançada por 0x3F, 0x48, 0x3D). Todo nascimento da 0x16 é um posicionamento da lista de BK ou sigma-2 (slot +$0C = seu registro de WRAM); as outras escritas desse valor são de outros finders (83:A27F projétil, 83:D725 e 83:EE93 tiro inimigo). Cobertura de runtime: rodou em 3 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma2_2_41296) (E35); o S31 rastreou os seus 22 nascimentos em 3 gravações (todos os 22 posicionamentos das listas das fases), com WRAM igual em todos os quadros de cada uma. Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-26 (card S31, creator trace over 27 WRAM-equal whole takes; L16's rule): type and table: OID 0x16 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA1F, main 87:9794 (census label floatPlatform). Owning feature: object.moving-platforms, by the coordinator's ruling of 2026-09-26 on decision 2, whose test is behaviour: 0x16's routine reaches 84:AB81, where 84:AB94-84:ABA9 add the object's own movement ($05 - $22, $08 - $24) to w_player_xPos and w_player_yPos, so it carries X on its surface; O1's verified moving-platforms step names 87:9794, 0x16's main; the same routine as 82:C715 (reached by 0x3F, 0x48, 0x3D) is not required. Every 0x16 birth is a placement of the BK or sigma-2 list (slot +$0C = its WRAM record); the other writes of the value are other finders' (83:A27F projectile, 83:D725 and 83:EE93 enemy shot). Runtime coverage: ran in 3 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma2_2_41296) (E35); S31 traced its 22 births in 3 takes (all 22 placements of the stage lists), WRAM equal on every frame of each. Not a new family: the owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x16",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x17",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x17 — identidade e cobertura",
        "en": "Census object 0x17 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x17.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x17 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA24, main 87:9944 (rótulo do censo turnCanon). Recurso dono: enemy.oid_17 (recurso da granular-v3, L18; membros 0x17); E36: shootable; placed in 5 stages, also carried by 0x16. Cobertura de runtime: rodou em 7 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_17 com peso redistribuído (109 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x17 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA24, main 87:9944 (census label turnCanon). Owning feature: enemy.oid_17 (granular-v3 feature, L18; members 0x17); E36: shootable; placed in 5 stages, also carried by 0x16. Runtime coverage: ran in 7 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma2_2_41296, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 69,949 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_17 with redistributed weight (109 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x17",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x18",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x18 — identidade e cobertura",
        "en": "Census object 0x18 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x18.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x18 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA29, main 83:BBD2 (rótulo do censo fallingRocks). Recurso dono: enemy.oid_18 (recurso da granular-v3, L18; membros 0x18); E36: shootable; placed in SC, also made by enemy shot 0x0D's handler (80:F320 index 0x0D), a shot only 0x22 writes. Cobertura de runtime: rodou em 3 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 23,385 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_18 com peso redistribuído (41 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x18 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA29, main 83:BBD2 (census label fallingRocks). Owning feature: enemy.oid_18 (granular-v3 feature, L18; members 0x18); E36: shootable; placed in SC, also made by enemy shot 0x0D's handler (80:F320 index 0x0D), a shot only 0x22 writes. Runtime coverage: ran in 3 verified runs (launch-octopus-and-sting-flooded_2_38342, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 23,385 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_18 with redistributed weight (41 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x18",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x1a",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x1A — identidade e cobertura",
        "en": "Census object 0x1A — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x1a.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x1A de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA33, main 88:93A4 (rótulo do censo roadAttackDeploy). Recurso dono: enemy.oid_11 (recurso da granular-v3, L18; membros 0x11, 0x1A, 0x12, 0x1B); E36: not shootable; made by finder-2 emitter 0x0E in the intro; makes 0x11 and 0x3C. Cobertura de runtime: rodou em 1 execuções verificadas (intro-highway_1_15577), 5,508 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_11 com peso redistribuído (61 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x1A of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA33, main 88:93A4 (census label roadAttackDeploy). Owning feature: enemy.oid_11 (granular-v3 feature, L18; members 0x11, 0x1A, 0x12, 0x1B); E36: not shootable; made by finder-2 emitter 0x0E in the intro; makes 0x11 and 0x3C. Runtime coverage: ran in 1 verified runs (intro-highway_1_15577), 5,508 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_11 with redistributed weight (61 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x1A",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x1b",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x1B — identidade e cobertura",
        "en": "Census object 0x1B — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x1b.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x1B de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA38, main 82:A0E5 (rótulo do censo ). Recurso dono: enemy.oid_11 (recurso da granular-v3, L18; membros 0x11, 0x1A, 0x12, 0x1B); E36: child of 0x11, not shootable. Cobertura de runtime: rodou em 1 execuções verificadas (intro-highway_1_15577), 676 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_11 com peso redistribuído (61 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x1B of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA38, main 82:A0E5 (census label ). Owning feature: enemy.oid_11 (granular-v3 feature, L18; members 0x11, 0x1A, 0x12, 0x1B); E36: child of 0x11, not shootable. Runtime coverage: ran in 1 verified runs (intro-highway_1_15577), 676 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_11 with redistributed weight (61 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x1B",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x1c",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x1C — identidade e cobertura",
        "en": "Census object 0x1C — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x1c.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x1C de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA3D, main 82:A190 (rótulo do censo seaAttacker). Recurso dono: enemy.oid_1c (recurso da granular-v3, L18; membros 0x1C); E36: shootable; made by finder-2 emitter 0x0F's routine (state table 82:FB8A) in LO. Cobertura de runtime: rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_1c com peso redistribuído (12 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x1C of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA3D, main 82:A190 (census label seaAttacker). Owning feature: enemy.oid_1c (granular-v3 feature, L18; members 0x1C); E36: shootable; made by finder-2 emitter 0x0F's routine (state table 82:FB8A) in LO. Runtime coverage: ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,454 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_1c with redistributed weight (12 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x1C",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x1d",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x1D — identidade e cobertura",
        "en": "Census object 0x1D — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x1d.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x1D de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA42, main 82:A341 (rótulo do censo gulpferd). Recurso dono: enemy.oid_1d (recurso da granular-v3, L18; membros 0x1D); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 5,381 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_1d com peso redistribuído (35 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x1D of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA42, main 82:A341 (census label gulpferd). Owning feature: enemy.oid_1d (granular-v3 feature, L18; members 0x1D); E36: shootable; placed (stage lists). Runtime coverage: ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, sigma3_2_26312), 5,381 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_1d with redistributed weight (35 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x1D",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x1e",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x1E — identidade e cobertura",
        "en": "Census object 0x1E — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x1e.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x1E de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA47, main 82:A7DB (rótulo do censo madPeker). Recurso dono: enemy.oid_1e (recurso da granular-v3, L18; membros 0x1E, 0x1F); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 1,508 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_1e com peso redistribuído (19 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x1E of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA47, main 82:A7DB (census label madPeker). Owning feature: enemy.oid_1e (granular-v3 feature, L18; members 0x1E, 0x1F); E36: shootable; placed (stage lists). Runtime coverage: ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 1,508 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_1e with redistributed weight (19 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x1E",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x1f",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x1F — identidade e cobertura",
        "en": "Census object 0x1F — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x1f.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x1F de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA4C, main 82:A990 (rótulo do censo creeper). Recurso dono: enemy.oid_1e (recurso da granular-v3, L18; membros 0x1E, 0x1F); E36: shootable child of 0x1E. Cobertura de runtime: rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 1,672 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_1e com peso redistribuído (19 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x1F of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA4C, main 82:A990 (census label creeper). Owning feature: enemy.oid_1e (granular-v3 feature, L18; members 0x1E, 0x1F); E36: shootable child of 0x1E. Runtime coverage: ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 1,672 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_1e with redistributed weight (19 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x1F",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x20",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x20 — identidade e cobertura",
        "en": "Census object 0x20 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x20.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x20 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA51, main 82:AAD7 (rótulo do censo amenHopper). Recurso dono: enemy.oid_20 (recurso da granular-v3, L18; membros 0x20); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 4 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_20 com peso redistribuído (28 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x20 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA51, main 82:AAD7 (census label amenHopper). Owning feature: enemy.oid_20 (granular-v3 feature, L18; members 0x20); E36: shootable; placed (stage lists). Runtime coverage: ran in 4 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 5,296 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_20 with redistributed weight (28 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x20",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x21",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x21 — identidade e cobertura",
        "en": "Census object 0x21 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x21.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x21 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA56, main 82:AE18 (rótulo do censo angler). Recurso dono: boss.lo-midboss-0x21 (recurso da granular-v3, L18; membros 0x21); E36: shootable, placed twice in LO, fires enemy shot 0x0F. Cobertura de runtime: rodou em 2 execuções verificadas (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,307 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou boss.lo-midboss-0x21 com peso redistribuído (78 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x21 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA56, main 82:AE18 (census label angler). Owning feature: boss.lo-midboss-0x21 (granular-v3 feature, L18; members 0x21); E36: shootable, placed twice in LO, fires enemy shot 0x0F. Runtime coverage: ran in 2 verified runs (launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717), 3,307 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added boss.lo-midboss-0x21 with redistributed weight (78 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x21",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x22",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x22 — identidade e cobertura",
        "en": "Census object 0x22 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x22.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x22 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA5B, main 82:B896 (rótulo do censo beeBlader). Recurso dono: boss.highway-giant-bee (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (intro-highway_1_15577), 1,213 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x22 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA5B, main 82:B896 (census label beeBlader). Owning feature: boss.highway-giant-bee (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (intro-highway_1_15577), 1,213 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x22",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x26",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x26 — identidade e cobertura",
        "en": "Census object 0x26 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x26.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x26 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA6F, main 82:C83A (rótulo do censo velguarderDog). Recurso dono: boss.velguarder (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma4-final-not-beaten_2_37016), 9,390 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x26 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA6F, main 82:C83A (census label velguarderDog). Owning feature: boss.velguarder (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma4-final-not-beaten_2_37016), 9,390 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x26",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x28",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x28 — identidade e cobertura",
        "en": "Census object 0x28 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x28.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x28 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA79, main 82:D520 (rótulo do censo cruizler). Recurso dono: boss.submarine, candidato a dono do E35 a partir do B2; a alternativa do B2 (o submarino é a 0x28 ou a 0x21) fica decidida pela granular-v3, que dá à 0x21 o próprio recurso boss.lo-midboss-0x21 (L18); em launch-octopus-and-sting-flooded_2_38342 a 0x21 vive em f3472..6768 e a 0x28 em f7348..10402, encontros separados (E35). Cobertura de runtime: rodou em 1 execuções verificadas (launch-octopus-and-sting-flooded_2_38342), 3,055 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Não é família nova: boss.submarine é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x28 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA79, main 82:D520 (census label cruizler). Owning feature: boss.submarine, E35's owner candidate from B2; B2's alternative (the submarine is 0x28 or 0x21) is decided by granular-v3, which gives 0x21 its own feature boss.lo-midboss-0x21 (L18); in launch-octopus-and-sting-flooded_2_38342 0x21 is alive f3472..6768 and 0x28 f7348..10402, separate encounters (E35). Runtime coverage: ran in 1 verified runs (launch-octopus-and-sting-flooded_2_38342), 3,055 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). Not a new family: boss.submarine is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x28",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x2b",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x2B — identidade e cobertura",
        "en": "Census object 0x2B — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x2b.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x2B de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA88, main 88:97BA (rótulo do censo mineCart). Recurso dono: stage.armored-armadillo. E36: objeto de cenário: posicionado em uma só fase, não alcança a rotina de acerto de inimigo 84:9B43 (posicionado só em armored-armadillo (entradas 1, 24, 125); a 84:9B43 é a bossHealthupdate_hitDetect, alcançada pelos 17 ids de família, e um id que não a alcança não pode sofrer dano); objeto de cenário vai para a fase (regra do card). Teste de objeto de cenário (decisão do coordenador, 2026-09-25 14:05): posicionado na lista de uma só fase e sem nunca alcançar 84:9B43, então não pode sofrer dano: objeto de cenário de uma fase, ligado ao recurso dessa fase. Cobertura de runtime (E35): rodou em 2 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055), 3,983 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x2B of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA88, main 88:97BA (census label mineCart). Owning feature: stage.armored-armadillo. E36: stage prop: placed in one stage only, does not reach the enemy hit routine 84:9B43 (placed at armored-armadillo entries 1, 24, 125 only; 84:9B43 is bossHealthupdate_hitDetect, reached by all 17 family ids, and an id that does not reach it cannot be damaged); a stage prop goes to the stage (card rule). Prop test (coordinator decision 2026-09-25 14:05): placed in one stage's list only and never reaching 84:9B43, so it cannot be damaged: a one-stage prop, linked to that stage's feature. Runtime coverage (E35): ran in 2 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055), 3,983 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x2B",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x2c",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x2C — identidade e cobertura",
        "en": "Census object 0x2C — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x2c.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x2C de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA8D, main 83:BF44 (rótulo do censo moleBorer). Recurso dono: boss.armadillo-digging-machines (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 2 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055), 3,688 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x2C of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA8D, main 83:BF44 (census label moleBorer). Owning feature: boss.armadillo-digging-machines (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 2 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055), 3,688 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x2C",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x2f",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x2F — identidade e cobertura",
        "en": "Census object 0x2F — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x2f.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x2F de 80:F8DD mainEventTable (JMP 80:D544), stub 80FA9C, main 83:C5AB (rótulo do censo armorSoldir). Recurso dono: enemy.oid_2f (recurso da granular-v3, L18; membros 0x2F); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 4 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, sting-chameleon_1_25606), 3,812 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_2f com peso redistribuído (34 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x2F of 80:F8DD mainEventTable (JMP 80:D544), stub 80FA9C, main 83:C5AB (census label armorSoldir). Owning feature: enemy.oid_2f (granular-v3 feature, L18; members 0x2F); E36: shootable; placed (stage lists). Runtime coverage: ran in 4 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010, sigma2_2_41296, sting-chameleon_1_25606), 3,812 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_2f with redistributed weight (34 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x2F",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x30",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x30 — identidade e cobertura",
        "en": "Census object 0x30 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x30.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x30 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAA1, main 83:CE03 (rótulo do censo digLouber). Recurso dono: enemy.oid_30 (recurso da granular-v3, L18; membros 0x30); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 7 execuções verificadas (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_30 com peso redistribuído (48 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x30 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAA1, main 83:CE03 (census label digLouber). Owning feature: enemy.oid_30 (granular-v3 feature, L18; members 0x30); E36: shootable; placed (stage lists). Runtime coverage: ran in 7 verified runs (armored-armadillo-auto_1_7731, armored-armadillo_1_15055, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104, sigma2_2_41296, sigma3_2_26312), 15,106 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_30 with redistributed weight (48 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x30",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x31",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x31 — identidade e cobertura",
        "en": "Census object 0x31 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x31.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x31 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAA6, main 88:9BE1 (rótulo do censo sparkMandrill). Recurso dono: boss.spark-mandrill. E36: é um Maverick: alcança a rotina compartilhada de chefe 84:A677 (STZ w_bossDefeatInvFlag $1F0C em 84:AA56), que só 0x02 0x05 0x07 0x0A 0x0C 0x14 0x31 0x52 0x65 alcançam; posicionado em spark-mandrill (entrada 94) e sigma-3 (entrada 36): é o único id de 84:A677 da fase SM, e o seu posicionamento de revanche na sigma-3. Cobertura de runtime (E35): rodou em 3 execuções verificadas (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 5,436 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x31 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAA6, main 88:9BE1 (census label sparkMandrill). Owning feature: boss.spark-mandrill. E36: a Maverick: it reaches the shared boss routine 84:A677 (STZ w_bossDefeatInvFlag $1F0C at 84:AA56), which only 0x02 0x05 0x07 0x0A 0x0C 0x14 0x31 0x52 0x65 reach; placed at spark-mandrill entry 94 and sigma-3 entry 36: the SM stage's only 84:A677 id, and its sigma-3 rematch placement. Runtime coverage (E35): ran in 3 verified runs (sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 5,436 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x31",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x32",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x32 — identidade e cobertura",
        "en": "Census object 0x32 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x32.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x32 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAAB, main 83:CF70 (rótulo do censo mechVile). Recurso dono: boss.vile-intro (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (intro-highway_1_15577), 2,257 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x32 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAAB, main 83:CF70 (census label mechVile). Owning feature: boss.vile-intro (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (intro-highway_1_15577), 2,257 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x32",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x33",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x33 — identidade e cobertura",
        "en": "Census object 0x33 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x33.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x33 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAB0, main 88:A382 (rótulo do censo zero). Recurso dono: boss.vile-intro. E36: criado pela 0x32 na abertura; escreve $1F9B = 4 em 88:A700 (B2: encerra a abertura); também posicionado na sigma-1 (sítios 83:D78A JSL.L loadEnitySlotBase; 83:D793 LDA.B #$33; 83:D795 STA.W $000A,X; 88:A700 STA.W w_intro_levelClearFlag; posicionado em sigma-1 (entradas 2, 3)); o dono da 0x32 é o boss.vile-intro (B2); dono alternativo para a cena da sigma-1: campaign.intro-story. A linha do censo do pai (census.0x32.ownership) está verificada com dono boss.vile-intro. Decisão do coordenador (2026-09-25 14:05): ligado ao boss.vile-intro, como o E36 escolheu; o campaign.intro-story fica anotado como o dono alternativo. Cobertura de runtime (E35): rodou em 4 execuções verificadas (armored-armadillo_1_15055, flame-mammoth_2_30151, intro-highway_1_15577, sigma1-zero-arm_2_35588), 3,819 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x33 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAB0, main 88:A382 (census label zero). Owning feature: boss.vile-intro. E36: created by 0x32 in the opening; writes $1F9B = 4 at 88:A700 (B2: ends the opening); also placed in sigma-1 (sites 83:D78A JSL.L loadEnitySlotBase; 83:D793 LDA.B #$33; 83:D795 STA.W $000A,X; 88:A700 STA.W w_intro_levelClearFlag; placed at sigma-1 entries 2, 3); 0x32 is boss.vile-intro's owner (B2); alternative owner for the sigma-1 scene: campaign.intro-story. The parent's census row (census.0x32.ownership) is verified with owner boss.vile-intro. Coordinator decision (2026-09-25 14:05): linked to boss.vile-intro, as E36 chose; campaign.intro-story is noted as the alternative owner. Runtime coverage (E35): ran in 4 verified runs (armored-armadillo_1_15055, flame-mammoth_2_30151, intro-highway_1_15577, sigma1-zero-arm_2_35588), 3,819 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x33",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x34",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x34 — identidade e cobertura",
        "en": "Census object 0x34 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x34.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x34 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAB5, main 83:D85C (rótulo do censo cragMan). Recurso dono: enemy.oid_34 (recurso da granular-v3, L18; membros 0x34); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 2 execuções verificadas (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 2,923 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_34 com peso redistribuído (17 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x34 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAB5, main 83:D85C (census label cragMan). Owning feature: enemy.oid_34 (granular-v3 feature, L18; members 0x34); E36: shootable; placed (stage lists). Runtime coverage: ran in 2 verified runs (sting-chameleon-auto_1_5497, sting-chameleon_1_25606), 2,923 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_34 with redistributed weight (17 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x34",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x35",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x35 — identidade e cobertura",
        "en": "Census object 0x35 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x35.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x35 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FABA, main 83:DB9B (rótulo do censo metalWing). Recurso dono: enemy.oid_35 (recurso da granular-v3, L18; membros 0x35); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 1 execuções verificadas (armored-armadillo_1_15055), 2,882 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_35 com peso redistribuído (17 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x35 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FABA, main 83:DB9B (census label metalWing). Owning feature: enemy.oid_35 (granular-v3 feature, L18; members 0x35); E36: shootable; placed (stage lists). Runtime coverage: ran in 1 verified runs (armored-armadillo_1_15055), 2,882 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_35 with redistributed weight (17 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x35",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x36",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x36 — identidade e cobertura",
        "en": "Census object 0x36 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x36.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x36 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FABF, main 83:DD67 (rótulo do censo jamminger). Recurso dono: enemy.oid_36 (recurso da granular-v3, L18; membros 0x36); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 7 execuções verificadas (boomer-kuwanger_1_40070, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, items-collection_2_15104, sigma1-zero-arm_2_35588, sting-chameleon_1_25606), 4,697 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_36 com peso redistribuído (37 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x36 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FABF, main 83:DD67 (census label jamminger). Owning feature: enemy.oid_36 (granular-v3 feature, L18; members 0x36); E36: shootable; placed (stage lists). Runtime coverage: ran in 7 verified runs (boomer-kuwanger_1_40070, chill-penguin-new-game_1_21068, chill-penguin_2_19010, intro-highway_1_15577, items-collection_2_15104, sigma1-zero-arm_2_35588, sting-chameleon_1_25606), 4,697 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_36 with redistributed weight (37 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x36",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x37",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x37 — identidade e cobertura",
        "en": "Census object 0x37 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x37.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x37 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAC4, main 87:A45F (rótulo do censo hotarion). Recurso dono: enemy.oid_37 (recurso da granular-v3, L18; membros 0x37); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 2 execuções verificadas (spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 1,777 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_37 com peso redistribuído (25 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x37 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAC4, main 87:A45F (census label hotarion). Owning feature: enemy.oid_37 (granular-v3 feature, L18; members 0x37); E36: shootable; placed (stage lists). Runtime coverage: ran in 2 verified runs (spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 1,777 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_37 with redistributed weight (25 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x37",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x38",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x38 — identidade e cobertura",
        "en": "Census object 0x38 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x38.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/stages/storm-eagle/spawn_census.json",
            "knowledge_base/mmx1/rom/census_0x38_0x4a_2026-09-26.json",
            "tools/tests/test_census_0x38_0x4a.py",
            "docs/tasks/done/S31-population-owners-by-creator.md",
            "docs/tasks/done/AU1a-audit-steps-with-three-cards.md"
          ],
          "note": {
            "pt": "2026-10-16 (L273; David delegou a decisão: \"faz o que faz sentido com o flamers\"): tipo e tabela: OID 0x38, 83 nascimentos observados, todos ligados a 83:F174/83:E054/83:E104 e, pelo finder-0 0x0F, aos controladores de fase finder-2 0x04 do Storm Eagle (81:FB38, 81:F976/81:F9A8) (O3, census_0x38_0x4a_2026-09-26.json). Dono: stage.storm-eagle.terrain (colisões e perigos locais), pela decisão 2 do S31 (dono pelo comportamento, um recurso que já existe, sem família nova) e pelas decisões 3 e 4 (o filho herda o recurso de quem o cria), como os lasers 0x42/0x43. Só auditoria de completude: os passos do dono não ganham crédito aqui.",
            "en": "2026-10-16 (L273; David delegated the decision: \"faz o que faz sentido com o flamers\"): type and table: OID 0x38, 83 observed births, all traced to 83:F174/83:E054/83:E104 and through finder-0 0x0F to Storm Eagle's finder-2 0x04 stage controllers (81:FB38, 81:F976/81:F9A8) (O3, census_0x38_0x4a_2026-09-26.json). Owner: stage.storm-eagle.terrain (local collisions and hazards), by S31's decision 2 (owner by behaviour, an existing feature, no new family) and decisions 3 and 4 (a child inherits its creator's feature), like the 0x42/0x43 lasers. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x38",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x39",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x39 — identidade e cobertura",
        "en": "Census object 0x39 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x39.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json",
            "knowledge_base/mmx1/rom/handler_gate_flame-mammoth_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json"
          ],
          "note": {
            "en": "ROM-first mode (card L5): table 80F8DD id 0x39 = eventID_conveyor_39_main 83:E1BC (census label conveyor; reads X's position at 83:E2A4, stores X's y at 83:E325, calls update_player_Yspd at 83:E3B9); placed only in FM (list 85:8EBE, 4, param 0). Owner: object.conveyors-water. Coverage: E32 400 of 4,649 calls exact, K8 30,150 of 30,150 frames equal, V6 4 of 4 placements on screen, every on-screen frame exact.",
            "pt": "Modo ROM-first (card L5): tabela 80F8DD id 0x39 = eventID_conveyor_39_main 83:E1BC (rótulo conveyor do censo; lê a posição de X em 83:E2A4, grava o y de X em 83:E325, chama update_player_Yspd em 83:E3B9); colocado só na FM (lista 85:8EBE, 4, param 0). Dono: object.conveyors-water. Cobertura: E32 400 de 4.649 chamadas exatas, K8 30.150 de 30.150 quadros iguais, V6 4 de 4 colocações na tela, todo quadro na tela exato."
          }
        }
      ],
      "sourceOid": "0x39",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x3a",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x3A — identidade e cobertura",
        "en": "Census object 0x3A — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x3a.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x3A de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAD3, main 83:E404 (rótulo do censo tomBot). Recurso dono: enemy.oid_57 (recurso da granular-v3, L18; membros 0x57, 0x3A); E36: shootable; placed in CP, also made by 0x57. Cobertura de runtime: rodou em 2 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010), 538 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_57 com peso redistribuído (22 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x3A of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAD3, main 83:E404 (census label tomBot). Owning feature: enemy.oid_57 (granular-v3 feature, L18; members 0x57, 0x3A); E36: shootable; placed in CP, also made by 0x57. Runtime coverage: ran in 2 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010), 538 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_57 with redistributed weight (22 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x3A",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x3b",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x3B — identidade e cobertura",
        "en": "Census object 0x3B — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x3b.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x3B de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAD8, main 87:A9DF (rótulo do censo ladderJadder). Recurso dono: enemy.oid_3b (recurso da granular-v3, L18; membros 0x3B); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104), 3,747 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_3b com peso redistribuído (15 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x3B of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAD8, main 87:A9DF (census label ladderJadder). Owning feature: enemy.oid_3b (granular-v3 feature, L18; members 0x3B); E36: shootable; placed (stage lists). Runtime coverage: ran in 2 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104), 3,747 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_3b with redistributed weight (15 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x3B",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x3c",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x3C — identidade e cobertura",
        "en": "Census object 0x3C — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x3c.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, rastreio do criador em 27 gravações inteiras com WRAM igual; regra do L16): tipo e tabela: OID 0x3C de 80:F8DD mainEventTable (JMP 80:D544), stub 80FADD, main 87:ABA3 (rótulo do censo textBoxFace). Recurso dono: boss.vile-fortress, boss.vile-intro e enemy.oid_11, o recurso de cada criador (decisão 4: sem pontos novos, os 3 pontos-base da linha são a classificação): 88:D84D chamado por 0x66 e 0x69, 83:EF10 pela 0x67 (boss.vile-fortress); 88:A783 pela 0x33, 83:D851 pela 0x32 (boss.vile-intro); 88:97AB pela 0x1A (enemy.oid_11). Em cada nascimento o criador é o id chamador vivo cujo ponto grava o +$0B do objeto novo (1, 3, tabela 86:D800 = 4 ou 7, tabela 86:CB0E = 0 ou 2, o A do chamador). Cobertura de runtime: rodou em 4 execuções verificadas (armored-armadillo_1_15055, flame-mammoth_2_30151, intro-highway_1_15577, sigma1-zero-arm_2_35588) (E35); o S31 rastreou os seus 20 nascimentos em 5 gravações (88:D84D por 3:0x66 x6, 83:EF10/88:D84D por 3:0x67 x4, 88:D84D por 3:0x66 x4, 88:A783 por 3:0x33 x3, 88:97AB por 3:0x1A x2, 83:D851 por 3:0x32 x1), com WRAM igual em todos os quadros de cada uma. Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-26 (card S31, creator trace over 27 WRAM-equal whole takes; L16's rule): type and table: OID 0x3C of 80:F8DD mainEventTable (JMP 80:D544), stub 80FADD, main 87:ABA3 (census label textBoxFace). Owning feature: boss.vile-fortress, boss.vile-intro and enemy.oid_11, each creator's feature (decision 4: no new points, the row's 3 bp are its classification): 88:D84D called by 0x66 and 0x69, 83:EF10 by 0x67 (boss.vile-fortress); 88:A783 by 0x33, 83:D851 by 0x32 (boss.vile-intro); 88:97AB by 0x1A (enemy.oid_11). Per birth the creator is the caller id alive whose site writes the new object's +$0B (1, 3, table 86:D800 = 4 or 7, table 86:CB0E = 0 or 2, the caller's A). Runtime coverage: ran in 4 verified runs (armored-armadillo_1_15055, flame-mammoth_2_30151, intro-highway_1_15577, sigma1-zero-arm_2_35588) (E35); S31 traced its 20 births in 5 takes (88:D84D by 3:0x66 x6, 83:EF10/88:D84D by 3:0x67 x4, 88:D84D by 3:0x66 x4, 88:A783 by 3:0x33 x3, 88:97AB by 3:0x1A x2, 83:D851 by 3:0x32 x1), WRAM equal on every frame of each. Not a new family: the owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x3C",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x3d",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x3D — identidade e cobertura",
        "en": "Census object 0x3D — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x3d.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x3D de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAE2, main 87:ADD8 (rótulo do censo towerElevator). Recurso dono: stage.boomer-kuwanger. E36: objeto de cenário: posicionado em uma só fase, não alcança a rotina de acerto de inimigo 84:9B43 (posicionado só em boomer-kuwanger (entrada 31); a 84:9B43 é a bossHealthupdate_hitDetect, alcançada pelos 17 ids de família, e um id que não a alcança não pode sofrer dano); objeto de cenário vai para a fase (regra do card). Teste de objeto de cenário (decisão do coordenador, 2026-09-25 14:05): posicionado na lista de uma só fase e sem nunca alcançar 84:9B43, então não pode sofrer dano: objeto de cenário de uma fase, ligado ao recurso dessa fase. Cobertura de runtime (E35): rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104), 18,403 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x3D of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAE2, main 87:ADD8 (census label towerElevator). Owning feature: stage.boomer-kuwanger. E36: stage prop: placed in one stage only, does not reach the enemy hit routine 84:9B43 (placed at boomer-kuwanger entry 31 only; 84:9B43 is bossHealthupdate_hitDetect, reached by all 17 family ids, and an id that does not reach it cannot be damaged); a stage prop goes to the stage (card rule). Prop test (coordinator decision 2026-09-25 14:05): placed in one stage's list only and never reaching 84:9B43, so it cannot be damaged: a one-stage prop, linked to that stage's feature. Runtime coverage (E35): ran in 2 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104), 18,403 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x3D",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x3f",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x3F — identidade e cobertura",
        "en": "Census object 0x3F — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x3f.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x3F de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAEC, main 87:B216 (rótulo do censo slidePlatform). Recurso dono: enemy.oid_3f (recurso da granular-v3, L18; membros 0x3F); E36: shootable; made by finder-2 emitter 0x1E in BK. Cobertura de runtime: rodou em 2 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104), 26,791 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_3f com peso redistribuído (41 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x3F of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAEC, main 87:B216 (census label slidePlatform). Owning feature: enemy.oid_3f (granular-v3 feature, L18; members 0x3F); E36: shootable; made by finder-2 emitter 0x1E in BK. Runtime coverage: ran in 2 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104), 26,791 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_3f with redistributed weight (41 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x3F",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x40",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x40 — identidade e cobertura",
        "en": "Census object 0x40 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x40.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x40 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAF1, main 87:B443 (rótulo do censo spring). Recurso dono: enemy.oid_40 (recurso da granular-v3, L18; membros 0x40); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 1 execuções verificadas (sigma1-zero-arm_2_35588), 1,214 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_40 com peso redistribuído (8 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x40 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAF1, main 87:B443 (census label spring). Owning feature: enemy.oid_40 (granular-v3 feature, L18; members 0x40); E36: shootable; placed (stage lists). Runtime coverage: ran in 1 verified runs (sigma1-zero-arm_2_35588), 1,214 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_40 with redistributed weight (8 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x40",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x42",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x42 — identidade e cobertura",
        "en": "Census object 0x42 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x42.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, rastreio do criador em 27 gravações inteiras com WRAM igual; regra do L16): tipo e tabela: OID 0x42 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FAFB, main 87:B808 (rótulo do censo laser). Recurso dono: stage.boomer-kuwanger.terrain, stage.sigma-1.terrain e stage.sigma-3.terrain, o passo de terreno de cada fase que o posiciona (decisão 2): as rotinas dele e as da filha 0x43 não gravam nada na posição nem na velocidade do X (nem carregar, nem esteira, nem corrente; o 84:9C0E da 0x43 grava a vida do X, dano). Todo nascimento da 0x42 é um posicionamento (slot +$0C = seu registro de WRAM); a única outra escrita, 88:D82E, é do finder 1. Cobertura de runtime: rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312) (E35); o S31 rastreou os seus 32 nascimentos em 5 gravações (todos os 32 posicionamentos das listas das fases), com WRAM igual em todos os quadros de cada uma. Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-26 (card S31, creator trace over 27 WRAM-equal whole takes; L16's rule): type and table: OID 0x42 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FAFB, main 87:B808 (census label laser). Owning feature: stage.boomer-kuwanger.terrain, stage.sigma-1.terrain and stage.sigma-3.terrain, the terrain step of each stage that places it (decision 2): its routines and those of its child 0x43 store nothing to X's position or speed (no carry, conveyor or current; 0x43's 84:9C0E writes X's health, damage). Every 0x42 birth is a placement (slot +$0C = its WRAM record); its only other write, 88:D82E, is finder 1's. Runtime coverage: ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312) (E35); S31 traced its 32 births in 5 takes (all 32 placements of the stage lists), WRAM equal on every frame of each. Not a new family: the owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x42",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x43",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x43 — identidade e cobertura",
        "en": "Census object 0x43 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x43.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, rastreio do criador em 27 gravações inteiras com WRAM igual; regra do L16): tipo e tabela: OID 0x43 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB00, main 87:B91C (rótulo do censo 4WayLaser). Recurso dono: stage.boomer-kuwanger.terrain, stage.sigma-1.terrain, stage.sigma-3.terrain, o dono do seu criador 0x42 (decisão 3: o dono de um filho é o recurso do criador). Todo nascimento é feito pela 0x42 em 87:B8F7 (87:B8EF JSL loadEnitySlotBase, 87:B8F5 LDA #$43), que grava o próprio slot em +$35 (87:B913 TDC, 87:B914 STA $0035,X); em todo nascimento o +$35 aponta uma 0x42 viva. Cobertura de runtime: rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312) (E35); o S31 rastreou os seus 82 nascimentos em 5 gravações (87:B8F7 por 3:0x42 x82), com WRAM igual em todos os quadros de cada uma. Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-26 (card S31, creator trace over 27 WRAM-equal whole takes; L16's rule): type and table: OID 0x43 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB00, main 87:B91C (census label 4WayLaser). Owning feature: stage.boomer-kuwanger.terrain, stage.sigma-1.terrain, stage.sigma-3.terrain, the owner of its creator 0x42 (decision 3: a child's owner is its creator's feature). Every birth is made by 0x42 at 87:B8F7 (87:B8EF JSL loadEnitySlotBase, 87:B8F5 LDA #$43), which stores its own slot in +$35 (87:B913 TDC, 87:B914 STA $0035,X); in every birth +$35 names a live 0x42. Runtime coverage: ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312) (E35); S31 traced its 82 births in 5 takes (87:B8F7 by 3:0x42 x82), WRAM equal on every frame of each. Not a new family: the owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x43",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x44",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x44 — identidade e cobertura",
        "en": "Census object 0x44 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x44.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x44 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB05, main 87:BA72 (rótulo do censo laserTrap). Recurso dono: enemy.oid_44 (recurso da granular-v3, L18; membros 0x44); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 4 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312), 7,148 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_44 com peso redistribuído (22 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x44 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB05, main 87:BA72 (census label laserTrap). Owning feature: enemy.oid_44 (granular-v3 feature, L18; members 0x44); E36: shootable; placed (stage lists). Runtime coverage: ran in 4 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, sigma1-zero-arm_2_35588, sigma3_2_26312), 7,148 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_44 with redistributed weight (22 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x44",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x46",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x46 — identidade e cobertura",
        "en": "Census object 0x46 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x46.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x46 de 80:F8DD mainEventTable (suas 5 entradas na lista de storm-eagle são do finder 3, slots de inimigo $0E68, regra do S30), main 87:BC8B (rótulo do F4 airPortGasTank, citado pelo S30). Recurso dono: enemy.oid_46 (recurso da granular-v3, L18; membros 0x46); S30: 5 entradas do finder 3 nas listas da ROM. Cobertura de runtime: o S30 viu 2 das suas 5 entradas (51, 68) nascerem na posição da ROM em execuções verificadas (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros); as entradas 24, 26, 27 nunca nasceram numa execução verificada. Família nova: a granular-v3 (L18) adicionou enemy.oid_46 com peso redistribuído (7 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x46 of 80:F8DD mainEventTable (its 5 entries in the storm-eagle list are finder 3, enemy slots $0E68, S30's rule), main 87:BC8B (F4 label airPortGasTank, cited by S30). Owning feature: enemy.oid_46 (granular-v3 feature, L18; members 0x46); S30: 5 finder-3 entries in the ROM lists. Runtime coverage: S30 saw 2 of its 5 entries (51, 68) spawn at their ROM position in verified runs (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), WRAM equal on every frame of each (E35 runs: wram_equal = frames); entries 24, 26, 27 never spawned in a verified run. New family: granular-v3 (L18) added enemy.oid_46 with redistributed weight (7 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x46",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x47",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x47 — identidade e cobertura",
        "en": "Census object 0x47 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x47.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x47 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB14, main 87:BD70 (rótulo do censo flamePillar). Recurso dono: stage.flame-mammoth. E36: objeto de cenário: posicionado em uma só fase, não alcança a rotina de acerto de inimigo 84:9B43 (posicionado só em flame-mammoth (entradas 17, 18, 20, 23, 26, 30, 35, 40); a 84:9B43 é a bossHealthupdate_hitDetect, alcançada pelos 17 ids de família, e um id que não a alcança não pode sofrer dano); objeto de cenário vai para a fase (regra do card). Teste de objeto de cenário (decisão do coordenador, 2026-09-25 14:05): posicionado na lista de uma só fase e sem nunca alcançar 84:9B43, então não pode sofrer dano: objeto de cenário de uma fase, ligado ao recurso dessa fase. Cobertura de runtime (E35): rodou em 4 execuções verificadas (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104), 3,578 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x47 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB14, main 87:BD70 (census label flamePillar). Owning feature: stage.flame-mammoth. E36: stage prop: placed in one stage only, does not reach the enemy hit routine 84:9B43 (placed at flame-mammoth entries 17, 18, 20, 23, 26, 30, 35, 40 only; 84:9B43 is bossHealthupdate_hitDetect, reached by all 17 family ids, and an id that does not reach it cannot be damaged); a stage prop goes to the stage (card rule). Prop test (coordinator decision 2026-09-25 14:05): placed in one stage's list only and never reaching 84:9B43, so it cannot be damaged: a one-stage prop, linked to that stage's feature. Runtime coverage (E35): ran in 4 verified runs (flame-mammoth-arm-capsule_1_13555, flame-mammoth-lava_2_23048, flame-mammoth_2_30151, items-collection_2_15104), 3,578 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x47",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x48",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x48 — identidade e cobertura",
        "en": "Census object 0x48 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x48.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x48 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB19, main 87:C07A (rótulo do censo deathRogumerPlatform). Recurso dono: stage.storm-eagle. E36: objeto de cenário: posicionado em uma só fase, não alcança a rotina de acerto de inimigo 84:9B43 (posicionado só em storm-eagle (entrada 97); a 84:9B43 é a bossHealthupdate_hitDetect, alcançada pelos 17 ids de família, e um id que não a alcança não pode sofrer dano); objeto de cenário vai para a fase (regra do card). Teste de objeto de cenário (decisão do coordenador, 2026-09-25 14:05): posicionado na lista de uma só fase e sem nunca alcançar 84:9B43, então não pode sofrer dano: objeto de cenário de uma fase, ligado ao recurso dessa fase. Cobertura de runtime (E35): rodou em 2 execuções verificadas (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 3,407 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x48 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB19, main 87:C07A (census label deathRogumerPlatform). Owning feature: stage.storm-eagle. E36: stage prop: placed in one stage only, does not reach the enemy hit routine 84:9B43 (placed at storm-eagle entry 97 only; 84:9B43 is bossHealthupdate_hitDetect, reached by all 17 family ids, and an id that does not reach it cannot be damaged); a stage prop goes to the stage (card rule). Prop test (coordinator decision 2026-09-25 14:05): placed in one stage's list only and never reaching 84:9B43, so it cannot be damaged: a one-stage prop, linked to that stage's feature. Runtime coverage (E35): ran in 2 verified runs (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 3,407 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x48",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x4a",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x4A — identidade e cobertura",
        "en": "Census object 0x4A — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x4a.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/stages/launch-octopus/spawn_census.json",
            "knowledge_base/mmx1/rom/census_0x38_0x4a_2026-09-26.json",
            "tools/tests/test_census_0x38_0x4a.py",
            "docs/tasks/done/S31-population-owners-by-creator.md"
          ],
          "note": {
            "en": "2026-09-26 O3: all 114 observed births in S31's 27 WRAM-equal takes traced to 84:A455 and their creator slots: enemy.oid_5b 66 (87:ECFE -> es:0x25 -> 83:AE3A), boss.submarine 45 (0x4B, 87:C8D8), enemy.se_drone 3 (0x49, 87:C555). The 0x5B shot creation copies spawn coordinates through +$36/+$38 but never writes +$0C; S31's seven enemy.oid_17 owners were stale-pointer matches. S31 decisions 3-4 permit multiple creator features to share this classification. Existing families only; no family credit duplicated. Bound: unique ROM-write/state-transition matches in the observed end-frame census, not unobserved transient lives.",
            "pt": "2026-09-26 O3: todos os 114 nascimentos observados nas 27 execu??es S31 com WRAM igual ligados a 84:A455 e aos slots criadores: enemy.oid_5b 66 (87:ECFE -> es:0x25 -> 83:AE3A), boss.submarine 45 (0x4B, 87:C8D8), enemy.se_drone 3 (0x49, 87:C555). O tiro de 0x5B copia as coordenadas por +$36/+$38, mas n?o escreve +$0C; os sete donos enemy.oid_17 do S31 vinham de ponteiros antigos. As decis?es 3-4 do S31 permitem v?rios recursos criadores nesta classifica??o. Somente fam?lias existentes, sem duplicar seus pontos. Limite: correspond?ncias ?nicas das escritas/transi??es da ROM no censo ao fim de cada quadro; n?o cobre vidas transit?rias invis?veis entre quadros."
          }
        }
      ],
      "sourceOid": "0x4A",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x4b",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x4B — identidade e cobertura",
        "en": "Census object 0x4B — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x4b.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x4B de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB28, main 87:C75E (rótulo do censo CruizilerMissle). Recurso dono: boss.submarine por meio da 0x28: o E36 chama a 0x4B de tiro da 0x28 (ponto de criação 82:D9BC, LDA #$4B, STA $000A,X) e o dono dela acompanha o da 0x28, decidido aqui para census.0x28. Cobertura de runtime: rodou em 1 execuções verificadas (launch-octopus-and-sting-flooded_2_38342), 13,688 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Não é família nova: boss.submarine é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x4B of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB28, main 87:C75E (census label CruizilerMissle). Owning feature: boss.submarine through 0x28: E36 names 0x4B the shot of 0x28 (creation site 82:D9BC, LDA #$4B, STA $000A,X) and its owner follows 0x28's, decided here for census.0x28. Runtime coverage: ran in 1 verified runs (launch-octopus-and-sting-flooded_2_38342), 13,688 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). Not a new family: boss.submarine is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x4B",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x4c",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x4C — identidade e cobertura",
        "en": "Census object 0x4C — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x4c.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_annotated_2026-09-23.json",
            "knowledge_base/mmx1/rom/handler_gate_flame-mammoth_2026-09-23.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json"
          ],
          "note": {
            "en": "ROM-first mode (card L5): table 80F8DD id 0x4C = eventID_lavaDrip_4c_main 87:C994 (census label lavaDrip; calls findEnemyShotEmptySlot and shuffleGetRNG); placed only in FM (list 85:8EBE, 6, param 0). Owner: object.conveyors-water (environmental hazard). Coverage: E32 400 of 3,610 calls exact, K8 30,150 of 30,150 frames equal, V6 6 of 6 placements on screen, every on-screen frame exact.",
            "pt": "Modo ROM-first (card L5): tabela 80F8DD id 0x4C = eventID_lavaDrip_4c_main 87:C994 (rótulo lavaDrip do censo; chama findEnemyShotEmptySlot e shuffleGetRNG); colocado só na FM (lista 85:8EBE, 6, param 0). Dono: object.conveyors-water (perigo ambiental). Cobertura: E32 400 de 3.610 chamadas exatas, K8 30.150 de 30.150 quadros iguais, V6 6 de 6 colocações na tela, todo quadro na tela exato."
          }
        }
      ],
      "sourceOid": "0x4C",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x4d",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x4D — identidade e cobertura",
        "en": "Census object 0x4D — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x4d.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x4D de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB32, main 87:CA7B (rótulo do censo lightCapsule). Recurso dono: o grupo da cápsula de melhoria upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms e object.hadouken. E36: cápsula de melhoria: testa o w_player_upgradeMask com o bit do seu índice, com a tabela de ações beam-upgrade (sítios 87:CAB9 LDY.W upgradeCabsleIndexValues,X; 87:CABF AND.W w_player_upgradeMask; 87:CCB4 JMP.W (capsle_4d_do_beamUpgrade,X)); a cápsula 0x4D está posicionada em armored-armadillo (entrada 108), flame-mammoth (entrada 15), storm-eagle (entrada 77) e chill-penguin (entrada 30); um só id de cápsula serve aos cinco recursos de cápsula; o coordenador escolhe o dono da linha. Decisão do coordenador (2026-09-25 14:05): a cápsula é um único objeto compartilhado por upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms e object.hadouken, escolhido pelo índice da cápsula (87:CAB9-87:CABF), então esta linha liga a esse grupo de cinco recursos. Cobertura de runtime (E35): rodou em 8 execuções verificadas (armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, flame-mammoth-arm-capsule_1_13555, flame-mammoth_2_30151, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 8,904 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x4D of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB32, main 87:CA7B (census label lightCapsule). Owning feature: the upgrade capsule group upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms and object.hadouken. E36: upgrade capsule: tests w_player_upgradeMask with its index bit, beam-upgrade action table (sites 87:CAB9 LDY.W upgradeCabsleIndexValues,X; 87:CABF AND.W w_player_upgradeMask; 87:CCB4 JMP.W (capsle_4d_do_beamUpgrade,X)); the capsule 0x4D is placed at armored-armadillo entry 108, flame-mammoth entry 15, storm-eagle entry 77 and chill-penguin entry 30; one capsule id serves the five capsule features; the coordinator picks the row's owner. Coordinator decision (2026-09-25 14:05): the capsule is one object shared by upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms and object.hadouken, picked by its capsule index (87:CAB9-87:CABF), so this row links to that group of five features. Runtime coverage (E35): ran in 8 verified runs (armored-armadillo_1_15055, chill-penguin-new-game_1_21068, chill-penguin_2_19010, flame-mammoth-arm-capsule_1_13555, flame-mammoth_2_30151, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 8,904 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x4D",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x4e",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x4E — identidade e cobertura",
        "en": "Census object 0x4E — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x4e.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x4E de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB37, main 87:D012 (rótulo do censo CruizilerLightning). Recurso dono: o grupo da cápsula de melhoria upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms e object.hadouken. E36: filho da cápsula 0x4D, não atingível por tiro (sítios 87:CED0 JSL.L loadEnitySlotBase; 87:CED9 LDA.B #$4E; 87:CEDB STA.W $000A,X); segue a 0x4D. Decisão do coordenador (2026-09-25 14:05): a cápsula é um único objeto compartilhado por upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms e object.hadouken, escolhido pelo índice da cápsula (87:CAB9-87:CABF), então esta linha liga a esse grupo de cinco recursos. Cobertura de runtime (E35): rodou em 4 execuções verificadas (chill-penguin-new-game_1_21068, flame-mammoth-arm-capsule_1_13555, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920), 333 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x4E of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB37, main 87:D012 (census label CruizilerLightning). Owning feature: the upgrade capsule group upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms and object.hadouken. E36: child of the capsule 0x4D, not shootable (sites 87:CED0 JSL.L loadEnitySlotBase; 87:CED9 LDA.B #$4E; 87:CEDB STA.W $000A,X); follows 0x4D. Coordinator decision (2026-09-25 14:05): the capsule is one object shared by upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms and object.hadouken, picked by its capsule index (87:CAB9-87:CABF), so this row links to that group of five features. Runtime coverage (E35): ran in 4 verified runs (chill-penguin-new-game_1_21068, flame-mammoth-arm-capsule_1_13555, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920), 333 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x4E",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x4f",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x4F — identidade e cobertura",
        "en": "Census object 0x4F — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x4f.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x4F de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB3C, main 87:D119 (rótulo do censo rollingGabyool). Recurso dono: enemy.oid_4f (recurso da granular-v3, L18; membros 0x4F); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 2 execuções verificadas (flame-mammoth-lava_2_23048, flame-mammoth_2_30151), 7,103 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_4f com peso redistribuído (20 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x4F of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB3C, main 87:D119 (census label rollingGabyool). Owning feature: enemy.oid_4f (granular-v3 feature, L18; members 0x4F); E36: shootable; placed (stage lists). Runtime coverage: ran in 2 verified runs (flame-mammoth-lava_2_23048, flame-mammoth_2_30151), 7,103 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_4f with redistributed weight (20 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x4F",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x52",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x52 — identidade e cobertura",
        "en": "Census object 0x52 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x52.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 3,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x52 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB4B, main 87:D85C (rótulo do censo stormEagle). Recurso dono: boss.storm-eagle (únicos ids de inimigo ativos no $1F0C f14464 de storm-eagle-and-spark-dark, knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json). Cobertura de runtime: rodou em 3 execuções verificadas (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 12,871 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x52 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB4B, main 87:D85C (census label stormEagle). Owning feature: boss.storm-eagle (only enemy ids active at $1F0C f14464 of storm-eagle-and-spark-dark, knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json). Runtime coverage: ran in 3 verified runs (sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 12,871 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x52",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x57",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x57 — identidade e cobertura",
        "en": "Census object 0x57 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x57.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x57 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB64, main 87:E354 (rótulo do censo igloo). Recurso dono: enemy.oid_57 (recurso da granular-v3, L18; membros 0x57, 0x3A); E36: shootable; placed in CP, makes 0x3A. Cobertura de runtime: rodou em 2 execuções verificadas (chill-penguin-new-game_1_21068, chill-penguin_2_19010), 1,696 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_57 com peso redistribuído (22 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x57 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB64, main 87:E354 (census label igloo). Owning feature: enemy.oid_57 (granular-v3 feature, L18; members 0x57, 0x3A); E36: shootable; placed in CP, makes 0x3A. Runtime coverage: ran in 2 verified runs (chill-penguin-new-game_1_21068, chill-penguin_2_19010), 1,696 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_57 with redistributed weight (22 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x57",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x58",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x58 — identidade e cobertura",
        "en": "Census object 0x58 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x58.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x58 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB69, main 87:E547 (rótulo do censo ). Recurso dono: enemy.oid_59 (recurso da granular-v3, L18; membros 0x59, 0x58, 0x5A); E36: shootable child of 0x59. Cobertura de runtime: rodou em 2 execuções verificadas (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 57 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_59 com peso redistribuído (20 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x58 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB69, main 87:E547 (census label ). Owning feature: enemy.oid_59 (granular-v3 feature, L18; members 0x59, 0x58, 0x5A); E36: shootable child of 0x59. Runtime coverage: ran in 2 verified runs (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 57 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_59 with redistributed weight (20 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x58",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x59",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x59 — identidade e cobertura",
        "en": "Census object 0x59 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x59.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x59 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB6E, main 87:E7D4 (rótulo do censo longPillar). Recurso dono: enemy.oid_59 (recurso da granular-v3, L18; membros 0x59, 0x58, 0x5A); E36: shootable; placed once in SE, makes 0x58 and 0x5A. Cobertura de runtime: rodou em 2 execuções verificadas (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 759 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_59 com peso redistribuído (20 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x59 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB6E, main 87:E7D4 (census label longPillar). Owning feature: enemy.oid_59 (granular-v3 feature, L18; members 0x59, 0x58, 0x5A); E36: shootable; placed once in SE, makes 0x58 and 0x5A. Runtime coverage: ran in 2 verified runs (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 759 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_59 with redistributed weight (20 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x59",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x5a",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x5A — identidade e cobertura",
        "en": "Census object 0x5A — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x5a.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x5A de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB73, main 87:EB09 (rótulo do censo ). Recurso dono: enemy.oid_59 (recurso da granular-v3, L18; membros 0x59, 0x58, 0x5A); E36: shootable child of 0x59 (and of itself). Cobertura de runtime: rodou em 2 execuções verificadas (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 757 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_59 com peso redistribuído (20 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x5A of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB73, main 87:EB09 (census label ). Owning feature: enemy.oid_59 (granular-v3 feature, L18; members 0x59, 0x58, 0x5A); E36: shootable child of 0x59 (and of itself). Runtime coverage: ran in 2 verified runs (storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058), 757 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_59 with redistributed weight (20 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x5A",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x5b",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x5B — identidade e cobertura",
        "en": "Census object 0x5B — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x5b.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x5B de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB78, main 87:EBFE (rótulo do censo megaTortoise). Recurso dono: enemy.oid_5b (recurso da granular-v3, L18; membros 0x5B); E36: shootable; placed (stage lists). Cobertura de runtime: rodou em 8 execuções verificadas (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_5b com peso redistribuído (31 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x5B of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB78, main 87:EBFE (census label megaTortoise). Owning feature: enemy.oid_5b (granular-v3 feature, L18; members 0x5B); E36: shootable; placed (stage lists). Runtime coverage: ran in 8 verified runs (boomer-kuwanger_1_40070, items-collection_2_15104, launch-octopus-and-sting-flooded_2_38342, launch-octopus-auto_1_4717, sigma1-zero-arm_2_35588, sigma3_2_26312, spark-mandrill_1_27368, storm-eagle-and-spark-dark_2_25920), 8,273 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_5b with redistributed weight (31 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x5B",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x5c",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x5C — identidade e cobertura",
        "en": "Census object 0x5C — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x5c.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/sfx_ae_af_witness_2026-10-10_r112.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x5C de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB7D, main 88:A793 (rótulo do censo rangdaBangdaWall). Recurso dono: o grupo da cápsula de melhoria upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms e object.hadouken. E36: filho da cápsula 0x4D (e de si mesmo), não atingível por tiro (sítios 87:CFEA JSL.L loadEnitySlotBase; 87:CFF3 LDA.B #$5C; 87:CFF5 STA.W $000A,X; 88:A953 JSL.L loadEnitySlotBase; 88:A95C LDA.B #$5C; 88:A95E STA.W $000A,X); segue a 0x4D. Decisão do coordenador (2026-09-25 14:05): a cápsula é um único objeto compartilhado por upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms e object.hadouken, escolhido pelo índice da cápsula (87:CAB9-87:CABF), então esta linha liga a esse grupo de cinco recursos. Cobertura de runtime (E35): rodou em 4 execuções verificadas (chill-penguin-new-game_1_21068, flame-mammoth-arm-capsule_1_13555, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920), 5,382 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: os donos são recursos existentes do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x5C of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB7D, main 88:A793 (census label rangdaBangdaWall). Owning feature: the upgrade capsule group upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms and object.hadouken. E36: child of the capsule 0x4D (and of itself), not shootable (sites 87:CFEA JSL.L loadEnitySlotBase; 87:CFF3 LDA.B #$5C; 87:CFF5 STA.W $000A,X; 88:A953 JSL.L loadEnitySlotBase; 88:A95C LDA.B #$5C; 88:A95E STA.W $000A,X); follows 0x4D. Coordinator decision (2026-09-25 14:05): the capsule is one object shared by upgrade.boots, upgrade.helmet, upgrade.body, upgrade.arms and object.hadouken, picked by its capsule index (87:CAB9-87:CABF), so this row links to that group of five features. Runtime coverage (E35): ran in 4 verified runs (chill-penguin-new-game_1_21068, flame-mammoth-arm-capsule_1_13555, sting-chameleon_1_25606, storm-eagle-and-spark-dark_2_25920), 5,382 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owners are existing ledger features. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x5C",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x5d",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x5D — identidade e cobertura",
        "en": "Census object 0x5D — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x5d.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x5D de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB82, main 88:A985 (rótulo do censo rangdaBangdaEye). Recurso dono: boss.rangda-bangda (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma2_2_41296), 13,105 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x5D of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB82, main 88:A985 (census label rangdaBangdaEye). Owning feature: boss.rangda-bangda (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma2_2_41296), 13,105 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x5D",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x5e",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x5E — identidade e cobertura",
        "en": "Census object 0x5E — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x5e.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x5E de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB87, main 88:AE0B (rótulo do censo rangdaBangdaMouth). Recurso dono: boss.rangda-bangda (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma2_2_41296), 18,436 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x5E of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB87, main 88:AE0B (census label rangdaBangdaMouth). Owning feature: boss.rangda-bangda (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma2_2_41296), 18,436 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x5E",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x5f",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x5F — identidade e cobertura",
        "en": "Census object 0x5F — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x5f.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x5F de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB8C, main 88:B216 (rótulo do censo rangdaBangdaWallSide). Recurso dono: boss.rangda-bangda (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma2_2_41296), 10,592 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x5F of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB8C, main 88:B216 (census label rangdaBangdaWallSide). Owning feature: boss.rangda-bangda (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma2_2_41296), 10,592 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x5F",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x60",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x60 — identidade e cobertura",
        "en": "Census object 0x60 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x60.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x60 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB91, main 88:B452 (rótulo do censo rexHead). Recurso dono: boss.rangda-bangda (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma2_2_41296), 2,550 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x60 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB91, main 88:B452 (census label rexHead). Owning feature: boss.rangda-bangda (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma2_2_41296), 2,550 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x60",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x61",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x61 — identidade e cobertura",
        "en": "Census object 0x61 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x61.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x61 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB96, main 88:B689 (rótulo do censo rexBase). Recurso dono: boss.d-rex (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma3_2_26312), 5,262 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x61 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB96, main 88:B689 (census label rexBase). Owning feature: boss.d-rex (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma3_2_26312), 5,262 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x61",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x62",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x62 — identidade e cobertura",
        "en": "Census object 0x62 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x62.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x62 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FB9B, main 88:BF48 (rótulo do censo spiderBoss). Recurso dono: boss.d-rex (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma3_2_26312), 5,471 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x62 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FB9B, main 88:BF48 (census label spiderBoss). Owning feature: boss.d-rex (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma3_2_26312), 5,471 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x62",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x63",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x63 — identidade e cobertura",
        "en": "Census object 0x63 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x63.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x63 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBA0, main 82:DB7D (rótulo do censo prisonCapsule). Recurso dono: boss.bospider (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma1-zero-arm_2_35588), 11,656 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x63 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBA0, main 82:DB7D (census label prisonCapsule). Owning feature: boss.bospider (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma1-zero-arm_2_35588), 11,656 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x63",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x64",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x64 — identidade e cobertura",
        "en": "Census object 0x64 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x64.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "tools/tests/test_census_owners.py",
            "docs/tasks/done/E36-census-owners.md",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L16, a partir do E36 e do E35): tipo e tabela: OID 0x64 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBA5, main 87:ED8D (rótulo do censo sigmaHead). Recurso dono: stage.sigma-1. E36: objeto de cenário: posicionado em uma só fase, não alcança a rotina de acerto de inimigo 84:9B43 (posicionado só em sigma-1 (entradas 49, 54); a 84:9B43 é a bossHealthupdate_hitDetect, alcançada pelos 17 ids de família, e um id que não a alcança não pode sofrer dano); objeto de cenário vai para a fase (regra do card). Teste de objeto de cenário (decisão do coordenador, 2026-09-25 14:05): posicionado na lista de uma só fase e sem nunca alcançar 84:9B43, então não pode sofrer dano: objeto de cenário de uma fase, ligado ao recurso dessa fase. Cobertura de runtime (E35): rodou em 1 execução verificada (sigma1-zero-arm_2_35588), 2,399 slot-frames, com WRAM igual em todos os quadros (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L16, from E36 and E35): type and table: OID 0x64 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBA5, main 87:ED8D (census label sigmaHead). Owning feature: stage.sigma-1. E36: stage prop: placed in one stage only, does not reach the enemy hit routine 84:9B43 (placed at sigma-1 entries 49, 54 only; 84:9B43 is bossHealthupdate_hitDetect, reached by all 17 family ids, and an id that does not reach it cannot be damaged); a stage prop goes to the stage (card rule). Prop test (coordinator decision 2026-09-25 14:05): placed in one stage's list only and never reaching 84:9B43, so it cannot be damaged: a one-stage prop, linked to that stage's feature. Runtime coverage (E35): ran in 1 verified run (sigma1-zero-arm_2_35588), 2,399 slot-frames, WRAM equal on every frame (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x64",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x65",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x65 — identidade e cobertura",
        "en": "Census object 0x65 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x65.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x65 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBAA, main 88:C3B2 (rótulo do censo zeroStage1). Recurso dono: boss.sigma-humanoid (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma4-final-not-beaten_2_37016), 29,151 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x65 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBAA, main 88:C3B2 (census label zeroStage1). Owning feature: boss.sigma-humanoid (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma4-final-not-beaten_2_37016), 29,151 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x65",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x66",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x66 — identidade e cobertura",
        "en": "Census object 0x66 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x66.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x66 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBAF, main 88:D1B8 (rótulo do censo VileMech). Recurso dono: boss.vile-fortress (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma1-zero-arm_2_35588), 8,325 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x66 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBAF, main 88:D1B8 (census label VileMech). Owning feature: boss.vile-fortress (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma1-zero-arm_2_35588), 8,325 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x66",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x67",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x67 — identidade e cobertura",
        "en": "Census object 0x67 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x67.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x67 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBB4, main 83:E7E1 (rótulo do censo creeperHole). Recurso dono: boss.vile-fortress (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma1-zero-arm_2_35588), 3,415 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x67 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBB4, main 83:E7E1 (census label creeperHole). Owning feature: boss.vile-fortress (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma1-zero-arm_2_35588), 3,415 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x67",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x68",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x68 — identidade e cobertura",
        "en": "Census object 0x68 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x68.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x68 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBB9, main 88:D8A9 (rótulo do censo vile). Recurso dono: enemy.oid_6a (recurso da granular-v3, L18; membros 0x6A, 0x68); E36: not shootable; placed at sigma-4 entries 0 and 4; after a $64-frame count makes 0x6A when no 0x6A is active. Cobertura de runtime: rodou em 1 execuções verificadas (sigma4-final-not-beaten_2_37016), 2,757 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_6a com peso redistribuído (19 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x68 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBB9, main 88:D8A9 (census label vile). Owning feature: enemy.oid_6a (granular-v3 feature, L18; members 0x6A, 0x68); E36: not shootable; placed at sigma-4 entries 0 and 4; after a $64-frame count makes 0x6A when no 0x6A is active. Runtime coverage: ran in 1 verified runs (sigma4-final-not-beaten_2_37016), 2,757 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_6a with redistributed weight (19 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x68",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x69",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x69 — identidade e cobertura",
        "en": "Census object 0x69 — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x69.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x69 de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBBE, main 88:DADA (rótulo do censo wallCreeper). Recurso dono: boss.vile-fortress (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma1-zero-arm_2_35588), 2,733 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x69 of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBBE, main 88:DADA (census label wallCreeper). Owning feature: boss.vile-fortress (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma1-zero-arm_2_35588), 2,733 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x69",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x6a",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x6A — identidade e cobertura",
        "en": "Census object 0x6A — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x6a.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "tools/tests/test_enemy_evidence.py",
            "tools/tests/test_census_owners.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do E35, E36 e S30 na granular-v3): tipo e tabela: OID 0x6A de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBC3, main 88:D942 (rótulo do censo vileFinalForm). Recurso dono: enemy.oid_6a (recurso da granular-v3, L18; membros 0x6A, 0x68); E36: shootable; made by 0x68. Cobertura de runtime: rodou em 1 execuções verificadas (sigma4-final-not-beaten_2_37016), 1,680 slot-frames, com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros) (E35). Família nova: a granular-v3 (L18) adicionou enemy.oid_6a com peso redistribuído (19 pontos-base) antes deste fechamento. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L19, from E35, E36 and S30 on granular-v3): type and table: OID 0x6A of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBC3, main 88:D942 (census label vileFinalForm). Owning feature: enemy.oid_6a (granular-v3 feature, L18; members 0x6A, 0x68); E36: shootable; made by 0x68. Runtime coverage: ran in 1 verified runs (sigma4-final-not-beaten_2_37016), 1,680 slot-frames, WRAM equal on every frame of each (E35 runs: wram_equal = frames) (E35). New family: granular-v3 (L18) added enemy.oid_6a with redistributed weight (19 bp) before this closure. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x6A",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "census.0x6b",
      "category": "enemies",
      "title": {
        "pt": "Objeto do censo 0x6B — identidade e cobertura",
        "en": "Census object 0x6B — identity and coverage"
      },
      "steps": [
        {
          "id": "census.0x6b.ownership",
          "category": "enemies",
          "title": {
            "pt": "Classificar e comprovar cobertura do objeto",
            "en": "Classify and prove object coverage"
          },
          "weightBp": 2,
          "status": "verified",
          "acceptance": {
            "pt": "Identificar tipo e tabela; ligar ao recurso dono; comprovar cobertura de runtime ou não aplicabilidade por origem. Se for nova família, adicioná-la com peso redistribuído antes de fechar.",
            "en": "Identify type and table; link its owning feature; prove runtime coverage or source-backed non-applicability. If a new family, add it with redistributed weight before closure."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "tools/tests/test_enemy_evidence.py",
            "docs/tasks/done/E35-enemy-evidence-from-whole-takes.md",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L15, a partir do E35): tipo e tabela: OID 0x6B de 80:F8DD mainEventTable (JMP 80:D544), stub 80FBC8, main 88:E546 (rótulo do censo ). Recurso dono: boss.sigma-final (B2, knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Cobertura de runtime: rodou em 1 execuções verificadas (sigma4-final-not-beaten_2_37016), 2,380 slot-frames, com WRAM igual em todos os quadros de cada uma (V12 wram_equal = quadros + 1). Não é família nova: o dono é um recurso existente do ledger. Só auditoria de completude: os passos do próprio dono não são creditados aqui.",
            "en": "2026-09-25 (card L15, from E35): type and table: OID 0x6B of 80:F8DD mainEventTable (JMP 80:D544), stub 80FBC8, main 88:E546 (census label ). Owning feature: boss.sigma-final (B2 knowledge_base/mmx1/rom/boss_identity_2026-09-25.json). Runtime coverage: ran in 1 verified runs (sigma4-final-not-beaten_2_37016), 2,380 slot-frames, WRAM equal on every frame of each (V12 wram_equal = frames + 1). Not a new family: its owner is an existing ledger feature. Completeness audit only: the owner's own steps are not credited here."
          }
        }
      ],
      "sourceOid": "0x6B",
      "tableContext": "source census object table; actor type unresolved"
    },
    {
      "id": "boss.chill-penguin",
      "category": "bosses",
      "title": {
        "pt": "Chill Penguin",
        "en": "Chill Penguin"
      },
      "steps": [
        {
          "id": "boss.chill-penguin.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 14,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/handler_gate_chill-penguin_2026-09-23.json",
            "docs/tasks/done/A5-dsp-audio-stream-exe.md",
            "docs/plans/2026-09-23-work-order.md",
            "tests/cpp/rom_first_audio_test.cpp",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L3), modo ROM-first (megaman-x.exe --rom-first): a entrada do chefe na gravação de CP (posição e arena, portas, intro, bloqueio e liberação de controles, câmera, enchimento de HP) iguala a WRAM do original em todo quadro (K8, 19,009 de 19,009) e sai exata em pixels (V5: 19,006 de 19,008 quadros, seção do chefe 6,503 de 6,504; os outros dois, f146 na intro da fase e f16877 no fim da seção do chefe, são limites por linha do LakeSnes); o handler gerado do OID 0x02 exato em 400 de 400 chamadas do gate (E30). Música: o exe toca o driver de som do próprio jogo no SPC700/DSP do LakeSnes (A5: --record-wav igual byte a byte ao WAV do apu_gate na janela f1044..2400); David aceitou o som do modo ROM-first (ordem de trabalho D9). Limite: a única entrada gravada; a entrada após derrota do jogador fica no passo de morte e retorno (outro).",
            "en": "2026-09-24 (card L3), ROM-first mode (megaman-x.exe --rom-first): the boss entrance of the CP recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (K8, 19,009 of 19,009) and is pixel-exact (V5: 19,006 of 19,008 frames, boss section 6,503 of 6,504; the two others, f146 in the stage intro and f16877 late in the boss section, are LakeSnes per-line limits); OID 0x02's generated handler exact on 400 of 400 gated calls (E30). Music: the exe plays the game's own sound driver on LakeSnes's SPC700/DSP (A5: --record-wav equals apu_gate's WAV byte for byte on the f1044..2400 window); David accepted the ROM-first sound (work order D9). Bound: the one recorded entrance; the entrance after a player defeat belongs to outro."
          }
        },
        {
          "id": "boss.chill-penguin.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 1), modo ROM-first: chill-penguin (id 0x02), tabela de estados 81:B516 (eventID_chillPingu_01_main). Estados vistos 28 de 28, imagem exata no primeiro quadro de cada estado. Takes: chill-penguin-death-branch_2_16352, chill-penguin-new-game_1_21068. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 1), ROM-first mode: chill-penguin (id 0x02), state table 81:B516 (eventID_chillPingu_01_main). States seen 28 of 28, picture-exact on the first frame of every state. Takes: chill-penguin-death-branch_2_16352, chill-penguin-new-game_1_21068. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.chill-penguin.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 2), modo ROM-first: seleção do chill-penguin (id 0x02): resultados vistos 33 de 33 em 47 ramos nos manipuladores de escolha; sítios de RNG 81:C021. Takes: chill-penguin-death-branch_2_16352, chill-penguin-new-game_1_21068, sigma2_2_41296. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 2), ROM-first mode: chill-penguin (id 0x02) selection: outcomes seen 33 of 33 across 47 branches in the picking handlers; RNG sites 81:C021. Takes: chill-penguin-death-branch_2_16352, chill-penguin-new-game_1_21068, sigma2_2_41296. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.chill-penguin.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/oracle/post/reduce_hunt_damage.py",
            "tools/tests/test_reduce_hunt_damage.py",
            "docs/tasks/done/B6-maverick-damage-hunt.md",
            "docs/tasks/done/B7-damage-take-divergence.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta B7 docs/tasks/done/B7-damage-take-divergence.md, reduzindo a caça da B6 knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json sobre a KB do B3 boss_evidence_2026-09-26.json), modo ROM-first: matriz de dano do chill-penguin (id 0x02) inteira, 17 de 17 casos vistos e iguais (X.BUSTER e as oito armas, normal/carregada). Regra (B3 decisão 3 + B4 + B7): byte = 86:EF37 + word[86:EF37 + 2*linha] + id do tiro; a linha é o +$28 lido no frame ANTES da queda de HP, salvo quando só a linha do frame do acerto explica o resultado (a luta escreveu +$28 dentro do frame do acerto antes de 84:9E23 lê-lo) — nenhum dos 17 casos do chill-penguin precisou dessa excepção. $80 = tiro defletido (84:9E45 LDA / 84:9E48 BPL testa o bit 7 -> JSR (84:9EEA) -> 84:9EEE, SFX $10, sem SBC); byte 0 = SBC 0 em 84:9E73, HP mantido; ambos IGUAIS à tabela. C.STING carregado (tiro $11) não tem caso de acerto na ROM: 83:9B8C grava +$30=2 no objeto e o loop de acerto do chefe pula qualquer tiro com +$30 != 0 em 84:9B5F, nunca chega a 84:9E15/84:9E3A; excluído da matriz (18 combinações - 1 = 17 casos). Takes: B3 (chill-penguin_2_19010, chill-penguin-new-game_1_21068, sigma2_2_41296, 14 de 17 casos, 60 de 60 acertos iguais à tabela) e a caça B6/B7 (b6-cp-x-buster-normal-hunt, b6-cp-r-shield-charged-hunt, b6-cp-e-spark-charged-hunt, os 3 casos restantes, WRAM igual em cada take completo, pixels exatos). Limite: fraquezas nomeadas e interrupções de ataque por tiro continuam sob revisão separada quando a atribuição delas não é a mesma tabela de dano.",
            "en": "2026-09-26 (card B7 docs/tasks/done/B7-damage-take-divergence.md, reducing B6's hunt knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json over B3's KB boss_evidence_2026-09-26.json), ROM-first mode: chill-penguin (id 0x02) damage matrix whole, 17 of 17 cases seen and equal (X.BUSTER and the eight weapons, normal/charged). Rule (B3 decision 3 + B4 + B7): byte = 86:EF37 + word[86:EF37 + 2*row] + shot id; the row is the +$28 read on the frame BEFORE the HP drop, except when only the hit frame's row explains the result (the fight state wrote +$28 inside the hit frame before 84:9E23 read it) — none of the 17 chill-penguin cases needed that exception. $80 = shot deflected (84:9E45 LDA / 84:9E48 BPL tests bit 7 -> JSR (84:9EEA) -> 84:9EEE, SFX $10, no SBC); byte 0 = SBC 0 at 84:9E73, HP kept; both EQUAL the table. Charged C.STING (shot $11) has no hit case in the ROM: 83:9B8C writes the object's +$30 = 2 and the boss hit loop skips any shot with +$30 != 0 at 84:9B5F, never reaching 84:9E15/84:9E3A; excluded from the matrix (18 combinations - 1 = 17 cases). Takes: B3 (chill-penguin_2_19010, chill-penguin-new-game_1_21068, sigma2_2_41296, 14 of 17 cases, 60 of 60 hits equal the table) and the B6/B7 hunt (b6-cp-x-buster-normal-hunt, b6-cp-r-shield-charged-hunt, b6-cp-e-spark-charged-hunt, the remaining 3 cases, WRAM-equal on every frame of each take, pixels exact). Bound: named weaknesses and per-shot attack interrupts remain under separate review where their attribution is not this same damage table."
          }
        },
        {
          "id": "boss.chill-penguin.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 143,
            "total": 150,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.chill-penguin.presentation/parts (105 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.chill-penguin.presentation/missing and 18 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (11 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-rangda-bangda-5e-1-charged-hunt_2_16366, 4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/chill-penguin-death-branch_2_16352, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/chill-penguin-new-game_1_21068, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/s44-r2-20261002-sigma-2-cp2_2_38744), of all 150 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.chill-penguin.presentation/evidence; plus 18 method-f parts child:1428:1A:cell:67:AFD002, child:1428:1A:cell:67:AFD005, child:1428:1A:cell:67:AFD008, child:1428:1A:cell:67:AFD00B, child:1428:1A:cell:67:AFD00E, child:1428:1A:cell:67:AFD011, child:1428:1A:cell:67:AFD014, child:1428:1A:cell:67:AFD017, child:1428:1A:cell:67:AFD01A, child:1428:1A:cell:67:AFD01D, child:1428:1A:cell:67:AFD020, child:1428:1A:cell:67:AFD023, child:1928:08:cell:67:AFD028, child:1928:08:cell:67:AFD02B, child:1928:08:cell:67:AFD02E, child:1928:08:cell:67:AFD031, child:1928:08:cell:67:AFD034, child:1928:08:cell:67:AFD037 per knowledge_base/mmx1/rom/boss_chill_penguin_unformed_child_cells_2026-10-09_r85.json#/steps/boss.chill-penguin.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1928:02:cell:08:AFA878 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.chill-penguin.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts 02:cell:67:AFD084 per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.chill-penguin.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/chill-penguin/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.chill-penguin.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_deaths_2026-09-26.json",
            "tools/tests/test_branch_deaths.py",
            "tools/oracle/branch_take.py",
            "docs/tasks/done/R16-branch-takes-maverick-deaths.md",
            "docs/tasks/done/L30-ledger-outro-residuals.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L30, KB do R16 com a regra de resíduo do L8), modo ROM-first (megaman-x.exe --rom-first): take ramificada chill-penguin-death-branch, o savestate e as linhas 1..10941 da take chill-penguin e depois entradas criadas (nenhuma até a derrota do X, depois a busca do R16 de volta à porta do chefe; tools/oracle/branch_take.py), WRAM igual em todos os 16.351 quadros, portão de quadros inteiro. O chefe (id 0x02) derrota o X em f15539 (energia 0, ação $0C), vidas 2->1 em f15737, o X volta ao checkpoint 2 em f15776 e o encontro é restaurado (0x02 ativo de novo em f16231); imagens pelo PPU do Mesen2 exatas nesses quadros e em todo o trecho f15539..16231 (693 de 693). Derrota e passagem em chill-penguin-new-game (WRAM igual 21068 of 21068): derrota (owner HP 0) em f16125, Shotgun Ice ganha em f16654, suas telas até f17139; imagens exatas em 1.017 de 1.019 quadros de f16123..17141; os outros, f16318, f16674, são resíduos de imagem que pertencem ao passo de apresentação do chefe (regra do L8, como no L29; o R16 segurou o passo por eles). Limite: uma derrota do jogador; ataques e sons pertencem aos outros passos do chefe.",
            "en": "2026-09-26 (card L30, R16's KB with L8's residual rule), ROM-first mode (megaman-x.exe --rom-first): branch take chill-penguin-death-branch, the chill-penguin take's savestate and lines 1..10941 then crafted inputs (none until X's defeat, then R16's goal search back to the boss door; tools/oracle/branch_take.py), WRAM equal on all 16,351 frames, frame gate whole. The boss (id 0x02) defeats X at f15539 (health 0, action $0C), lives 2->1 at f15737, X is back at checkpoint 2 at f15776 and the encounter is restored (0x02 active again at f16231); pictures under Mesen2's PPU exact on those frames and on the whole span f15539..16231 (693 of 693). Defeat and handoff in chill-penguin-new-game (WRAM equal 21068 of 21068): defeat (owner HP 0) at f16125, Shotgun Ice gained at f16654, its screens to f17139; pictures exact on 1,017 of 1,019 frames of f16123..17141; the others, f16318, f16674, are picture residuals that belong to the boss's presentation step (L8's rule, as L29; R16 held the step for them). Bound: one player defeat; attacks and sounds belong to the other boss steps."
          }
        }
      ]
    },
    {
      "id": "boss.storm-eagle",
      "category": "bosses",
      "title": {
        "pt": "Storm Eagle",
        "en": "Storm Eagle"
      },
      "steps": [
        {
          "id": "boss.storm-eagle.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 14,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/apu_se_refresh_2026-09-25.json",
            "knowledge_base/mmx1/rom/apu_early_read_2026-09-25.json",
            "knowledge_base/mmx1/rom/apu_handshake_stops2_2026-09-25.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "tools/rom/apu_gate.py",
            "tools/rom/ppu_gate.py",
            "docs/tasks/done/A20-se-refresh-placement.md",
            "tools/tests/test_apu_gate_start_state.py",
            "tools/tests/test_rt_apu_port_visibility.py",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-25 (cartão L22, a partir do A20), modo ROM-first: a entrada do Storm Eagle na gravação do SE (posição e arena, portas, intro, bloqueio e liberação dos controles, câmera, enchimento de HP) é igual à WRAM do original em todos os quadros (K8, 21,058 de 21,058) e à imagem com o PPU do Mesen2 em todos os quadros (V8 e V12, 21,057 de 21,057; seção do chefe, o OID 0x52 num slot de inimigo, f14860..19519, 4,660 de 4,660; a passagem da porta, checkpoint 2 f14378..14859, igual). Conferência de câmera 33 de 35: a câmera do original e o scroll do BG1 no Mesen diferem em f4801 e f18601, onde a nossa WRAM e a imagem são iguais às do original. Música: o apu_gate (o driver de som do jogo no SPC700/DSP do LakeSnes, iniciado do estado do SPC no Mesen2) é igual ao original em f14013..19223, 5,211 de 5,211 quadros, toda leitura de porta na mesma instrução (51,246 de 51,246, A20 depois de A16-A19), de 847 quadros antes de o chefe entrar no slot, pela porta, intro e enchimento de HP. Limite: a única entrada gravada; a entrada após uma derrota do jogador pertence ao passo de morte e retorno.",
            "en": "2026-09-25 (card L22, from A20), ROM-first mode: Storm Eagle's entrance in the SE recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (K8, 21,058 of 21,058) and its picture under Mesen2's PPU on every frame (V8 and V12, 21,057 of 21,057; boss section, the boss OID 0x52 in an enemy slot, f14860..19519, 4,660 of 4,660; the door passage, checkpoint 2 f14378..14859, equal). Camera check 33 of 35: the original's camera and Mesen's BG1 scroll differ at f4801 and f18601, where our WRAM and picture equal the original's. Music: apu_gate (the game's sound driver on LakeSnes's SPC700/DSP, started from Mesen2's SPC state) equals the original on f14013..19223, 5,211 of 5,211 frames, every port read at the same instruction (51,246 of 51,246, A20 after A16-A19), from 847 frames before the boss enters its slot, through the door, intro and HP fill. Bound: the one recorded entrance; the entrance after a player defeat belongs to death and return."
          }
        },
        {
          "id": "boss.storm-eagle.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 1), modo ROM-first: storm-eagle (id 0x52), tabela de estados 87:D85C (eventID_stormEagle_52_main). Estados vistos 18 de 18, imagem exata no primeiro quadro de cada estado. Takes: sigma2_2_41296, storm-eagle_1_21058. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 1), ROM-first mode: storm-eagle (id 0x52), state table 87:D85C (eventID_stormEagle_52_main). States seen 18 of 18, picture-exact on the first frame of every state. Takes: sigma2_2_41296, storm-eagle_1_21058. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.storm-eagle.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/storm-eagle/boss.json",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: a última parte, 52:choice:14 (87:DC89/87:DCC0), vista em se-bc f21657, slot 0E68 (regra de transição do B18). Todas as partes do catálogo vistas.",
            "en": "2026-10-01: the last part, 52:choice:14 (87:DC89/87:DCC0), seen in se-bc f21657, slot 0E68 (B18 transition rule). Every catalogue part seen."
          }
        },
        {
          "id": "boss.storm-eagle.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/oracle/post/reduce_hunt_damage.py",
            "tools/tests/test_reduce_hunt_damage.py",
            "docs/tasks/done/B6-maverick-damage-hunt.md",
            "docs/tasks/done/B7-damage-take-divergence.md",
            "docs/tasks/done/K18-capture-interval-split.md"
          ],
          "note": {
            "en": "2026-09-26 (L33, after K18 d8f08f9bb; G5 format), ROM-first: storm-eagle (id 0x52) damage matrix whole, 17 of 17 cases seen and equal, 0 stops. B3 decision 3 + B4 + B7: byte = 86:EF37 + word[86:EF37 + 2*row] + shot id; row is +$28 on the frame BEFORE the HP drop, except when only the hit-frame row explains the outcome (the fight wrote +$28 before 84:9E23 read it). None of these hunt cases needed that exception. $80 = deflected (84:9E48 -> 84:9EEE, SFX $10, no SBC); byte 0 = SBC 0 at 84:9E73, HP kept; both equal the table. Charged C.STING (shot $11) has no hit case: 83:9B8C sets +$30=2; 84:9B5F skips shots with +$30!=0 before 84:9E15/84:9E3A; excluded (18 combinations - 1 = 17). B3: 10/17 cases, 63/63 hits equal; first-hit takes: sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058. B6/B7/K18: the remaining 7 cases, WRAM-equal on every frame of each take: b6-se-x-buster-normal-hunt, b6-se-r-shield-charged-hunt, b6-se-storm-t-normal-hunt, b6-se-storm-t-charged-hunt, b6-se-e-spark-charged-hunt, b6-se-b-cutter-charged-hunt, b6-se-s-ice-charged-hunt. Pixels: six hunt takes each still differ at f6893; only X.BUSTER normal is pixel-exact. This credits the WRAM/table-proven damage matrix; picture equality remains open. Bound: named weaknesses and per-shot attack interrupts remain under separate review where their attribution is not this same damage table.",
            "pt": "2026-09-26 (L33, após K18 d8f08f9bb; formato G5), ROM-first: matriz de dano de storm-eagle (id 0x52) inteira, 17 de 17 casos vistos e iguais, 0 paradas. B3 decisão 3 + B4 + B7: byte = 86:EF37 + word[86:EF37 + 2*linha] + id do tiro; linha = +$28 no frame ANTES da queda de HP, salvo quando só a linha do frame do acerto explica o resultado (a luta escreveu +$28 antes da leitura em 84:9E23). Nenhum destes casos da caça precisou dessa exceção. $80 = defletido (84:9E48 -> 84:9EEE, SFX $10, sem SBC); byte 0 = SBC 0 em 84:9E73, HP mantido; ambos iguais à tabela. C.STING carregado (tiro $11) não tem caso de acerto: 83:9B8C grava +$30=2; 84:9B5F pula tiros com +$30!=0 antes de 84:9E15/84:9E3A; excluído (18 combinações - 1 = 17). B3: 10/17 casos, 63/63 acertos iguais; takes do primeiro acerto: sigma2_2_41296, storm-eagle-and-spark-dark_2_25920, storm-eagle_1_21058. B6/B7/K18: os 7 casos restantes, WRAM igual em cada frame de cada take: b6-se-x-buster-normal-hunt, b6-se-r-shield-charged-hunt, b6-se-storm-t-normal-hunt, b6-se-storm-t-charged-hunt, b6-se-e-spark-charged-hunt, b6-se-b-cutter-charged-hunt, b6-se-s-ice-charged-hunt. Pixels: seis takes da caça ainda diferem em f6893; só X.BUSTER normal tem pixels exatos. O crédito cobre a matriz de dano provada por WRAM/tabela; igualdade visual segue aberta. Limite: fraquezas nomeadas e interrupções por tiro seguem sob revisão separada quando sua atribuição não é esta mesma tabela de dano."
          }
        },
        {
          "id": "boss.storm-eagle.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 170,
            "total": 174,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.storm-eagle.presentation/parts (105 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.storm-eagle.presentation/missing and 16 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (8 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-rangda-bangda-5e-1-charged-hunt_2_16366, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/s44-r2-20261002-sigma-2-cp2_2_38744, 7 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/se-bc_1_34905), of all 174 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 1 parts child:0E68:55:cell:89:AFDB9F per knowledge_base/mmx1/rom/boss_owner_pool_children_2026-10-09_r90.json#/rows/boss.storm-eagle.presentation/parts; plus 3 parts child:0E68:56:cell:89:AFDBA9, child:0E68:56:cell:89:AFDBAC, child:0E68:56:cell:89:AFDBAF per knowledge_base/mmx1/rom/boss_encounter_children_2026-10-09_r91.json#/rows/boss.storm-eagle.presentation/parts; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.storm-eagle.presentation/evidence; plus 6 method-f parts 52:cell:89:AFDB49, 52:cell:89:AFDB4C, 52:cell:89:AFDB4F, 52:cell:89:AFDB52, 52:cell:89:AFDB55, 52:cell:89:AFDB58 per knowledge_base/mmx1/rom/boss_unrequested_animation_cells_2026-10-11_r125.json#/steps/boss.storm-eagle.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 method-f parts child:1928:02:cell:08:AFA878, child:1928:29:cell:17:AFAE52 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.storm-eagle.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 36 method-f parts 52:cell:8A:AFDBD0, 52:cell:8A:AFDBD3, 52:cell:8A:AFDBD6, 52:cell:8A:AFDBD9, 52:cell:8A:AFDBDC, 52:cell:8A:AFDBDF, 52:cell:8A:AFDBE2, 52:cell:8A:AFDBE5, 52:cell:8A:AFDBE8, 52:cell:8A:AFDBEB, 52:cell:8A:AFDBEE, 52:cell:8A:AFDBF1, 52:cell:8A:AFDBF4, 52:cell:8A:AFDBF7, 52:cell:8A:AFDBFA, 52:cell:8A:AFDBFD, 52:cell:8A:AFDC00, 52:cell:8A:AFDC03, 52:cell:8A:AFDC06, 52:cell:8A:AFDC09, 52:cell:8A:AFDC0C, 52:cell:8A:AFDC0F, 52:cell:8A:AFDC12, 52:cell:8A:AFDC15, 52:cell:8A:AFDC18, 52:cell:8A:AFDC1B, 52:cell:8A:AFDC1E, 52:cell:8A:AFDC21, 52:cell:8A:AFDC24, 52:cell:8A:AFDC27, 52:cell:8A:AFDC2A, 52:cell:8A:AFDC2D, 52:cell:8A:AFDC30, 52:cell:8A:AFDC33, 52:cell:8A:AFDC36, 52:cell:8A:AFDC39 per knowledge_base/mmx1/rom/boss_cells_h37_2026-10-12.json#/steps/boss.storm-eagle.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts 52:cell:89:AFDB9A per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.storm-eagle.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/storm-eagle/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.storm-eagle.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/storm-eagle/boss.json",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: derrota/explosões até o próximo dono já vistas (B22); derrota do jogador e encontro restaurado na gravação se-bc: X cai no buraco na luta com 0x52 (f16755, f20328, f22009), volta ao checkpoint 2 e 0x52 reativa (f17450, f21033, f22752). Regra L7/L8.",
            "en": "2026-10-01: defeat/explosions through the next owner already seen (B22); player defeat and restored encounter in David's se-bc take: X falls in a pit during the 0x52 fight (f16755, f20328, f22009), returns to checkpoint 2 and 0x52 is active again (f17450, f21033, f22752). L7/L8 rule."
          }
        }
      ]
    },
    {
      "id": "boss.flame-mammoth",
      "category": "bosses",
      "title": {
        "pt": "Flame Mammoth",
        "en": "Flame Mammoth"
      },
      "steps": [
        {
          "id": "boss.flame-mammoth.reachable",
          "category": "bosses",
          "title": {
            "pt": "Encontro alcançável pelas portas",
            "en": "Encounter reachable through doors"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/flame-mammoth/boss.json"
          ],
          "note": {
            "pt": "A4-FM-REVIEW/PATH: encontro genérico alcançável; apresentação original e IA continuam abertas.",
            "en": "A4-FM-REVIEW/PATH: reachable generic encounter; original intro and AI remain open."
          }
        },
        {
          "id": "boss.flame-mammoth.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 9,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/apu_early_read_2026-09-25.json",
            "knowledge_base/mmx1/rom/apu_gate_clocked_2026-09-24.json",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_2026-09-24.json",
            "docs/tasks/done/A16-spc-early-port-read-8736.md",
            "tools/rom/apu_gate.py",
            "tools/tests/test_apu_gate_start_state.py",
            "tools/tests/test_rt_apu_port_visibility.py",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-25 (cartão L14, a partir do A16), modo ROM-first: a entrada do Flame Mammoth na gravação do FM (posição e arena, portas, intro, bloqueio e liberação dos controles, câmera, enchimento de HP) é igual à WRAM do original em todos os quadros (K8, 30,150 de 30,150) e à imagem com o PPU do Mesen2 em todos os quadros (V8, 30,149 de 30,149; seção do chefe f24276..28063, 3,788 de 3,788; conferência de câmera 49 de 50, a única divergência em f16802, antes do chefe). Música: o apu_gate (o driver de som do jogo no SPC700/DSP do LakeSnes, iniciado do estado do SPC no Mesen2) é igual ao original em f24121..27763, 3,643 de 3,643 quadros, toda leitura de porta na mesma instrução (52,211 de 52,211), de 155 quadros antes de o chefe (0x0C) entrar no slot em f24276 até a intro e o enchimento de HP (A16). Limite: a única entrada gravada; f23933..24120 (checkpoint 2, antes da janela de som) é conferido só por WRAM e imagens; a entrada após uma derrota do jogador pertence ao passo de morte e retorno.",
            "en": "2026-09-25 (card L14, from A16), ROM-first mode: Flame Mammoth's entrance in the FM recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (K8, 30,150 of 30,150) and its picture under Mesen2's PPU on every frame (V8, 30,149 of 30,149; boss section f24276..28063, 3,788 of 3,788; camera check 49 of 50, the one mismatch at f16802, before the boss). Music: apu_gate (the game's sound driver on LakeSnes's SPC700/DSP, started from Mesen2's SPC state) equals the original on f24121..27763, 3,643 of 3,643 frames, every port read at the same instruction (52,211 of 52,211), from 155 frames before the boss (0x0C) enters its slot at f24276 through its intro and HP fill (A16). Bound: the one recorded entrance; f23933..24120 (checkpoint 2, before the sound window) is gated by WRAM and pictures only; the entrance after a player defeat belongs to outro."
          }
        },
        {
          "id": "boss.flame-mammoth.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 1), modo ROM-first: flame-mammoth (id 0x0C), tabela de estados 87:91A7 (eventID_mammoth_0c_main). Estados vistos 16 de 16, imagem exata no primeiro quadro de cada estado. Takes: flame-mammoth-lava_2_23048. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 1), ROM-first mode: flame-mammoth (id 0x0C), state table 87:91A7 (eventID_mammoth_0c_main). States seen 16 of 16, picture-exact on the first frame of every state. Takes: flame-mammoth-lava_2_23048. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.flame-mammoth.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "tools/tests/test_seeded_boss.py",
            "docs/tasks/done/B10-seeded-boss-scale.md"
          ],
          "note": {
            "pt": "2026-09-28, B10, ROM-first, regra B8/W37 + seeded_start: 35/35 partes vistas. Ultima parte: b10-fm-selection-24-hunt, frame 575, mesmo slot e grupo de escritas do handler do KB; T2 retido, WRAM 692 of 692, imagens 691 of 691. Apenas os dois bytes de RNG foram alterados para um estado alcancavel. Entrada, derrota e sons ficam fora deste passo.",
            "en": "2026-09-28, B10, ROM-first, B8/W37 + seeded_start rule: 35/35 parts seen. Last part: b10-fm-selection-24-hunt, frame 575, same owner slot and the KB handler write group; T2 retained, WRAM 692 of 692, pictures 691 of 691. Only the two RNG bytes changed to a reachable state. Entry, defeat and sounds remain outside this step."
          }
        },
        {
          "id": "boss.flame-mammoth.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/oracle/post/reduce_hunt_damage.py",
            "tools/tests/test_reduce_hunt_damage.py",
            "docs/tasks/done/B6-maverick-damage-hunt.md",
            "docs/tasks/done/B7-damage-take-divergence.md",
            "docs/tasks/done/K18-capture-interval-split.md"
          ],
          "note": {
            "en": "2026-09-26 (L33, after K18 d8f08f9bb; G5 format), ROM-first: flame-mammoth (id 0x0C) damage matrix whole, 17 of 17 cases seen and equal, 0 stops. B3 decision 3 + B4 + B7: byte = 86:EF37 + word[86:EF37 + 2*row] + shot id; row is +$28 on the frame BEFORE the HP drop, except when only the hit-frame row explains the outcome (the fight wrote +$28 before 84:9E23 read it). None of these hunt cases needed that exception. $80 = deflected (84:9E48 -> 84:9EEE, SFX $10, no SBC); byte 0 = SBC 0 at 84:9E73, HP kept; both equal the table. Charged C.STING (shot $11) has no hit case: 83:9B8C sets +$30=2; 84:9B5F skips shots with +$30!=0 before 84:9E15/84:9E3A; excluded (18 combinations - 1 = 17). B3: 10/17 cases, 131/131 hits equal; first-hit takes: flame-mammoth-lava_2_23048, flame-mammoth_2_30151, sigma3-cs-death-weapons-branch_2_23162. B6/B7/K18: the remaining 7 cases, WRAM-equal on every frame of each take: b6-fm-h-torpedo-charged-hunt, b6-fm-r-shield-charged-hunt, b6-fm-f-wave-charged-hunt, b6-fm-e-spark-charged-hunt, b6-fm-b-cutter-normal-hunt, b6-fm-b-cutter-charged-hunt, b6-fm-s-ice-charged-hunt. All these hunt takes are pixel-exact. Bound: named weaknesses and per-shot attack interrupts remain under separate review where their attribution is not this same damage table.",
            "pt": "2026-09-26 (L33, após K18 d8f08f9bb; formato G5), ROM-first: matriz de dano de flame-mammoth (id 0x0C) inteira, 17 de 17 casos vistos e iguais, 0 paradas. B3 decisão 3 + B4 + B7: byte = 86:EF37 + word[86:EF37 + 2*linha] + id do tiro; linha = +$28 no frame ANTES da queda de HP, salvo quando só a linha do frame do acerto explica o resultado (a luta escreveu +$28 antes da leitura em 84:9E23). Nenhum destes casos da caça precisou dessa exceção. $80 = defletido (84:9E48 -> 84:9EEE, SFX $10, sem SBC); byte 0 = SBC 0 em 84:9E73, HP mantido; ambos iguais à tabela. C.STING carregado (tiro $11) não tem caso de acerto: 83:9B8C grava +$30=2; 84:9B5F pula tiros com +$30!=0 antes de 84:9E15/84:9E3A; excluído (18 combinações - 1 = 17). B3: 10/17 casos, 131/131 acertos iguais; takes do primeiro acerto: flame-mammoth-lava_2_23048, flame-mammoth_2_30151, sigma3-cs-death-weapons-branch_2_23162. B6/B7/K18: os 7 casos restantes, WRAM igual em cada frame de cada take: b6-fm-h-torpedo-charged-hunt, b6-fm-r-shield-charged-hunt, b6-fm-f-wave-charged-hunt, b6-fm-e-spark-charged-hunt, b6-fm-b-cutter-normal-hunt, b6-fm-b-cutter-charged-hunt, b6-fm-s-ice-charged-hunt. Todos estes takes da caça têm pixels exatos. Limite: fraquezas nomeadas e interrupções por tiro seguem sob revisão separada quando sua atribuição não é esta mesma tabela de dano."
          }
        },
        {
          "id": "boss.flame-mammoth.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 162,
            "total": 169,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.flame-mammoth.presentation/parts with knowledge_base/mmx1/rom/boss_flame_mammoth_map_supplement_2026-10-09_r72.json#/map_steps/boss.flame-mammoth.presentation with knowledge_base/mmx1/rom/boss_flame_mammoth_map_supplement_2026-10-09_r94.json#/map_steps/boss.flame-mammoth.presentation (76 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.flame-mammoth.presentation/missing and 14 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b10-fm-selection-24-hunt_2_693, 7 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-1-normal-hunt_2_19431, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/flame-mammoth-lava_2_23048), of all 169 parts; other sound and unclassified parts count unseen); read at git 355560fc9; plus 58 parts child:0E68:0E:cell:06:AFA6A7, child:0E68:0E:cell:06:AFA6AC, child:0E68:0E:cell:06:AFA6AF, child:0E68:0E:cell:06:AFA6B2, child:0E68:0E:cell:06:AFA6B5, child:0E68:0E:cell:06:AFA6BA, child:0E68:0E:cell:06:AFA6BF, child:0E68:0E:cell:06:AFA6C2, child:0E68:0E:cell:06:AFA6C5, child:0E68:0E:cell:06:AFA6CA, child:0E68:0E:cell:06:AFA6CD, child:0E68:0E:cell:06:AFA6D0, child:0E68:0E:cell:06:AFA759, child:0E68:0E:cell:06:AFA75C, child:0E68:0E:cell:06:AFA75F, child:0E68:0E:cell:06:AFA762, child:0E68:0E:cell:06:AFA765, child:0E68:0E:cell:06:AFA772, child:0E68:0E:cell:06:AFA775, child:0E68:0E:cell:06:AFA77A, child:0E68:0E:cell:06:AFA77D, child:0E68:0E:cell:06:AFA780, child:0E68:0E:cell:06:AFA783, child:0E68:0E:cell:06:AFA786, child:0E68:0E:cell:06:AFA789, child:0E68:0E:cell:06:AFA78C, child:0E68:0E:cell:06:AFA78F, child:0E68:0E:cell:06:AFA792, child:0E68:0E:cell:06:AFA795, child:0E68:0E:cell:06:AFA798, child:0E68:0E:cell:06:AFA79B, child:0E68:0E:cell:06:AFA79E, child:0E68:0E:cell:06:AFA7A1, child:0E68:0E:cell:06:AFA7A4, child:0E68:0E:cell:06:AFA7A7, child:1428:21:cell:06:AFA721, child:1428:21:cell:06:AFA72F, child:1428:21:cell:06:AFA732, child:1428:21:cell:06:AFA735, child:1428:21:cell:06:AFA738, child:1428:21:cell:06:AFA73B, child:1428:21:cell:06:AFA73E, child:1428:21:cell:06:AFA741, child:1428:21:cell:0C:AFAA99, child:1428:21:cell:0C:AFAA9C, child:1428:21:cell:0C:AFAA9F, child:1428:21:cell:0C:AFAAA2, child:1428:21:cell:0C:AFAAA5, child:1428:21:cell:0C:AFAAA8, child:1428:21:cell:0C:AFAAAB, child:1428:21:cell:0C:AFAAAE, child:1428:21:cell:0C:AFAAC7, child:1428:21:cell:0C:AFAACA, child:1428:21:cell:0C:AFAACD, child:1428:21:cell:0C:AFAAD0, child:1428:21:cell:0C:AFAAD3, child:1428:21:cell:0C:AFAAD6, child:1428:21:cell:0C:AFAAD9 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r83.json#/rows/boss.flame-mammoth.presentation/parts; plus 2 method-f parts child:1428:21:cell:06:AFA673, child:1428:21:cell:06:AFA681 per knowledge_base/mmx1/rom/boss_flame_mammoth_unformed_child_cells_2026-10-09_r93.json#/steps/boss.flame-mammoth.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1928:02:cell:08:AFA878 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.flame-mammoth.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 4 method-f parts child:1428:21:cell:06:AFA746, child:1428:21:cell:06:AFA749, child:1428:21:cell:06:AFA74C, child:1428:21:cell:06:AFA74F per knowledge_base/mmx1/rom/boss_unrequested_cells_2026-10-11_h29.json#/steps/boss.flame-mammoth.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts 0C:cell:06:AFA76D per knowledge_base/mmx1/rom/boss_cells_h39_2026-10-12.json#/steps/boss.flame-mammoth.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 method-f parts 0C:cell:06:AFA691, 0C:cell:06:AFA71C per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.flame-mammoth.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 4 method-f parts child:1428:21:cell:0C:AFAADC, child:1428:21:cell:06:AFA724, child:1428:21:cell:06:AFA727, child:1428:21:cell:06:AFA72A per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b53.json#/steps/boss.flame-mammoth.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/flame-mammoth/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.flame-mammoth.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md",
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): David's FM recording with lava (R6, WRAM 23,047 of 23,047 frames equal): Flame Mammoth (finder 3 id 0x0C, trunk 0x0E) defeats X at checkpoint 2 (health 4->0 at f16012, lives 2->1 at f16235) and the encounter is restored (0x0C at f16809, 0x0E at f16910); its defeat ($1F0C at f20359), its slot until f20893, Fire Wave's slot set at f20894 (R6) and the post-boss screens ($1F7A 30, f21544..21566) follow. Pictures under Mesen2's PPU exact on f16010..16912 (903 of 903) and f20357..21568 (1,212 of 1,212); five fight frames differ (f13700, f13727, f14042, f14196, f17344; class other). The older FM recording's defeat and exit as L4 cited them (K8, V6). Bound: one player defeat; attacks and sounds belong to the other boss steps.",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): gravação FM com lava do David (R6, WRAM 23.047 de 23.047 quadros iguais): Flame Mammoth (finder 3 id 0x0C, tromba 0x0E) derrota o X no checkpoint 2 (vida 4->0 em f16012, vidas 2->1 em f16235) e o encontro é restaurado (0x0C em f16809, 0x0E em f16910); seguem a derrota do chefe ($1F0C em f20359), seu slot até f20893, o slot da Fire Wave em f20894 (R6) e as telas pós-chefe ($1F7A 30, f21544..21566). Imagens com a PPU do Mesen2 exatas em f16010..16912 (903 de 903) e f20357..21568 (1.212 de 1.212); cinco quadros da luta diferem (f13700, f13727, f14042, f14196, f17344; classe other). Derrota e saída da gravação FM anterior como o L4 citou (K8, V6). Limite: uma derrota do jogador; ataques e sons são dos outros passos do chefe."
          }
        }
      ]
    },
    {
      "id": "boss.spark-mandrill",
      "category": "bosses",
      "title": {
        "pt": "Spark Mandrill",
        "en": "Spark Mandrill"
      },
      "steps": [
        {
          "id": "boss.spark-mandrill.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 14,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/apu_boss_door_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_boss_sections_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "tools/rom/apu_gate.py",
            "tools/rom/ppu_gate.py",
            "tools/tests/test_apu_gate_start_state.py",
            "tools/tests/test_ppu_boss_sections.py",
            "tools/tests/test_rom_ppu_gate.py",
            "tools/tests/test_apu_gate_spc_start_pending_accesses.py"
          ],
          "note": {
            "pt": "2026-09-26 (cartão A26 rodada 5, depois de A25, A18-A24 e V15), modo ROM-first: a entrada do Spark Mandrill na gravação do SM (posição e arena, portas, intro, bloqueio e liberação dos controles, câmera, enchimento de HP) é igual à WRAM do original em todos os quadros (V12, 27,368 de 27,368) e à imagem com o PPU do Mesen2 (V12, V15, 27,343 de 27,367; os seus 24 quadros não exatos estão todos antes de f23032); seções do chefe com o OID 0x31 num slot de inimigo dentro da janela: f23244..25411 2,168 de 2,168; a passagem da porta, checkpoint 2 f23032..23243, igual. Conferência de câmera 453 de 456 (V15). Música: o apu_gate (o driver de som do jogo no SPC700/DSP do LakeSnes, iniciado do estado do SPC no Mesen2) é igual ao original em f23032..25471, 2,440 de 2,440 quadros, toda leitura de porta na mesma instrução (52,645 de 52,645), de 212 quadros antes de o chefe entrar no slot, pela porta, intro e enchimento de HP. Limite: a entrada gravada nesta gravação.",
            "en": "2026-09-26 (card A26 round 5, after A25, A18-A24 and V15), ROM-first mode: Spark Mandrill's entrance in the SM recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (V12, 27,368 of 27,368) and its picture under Mesen2's PPU (V12, V15, 27,343 of 27,367; its 24 non-exact frames all lie before f23032); boss sections with the boss OID 0x31 in an enemy slot inside the window: f23244..25411 2,168 of 2,168; the door passage, checkpoint 2 f23032..23243, equal. Camera check 453 of 456 (V15). Music: apu_gate (the game's sound driver on LakeSnes's SPC700/DSP, started from Mesen2's SPC state) equals the original on f23032..25471, 2,440 of 2,440 frames, every port read at the same instruction (52,645 of 52,645), from 212 frames before the boss enters its slot, through the door, intro and HP fill. Bound: the recorded entrance in this take."
          }
        },
        {
          "id": "boss.spark-mandrill.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/spark-mandrill/boss.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/equality_witnesses_2026-10-12_h31.json",
            "docs/tasks/done/H31-equality-witness-tool-and-pilot.md"
          ],
          "note": {
            "pt": "2026-10-12 (L78, carta H31): 30 de 30 partes de ataque do Spark Mandrill vistas. A última, 31:fight:21 (+01=04 +02=08), é testemunhada por igualdade (regra 13 do ledger, revisão 2026-10-12-equality-witness): o take caçador h30-sm-m3-493-l-hunt da H30 a mostra nos quadros 527-558 do original e a WRAM do nosso port é igual nos quadros 2-558, 557 de 557, sem tolerância (knowledge_base/mmx1/rom/equality_witnesses_2026-10-12_h31.json). Vistos: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.spark-mandrill.attacks/witnessed (29 witnessed of the map total 30, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.spark-mandrill.attacks/summary/total); read at git af0352d26; plus 1 parts 31:fight:21 per knowledge_base/mmx1/rom/equality_witnesses_2026-10-12_h31.json#/rows/boss.spark-mandrill.attacks/parts.",
            "en": "2026-10-12 (L78, card H31): 30 of 30 attack parts of Spark Mandrill seen. The last, 31:fight:21 (+01=04 +02=08), is witnessed by equality (ledger rule 13, revision 2026-10-12-equality-witness): H30's hunter take h30-sm-m3-493-l-hunt holds it at frames 527-558 in the original and our port's WRAM is equal at frames 2-558, 557 of 557, no tolerance (knowledge_base/mmx1/rom/equality_witnesses_2026-10-12_h31.json). Seen: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.spark-mandrill.attacks/witnessed (29 witnessed of the map total 30, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.spark-mandrill.attacks/summary/total); read at git af0352d26; plus 1 parts 31:fight:21 per knowledge_base/mmx1/rom/equality_witnesses_2026-10-12_h31.json#/rows/boss.spark-mandrill.attacks/parts."
          }
        },
        {
          "id": "boss.spark-mandrill.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/spark-mandrill/boss.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json",
            "docs/tasks/done/H30-hunt-sm-hit-state-and-utuboros-charged.md"
          ],
          "note": {
            "pt": "2026-10-12 (L106, carta H30): 30 de 30 partes de seleção do Spark Mandrill vistas. As 28 partes antigas e 31:choice:22 e 31:choice:23: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.spark-mandrill.selection/witnessed (28 witnessed of the map total 30, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.spark-mandrill.selection/summary/total); read at git fc9935676; plus 2 parts 31:choice:22, 31:choice:23 per knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json#/parts/boss.spark-mandrill.selection. As duas partes novas vêm do estado raro do Mandrill acionado por golpe (um tiro carregado do buster que o atinge em +02=04 +03=02 o leva a +01=04 +02=08): 20 de 31 caçadas do XEON o alcançaram, cada intake verificado N de N; testemunha h30-sm-m1-1088-l-hunt (WRAM 2408 de 2408, frame gate 2408 de 2408, quadros 2407 de 2407), 31:choice:22 no quadro 2260 e 31:choice:23 no quadro 2291 (knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json).",
            "en": "2026-10-12 (L106, card H30): 30 of 30 selection parts of Spark Mandrill seen. The 28 earlier parts and 31:choice:22 and 31:choice:23: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.spark-mandrill.selection/witnessed (28 witnessed of the map total 30, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.spark-mandrill.selection/summary/total); read at git fc9935676; plus 2 parts 31:choice:22, 31:choice:23 per knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json#/parts/boss.spark-mandrill.selection. The two new parts come from Mandrill's hit-driven rare state (a charged buster shot that hits him in +02=04 +03=02 puts him in +01=04 +02=08): 20 of 31 XEON hunts reached it, every intake verified N of N; witness take h30-sm-m1-1088-l-hunt (WRAM 2408 of 2408, frame gate 2408 of 2408, frames 2407 of 2407), 31:choice:22 at frame 2260 and 31:choice:23 at frame 2291 (knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json)."
          }
        },
        {
          "id": "boss.spark-mandrill.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/oracle/post/reduce_hunt_damage.py",
            "tools/tests/test_reduce_hunt_damage.py",
            "docs/tasks/done/B6-maverick-damage-hunt.md",
            "docs/tasks/done/B7-damage-take-divergence.md",
            "docs/tasks/done/K18-capture-interval-split.md"
          ],
          "note": {
            "en": "2026-09-26 (L33, after K18 d8f08f9bb; G5 format), ROM-first: spark-mandrill (id 0x31) damage matrix whole, 17 of 17 cases seen and equal, 0 stops. B3 decision 3 + B4 + B7: byte = 86:EF37 + word[86:EF37 + 2*row] + shot id; row is +$28 on the frame BEFORE the HP drop, except when only the hit-frame row explains the outcome (the fight wrote +$28 before 84:9E23 read it). None of these hunt cases needed that exception. $80 = deflected (84:9E48 -> 84:9EEE, SFX $10, no SBC); byte 0 = SBC 0 at 84:9E73, HP kept; both equal the table. Charged C.STING (shot $11) has no hit case: 83:9B8C sets +$30=2; 84:9B5F skips shots with +$30!=0 before 84:9E15/84:9E3A; excluded (18 combinations - 1 = 17). B3: 11/17 cases, 97/97 hits equal; first-hit takes: sigma3-cs-death-weapons-branch_2_23162. B6/B7/K18: the remaining 6 cases, WRAM-equal on every frame of each take: b6-sm-h-torpedo-charged-hunt, b6-sm-r-shield-charged-hunt, b6-sm-f-wave-charged-hunt, b6-sm-storm-t-charged-hunt, b6-sm-e-spark-charged-hunt, b6-sm-b-cutter-charged-hunt. All these hunt takes are pixel-exact. Bound: named weaknesses and per-shot attack interrupts remain under separate review where their attribution is not this same damage table.",
            "pt": "2026-09-26 (L33, após K18 d8f08f9bb; formato G5), ROM-first: matriz de dano de spark-mandrill (id 0x31) inteira, 17 de 17 casos vistos e iguais, 0 paradas. B3 decisão 3 + B4 + B7: byte = 86:EF37 + word[86:EF37 + 2*linha] + id do tiro; linha = +$28 no frame ANTES da queda de HP, salvo quando só a linha do frame do acerto explica o resultado (a luta escreveu +$28 antes da leitura em 84:9E23). Nenhum destes casos da caça precisou dessa exceção. $80 = defletido (84:9E48 -> 84:9EEE, SFX $10, sem SBC); byte 0 = SBC 0 em 84:9E73, HP mantido; ambos iguais à tabela. C.STING carregado (tiro $11) não tem caso de acerto: 83:9B8C grava +$30=2; 84:9B5F pula tiros com +$30!=0 antes de 84:9E15/84:9E3A; excluído (18 combinações - 1 = 17). B3: 11/17 casos, 97/97 acertos iguais; takes do primeiro acerto: sigma3-cs-death-weapons-branch_2_23162. B6/B7/K18: os 6 casos restantes, WRAM igual em cada frame de cada take: b6-sm-h-torpedo-charged-hunt, b6-sm-r-shield-charged-hunt, b6-sm-f-wave-charged-hunt, b6-sm-storm-t-charged-hunt, b6-sm-e-spark-charged-hunt, b6-sm-b-cutter-charged-hunt. Todos estes takes da caça têm pixels exatos. Limite: fraquezas nomeadas e interrupções por tiro seguem sob revisão separada quando sua atribuição não é esta mesma tabela de dano."
          }
        },
        {
          "id": "boss.spark-mandrill.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 155,
            "total": 161,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.spark-mandrill.presentation/parts (123 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.spark-mandrill.presentation/missing and 17 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (10 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-1-normal-hunt_2_19431, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/spark-mandrill-death-branch_1_25137, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/spark-mandrill_1_27368), of all 161 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 12 parts 31:cell:91:AFDE9F, 31:cell:91:AFDEA2, 31:cell:91:AFDEA5, 31:cell:91:AFDEA8, 31:cell:91:AFDEAB, 31:cell:91:AFDEAE, 31:cell:91:AFDEB1, 31:cell:91:AFDEB4, 31:cell:91:AFDEB7, 31:cell:91:AFDEBA, 31:cell:91:AFDEBD, 31:cell:91:AFDEC0 per knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json#/parts/boss.spark-mandrill.presentation; plus 1 method-f parts child:1928:02:cell:08:AFA878 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.spark-mandrill.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 method-f parts 31:cell:91:AFDF3A, 31:cell:91:AFDF8D per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.spark-mandrill.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/spark-mandrill/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.spark-mandrill.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_deaths_2026-09-26.json",
            "tools/tests/test_branch_deaths.py",
            "tools/oracle/branch_take.py",
            "docs/tasks/done/R16-branch-takes-maverick-deaths.md"
          ],
          "note": {
            "pt": "2026-09-26 (card R16, regra do L9), modo ROM-first (megaman-x.exe --rom-first): take ramificada spark-mandrill-death-branch, o savestate e as linhas 1..23302 da take spark-mandrill e depois entradas criadas (nenhuma até a derrota do X, depois a busca do R16 de volta à porta do chefe; tools/oracle/branch_take.py), WRAM igual em todos os 25.137 quadros, portão de quadros inteiro. O chefe (id 0x31) derrota o X em f24321 (energia 0, ação $0C), vidas 2->1 em f24522, o X volta ao checkpoint 2 em f24561 e o encontro é restaurado (0x31 ativo de novo em f25016); imagens pelo PPU do Mesen2 exatas nesses quadros (25.112 de 25.136 na take). Derrota e passagem em spark-mandrill (WRAM igual 27368 de 27368): derrota (owner HP 0) em f24875, Electric Spark ganha em f25411, suas telas até f25951; imagens exatas em f24873..25953 (1.081 de 1.081). Limite: uma derrota do jogador; ataques e sons pertencem aos outros passos do chefe.",
            "en": "2026-09-26 (card R16, L9's rule), ROM-first mode (megaman-x.exe --rom-first): branch take spark-mandrill-death-branch, the spark-mandrill take's savestate and lines 1..23302 then crafted inputs (none until X's defeat, then R16's goal search back to the boss door; tools/oracle/branch_take.py), WRAM equal on all 25,137 frames, frame gate whole. The boss (id 0x31) defeats X at f24321 (health 0, action $0C), lives 2->1 at f24522, X is back at checkpoint 2 at f24561 and the encounter is restored (0x31 active again at f25016); pictures under Mesen2's PPU exact on those frames (25,112 of 25,136 in the take). Defeat and handoff in spark-mandrill (WRAM equal 27368 of 27368): defeat (owner HP 0) at f24875, Electric Spark gained at f25411, its screens to f25951; pictures exact on f24873..25953 (1,081 of 1,081). Bound: one player defeat; attacks and sounds belong to the other boss steps."
          }
        }
      ]
    },
    {
      "id": "boss.armored-armadillo",
      "category": "bosses",
      "title": {
        "pt": "Armored Armadillo",
        "en": "Armored Armadillo"
      },
      "steps": [
        {
          "id": "boss.armored-armadillo.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 14,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/tasks/done/B14-boss-entry-intakes.md",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "tools/oracle/intake_movie.py",
            "tools/rom/ppu_gate.py",
            "tools/rom/apu_gate.py",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json"
          ],
          "note": {
            "en": "2026-09-28 B14, ROM-first recorded entrance in armored-armadillo: all catalogue entry states witnessed; position/arena, doors, intro, controls, camera and HP fill covered by 15055/15055 WRAM entries and 15054/15054 exact pictures. Music: committed A23 full-window gate, 15054/15054 APU frames and 386890/386890 port reads, no uncaptured live reads; WAV hash checked. Current named-take intake and source bindings are in the card Result. Bound: this recorded entrance; player-loss return is separate.",
            "pt": "2026-09-28 B14, entrada gravada ROM-first em armored-armadillo: todos os estados de entrada catalogados vistos; posição/arena, portas, intro, controles, câmera e HP cobertos por 15055/15055 estados WRAM e 15054/15054 imagens exatas. Música: gate A23 da janela completa, 15054/15054 quadros APU e 386890/386890 leituras de portas, nenhuma leitura viva ausente; hash WAV conferido. Intake atual e vínculos de origem no Result do cartão. Limite: esta entrada gravada; retorno após derrota separado."
          }
        },
        {
          "id": "boss.armored-armadillo.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 1), modo ROM-first: armored-armadillo (id 0x14), tabela de estados 83:B144 (eventID_armadillo_14_main). Estados vistos 23 de 23, imagem exata no primeiro quadro de cada estado. Takes: armored-armadillo-death-branch_1_11865, armored-armadillo_1_15055. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 1), ROM-first mode: armored-armadillo (id 0x14), state table 83:B144 (eventID_armadillo_14_main). States seen 23 of 23, picture-exact on the first frame of every state. Takes: armored-armadillo-death-branch_1_11865, armored-armadillo_1_15055. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.armored-armadillo.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/armored-armadillo/boss.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json"
          ],
          "note": {
            "pt": "B12: 29/29 grupos de escrita do dono vistos. Catálogo corrigido com endereços ROM; novas partes provadas por eventos e snapshots consecutivos, intake exato e retenção T2. Detalhes: catalogue_corrections e B12_reductions no KB.",
            "en": "B12: 29/29 owner-write groups seen. ROM-cited catalogue corrections; new parts proved by exact events and consecutive owner snapshots, exact intake and T2 retention. See KB catalogue_corrections and B12_reductions."
          }
        },
        {
          "id": "boss.armored-armadillo.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/oracle/post/reduce_hunt_damage.py",
            "tools/tests/test_reduce_hunt_damage.py",
            "docs/tasks/done/B6-maverick-damage-hunt.md"
          ],
          "note": {
            "pt": "2026-09-28 (coordenador): matriz de dano do armored-armadillo completa, 17 de 17 casos vistos e iguais. O ultimo caso (H.TORPEDO carregado) foi reverificado pela entrada a partir de f902 (fonte sigma3_2_26312 verificada): WRAM 856/856, imagem 855/855. Regra B3 decisao 3 + B4 + B7, como os demais.",
            "en": "2026-09-28 (coordinator): armored-armadillo damage matrix whole, 17 of 17 cases seen and equal. The last case (H.TORPEDO charged) was re-intaken from f902 (from-S, verified source sigma3_2_26312): WRAM 856/856, pictures 855/855. Rule B3 decision 3 + B4 + B7, as for the others."
          }
        },
        {
          "id": "boss.armored-armadillo.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 154,
            "total": 161,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.armored-armadillo.presentation/parts (122 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.armored-armadillo.presentation/missing and 18 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/armored-armadillo-death-branch_8581_11865, 9 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055, 7 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-1-normal-hunt_2_19431), of all 161 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 12 method-f parts 14:cell:63:AFCE3D, 14:cell:63:AFCE40, 14:cell:63:AFCE43, 14:cell:63:AFCE48, 14:cell:63:AFCE4B, 14:cell:63:AFCE4E, 14:cell:63:AFCE51, 14:cell:63:AFCE56, 14:cell:63:AFCE5B, 14:cell:63:AFCE60, child:1928:02:cell:08:AFA878, child:1928:22:cell:17:AFAE52 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.armored-armadillo.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 method-f parts 14:cell:62:AFCD08, 14:cell:62:AFCD5E per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.armored-armadillo.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/armored-armadillo/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.armored-armadillo.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_deaths_2026-09-26.json",
            "tools/tests/test_branch_deaths.py",
            "tools/oracle/branch_take.py",
            "docs/tasks/done/R16-branch-takes-maverick-deaths.md",
            "docs/tasks/done/L30-ledger-outro-residuals.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L30, KB do R16 com a regra de resíduo do L8), modo ROM-first (megaman-x.exe --rom-first): take ramificada armored-armadillo-death-branch, o savestate e as linhas 1..8691 da take armored-armadillo e depois entradas criadas (nenhuma até a derrota do X, depois a busca do R16 de volta à porta do chefe; tools/oracle/branch_take.py), WRAM igual em todos os 11.865 quadros, portão de quadros inteiro. O chefe (id 0x14) derrota o X em f11033 (energia 0, ação $0C), vidas 2->1 em f11234, o X volta ao checkpoint 2 em f11273 e o encontro é restaurado (0x14 ativo de novo em f11747); imagens pelo PPU do Mesen2 exatas nesses quadros e em todo o trecho f11033..11747 (715 de 715). Derrota e passagem em armored-armadillo (WRAM igual 15055 of 15055): derrota (owner HP 0) em f11646, Rolling Shield ganha em f12181, suas telas até f12690; imagens exatas em 1.045 de 1.049 quadros de f11644..12692; os outros, f11645, f11887, f12618, f12676, são resíduos de imagem que pertencem ao passo de apresentação do chefe (regra do L8, como no L29; o R16 segurou o passo por eles). Limite: uma derrota do jogador; ataques e sons pertencem aos outros passos do chefe.",
            "en": "2026-09-26 (card L30, R16's KB with L8's residual rule), ROM-first mode (megaman-x.exe --rom-first): branch take armored-armadillo-death-branch, the armored-armadillo take's savestate and lines 1..8691 then crafted inputs (none until X's defeat, then R16's goal search back to the boss door; tools/oracle/branch_take.py), WRAM equal on all 11,865 frames, frame gate whole. The boss (id 0x14) defeats X at f11033 (health 0, action $0C), lives 2->1 at f11234, X is back at checkpoint 2 at f11273 and the encounter is restored (0x14 active again at f11747); pictures under Mesen2's PPU exact on those frames and on the whole span f11033..11747 (715 of 715). Defeat and handoff in armored-armadillo (WRAM equal 15055 of 15055): defeat (owner HP 0) at f11646, Rolling Shield gained at f12181, its screens to f12690; pictures exact on 1,045 of 1,049 frames of f11644..12692; the others, f11645, f11887, f12618, f12676, are picture residuals that belong to the boss's presentation step (L8's rule, as L29; R16 held the step for them). Bound: one player defeat; attacks and sounds belong to the other boss steps."
          }
        }
      ]
    },
    {
      "id": "boss.launch-octopus",
      "category": "bosses",
      "title": {
        "pt": "Launch Octopus",
        "en": "Launch Octopus"
      },
      "steps": [
        {
          "id": "boss.launch-octopus.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 14,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/apu_boss_door_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_boss_sections_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "tools/rom/apu_gate.py",
            "tools/rom/ppu_gate.py",
            "tools/tests/test_apu_gate_start_state.py",
            "tools/tests/test_ppu_boss_sections.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-26 (cartão A25, depois de A18-A24 e V15), modo ROM-first: a entrada do Launch Octopus na gravação do LO (posição e arena, portas, intro, bloqueio e liberação dos controles, câmera, enchimento de HP) é igual à WRAM do original em todos os quadros (V12, 38,341 de 38,341) e à imagem com o PPU do Mesen2 (V12, V15, 38,340 de 38,340); seções do chefe com o OID 0x07 num slot de inimigo dentro da janela: f19513..22426 2,914 de 2,914, f22959..27407 4,449 de 4,449; a passagem da porta, checkpoint 2 f19278..19512, igual. Conferência de câmera 605 de 639 (V15). Música: o apu_gate (o driver de som do jogo no SPC700/DSP do LakeSnes, iniciado do estado do SPC no Mesen2) é igual ao original em f19278..27467, 8,190 de 8,190 quadros, toda leitura de porta na mesma instrução (248,415 de 248,415), de 235 quadros antes de o chefe entrar no slot, pela porta, intro e enchimento de HP. Limite: as entradas gravadas nesta gravação.",
            "en": "2026-09-26 (card A25, after A18-A24 and V15), ROM-first mode: Launch Octopus's entrance in the LO recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (V12, 38,341 of 38,341) and its picture under Mesen2's PPU (V12, V15, 38,340 of 38,340); boss sections with the boss OID 0x07 in an enemy slot inside the window: f19513..22426 2,914 of 2,914, f22959..27407 4,449 of 4,449; the door passage, checkpoint 2 f19278..19512, equal. Camera check 605 of 639 (V15). Music: apu_gate (the game's sound driver on LakeSnes's SPC700/DSP, started from Mesen2's SPC state) equals the original on f19278..27467, 8,190 of 8,190 frames, every port read at the same instruction (248,415 of 248,415), from 235 frames before the boss enters its slot, through the door, intro and HP fill. Bound: the recorded entrances in this take."
          }
        },
        {
          "id": "boss.launch-octopus.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r102.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/R102-attack-spawn-sites-call-captures.md"
          ],
          "note": {
            "pt": "2026-10-09 (L40, regra do LG6 s2): verificado; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json lista 0 faltando e 0 excluídas, 23 de 23 partes testemunhadas (pontos de criação de filhos pelas capturas de chamada do alocador do R102, registros em knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r102.json); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa.",
            "en": "2026-10-09 (L40, LG6 s2 rule): verified; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json lists 0 missing and 0 excluded, 23 of 23 parts witnessed (child spawn sites by R102's allocator call captures, records in knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r102.json); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step."
          }
        },
        {
          "id": "boss.launch-octopus.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 21,
            "total": 22,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.launch-octopus.selection/witnessed (20 witnessed of the map total 22, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.launch-octopus.selection/summary/total); read at git d06e9fee4; plus 1 parts 07:choice:20 per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r105.json#/steps/boss.launch-octopus.selection/evidence"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/launch-octopus/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.launch-octopus.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 17,
            "total": 20,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.launch-octopus.damage/witnessed (14 witnessed of the map total 20, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.launch-octopus.damage/summary/total); read at git 7041aa42c; plus 2 parts 07:weapon:14, 07:weapon:16 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09.json#/candidates/boss.launch-octopus.damage/parts; plus 1 method-f parts 07:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.launch-octopus.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/launch-octopus/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.launch-octopus.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 276,
            "total": 283,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.launch-octopus.presentation/parts (194 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.launch-octopus.presentation/missing and 17 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (10 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-1-normal-hunt_2_19431, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b6-lo-h-torpedo-charged-hunt_11942_13040, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/launch-octopus-and-sting-flooded_2_38342, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/p58-astra-hurt-3d-wall-r1_20225_20470), of all 283 parts; other sound and unclassified parts count unseen); read at git 355560fc9; plus 1 parts 07:cell:76:AFD661 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09.json#/candidates/boss.launch-octopus.presentation/parts; plus 16 parts child:0E68:08:cell:76:AFD6C8, child:0E68:08:cell:76:AFD6B4, child:0E68:08:cell:76:AFD6B9, child:0E68:08:cell:76:AFD6BE, child:0E68:08:cell:76:AFD6C3, child:0E68:08:cell:76:AFD6CD, child:0E68:08:cell:76:AFD6D2, child:0E68:08:cell:76:AFD6D7, child:0E68:08:cell:76:AFD6DC, child:0E68:08:cell:76:AFD6E1, child:0E68:08:cell:76:AFD6E6, child:0E68:08:cell:76:AFD6EB, child:0E68:08:cell:76:AFD6F0, child:0E68:08:cell:76:AFD6F5, child:0E68:08:cell:76:AFD6FA, child:0E68:08:cell:76:AFD6FF per knowledge_base/mmx1/rom/boss_owner_pool_children_2026-10-09_r92.json#/rows/boss.launch-octopus.presentation/parts; plus 37 method-f parts 07:cell:76:AFD4EC, 07:cell:76:AFD59A, 07:cell:76:AFD59D, 07:cell:76:AFD5A0, 07:cell:76:AFD5A3, 07:cell:76:AFD5A6, 07:cell:76:AFD5A9, 07:cell:76:AFD5AC, 07:cell:76:AFD5AF, 07:cell:76:AFD67D, 07:cell:76:AFD682, 07:cell:76:AFD685, 07:cell:76:AFD688, 07:cell:76:AFD68B, 07:cell:76:AFD690, 07:cell:76:AFD693, 07:cell:76:AFD696, 07:cell:76:AFD699, 07:cell:76:AFD6A9, 07:cell:76:AFD6AC, 07:cell:76:AFD6AF, 07:cell:76:AFD6B4, 07:cell:76:AFD6B9, 07:cell:76:AFD6BE, 07:cell:76:AFD6C3, 07:cell:76:AFD6C8, 07:cell:76:AFD6CD, 07:cell:76:AFD6D2, 07:cell:76:AFD6D7, 07:cell:76:AFD6DC, 07:cell:76:AFD6E1, 07:cell:76:AFD6E6, 07:cell:76:AFD6EB, 07:cell:76:AFD6F0, 07:cell:76:AFD6F5, 07:cell:76:AFD6FA, 07:cell:76:AFD6FF per knowledge_base/mmx1/rom/boss_unrequested_animation_cells_2026-10-11_r125.json#/steps/boss.launch-octopus.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 10 method-f parts 07:cell:76:AFD4FD, 07:cell:76:AFD500, 07:cell:76:AFD584, 07:cell:76:AFD60B, 07:cell:76:AFD625, 07:cell:76:AFD63F, 07:cell:76:AFD650, 07:cell:76:AFD653, 07:cell:76:AFD656, 07:cell:76:AFD659 per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.launch-octopus.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1428:1D:cell:77:AFD749 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b53.json#/steps/boss.launch-octopus.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/launch-octopus/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.launch-octopus.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): David's launch-octopus take (R7, WRAM 38,341 of 38,341 frames equal): the boss (finder 3 id 0x07, the only enemy id active at its defeat and at X's) defeats X at checkpoint 2 (health 1->0 at f22174, lives 2->1 at f22395) and the encounter is restored (0x07 at f22958); its defeat ($1F0C at f26872), its slot until f27406, Homing Torpedo at f27407 and the post-boss screens ($1F7A 27, f28001..28023) follow, then the stage select. Pictures under Mesen2's PPU exact on every frame f19510..28569 (both encounters, X's defeat, the boss's defeat and the exit; 9,060 of 9,060). Bound: one player defeat; attacks and sounds belong to the other boss steps.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): gravação launch-octopus do David (R7, WRAM 38.341 de 38.341 quadros iguais): o chefe (finder 3 id 0x07, o único id de inimigo ativo na sua derrota e na do X) derrota o X no checkpoint 2 (vida 1->0 em f22174, vidas 2->1 em f22395) e o encontro é restaurado (0x07 em f22958); seguem a derrota do chefe ($1F0C em f26872), seu slot até f27406, o Homing Torpedo em f27407 e as telas pós-chefe ($1F7A 27, f28001..28023), depois a seleção de fases. Imagens com a PPU do Mesen2 exatas em todo quadro f19510..28569 (os dois encontros, a derrota do X, a do chefe e a saída; 9.060 de 9.060). Limite: uma derrota do jogador; ataques e sons são dos outros passos do chefe."
          }
        }
      ]
    },
    {
      "id": "boss.boomer-kuwanger",
      "category": "bosses",
      "title": {
        "pt": "Boomer Kuwanger",
        "en": "Boomer Kuwanger"
      },
      "steps": [
        {
          "id": "boss.boomer-kuwanger.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/apu_boss_door_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_boss_sections_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "tools/rom/apu_gate.py",
            "tools/rom/ppu_gate.py",
            "tools/tests/test_apu_gate_start_state.py",
            "tools/tests/test_ppu_boss_sections.py",
            "tools/tests/test_rom_ppu_gate.py",
            "tools/tests/test_apu_gate_spc_start_pending_accesses.py"
          ],
          "note": {
            "pt": "2026-09-26 (cartão A26 rodada 5, depois de A25, A18-A24 e V15), modo ROM-first: a entrada do Boomer Kuwanger na gravação do BK (posição e arena, portas, intro, bloqueio e liberação dos controles, câmera, enchimento de HP) é igual à WRAM do original em todos os quadros (V12, 40,070 de 40,070) e à imagem com o PPU do Mesen2 (V12, V15, 40,069 de 40,069); seções do chefe com o OID 0x05 num slot de inimigo dentro da janela: f34284..37393 3,110 de 3,110; a passagem da porta, checkpoint 2 f33802..34283, igual. Conferência de câmera 663 de 667 (V15). Música: o apu_gate (o driver de som do jogo no SPC700/DSP do LakeSnes, iniciado do estado do SPC no Mesen2) é igual ao original em f33802..37453, 3,652 de 3,652 quadros, toda leitura de porta na mesma instrução (219,433 de 219,433), de 482 quadros antes de o chefe entrar no slot, pela porta, intro e enchimento de HP. Limite: as entradas antes da janela (f18135, f31236) são iguais em WRAM e imagem, mas sem gate de som; uma entrada após uma derrota do jogador pertence ao passo de morte e retorno.",
            "en": "2026-09-26 (card A26 round 5, after A25, A18-A24 and V15), ROM-first mode: Boomer Kuwanger's entrance in the BK recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (V12, 40,070 of 40,070) and its picture under Mesen2's PPU (V12, V15, 40,069 of 40,069); boss sections with the boss OID 0x05 in an enemy slot inside the window: f34284..37393 3,110 of 3,110; the door passage, checkpoint 2 f33802..34283, equal. Camera check 663 of 667 (V15). Music: apu_gate (the game's sound driver on LakeSnes's SPC700/DSP, started from Mesen2's SPC state) equals the original on f33802..37453, 3,652 of 3,652 frames, every port read at the same instruction (219,433 of 219,433), from 482 frames before the boss enters its slot, through the door, intro and HP fill. Bound: the entrances before the window (f18135, f31236) are equal in WRAM and pictures but not sound-gated; an entrance after a player defeat belongs to death and return."
          }
        },
        {
          "id": "boss.boomer-kuwanger.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 1), modo ROM-first: boomer-kuwanger (id 0x05), tabela de estados 87:8A7E (eventID_flammingle_04_main). Estados vistos 20 de 20, imagem exata no primeiro quadro de cada estado. Takes: boomer-kuwanger_1_40070. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 1), ROM-first mode: boomer-kuwanger (id 0x05), state table 87:8A7E (eventID_flammingle_04_main). States seen 20 of 20, picture-exact on the first frame of every state. Takes: boomer-kuwanger_1_40070. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.boomer-kuwanger.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 27,
            "total": 30,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.boomer-kuwanger.selection/witnessed (27 witnessed of the map total 30, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.boomer-kuwanger.selection/summary/total); read at git efd5b74b2"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/boomer-kuwanger/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.boomer-kuwanger.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_hunt_2026-09-26.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/oracle/post/reduce_hunt_damage.py",
            "tools/tests/test_reduce_hunt_damage.py",
            "docs/tasks/done/B6-maverick-damage-hunt.md"
          ],
          "note": {
            "pt": "2026-09-28: matriz de dano de boomer-kuwanger completa, 17 de 17 casos vistos e iguais, 1 sem caso de acerto no ROM. Regra B3 decisao 3 + B4 + B7.",
            "en": "2026-09-28: boomer-kuwanger damage matrix whole, 17 of 17 cases seen and equal, 1 with no ROM hit case. Rule B3 decision 3 + B4 + B7."
          }
        },
        {
          "id": "boss.boomer-kuwanger.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 117,
            "total": 136,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.boomer-kuwanger.presentation/parts with knowledge_base/mmx1/rom/boss_boomer_kuwanger_map_supplement_2026-10-09_r72.json#/map_steps/boss.boomer-kuwanger.presentation (77 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.boomer-kuwanger.presentation/missing and 17 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b6-bk-b-cutter-charged-hunt_18062_18786, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b6-bk-e-spark-charged-hunt_18062_18795, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b6-bk-f-wave-charged-hunt_18062_18795, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-bk-0x05-selection-01-04-02-08-3e-06-02-06-03-00-at-hunt_1_18813, 6 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-bospider-0x63-selection-01-04-02-04-03-var-02-0a-at-82-e0-hunt_2_22882, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/boomer-kuwanger_1_40070, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/hadouken_1_73902), of all 136 parts; other sound and unclassified parts count unseen); read at git 0f969a1d6; plus 1 method-f parts child:1928:02:cell:08:AFA878 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.boomer-kuwanger.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 9 method-f parts 05:cell:75:AFD40D, 05:cell:75:AFD410, 05:cell:75:AFD413, 05:cell:75:AFD416, 05:cell:75:AFD419, 05:cell:75:AFD41C, 05:cell:75:AFD41F, 05:cell:75:AFD422, 05:cell:75:AFD425 per knowledge_base/mmx1/rom/boss_unrequested_cells_2026-10-11_h29.json#/steps/boss.boomer-kuwanger.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 12 method-f parts 05:cell:75:AFD408, 05:cell:75:AFD461, 05:cell:75:AFD464, 05:cell:75:AFD467, 05:cell:75:AFD46A, 05:cell:75:AFD46D, 05:cell:75:AFD470, 05:cell:75:AFD473, 05:cell:75:AFD476, 05:cell:75:AFD479, 05:cell:75:AFD47C, 05:cell:75:AFD47F per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.boomer-kuwanger.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 sound parts 05:sound:878C15 traced per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/sound/boss.boomer-kuwanger.presentation inside whole APU-gated windows (b6-bk-b-cutter-charged-hunt_18062_18786)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/boomer-kuwanger/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.boomer-kuwanger.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): David's Boomer Kuwanger recording (R6, WRAM 40,070 of 40,070 frames equal): the boss object (finder 3 id 0x05, the only enemy id active at the defeat; R6 notes that the census names of 0x05 and 0x06 look swapped) defeats X twice at checkpoint 2: at f18708 with no lives left (continue with 2 lives at f19080, the stage replayed from checkpoint 0 at f20596, the boss met again at f31235) and at f33575 (lives 1->0 at f33770, back at checkpoint 2, the encounter restored at f34283). Defeat ($1F0C) at f36858, its slot until f37392, Boomerang Cutter at f37393, post-boss screens ($1F7A 33) f38009..38031. Pictures under Mesen2's PPU exact on every frame of f18132..20602 and f31233..38033. Bound: attacks, sounds and the damage matrix belong to the other boss steps.",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): gravação Boomer Kuwanger do David (R6, WRAM 40.070 de 40.070 quadros iguais): o objeto do chefe (finder 3 id 0x05, o único id de inimigo ativo na derrota; o R6 nota que os nomes do censo de 0x05 e 0x06 parecem trocados) derrota o X duas vezes no checkpoint 2: em f18708 sem vidas (continue com 2 vidas em f19080, fase repetida desde o checkpoint 0 em f20596, chefe de novo em f31235) e em f33575 (vidas 1->0 em f33770, volta ao checkpoint 2, encontro restaurado em f34283). Derrota ($1F0C) em f36858, slot até f37392, Boomerang Cutter em f37393, telas pós-chefe ($1F7A 33) f38009..38031. Imagens com a PPU do Mesen2 exatas em todo quadro de f18132..20602 e f31233..38033. Limite: ataques, sons e matriz de dano são dos outros passos do chefe."
          }
        }
      ]
    },
    {
      "id": "boss.sting-chameleon",
      "category": "bosses",
      "title": {
        "pt": "Sting Chameleon",
        "en": "Sting Chameleon"
      },
      "steps": [
        {
          "id": "boss.sting-chameleon.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/apu_boss_door_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_boss_sections_2026-09-26.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "tools/rom/apu_gate.py",
            "tools/rom/ppu_gate.py",
            "tools/tests/test_apu_gate_start_state.py",
            "tools/tests/test_ppu_boss_sections.py",
            "tools/tests/test_rom_ppu_gate.py",
            "tools/tests/test_apu_gate_spc_start_pending_accesses.py"
          ],
          "note": {
            "pt": "2026-09-26 (cartão A26 rodada 5, depois de A25, A18-A24 e V15), modo ROM-first: a entrada do Sting Chameleon na gravação do SC (posição e arena, portas, intro, bloqueio e liberação dos controles, câmera, enchimento de HP) é igual à WRAM do original em todos os quadros (V12, 25,606 de 25,606) e à imagem com o PPU do Mesen2 (V12, V15, 25,605 de 25,605); seções do chefe com o OID 0x0A num slot de inimigo dentro da janela: f19645..23544 3,900 de 3,900; a passagem da porta, checkpoint 2 f19266..19644, igual. Conferência de câmera 425 de 426 (V15). Música: o apu_gate (o driver de som do jogo no SPC700/DSP do LakeSnes, iniciado do estado do SPC no Mesen2) é igual ao original em f19266..23604, 4,339 de 4,339 quadros, toda leitura de porta na mesma instrução (138,337 de 138,337), de 379 quadros antes de o chefe entrar no slot, pela porta, intro e enchimento de HP. Limite: a entrada gravada nesta gravação.",
            "en": "2026-09-26 (card A26 round 5, after A25, A18-A24 and V15), ROM-first mode: Sting Chameleon's entrance in the SC recording (position and arena, doors, intro, control lock and release, camera, HP fill) equals the original's WRAM on every frame (V12, 25,606 of 25,606) and its picture under Mesen2's PPU (V12, V15, 25,605 of 25,605); boss sections with the boss OID 0x0A in an enemy slot inside the window: f19645..23544 3,900 of 3,900; the door passage, checkpoint 2 f19266..19644, equal. Camera check 425 of 426 (V15). Music: apu_gate (the game's sound driver on LakeSnes's SPC700/DSP, started from Mesen2's SPC state) equals the original on f19266..23604, 4,339 of 4,339 frames, every port read at the same instruction (138,337 of 138,337), from 379 frames before the boss enters its slot, through the door, intro and HP fill. Bound: the recorded entrance in this take."
          }
        },
        {
          "id": "boss.sting-chameleon.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "tools/tests/test_boss_evidence.py",
            "docs/tasks/done/B3-maverick-boss-evidence.md",
            "docs/tasks/done/L31-ledger-maverick-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L31, KB do B3 boss_evidence_2026-09-26.json, decisão 1), modo ROM-first: sting-chameleon (id 0x0A), tabela de estados 88:853E (eventID_stingCameleon_0a_main). Estados vistos 31 de 31, imagem exata no primeiro quadro de cada estado. Takes: sigma3-cs-death-weapons-branch_2_23162, sting-chameleon-death-branch_1_25635. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L31, B3's KB boss_evidence_2026-09-26.json, decision 1), ROM-first mode: sting-chameleon (id 0x0A), state table 88:853E (eventID_stingCameleon_0a_main). States seen 31 of 31, picture-exact on the first frame of every state. Takes: sigma3-cs-death-weapons-branch_2_23162, sting-chameleon-death-branch_1_25635. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.sting-chameleon.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/sting-chameleon/boss.json",
            "knowledge_base/mmx1/rom/boss_evidence_2026-09-26.json",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 45 de 45 partes: as já vistas como antes, e 0A:choice:22 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 45 of 45 parts: those already seen as before, and 0A:choice:22 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          }
        },
        {
          "id": "boss.sting-chameleon.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/sting-chameleon/boss.json",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: o último caso, E.SPARK carregado (tiro $15), visto em sc-a: 3 acertos (f24996, f25434, f25743), cada um tira 2 = byte da tabela 86:F028 (regra B6/B7). Matriz 17 de 17 (caso 5 excluído pela ROM, B7).",
            "en": "2026-10-01: the last case, charged E.SPARK (shot $15), seen in sc-a: 3 hits (f24996, f25434, f25743), each removes 2 = table byte 86:F028 (B6/B7 rule). Matrix 17 of 17 (case 5 ROM-excluded, B7)."
          }
        },
        {
          "id": "boss.sting-chameleon.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 180,
            "total": 200,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.sting-chameleon.presentation/parts (149 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.sting-chameleon.presentation/missing and 20 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b10-sc-selection-4-hunt_2_1146, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-1-normal-hunt_2_19431, 4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b6-sc-x-buster-normal-hunt_19561_20500, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/s38-sting-chameleon-class-3e-r1-hunt_20281_20790, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/s38-sting-chameleon-class-3e-r3-hunt_22381_22694, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/s44-sting-chameleon-cp2_22801_24703, 3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/sc-a_1_32607, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sting-chameleon_1_25606), of all 200 parts; other sound and unclassified parts count unseen); read at git 0f969a1d6; plus 6 method-f parts 0A:cell:23:AFB567, 0A:cell:23:AFB56C, 0A:cell:23:AFB571, 0A:cell:23:AFB602, 0A:cell:23:AFB623, 0A:cell:23:AFB628 per knowledge_base/mmx1/rom/boss_unrequested_animation_cells_2026-10-11_r125.json#/steps/boss.sting-chameleon.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1928:02:cell:08:AFA878 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.sting-chameleon.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts 0A:cell:23:AFB522 per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.sting-chameleon.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1428:11:cell:23:AFB485 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b54.json#/steps/boss.sting-chameleon.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 sound parts 0A:sound:88876F, 0A:sound:888781 traced per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/sound/boss.sting-chameleon.presentation inside whole APU-gated windows (b10-sc-selection-4-hunt_2_1146)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/bosses/sting-chameleon/boss.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.sting-chameleon.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_deaths_2026-10-01_b22_resume.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_b22_resume_2026-10-01.json",
            "tools/tests/test_boss_step_sweep.py",
            "docs/tasks/done/B22-outro-branch-takes.md"
          ],
          "note": {
            "pt": "2026-10-01, B22: os dois portões integrados têm testemunhas exatas na varredura atual; derrota, retorno ao checkpoint e restauração do mesmo dono na take ramificada SC, mais a janela de derrota/passagem na take original. WRAM e imagens inteiros, sem divergência. Limite: uma derrota do jogador; demais passos mantêm seus próprios catálogos.",
            "en": "2026-10-01, B22: both integrated gates have exact witnesses in the current sweep; player loss, checkpoint return and same-owner restoration in the SC branch, plus the defeat/handoff window in the original take. Whole WRAM and pictures, no divergence. Bound: one player defeat; other steps retain their own catalogues."
          }
        }
      ]
    },
    {
      "id": "boss.vile-intro",
      "category": "bosses",
      "title": {
        "pt": "Vile — abertura",
        "en": "opening"
      },
      "steps": [
        {
          "id": "boss.vile-intro.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/tasks/done/B14-boss-entry-intakes.md",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "tools/oracle/intake_movie.py",
            "tools/rom/ppu_gate.py",
            "tools/rom/apu_gate.py",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json"
          ],
          "note": {
            "en": "2026-09-28 B14, ROM-first recorded entrance in intro-highway: all catalogue entry states witnessed; position/arena, doors, intro, controls, camera and HP fill covered by 15577/15577 WRAM entries and 15576/15576 exact pictures. Music: committed A23 full-window gate, 15576/15576 APU frames and 493583/493583 port reads, no uncaptured live reads; WAV hash checked. Current named-take intake and source bindings are in the card Result. Bound: this recorded entrance; player-loss return is separate.",
            "pt": "2026-09-28 B14, entrada gravada ROM-first em intro-highway: todos os estados de entrada catalogados vistos; posição/arena, portas, intro, controles, câmera e HP cobertos por 15577/15577 estados WRAM e 15576/15576 imagens exatas. Música: gate A23 da janela completa, 15576/15576 quadros APU e 493583/493583 leituras de portas, nenhuma leitura viva ausente; hash WAV conferido. Intake atual e vínculos de origem no Result do cartão. Limite: esta entrada gravada; retorno após derrota separado."
          }
        },
        {
          "id": "boss.vile-intro.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 48,
            "total": 49,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-intro.attacks/witnessed (33 witnessed of the map total 49, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-intro.attacks/summary/total; catalogue_limits 83:D1EF, 83:D795 closed per knowledge_base/mmx1/rom/boss_vile_intro_limit_closure_2026-10-08_r67.json#/resolved_limits); read at git 73912c9ec; plus 6 parts 32:fight:9, 32:fight:13, 32:fight:14, 32:fight:37, 32:fight:38, 32:fight:39 per knowledge_base/mmx1/rom/boss_vile_intro_hunt_takes_2026-10-08_r39.json#/candidates; plus 9 parts 32:spawn:83CD26, 32:spawn:83CD4C, 32:spawn:83CD81, 32:spawn:83CDD2, 32:spawn:83D730, 32:spawn:83D795, 32:spawn:83D7B7, 32:spawn:83D81F, 32:spawn:83D851 per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json#/steps/boss.vile-intro.attacks/evidence"
          },
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.vile-intro.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 49,
            "total": 55,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-intro.selection/witnessed (40 witnessed of the map total 55, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-intro.selection/summary/total; catalogue_limits 83:D1EF, 83:D795 closed per knowledge_base/mmx1/rom/boss_vile_intro_limit_closure_2026-10-08_r67.json#/resolved_limits); read at git bf95a964d; plus 8 parts 32:choice:13, 32:choice:14, 32:choice:23, 32:choice:24, 32:choice:25, 32:choice:26, 32:choice:52, 32:choice:53 per knowledge_base/mmx1/rom/boss_vile_intro_hunt_takes_2026-10-08_r39.json#/candidates; plus 1 parts 32:choice:54 per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r107.json#/steps/boss.vile-intro.selection/evidence"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "tools/tests/test_boss_evidence_fortress.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 parcial 2 (2026-09-27), W37: 36/55 saídas vistas. A gravação verificada de 83:D2C4 mostra +01=02 +02=10 -> +03 INC em f11164, com WRAM e imagens exatas na janela inteira do intake. Restam 19 saídas; exec de rotina compartilhada sem a transição do dono não conta. Sem crédito.",
            "en": "B8 partial 2 (2026-09-27), W37: 36/55 outcomes seen. The verified 83:D2C4 take shows +01=02 +02=10 -> +03 INC at f11164, with WRAM and pictures exact throughout the intake window. 19 outcomes remain; shared routine exec without the owner transition does not count. No credit."
          }
        },
        {
          "id": "boss.vile-intro.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_secondary_2026-09-28.json",
            "tools/oracle/post/reduce_secondary_boss_damage.py",
            "tools/tests/test_reduce_secondary_boss_damage.py",
            "docs/tasks/done/B15-secondary-boss-damage.md",
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json"
          ],
          "note": {
            "en": "2026-09-28 B15: 18 B3/B6 normal/charged weapon groups; 2 seen and ROM-table equal under recorded WRAM gates, 16 source-proved exclusions, 0 stops. The KB records shot IDs, actual damage rows, source inventories, per-case gates and exclusions. B6/B7 matrix scope; this does not assert additional presentation/audio or per-shot interruption gates.",
            "pt": "2026-09-28 B15: 18 grupos de armas normais/carregadas B3/B6; 2 vistos e iguais à tabela da ROM com WRAM verificada, 16 exclusões comprovadas, 0 pendências na matriz. IDs, linhas, inventário, gates e exclusões constam na KB. Escopo B6/B7: não acrescenta gates de apresentação, áudio ou interrupções individuais."
          }
        },
        {
          "id": "boss.vile-intro.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 179,
            "total": 282,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-intro.presentation/parts with knowledge_base/mmx1/rom/boss_vile_intro_map_supplement_2026-10-08_r68.json#/map_steps/boss.vile-intro.presentation (89 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-intro.presentation/missing and 10 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (8 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-vile-intro-32-0-charged-r1-hunt_10501_11336, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b8-vile-intro-0x32-interruption-32-02-at-83-d01b-hunt_1_11190, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/intro-highway_1_15577), of all 282 parts; other sound and unclassified parts count unseen); read at git 355560fc9; plus 19 parts 32:cell:52:AFC779, 32:cell:52:AFC77C, 32:cell:52:AFC77F, 32:cell:52:AFC782, 32:cell:52:AFC785, 32:cell:52:AFC788, 32:cell:52:AFC78B, 32:cell:52:AFC78E, 32:cell:52:AFC791, 32:cell:52:AFC794, 32:cell:52:AFC797, 32:cell:52:AFC79A, 32:cell:52:AFC79F, 32:cell:52:AFC7A2, 32:cell:52:AFC7A5, 32:cell:52:AFC7A8, 32:cell:52:AFC7AB, 32:cell:52:AFC7AE, 32:cell:52:AFC7B1 per knowledge_base/mmx1/rom/boss_vile_intro_hunt_takes_2026-10-08_r39.json#/candidates; plus 40 parts child:0E68:33:cell:53:AFC810, child:0E68:33:cell:53:AFC813, child:0E68:33:cell:53:AFC816, child:0E68:33:cell:53:AFC819, child:0E68:33:cell:53:AFC81E, child:0E68:33:cell:53:AFC849, child:0E68:33:cell:53:AFC84C, child:0E68:33:cell:53:AFC84F, child:0E68:33:cell:53:AFC852, child:0E68:33:cell:53:AFC855, child:0E68:33:cell:53:AFC858, child:0E68:33:cell:53:AFC85B, child:0E68:33:cell:53:AFC85E, child:0E68:33:cell:53:AFC861, child:0E68:33:cell:53:AFC864, child:0E68:33:cell:53:AFC867, child:0E68:33:cell:53:AFC86A, child:0E68:33:cell:53:AFC86D, child:0E68:33:cell:53:AFC870, child:0E68:33:cell:53:AFC873, child:0E68:33:cell:53:AFC876, child:0E68:33:cell:53:AFC879, child:0E68:33:cell:53:AFC87C, child:0E68:33:cell:53:AFC87F, child:0E68:33:cell:53:AFC882, child:0E68:33:cell:53:AFC885, child:0E68:33:cell:53:AFC888, child:0E68:33:cell:53:AFC88B, child:0E68:33:cell:53:AFC88E, child:0E68:33:cell:53:AFC891, child:0E68:33:cell:53:AFC894, child:0E68:33:cell:53:AFC897, child:0E68:33:cell:53:AFC89A, child:0E68:33:cell:53:AFC89D, child:0E68:33:cell:53:AFC8A0, child:0E68:33:cell:53:AFC8A3, child:0E68:33:cell:53:AFC8A6, child:0E68:33:cell:53:AFC8A9, child:0E68:33:cell:53:AFC8AC, child:0E68:33:cell:53:AFC8C6 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r83.json#/rows/boss.vile-intro.presentation/parts; plus 1 parts child:0E68:3C:cell:7A:AFD84D per knowledge_base/mmx1/rom/boss_child_creators_2026-10-12_h34.json#/rows/boss.vile-intro.presentation/parts; plus 5 method-f parts child:0E68:3C:cell:7A:AFD848, child:0E68:3C:cell:7A:AFD87D, child:0E68:3C:cell:7A:AFD880, child:0E68:3C:cell:7A:AFD885, child:0E68:3C:cell:7A:AFD888 per knowledge_base/mmx1/rom/boss_unrequested_cells_2026-10-11_h29.json#/steps/boss.vile-intro.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 8 method-f parts child:0E68:33:cell:53:AFC909, child:0E68:33:cell:53:AFC90C, child:0E68:33:cell:53:AFC90F, child:0E68:33:cell:53:AFC912, child:0E68:33:cell:53:AFC915, child:0E68:33:cell:53:AFC918, child:0E68:33:cell:53:AFC91B, child:0E68:33:cell:53:AFC920 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-13_b48.json#/steps/boss.vile-intro.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 7 method-f parts child:1228:1C:cell:0E:AFAB6E, child:1228:1C:cell:0E:AFAB71, child:1228:1C:cell:0E:AFAB74, child:1228:1C:cell:0E:AFAB77, child:1228:1C:cell:0E:AFAB7A, child:1228:1C:cell:0E:AFAB7D, child:1228:1C:cell:0E:AFAB80 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b53.json#/steps/boss.vile-intro.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.vile-intro.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/boss_vile_intro_map_supplement_2026-10-08_r68.json",
            "knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json",
            "knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_ai3c.json",
            "knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json",
            "docs/tasks/done/B47-outro-death-handoff.md",
            "docs/tasks/done/R68-vile-intro-presentation-and-outro.md",
            "docs/tasks/done/AI3c-vile-intro-restore-search.md"
          ],
          "note": {
            "pt": "2026-10-13 (L185, carta B47): 3 de 3 partes vistas ou provadas (knowledge_base/mmx1/rom/boss_vile_intro_map_supplement_2026-10-08_r68.json#/steps/boss.vile-intro.outro (seen 1 of total 3; resolved_limits 83:CF70, 83:D1EF, 83:D795 close the map's outro limit); read at git 3b92efeed; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.vile-intro.outro/parts; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_ai3c.json#/rows/boss.vile-intro.outro/parts; plus 1 parts death-handoff per knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json#/steps/boss.vile-intro.outro/parts (method f: exclusion_proof cites the ROM by bank:addr, card B47)): a saída pelo cronômetro (83:D634, 83:D6E3) vista; a derrota do jogador com o encontro restaurado vista (AI3c); a passagem pela morte provada impossível pela ROM: a tabela de estados 83:CF75 não tem estado de derrota e um golpe letal reabastece a vida em 83:CFCB.",
            "en": "2026-10-13 (L185, card B47): 3 of 3 parts seen or proven (knowledge_base/mmx1/rom/boss_vile_intro_map_supplement_2026-10-08_r68.json#/steps/boss.vile-intro.outro (seen 1 of total 3; resolved_limits 83:CF70, 83:D1EF, 83:D795 close the map's outro limit); read at git 3b92efeed; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.vile-intro.outro/parts; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_ai3c.json#/rows/boss.vile-intro.outro/parts; plus 1 parts death-handoff per knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json#/steps/boss.vile-intro.outro/parts (method f: exclusion_proof cites the ROM by bank:addr, card B47)): the timer exit (83:D634, 83:D6E3) seen; the player's loss with the encounter restored seen (AI3c); the death handoff proven impossible from the ROM: state table 83:CF75 has no defeat state and a lethal hit refills HP at 83:CFCB."
          }
        }
      ]
    },
    {
      "id": "boss.vile-fortress",
      "category": "bosses",
      "title": {
        "pt": "Vile — fortaleza",
        "en": "fortress"
      },
      "steps": [
        {
          "id": "boss.vile-fortress.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "docs/tasks/done/R31-x1-boss-rows-vs-new-windows.md"
          ],
          "note": {
            "pt": "2026-10-08 (R31, regra do B17): todos os estados de entrada numa tomada verificada inteira com imagens exatas e áudio de campanha inteiro. 69:s0 em f10252 (chamada 121 do traço do runtime ROM-first (código gerado da ROM, WRAM igual ao Mesen em cada quadro) da janela SZA10131L, ligada a sigma1-zero-arm_2_35588 por WRAM $0000-$1FFF em 2914 de 2914 quadros), 69:s2..s8 em f10252..11562, 67:s0 em f6839; áudio inteiro em sigma1-zero-arm (972365/972365 leituras, 35586/35586 quadros de APU).",
            "en": "2026-10-08 (R31, B17 rule): every entry state in one whole pixel-exact verified take plus a whole campaign audio window. 69:s0 at f10252 (call 121 of the ROM-first runtime trace (code generated from the ROM, WRAM equal to Mesen on every frame) of window SZA10131L, bound to sigma1-zero-arm_2_35588 by WRAM $0000-$1FFF on 2914 of 2914 frames), 69:s2..s8 at f10252..11562, 67:s0 at f6839; whole audio in sigma1-zero-arm (972365/972365 reads, 35586/35586 APU frames)."
          }
        },
        {
          "id": "boss.vile-fortress.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 94,
            "total": 95,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-fortress.attacks/witnessed (79 witnessed of the map total 95, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-fortress.attacks/summary/total); read at git bf95a964d; plus 4 parts 67:fight:25, 67:state:33, 67:state:34, 67:state:35 per knowledge_base/mmx1/rom/volunteer_vile_takes_2026-10-07.json#/union; plus 11 parts 69:spawn:88DF18, 69:spawn:88E302, 69:spawn:88E34B, 67:spawn:83CD26, 67:spawn:83CD4C, 67:spawn:83CD81, 67:spawn:83CDD2, 67:spawn:83EE9E, 67:spawn:83EF10, 67:spawn:83EF2A, 66:spawn:88D839 per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json#/steps/boss.vile-fortress.attacks/evidence; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r107.json#/steps/boss.vile-fortress.attacks/evidence"
          },
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua. R26 (2026-10-07): gravações do voluntário somam 67:fight:25, 67:state:33, 67:state:34, 67:state:35.",
            "en": "Scope not yet closed by integrated evidence; earns no credit. R26 (2026-10-07): volunteer takes add 67:fight:25, 67:state:33, 67:state:34, 67:state:35."
          }
        },
        {
          "id": "boss.vile-fortress.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 56,
            "total": 64,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-fortress.selection/witnessed (51 witnessed of the map total 64, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-fortress.selection/summary/total); read at git bf95a964d; plus 5 parts 67:choice:26, 67:choice:83EB6E, 67:choice:83EB81, 67:choice:83EBC6, 69:choice:17 per knowledge_base/mmx1/rom/volunteer_vile_takes_2026-10-07.json#/union; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r107.json#/steps/boss.vile-fortress.selection/evidence"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua. R26 (2026-10-07): gravações do voluntário somam 67:choice:26, 67:choice:83EB6E, 67:choice:83EB81, 67:choice:83EBC6, 69:choice:17.",
            "en": "Scope not yet closed by integrated evidence; earns no credit. R26 (2026-10-07): volunteer takes add 67:choice:26, 67:choice:83EB6E, 67:choice:83EB81, 67:choice:83EBC6, 69:choice:17."
          }
        },
        {
          "id": "boss.vile-fortress.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 36,
            "total": 37,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-fortress.damage/witnessed (22 witnessed of the map total 37, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-fortress.damage/summary/total); read at git 6a9c83639; plus 5 parts 67:weapon:2, 67:weapon:10, 67:weapon:12, 67:weapon:14, 67:weapon:16 per knowledge_base/mmx1/rom/volunteer_takes_damage_2026-10-07.json#/takes/volunteer-sigma1-20261006/parts; plus 7 parts 67:weapon:3, 69:weapon:11, 69:weapon:13, 69:weapon:16, 69:weapon:3, 69:weapon:7, 69:weapon:9 per knowledge_base/mmx1/rom/volunteer_vile_takes_2026-10-07.json#/union; plus 2 method-f parts 69:weapon:5, 67:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.vile-fortress.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "tools/tests/test_boss_evidence_fortress.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 parcial 2 (2026-09-27), W37: 8 casos de arma novos no 0x67, 57/57 quedas de HP iguais à tabela 86:EF37 (tiro $1F1D, 84:9E3A); WRAM e imagens exatas nas janelas dos intakes. Total das unidades: 382/382 hits iguais; união das armas 4/9 normais e 7/9 carregadas. Casos por unidade e interrupção ainda faltam. Sem crédito. R24 (2026-10-07): a gravação de voluntário de 2026-10-06 (Sigma 1) prova os casos não carregados de H.TORPEDO, STORM.T, E.SPARK, B.CUTTER e S.ICE no 0x67 (tiros 07/0B/0C/0D/0E, linha 03, todos iguais). R26 (2026-10-07): gravações do voluntário somam 67:weapon:3, 69:weapon:11, 69:weapon:13, 69:weapon:16, 69:weapon:3, 69:weapon:7, 69:weapon:9.",
            "en": "B8 partial 2 (2026-09-27), W37: 8 new weapon cases for 0x67, 57/57 HP drops equal to table 86:EF37 (shot $1F1D, 84:9E3A); WRAM and pictures exact in the intake windows. Unit totals: 382/382 hits equal; weapon union 4/9 normal and 7/9 charged. Per-unit cases and an interruption remain missing. No credit. R24 (2026-10-07): the volunteer take of 2026-10-06 (Sigma 1) proves the uncharged H.TORPEDO, STORM.T, E.SPARK, B.CUTTER and S.ICE cases on 0x67 (shots 07/0B/0C/0D/0E, row 03, all hits equal). R26 (2026-10-07): volunteer takes add 67:weapon:3, 69:weapon:11, 69:weapon:13, 69:weapon:16, 69:weapon:3, 69:weapon:7, 69:weapon:9."
          }
        },
        {
          "id": "boss.vile-fortress.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 277,
            "total": 351,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.vile-fortress.presentation/parts (187 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.vile-fortress.presentation/missing and 16 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-vile-fortress-67-7-charged-hunt_1_9763, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-vile-fortress-69-0-charged-r1-hunt_11522_11928, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-vile-fortress-69-7-charged-hunt_1_13958, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-bospider-0x63-selection-01-04-02-04-03-var-02-0a-at-82-e0-hunt_2_22882, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b8-vile-fortress-0x67-weapon-f-wave-charged-shots-13-hunt_1_9353, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b8-vile-fortress-0x67-weapon-s-ice-charged-shots-17-hunt_1_9832, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/vile-fortress-death-branch_1_16826), of all 351 parts; other sound and unclassified parts count unseen); read at git b515351cb; plus 13 parts 67:cell:52:AFC779, 67:cell:52:AFC77C, 67:cell:52:AFC77F, 67:cell:52:AFC782, 67:cell:52:AFC785, 67:cell:52:AFC788, 67:cell:52:AFC78B, 67:cell:52:AFC78E, 67:cell:52:AFC791, 67:cell:52:AFC794, 67:cell:52:AFC797, 67:cell:52:AFC79A, 67:cell:52:AFC7D1 per knowledge_base/mmx1/rom/volunteer_takes_sweep_2026-10-07.json#/credited/boss.vile-fortress.presentation/parts; plus 34 parts child:0E68:3C:cell:7A:AFD848, child:0E68:3C:cell:7A:AFD84D, child:0E68:3C:cell:7A:AFD857, child:0E68:3C:cell:7A:AFD85A, child:0E68:3C:cell:7A:AFD85D, child:0E68:3C:cell:7A:AFD860, child:0E68:3C:cell:7A:AFD863, child:0E68:3C:cell:7A:AFD866, child:0E68:3C:cell:7A:AFD869, child:0E68:3C:cell:7A:AFD86C, child:0E68:3C:cell:7A:AFD86F, child:0E68:3C:cell:7A:AFD872, child:0E68:3C:cell:7A:AFD875, child:0E68:3C:cell:7A:AFD878, child:0E68:3C:cell:7A:AFD87D, child:0E68:3C:cell:7A:AFD880, child:0E68:3C:cell:7A:AFD885, child:0E68:3C:cell:7A:AFD888, child:0E68:66:cell:53:AFC810, child:0E68:66:cell:53:AFC8CB, child:0E68:66:cell:53:AFC8CE, child:0E68:66:cell:53:AFC8D3, child:0E68:66:cell:53:AFC8D8, child:0E68:66:cell:53:AFC8DB, child:0E68:66:cell:53:AFC8E0, child:0E68:66:cell:53:AFC8E3, child:0E68:66:cell:53:AFC8E6, child:0E68:66:cell:53:AFC8E9, child:0E68:66:cell:53:AFC8EE, child:0E68:66:cell:53:AFC8F1, child:0E68:66:cell:53:AFC8F6, child:0E68:66:cell:53:AFC925, child:0E68:66:cell:53:AFC92F, child:0E68:66:cell:53:AFC932 per knowledge_base/mmx1/rom/boss_child_creators_2026-10-12_h34.json#/rows/boss.vile-fortress.presentation/parts; plus 2 method-f parts 67:cell:52:AFC774, 67:cell:52:AFC7E5 per knowledge_base/mmx1/rom/boss_cells_h40_2026-10-12.json#/steps/boss.vile-fortress.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 14 method-f parts child:0E68:3C:cell:7A:AFD81A, child:0E68:3C:cell:7A:AFD81D, child:0E68:3C:cell:7A:AFD820, child:0E68:3C:cell:7A:AFD825, child:0E68:3C:cell:7A:AFD828, child:0E68:3C:cell:7A:AFD82B, child:0E68:3C:cell:7A:AFD82E, child:0E68:3C:cell:7A:AFD831, child:0E68:3C:cell:7A:AFD834, child:0E68:3C:cell:7A:AFD837, child:0E68:3C:cell:7A:AFD83A, child:0E68:3C:cell:7A:AFD83D, child:0E68:3C:cell:7A:AFD840, child:0E68:3C:cell:7A:AFD843 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-13_b49.json#/steps/boss.vile-fortress.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 11 method-f parts child:1928:2C:cell:4F:AFC3ED, child:1928:2C:cell:4F:AFC3F0, child:1928:2C:cell:4F:AFC3F3, child:1928:2C:cell:4F:AFC3F6, child:1928:2C:cell:4F:AFC3F9, child:1928:2C:cell:4F:AFC3FC, child:1928:2C:cell:4F:AFC3FF, child:1928:2C:cell:4F:AFC402, child:1928:2C:cell:4F:AFC405, child:1928:2C:cell:4F:AFC408, child:1928:2C:cell:4F:AFC40B per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b55.json#/steps/boss.vile-fortress.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua. R27 (2026-10-07): gravações do voluntário somam 13 células de animação de 0x67 (52:AFC779-AFC7D1).",
            "en": "Scope not yet closed by integrated evidence; earns no credit. R27 (2026-10-07): volunteer takes add 13 animation cells of 0x67 (52:AFC779-AFC7D1)."
          }
        },
        {
          "id": "boss.vile-fortress.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_fortress_spikes_2026-09-26.json",
            "tools/tests/test_branch_fortress_spikes.py",
            "docs/tasks/done/R17-branch-takes-fortress-deaths-spikes.md"
          ],
          "note": {
            "pt": "2026-09-26 (card R17, regra do L9 por uma gravação ramificada), modo ROM-first (megaman-x.exe --rom-first): gravação ramificada vile-fortress-death-branch = savestate de vile-zero-with-arm e linhas 1..14074, depois nenhuma entrada, depois entradas achadas por busca de objetivo (método do R16): X derrotado na luta de 0x69 f15313, volta ao checkpoint f15538, o encontro restaurado f16707 (0x69 ativo de novo: o próximo encontro de 0x69 (owner_restored do B2)); WRAM igual 16.826 de 16.826, imagens exatas 16.825 de 16.825. Morte e passagem: R14 vile-zero-with-arm: 0x69 beaten f15000 ($1F0C 0->1, 0x69 state $04->$06), handoff 0x66's event (88:D7BC..88:D809), checkpoint 2 f17060 (KB intake_david_0926_2026-09-26.json). Limite: uma gravação ramificada.",
            "en": "2026-09-26 (card R17, L9's rule by a branch take), ROM-first mode (megaman-x.exe --rom-first): branch take vile-fortress-death-branch = vile-zero-with-arm's savestate and lines 1..14074, then no input, then inputs found by a goal search (R16's method): X defeated in 0x69's fight f15313, checkpoint return f15538, the encounter restored f16707 (0x69 active again: 0x69's next encounter (B2's owner_restored)); WRAM equal 16,826 of 16,826, pictures exact 16,825 of 16,825. Death and handoff: R14 vile-zero-with-arm: 0x69 beaten f15000 ($1F0C 0->1, 0x69 state $04->$06), handoff 0x66's event (88:D7BC..88:D809), checkpoint 2 f17060 (KB intake_david_0926_2026-09-26.json). Bound: one branch take."
          }
        }
      ]
    },
    {
      "id": "boss.bospider",
      "category": "bosses",
      "title": {
        "pt": "Bospider",
        "en": "Bospider"
      },
      "steps": [
        {
          "id": "boss.bospider.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_entry_sweep_2026-09-30.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "tools/tests/test_boss_entry_sweep.py",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "docs/tasks/done/B17-boss-entry-sweep.md"
          ],
          "note": {
            "pt": "2026-09-30 (B17, regra do B14): todos os estados de entrada numa janela inteira com imagens exatas e áudio de campanha inteiro. 63:s0,2,3,4 em f22347/22532/22533/22599: 13 tomadas b8 bospider verificadas inteiras; áudio inteiro em sigma1-zero-arm (972365/972365 leituras, música 23 desde f22472).",
            "en": "2026-09-30 (B17, B14 rule): every entry state in one whole pixel-exact window plus a whole campaign audio window. 63:s0,2,3,4 at f22347/22532/22533/22599: 13 whole verified b8 bospider intakes; whole audio in sigma1-zero-arm (972365/972365 reads, song 23 from f22472)."
          }
        },
        {
          "id": "boss.bospider.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "docs/tasks/done/B4-fortress-boss-evidence.md",
            "docs/tasks/done/L32-ledger-fortress-boss-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L32, KB do B4 boss_evidence_fortress_2026-09-26.json, decisão 1), modo ROM-first: bospider (id 0x63), tabela de estados 82:DB7D (eventID_prisonCapsule_63_main). Estados vistos 9 de 9, imagem exata no primeiro quadro de cada estado. Takes: hadouken_1_73902. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L32, B4's KB boss_evidence_fortress_2026-09-26.json, decision 1), ROM-first mode: bospider (id 0x63), state table 82:DB7D (eventID_prisonCapsule_63_main). States seen 9 of 9, picture-exact on the first frame of every state. Takes: hadouken_1_73902. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.bospider.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_b27_2026-10-03.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B27-variable-write-transitions.md",
            "docs/tasks/done/B25-boss-choice-conditions.md"
          ],
          "note": {
            "pt": "2026-10-03 (B27): 14 de 14 partes testemunhadas; a escolha 63:choice:6 (82:E0E9, +01=04 +02=06 -> +02=0A +03=06) em b15-bospider-63-8-charged-hunt f22779 e no ramo B25 f22806, ambos verificados e com imagens exatas; transicao de escrita variavel pelo provador do B23, padrao unico.",
            "en": "2026-10-03 (B27): 14 of 14 parts witnessed; choice 63:choice:6 (82:E0E9, +01=04 +02=06 -> +02=0A +03=06) in b15-bospider-63-8-charged-hunt f22779 and the B25 branch f22806, both verified and picture-exact; variable-write transition by B23's prover, unique pattern."
          }
        },
        {
          "id": "boss.bospider.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 16,
            "total": 18,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.bospider.damage/witnessed (14 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.bospider.damage/summary/total); read at git 7041aa42c; plus 1 parts 63:weapon:2 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-08.json#/candidates/boss.bospider.damage/parts; plus 1 method-f parts 63:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.bospider.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "tools/tests/test_boss_evidence_fortress.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 parcial 2 (2026-09-27), W37: F.WAVE normal (f22838) e B.CUTTER normal (f22842) têm queda de HP em takes com WRAM e imagens exatas. Somente B.CUTTER iguala a tabela 86:EF37; F.WAVE mantém o byte $80 incompatível com a queda. Total 44/50 hits iguais, armas 5/9 normais e 1/9 carregadas. Outros eventos sem queda não viram partes vistas. Sem crédito. R32 (2026-10-08): gravações do voluntário somam 1 partes (63:weapon:2).",
            "en": "B8 partial 2 (2026-09-27), W37: normal F.WAVE (f22838) and normal B.CUTTER (f22842) lower HP in takes with WRAM and pictures exact. Only B.CUTTER equals table 86:EF37; F.WAVE retains the $80 byte inconsistent with the drop. Total 44/50 hits equal, weapons 5/9 normal and 1/9 charged. Other events without a drop do not become seen parts. No credit. R32 (2026-10-08): volunteer takes add 1 parts (63:weapon:2)."
          }
        },
        {
          "id": "boss.bospider.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 38,
            "total": 43,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.bospider.presentation/parts (29 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.bospider.presentation/missing and 8 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-bospider-63-0-normal-hunt_22562_22915, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-bospider-63-4-charged-hunt_22562_23270, 6 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/hadouken_1_73902), of all 43 parts; other sound and unclassified parts count unseen); read at git 0f969a1d6; plus 1 sound parts 63:sound:82DC3F traced per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/sound/boss.bospider.presentation inside whole APU-gated windows (b15-bospider-63-0-normal-hunt_22562_22915)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.bospider.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "tools/tests/test_boss_identity.py",
            "docs/tasks/done/B2-fortress-and-mid-boss-identity.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L9, a partir da identidade do B2), modo ROM-first: dono 0x63 (rotina 82:DB7D): chefe final da fase 1 da fortaleza (nível 9): sua saída grava $1F7B = 1. Gravação sigma1-zero-arm do David (R7, WRAM igual em todos os quadros): X derrotado em f23709, o encontro restaurado em f24511; a derrota do chefe ($1F0C 0->1) em f34010, depois saída da fase: ação 0 do X em f35132. Imagens com o PPU do Mesen2 exatas em todos os quadros f34010..35132 (1123 de 1123). Base do nome: não está na ROM: a ROM diz qual é o chefe final da fase 1 da fortaleza, não a criatura; Bospider como chefe da fase 1 é a ordem publicada. Limite: ataques, seleção, dano, apresentação e música pertencem aos outros passos.",
            "en": "2026-09-25 (card L9, from B2's identity), ROM-first mode: owner 0x63 (main 82:DB7D): end boss of fortress stage 1 (level 9): its exit writes $1F7B = 1. David's sigma1-zero-arm take (R7, WRAM equal on every frame): X defeated at f23709, the encounter restored at f24511; the boss's defeat ($1F0C 0->1) at f34010, then stage exit: X action-0 clear at f35132. Pictures under Mesen2's PPU exact on every frame f34010..35132 (1123 of 1123). Name basis: not in the ROM: the ROM tells fortress stage 1's end boss, not the creature; Bospider as stage 1's boss is the published order. Bound: attacks, selection, damage, presentation and music belong to the other steps."
          }
        }
      ]
    },
    {
      "id": "boss.rangda-bangda",
      "category": "bosses",
      "title": {
        "pt": "Rangda Bangda",
        "en": "Rangda Bangda"
      },
      "steps": [
        {
          "id": "boss.rangda-bangda.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "docs/tasks/done/R31-x1-boss-rows-vs-new-windows.md"
          ],
          "note": {
            "pt": "2026-10-08 (R31, regra do B17): todos os estados de entrada numa tomada verificada inteira com imagens exatas e áudio de campanha inteiro. 5E:s0 e 5F:s0 em f37772 (chamada 234 do traço do runtime ROM-first (código gerado da ROM, WRAM igual ao Mesen em cada quadro) da janela S37538L, ligada a sigma2_2_41296 por WRAM $0000-$1FFF em 3339 de 3339 quadros); áudio inteiro em sigma2 (1210741/1210741 leituras, 41294/41294 quadros de APU).",
            "en": "2026-10-08 (R31, B17 rule): every entry state in one whole pixel-exact verified take plus a whole campaign audio window. 5E:s0 and 5F:s0 at f37772 (call 234 of the ROM-first runtime trace (code generated from the ROM, WRAM equal to Mesen on every frame) of window S37538L, bound to sigma2_2_41296 by WRAM $0000-$1FFF on 3339 of 3339 frames); whole audio in sigma2 (1210741/1210741 reads, 41294/41294 APU frames)."
          }
        },
        {
          "id": "boss.rangda-bangda.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 67,
            "total": 68,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.rangda-bangda.attacks/witnessed (57 witnessed of the map total 68, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.rangda-bangda.attacks/summary/total); read at git af0352d26; plus 5 parts 5E:fight:6, 60:state:0, 5F:fight:1, 5E:fight:12, 5E:fight:19 per knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json#/witnesses; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r105.json#/steps/boss.rangda-bangda.attacks/evidence; plus 5 parts 60:state:3, 60:state:4, 60:state:5, 60:state:6, 60:state:7 per knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json#/steps/boss.rangda-bangda.attacks/parts; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.rangda-bangda.attacks/evidence"
          },
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa. R31 (2026-10-08): traços de chamada das janelas nativas somam 5 partes (5E:fight:6, 60:state:0, 5F:fight:1, 5E:fight:12, 5E:fight:19).",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research. R31 (2026-10-08): call traces of the native windows add 5 parts (5E:fight:6, 60:state:0, 5F:fight:1, 5E:fight:12, 5E:fight:19)."
          }
        },
        {
          "id": "boss.rangda-bangda.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 33,
            "total": 34,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.rangda-bangda.selection/witnessed (29 witnessed of the map total 34, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.rangda-bangda.selection/summary/total); read at git af0352d26; plus 4 parts 5E:choice:6, 5F:choice:1, 5E:choice:12, 5E:choice:19 per knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json#/witnesses; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.rangda-bangda.selection/evidence"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa. R31 (2026-10-08): traços de chamada das janelas nativas somam 4 partes (5F:choice:1, 5E:choice:6, 5E:choice:12, 5E:choice:19).",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research. R31 (2026-10-08): call traces of the native windows add 4 parts (5F:choice:1, 5E:choice:6, 5E:choice:12, 5E:choice:19)."
          }
        },
        {
          "id": "boss.rangda-bangda.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/r29_batch1_damage_witness_2026-10-08.json",
            "knowledge_base/mmx1/rom/volunteer_takes_2026-10-08.json",
            "knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json",
            "knowledge_base/mmx1/rom/census_reach_audit_2026-10-11_r135.json",
            "docs/tasks/done/R131-count-class-p-proofs.md",
            "docs/tasks/done/R135-census-reach-audit.md"
          ],
          "note": {
            "pt": "2026-10-11 (L69, cartas R131 e R135): 36 de 36 casos de dano do Rangda Bangda (olhos 0x5E e 0x5F) vistos ou provados. Os 34 vistos e o 5F:weapon:5: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.rangda-bangda.damage/witnessed (18 witnessed of the map total 36, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.rangda-bangda.damage/summary/total); read at git 7041aa42c; plus 5 parts 5F:weapon:6, 5F:weapon:8, 5F:weapon:10, 5F:weapon:12, 5F:weapon:14 per knowledge_base/mmx1/rom/r29_batch1_damage_witness_2026-10-08.json#/parts/boss.rangda-bangda.damage; plus 11 parts 5E:weapon:14, 5E:weapon:17, 5E:weapon:9, 5F:weapon:11, 5F:weapon:13, 5F:weapon:15, 5F:weapon:16, 5F:weapon:17, 5F:weapon:3, 5F:weapon:7, 5F:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-08.json#/candidates/boss.rangda-bangda.damage/parts; plus 1 method-f parts 5F:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.rangda-bangda.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131). O 5E:weapon:5 (Chameleon Sting carregada, tiro 0x11) é provado pela ROM: o tiro grava +30 = 2 em 83:9B8C e o laço de acerto do chefe (84:9B43) pula todo tiro com +30 diferente de 0 em 84:9B5F/84:9B62; a auditoria R135 decodificou os sítios 88:B145 e 88:B14C do fecho de 0x5E (código, sem chamadas), então o alcance vale (knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json; knowledge_base/mmx1/rom/census_reach_audit_2026-10-11_r135.json).",
            "en": "2026-10-11 (L69, cards R131 and R135): 36 of 36 damage cases of Rangda Bangda (eyes 0x5E and 0x5F) seen or proven. The 34 seen and 5F:weapon:5: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.rangda-bangda.damage/witnessed (18 witnessed of the map total 36, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.rangda-bangda.damage/summary/total); read at git 7041aa42c; plus 5 parts 5F:weapon:6, 5F:weapon:8, 5F:weapon:10, 5F:weapon:12, 5F:weapon:14 per knowledge_base/mmx1/rom/r29_batch1_damage_witness_2026-10-08.json#/parts/boss.rangda-bangda.damage; plus 11 parts 5E:weapon:14, 5E:weapon:17, 5E:weapon:9, 5F:weapon:11, 5F:weapon:13, 5F:weapon:15, 5F:weapon:16, 5F:weapon:17, 5F:weapon:3, 5F:weapon:7, 5F:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-08.json#/candidates/boss.rangda-bangda.damage/parts; plus 1 method-f parts 5F:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.rangda-bangda.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131). 5E:weapon:5 (charged Chameleon Sting, shot 0x11) is proven from the ROM: the shot stores +30 = 2 at 83:9B8C and the boss hit loop (84:9B43) skips every shot with +30 not 0 at 84:9B5F/84:9B62; the R135 audit decoded 0x5E's closure sites 88:B145 and 88:B14C (code, no calls), so the reach holds (knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json; knowledge_base/mmx1/rom/census_reach_audit_2026-10-11_r135.json)."
          }
        },
        {
          "id": "boss.rangda-bangda.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 68,
            "total": 76,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.rangda-bangda.presentation/parts (34 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.rangda-bangda.presentation/missing and 7 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-rangda-bangda-5e-1-charged-hunt_2_16366, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-rangda-bangda-0x5e-selection-01-02-02-06-03-00-03-02-at-88-aff-hunt_2_20004, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/s44-r2-20261002-sigma-2-cp2_2_38744, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma2_2_41296), of all 76 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 23 parts child:0E68:5E:cell:9B:AFE3D0, child:0E68:5E:cell:9B:AFE3D5, child:0E68:5E:cell:9B:AFE3D8, child:0E68:5E:cell:9B:AFE3DB, child:0E68:5E:cell:9B:AFE471, child:0E68:5E:cell:9B:AFE474, child:0E68:5E:cell:9B:AFE477, child:0E68:5F:cell:9B:AFE3E0, child:0E68:5F:cell:9B:AFE3E5, child:0E68:5F:cell:9B:AFE3E8, child:0E68:5F:cell:9B:AFE3EB, child:0E68:5F:cell:9B:AFE3EE, child:0E68:5F:cell:9B:AFE3F1, child:0E68:5F:cell:9B:AFE3F4, child:0E68:5F:cell:9B:AFE3F7, child:0E68:5F:cell:9B:AFE3FC, child:0E68:5F:cell:9B:AFE3FF, child:0E68:5F:cell:9B:AFE402, child:0E68:5F:cell:9B:AFE405, child:0E68:5F:cell:9B:AFE408, child:0E68:5F:cell:9B:AFE40B, child:0E68:5F:cell:9B:AFE40E, child:0E68:60:cell:9B:AFE464 per knowledge_base/mmx1/rom/boss_encounter_children_2026-10-09_r91.json#/rows/boss.rangda-bangda.presentation/parts; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.rangda-bangda.presentation/evidence; plus 4 method-f parts child:1928:3B:cell:9B:AFE42F, child:1928:3B:cell:9B:AFE438, child:1928:3B:cell:9B:AFE43D, child:1928:3B:cell:9B:AFE446 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.rangda-bangda.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.rangda-bangda.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "tools/tests/test_boss_identity.py",
            "docs/tasks/done/B2-fortress-and-mid-boss-identity.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L9, a partir da identidade do B2), modo ROM-first: dono 0x5d (rotina 88:A985): chefe final da fase 2 da fortaleza (nível 10): 0x5D e as três partes que ele cria. Gravação sigma2 do David (R7, WRAM igual em todos os quadros): X derrotado em f20154, f26262, o encontro restaurado em f20987, f37659; a derrota do chefe (o dono entra no estado 4 (ramo final)) em f39721, depois saída da fase: ação 0 do X em f40817. Imagens com o PPU do Mesen2 exatas em todos os quadros f39721..40817 (1097 de 1097). Base do nome: os rótulos rangdaBangda* do censo concordam para 0x5D..0x5F; 0x60 (rexHead) é criado por 0x5D; 0x5C (rangdaBangdaWall) nunca aparece no nível 10. Limite: ataques, seleção, dano, apresentação e música pertencem aos outros passos.",
            "en": "2026-09-25 (card L9, from B2's identity), ROM-first mode: owner 0x5d (main 88:A985): end boss of fortress stage 2 (level 10): 0x5D and the three parts it spawns. David's sigma2 take (R7, WRAM equal on every frame): X defeated at f20154, f26262, the encounter restored at f20987, f37659; the boss's defeat (owner enters state 4 (end branch)) at f39721, then stage exit: X action-0 clear at f40817. Pictures under Mesen2's PPU exact on every frame f39721..40817 (1097 of 1097). Name basis: census labels rangdaBangda* agree for 0x5D..0x5F; 0x60 (rexHead) is spawned by 0x5D; 0x5C (rangdaBangdaWall) never appears in level 10. Bound: attacks, selection, damage, presentation and music belong to the other steps."
          }
        }
      ]
    },
    {
      "id": "boss.d-rex",
      "category": "bosses",
      "title": {
        "pt": "D-Rex",
        "en": "D-Rex"
      },
      "steps": [
        {
          "id": "boss.d-rex.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "docs/tasks/done/R31-x1-boss-rows-vs-new-windows.md"
          ],
          "note": {
            "pt": "2026-10-08 (R31, regra do B17): todos os estados de entrada numa tomada verificada inteira com imagens exatas e áudio de campanha inteiro. 61:s0 em f21105 (chamada 130 do traço do runtime ROM-first (código gerado da ROM, WRAM igual ao Mesen em cada quadro) da janela S20983L, ligada a sigma3_2_26312 por WRAM $0000-$1FFF em 4173 de 4173 quadros), 62:s1,2,3 em f18909/19010/19028; áudio inteiro em sigma3 (876749/876749 leituras, 26310/26310 quadros de APU).",
            "en": "2026-10-08 (R31, B17 rule): every entry state in one whole pixel-exact verified take plus a whole campaign audio window. 61:s0 at f21105 (call 130 of the ROM-first runtime trace (code generated from the ROM, WRAM equal to Mesen on every frame) of window S20983L, bound to sigma3_2_26312 by WRAM $0000-$1FFF on 4173 of 4173 frames), 62:s1,2,3 at f18909/19010/19028; whole audio in sigma3 (876749/876749 reads, 26310/26310 APU frames)."
          }
        },
        {
          "id": "boss.d-rex.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-04_b42.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B42-boss-spawn-call-captures.md"
          ],
          "note": {
            "pt": "2026-10-05 (LG6 s2): verificado; boss_step_sweep_2026-10-04_b45.json lista 0 faltando e 0 excluídas, 48 de 48 partes testemunhadas (capturas de chamada B42, varreduras do slot do dono); boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa (resolvidos: 88:BD4C, 88:C31B).",
            "en": "2026-10-05 (LG6 s2): verified; boss_step_sweep_2026-10-04_b45.json lists 0 missing and 0 excluded, 48 of 48 parts witnessed (call captures B42, owner-slot scans); boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step (resolved: 88:BD4C, 88:C31B)."
          }
        },
        {
          "id": "boss.d-rex.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-03_b31.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-03_b31.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B31-boss-parts-by-call-capture.md"
          ],
          "note": {
            "pt": "2026-10-03 (B31): testemunha por captura de chamada; 88:B76C chamada uma vez em sigma3_2_26312 f19655 (dono 0EA8, +3C 02->04).",
            "en": "2026-10-03 (B31): call-capture witness; 88:B76C called once at sigma3_2_26312 f19655 (owner 0EA8, +3C 02->04)."
          }
        },
        {
          "id": "boss.d-rex.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 36,
            "total": 38,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.d-rex.damage/witnessed (16 witnessed of the map total 38, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.d-rex.damage/summary/total); read at git e1a2fba91; plus 6 parts 61:weapon:2, 61:weapon:8, 61:weapon:9, 61:weapon:12, 61:weapon:13, 61:weapon:16 per knowledge_base/mmx1/rom/r29_batch2_damage_witness_2026-10-08.json#/parts/boss.d-rex.damage; plus 4 parts 61:weapon:17, 61:weapon:3, 61:weapon:6, 61:weapon:7 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09.json#/candidates/boss.d-rex.damage/parts; plus 8 parts 62:weapon:6, 62:weapon:8, 62:weapon:9, 62:weapon:10, 62:weapon:11, 62:weapon:14, 62:weapon:12, 62:weapon:15 per knowledge_base/mmx1/rom/boss_hunts_2026-10-15_h45.json#/parts/boss.d-rex.damage; plus 2 method-f parts 61:weapon:5, 62:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.d-rex.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "tools/tests/test_boss_evidence_fortress.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 parcial 2, continuação (2026-09-27), W37: quatro casos novos de 0x61, C.STING normal, STORM.T carregada e B.CUTTER normal/carregada. Quedas 1/2/3/4 iguais a 86:F01B/F027/F020/F029; WRAM e imagens exatas. Total 49/49 hits iguais, união 4/9 normais e 3/9 carregadas. Casos de 0x62 e interrupção 88:B705 continuam ausentes; sem crédito. R29 (2026-10-08): buscas automáticas no XEON somam 6 partes (61:weapon:2, 61:weapon:8, 61:weapon:9, 61:weapon:12, 61:weapon:13, 61:weapon:16).",
            "en": "B8 partial 2 continuation (2026-09-27), W37: four new 0x61 cases, normal C.STING, charged STORM.T and normal/charged B.CUTTER. Drops 1/2/3/4 equal 86:F01B/F027/F020/F029; WRAM and pictures exact. Total 49/49 hits equal, union 4/9 normal and 3/9 charged. 0x62 cases and the 88:B705 interruption remain missing; no credit. R29 (2026-10-08): automated hunts on the XEON add 6 parts (61:weapon:2, 61:weapon:8, 61:weapon:9, 61:weapon:12, 61:weapon:13, 61:weapon:16)."
          }
        },
        {
          "id": "boss.d-rex.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 60,
            "total": 70,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.d-rex.presentation/parts (33 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.d-rex.presentation/missing and 13 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-1-normal-hunt_2_19431, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-d-rex-61-2-normal-hunt_2_19423, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/sigma3-cs-death-weapons-branch_2_23162, 5 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/sigma3-st-empty-weapons-branch_2_23630, 3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma3_2_26312), of all 70 parts; other sound and unclassified parts count unseen); read at git 0f969a1d6; plus 13 parts child:0E68:61:cell:A0:AFE5DF, child:0E68:61:cell:A0:AFE5E2, child:0E68:61:cell:A0:AFE5E5, child:0E68:61:cell:A0:AFE5E8, child:0E68:61:cell:A0:AFE5ED, child:0E68:61:cell:A0:AFE5F0, child:0E68:61:cell:A0:AFE5F3, child:0E68:61:cell:A0:AFE5F6, child:0E68:61:cell:A0:AFE5F9, child:0E68:61:cell:A0:AFE5FC, child:0E68:61:cell:A0:AFE5FF, child:0E68:61:cell:A0:AFE651, child:0E68:61:cell:A0:AFE656 per knowledge_base/mmx1/rom/boss_encounter_children_2026-10-09_r91.json#/rows/boss.d-rex.presentation/parts; plus 1 sound parts 62:sound:88C10C traced per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/sound/boss.d-rex.presentation inside whole APU-gated windows (b15-d-rex-61-1-normal-hunt_2_19431)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.d-rex.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "tools/tests/test_boss_identity.py",
            "docs/tasks/done/B2-fortress-and-mid-boss-identity.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L9, a partir da identidade do B2), modo ROM-first: dono 0x61 (rotina 88:B689): chefe final da fase 3 da fortaleza (nível 11): 0x62 e o 0x61 que ele cria; a saída de 0x61 grava $1F7B = 3. Gravação sigma3 do David (R7, WRAM igual em todos os quadros): X derrotado em f20068, o encontro restaurado em f21104; a derrota do chefe (a vida do dono (slot +$27) chega a 0) em f24534, depois saída da fase: ação 0 do X em f25682. Imagens com o PPU do Mesen2 exatas em todos os quadros f24534..25682 (1149 de 1149). Base do nome: não está na ROM: D-Rex como chefe da fase 3 é a ordem publicada; o rótulo rexBase (0x61) concorda, o rótulo spiderBoss (0x62) não. Limite: ataques, seleção, dano, apresentação e música pertencem aos outros passos.",
            "en": "2026-09-25 (card L9, from B2's identity), ROM-first mode: owner 0x61 (main 88:B689): end boss of fortress stage 3 (level 11): 0x62 and the 0x61 it spawns; 0x61's exit writes $1F7B = 3. David's sigma3 take (R7, WRAM equal on every frame): X defeated at f20068, the encounter restored at f21104; the boss's defeat (owner slot HP (+$27) reaches 0) at f24534, then stage exit: X action-0 clear at f25682. Pictures under Mesen2's PPU exact on every frame f24534..25682 (1149 of 1149). Name basis: not in the ROM: D-Rex as stage 3's boss is the published order; label rexBase (0x61) agrees, label spiderBoss (0x62) does not. Bound: attacks, selection, damage, presentation and music belong to the other steps."
          }
        }
      ]
    },
    {
      "id": "boss.velguarder",
      "category": "bosses",
      "title": {
        "pt": "Velguarder",
        "en": "Velguarder"
      },
      "steps": [
        {
          "id": "boss.velguarder.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_velguarder_entry_map_supplement_2026-10-09_r73.json",
            "knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json",
            "knowledge_base/mmx1/rom/boss_entry_gate_2026-10-13_b51.json",
            "docs/tasks/done/B51-entry-gate-b17-rule.md",
            "docs/tasks/done/B46-boss-entry-parts-search.md",
            "docs/tasks/done/B17-boss-entry-sweep.md",
            "docs/tasks/done/R31-x1-boss-rows-vs-new-windows.md"
          ],
          "note": {
            "pt": "2026-10-13 (L193, regra do B17 / R31, carta B51): 11 de 11 partes vistas ou provadas (knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.velguarder.entry/summary with knowledge_base/mmx1/rom/boss_velguarder_entry_map_supplement_2026-10-09_r73.json#/map_steps/boss.velguarder.entry (seen 4 of total 11); read at git 1b0355a59; plus 1 parts 26:state:3 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json#/rows/boss.velguarder.entry/parts; plus 1 parts entrance-integration per knowledge_base/mmx1/rom/boss_entry_gate_2026-10-13_b51.json#/rows/boss.velguarder.entry/parts; plus 5 method-f parts 26:state:2, 26:state:4, 26:state:5, 26:state:6, 26:state:7 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json#/steps/boss.velguarder.entry/parts (exclusion_proof cites the ROM by bank:addr, card B46)). Os estados de entrada alcançáveis 26:state:0/3/8/9/10 estão todos na tomada verificada b15-sigma-final-65-0-normal-hunt_2_10520 (f1954 a f2522, imagens exatas, WRAM 10519 de 10519), com a janela de áudio inteira dessa tomada (campaign_audio_2026-10-12_a33.json); os estados 26:state:2/4/5/6/7 a ROM nunca alcança (B46).",
            "en": "2026-10-13 (L193, B17 / R31 rule, card B51): 11 of 11 parts seen or proven (knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.velguarder.entry/summary with knowledge_base/mmx1/rom/boss_velguarder_entry_map_supplement_2026-10-09_r73.json#/map_steps/boss.velguarder.entry (seen 4 of total 11); read at git 1b0355a59; plus 1 parts 26:state:3 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json#/rows/boss.velguarder.entry/parts; plus 1 parts entrance-integration per knowledge_base/mmx1/rom/boss_entry_gate_2026-10-13_b51.json#/rows/boss.velguarder.entry/parts; plus 5 method-f parts 26:state:2, 26:state:4, 26:state:5, 26:state:6, 26:state:7 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json#/steps/boss.velguarder.entry/parts (exclusion_proof cites the ROM by bank:addr, card B46)). The reachable entry states 26:state:0/3/8/9/10 are all in the verified take b15-sigma-final-65-0-normal-hunt_2_10520 (f1954 to f2522, pixel-exact, WRAM 10519 of 10519), with that take's whole audio window (campaign_audio_2026-10-12_a33.json); states 26:state:2/4/5/6/7 the ROM never reaches (B46)."
          }
        },
        {
          "id": "boss.velguarder.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-04_b42.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B42-boss-spawn-call-captures.md"
          ],
          "note": {
            "pt": "2026-10-05 (LG6 s2): verificado; boss_step_sweep_2026-10-04_b45.json lista 0 faltando e 0 excluídas, 24 de 24 partes testemunhadas (capturas de chamada B42, varreduras do slot do dono); boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa (resolvidos: 82:CBF8, 82:CD38, 82:D168).",
            "en": "2026-10-05 (LG6 s2): verified; boss_step_sweep_2026-10-04_b45.json lists 0 missing and 0 excluded, 24 of 24 parts witnessed (call captures B42, owner-slot scans); boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step (resolved: 82:CBF8, 82:CD38, 82:D168)."
          }
        },
        {
          "id": "boss.velguarder.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "docs/tasks/done/B4-fortress-boss-evidence.md",
            "docs/tasks/done/L32-ledger-fortress-boss-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L32, KB do B4 boss_evidence_fortress_2026-09-26.json, decisão 2), modo ROM-first: seleção do velguarder (id 0x26): resultados vistos 29 de 29 em 86 ramos nos manipuladores de escolha; sítios de RNG 82:CCDD, 82:D14F. Takes: sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L32, B4's KB boss_evidence_fortress_2026-09-26.json, decision 2), ROM-first mode: velguarder (id 0x26) selection: outcomes seen 29 of 29 across 86 branches in the picking handlers; RNG sites 82:CCDD, 82:D14F. Takes: sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.velguarder.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 17,
            "total": 19,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.velguarder.damage/witnessed (14 witnessed of the map total 19, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.velguarder.damage/summary/total); read at git 7041aa42c; plus 1 parts 26:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r96.json#/candidates/boss.velguarder.damage/parts; plus 1 parts 26:weapon:0 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-10_r113.json#/parts/boss.velguarder.damage; plus 1 method-f parts 26:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.velguarder.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.velguarder.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 86,
            "total": 99,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.velguarder.presentation/parts (81 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.velguarder.presentation/missing and 4 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-sigma-final-65-0-normal-hunt_2_10520, 3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-velguarder-26-0-normal-hunt_1_2607), of all 99 parts; other sound and unclassified parts count unseen); read at git 0f969a1d6; plus 1 sound parts 26:sound:82C906 traced per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/sound/boss.velguarder.presentation inside whole APU-gated windows (b15-sigma-final-65-0-normal-hunt_2_10520)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.velguarder.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/branch_deaths_2026-10-09_r99.json",
            "knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json",
            "docs/tasks/done/R105-boss-states-choices-call-captures.md",
            "docs/tasks/done/R107-volunteer-takes-verified-captures.md",
            "docs/tasks/done/R111-declared-resolved-deep-items.md"
          ],
          "note": {
            "pt": "2026-10-09 (L44, regra do LG6 s2): verificado. As 10 partes estão resolvidas: as vistas nas fontes citadas e os cinco estados finais do Velguarder que nunca rodam nas gravações verificadas (R105, R107), que contam como prontas pela regra do David de 2026-10-09 (\"nessas situações podemos considerar como prontas então para o projeto\") para itens da lista docs/goal/DEEP-INVESTIGATIONS.md, cada um com uma tentativa séria registrada (knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json). Não é uma prova completa: conta pela decisão do dono.",
            "en": "2026-10-09 (L44, LG6 s2 rule): verified. All 10 parts are resolved: those seen in the cited sources and Velguarder's five end states that never run in the verified recordings (R105, R107), which count as done by David's rule of 2026-10-09 for items on docs/goal/DEEP-INVESTIGATIONS.md, each with a serious attempt recorded (knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json). Not a complete proof: counted by the owner's decision."
          }
        }
      ]
    },
    {
      "id": "boss.sigma-humanoid",
      "category": "bosses",
      "title": {
        "pt": "Sigma humanoide",
        "en": "humanoid"
      },
      "steps": [
        {
          "id": "boss.sigma-humanoid.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/tasks/done/B14-boss-entry-intakes.md",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "tools/oracle/intake_movie.py",
            "tools/rom/ppu_gate.py",
            "tools/rom/apu_gate.py"
          ],
          "note": {
            "en": "2026-09-28 B14, ROM-first recorded entrance in sigma-final-attempt-1: all catalogue entry states witnessed; position/arena, doors, intro, controls, camera and HP fill covered by 15997/15997 WRAM entries and 15996/15996 exact pictures. Music: committed A23 full-window gate, 15996/15996 APU frames and 330588/330588 port reads, no uncaptured live reads; WAV hash checked. Current named-take intake and source bindings are in the card Result. Bound: this recorded entrance; player-loss return is separate.",
            "pt": "2026-09-28 B14, entrada gravada ROM-first em sigma-final-attempt-1: todos os estados de entrada catalogados vistos; posição/arena, portas, intro, controles, câmera e HP cobertos por 15997/15997 estados WRAM e 15996/15996 imagens exatas. Música: gate A23 da janela completa, 15996/15996 quadros APU e 330588/330588 leituras de portas, nenhuma leitura viva ausente; hash WAV conferido. Intake atual e vínculos de origem no Result do cartão. Limite: esta entrada gravada; retorno após derrota separado."
          }
        },
        {
          "id": "boss.sigma-humanoid.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "docs/tasks/done/B4-fortress-boss-evidence.md",
            "docs/tasks/done/L32-ledger-fortress-boss-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L32, KB do B4 boss_evidence_fortress_2026-09-26.json, decisão 1), modo ROM-first: sigma-humanoid (id 0x65), tabela de estados 88:C3B2 (eventID_zeroStage1_65_main). Estados vistos 16 de 16, imagem exata no primeiro quadro de cada estado. Takes: sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L32, B4's KB boss_evidence_fortress_2026-09-26.json, decision 1), ROM-first mode: sigma-humanoid (id 0x65), state table 88:C3B2 (eventID_zeroStage1_65_main). States seen 16 of 16, picture-exact on the first frame of every state. Takes: sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.sigma-humanoid.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "docs/tasks/done/B4-fortress-boss-evidence.md",
            "docs/tasks/done/L32-ledger-fortress-boss-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L32, KB do B4 boss_evidence_fortress_2026-09-26.json, decisão 2), modo ROM-first: seleção do sigma-humanoid (id 0x65): resultados vistos 25 de 25 em 36 ramos nos manipuladores de escolha; sítios de RNG 88:CEE8, 88:CF3A. Takes: sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação.",
            "en": "2026-09-26 (card L32, B4's KB boss_evidence_fortress_2026-09-26.json, decision 2), ROM-first mode: sigma-humanoid (id 0x65) selection: outcomes seen 25 of 25 across 36 branches in the picking handlers; RNG sites 88:CEE8, 88:CF3A. Takes: sigma-final-attempt-1_1_15997, sigma-final-attempt-2_1_22929. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step."
          }
        },
        {
          "id": "boss.sigma-humanoid.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_secondary_2026-09-28.json",
            "tools/oracle/post/reduce_secondary_boss_damage.py",
            "tools/tests/test_reduce_secondary_boss_damage.py",
            "docs/tasks/done/B15-secondary-boss-damage.md",
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json"
          ],
          "note": {
            "en": "2026-09-28 B15: 18 B3/B6 normal/charged weapon groups; 17 seen and ROM-table equal under recorded WRAM gates, 1 source-proved exclusions, 0 stops. The KB records shot IDs, actual damage rows, source inventories, per-case gates and exclusions. B6/B7 matrix scope; this does not assert additional presentation/audio or per-shot interruption gates.",
            "pt": "2026-09-28 B15: 18 grupos de armas normais/carregadas B3/B6; 17 vistos e iguais à tabela da ROM com WRAM verificada, 1 exclusões comprovadas, 0 pendências na matriz. IDs, linhas, inventário, gates e exclusões constam na KB. Escopo B6/B7: não acrescenta gates de apresentação, áudio ou interrupções individuais."
          }
        },
        {
          "id": "boss.sigma-humanoid.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 258,
            "total": 269,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.sigma-humanoid.presentation/parts (110 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.sigma-humanoid.presentation/missing and 18 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (13 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-sigma-final-65-0-normal-hunt_2_10520, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-sigma-humanoid-65-1-charged-hunt_2_4622, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-sigma-humanoid-65-4-charged-hunt_2_4614, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma-final-attempt-1_1_15997, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma4-final-not-beaten_2_37016), of all 269 parts; other sound and unclassified parts count unseen); read at git b515351cb; plus 83 parts child:0E68:26:cell:99:AFE1FE, child:0E68:26:cell:99:AFE201, child:0E68:26:cell:99:AFE204, child:0E68:26:cell:99:AFE207, child:0E68:26:cell:99:AFE20A, child:0E68:26:cell:99:AFE20D, child:0E68:26:cell:99:AFE210, child:0E68:26:cell:99:AFE213, child:0E68:26:cell:99:AFE216, child:0E68:26:cell:99:AFE219, child:0E68:26:cell:99:AFE21C, child:0E68:26:cell:99:AFE21F, child:0E68:26:cell:99:AFE222, child:0E68:26:cell:99:AFE225, child:0E68:26:cell:99:AFE24B, child:0E68:26:cell:99:AFE24E, child:0E68:26:cell:99:AFE251, child:0E68:26:cell:99:AFE254, child:0E68:26:cell:99:AFE257, child:0E68:26:cell:99:AFE25C, child:0E68:26:cell:99:AFE25F, child:0E68:26:cell:99:AFE262, child:0E68:26:cell:99:AFE265, child:0E68:26:cell:99:AFE268, child:0E68:26:cell:99:AFE26B, child:0E68:26:cell:99:AFE26E, child:0E68:26:cell:99:AFE271, child:0E68:26:cell:99:AFE276, child:0E68:26:cell:99:AFE279, child:0E68:26:cell:99:AFE27C, child:0E68:26:cell:99:AFE27F, child:0E68:26:cell:99:AFE282, child:0E68:26:cell:99:AFE285, child:0E68:26:cell:99:AFE288, child:0E68:26:cell:99:AFE28B, child:0E68:26:cell:99:AFE28E, child:0E68:26:cell:99:AFE291, child:0E68:26:cell:99:AFE296, child:0E68:26:cell:99:AFE299, child:0E68:26:cell:99:AFE29C, child:0E68:26:cell:99:AFE29F, child:0E68:26:cell:99:AFE2A2, child:0E68:26:cell:99:AFE2A5, child:0E68:26:cell:99:AFE2A8, child:0E68:26:cell:99:AFE2AB, child:0E68:26:cell:99:AFE2AE, child:0E68:26:cell:99:AFE2B1, child:0E68:26:cell:99:AFE2B4, child:0E68:26:cell:99:AFE2B7, child:0E68:26:cell:99:AFE2BA, child:0E68:26:cell:99:AFE2BD, child:0E68:26:cell:99:AFE2C2, child:0E68:26:cell:99:AFE2C5, child:0E68:26:cell:99:AFE2C8, child:0E68:26:cell:99:AFE2DB, child:0E68:26:cell:99:AFE2DE, child:0E68:26:cell:99:AFE2E1, child:0E68:26:cell:99:AFE2E6, child:0E68:26:cell:99:AFE2E9, child:0E68:26:cell:99:AFE2EC, child:0E68:26:cell:99:AFE2EF, child:0E68:26:cell:99:AFE2F2, child:0E68:26:cell:99:AFE2F5, child:0E68:26:cell:99:AFE2F8, child:0E68:26:cell:99:AFE2FB, child:0E68:26:cell:99:AFE300, child:0E68:26:cell:99:AFE303, child:0E68:26:cell:99:AFE306, child:0E68:26:cell:99:AFE309, child:0E68:26:cell:99:AFE30C, child:0E68:26:cell:99:AFE32A, child:0E68:6B:cell:3E:AFBF4A, child:0E68:6B:cell:3E:AFBF4D, child:0E68:6B:cell:3E:AFBF50, child:0E68:6B:cell:3E:AFBF53, child:0E68:6B:cell:3E:AFBF58, child:0E68:6B:cell:3E:AFBF5B, child:0E68:6B:cell:3E:AFBF5E, child:0E68:6B:cell:3E:AFBF61, child:0E68:6B:cell:3E:AFBF64, child:0E68:6B:cell:3E:AFBF67, child:0E68:6B:cell:3E:AFBF9E, child:0E68:6B:cell:3E:AFBFA1 per knowledge_base/mmx1/rom/boss_owner_pool_children_2026-10-09_r90.json#/rows/boss.sigma-humanoid.presentation/parts; plus 2 method-f parts child:1928:3E:cell:A1:AFE675, child:1928:3E:cell:A2:AFE731 per knowledge_base/mmx1/rom/boss_sigma_humanoid_unformed_child_cells_2026-10-09_r85.json#/steps/boss.sigma-humanoid.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts 65:cell:3E:AFBF24 per knowledge_base/mmx1/rom/boss_unrequested_animation_cells_2026-10-11_r125.json#/steps/boss.sigma-humanoid.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 30 method-f parts 65:cell:3E:AFBF3F, 65:cell:3E:AFBF42, 65:cell:3E:AFBF45, 65:cell:3E:AFBF4A, 65:cell:3E:AFBF4D, 65:cell:3E:AFBF50, 65:cell:3E:AFBF53, 65:cell:3E:AFBF58, 65:cell:3E:AFBF5B, 65:cell:3E:AFBF5E, 65:cell:3E:AFBF61, 65:cell:3E:AFBF64, 65:cell:3E:AFBF67, 65:cell:3E:AFBF6A, 65:cell:3E:AFBF6F, 65:cell:3E:AFBF72, 65:cell:3E:AFBF75, 65:cell:3E:AFBF7A, 65:cell:3E:AFBF7D, 65:cell:3E:AFBF82, 65:cell:3E:AFBF85, 65:cell:3E:AFBF8A, 65:cell:3E:AFBF8D, 65:cell:3E:AFBF90, 65:cell:3E:AFBF93, 65:cell:3E:AFBF96, 65:cell:3E:AFBF99, 65:cell:3E:AFBF9E, 65:cell:3E:AFBFA1, 65:cell:3E:AFBFA4 per knowledge_base/mmx1/rom/boss_cells_h36_2026-10-12.json#/steps/boss.sigma-humanoid.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts 65:cell:A1:AFE6CF per knowledge_base/mmx1/rom/boss_cells_h39_2026-10-12.json#/steps/boss.sigma-humanoid.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 method-f parts child:0E68:6B:cell:3E:AFBF6A, child:0E68:6B:cell:3E:AFBFA4 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b53.json#/steps/boss.sigma-humanoid.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 11 method-f parts child:0E68:26:cell:99:AFE228, child:0E68:26:cell:99:AFE22B, child:0E68:26:cell:99:AFE22E, child:0E68:26:cell:99:AFE231, child:0E68:26:cell:99:AFE234, child:0E68:26:cell:99:AFE237, child:0E68:26:cell:99:AFE23A, child:0E68:26:cell:99:AFE23D, child:0E68:26:cell:99:AFE240, child:0E68:26:cell:99:AFE243, child:0E68:26:cell:99:AFE246 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b55.json#/steps/boss.sigma-humanoid.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.sigma-humanoid.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "tools/tests/test_boss_identity.py",
            "docs/tasks/done/B2-fortress-and-mid-boss-identity.md",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L9, a partir da identidade do B2), modo ROM-first: dono 0x65 (rotina 88:C3B2): chefe do nível 12, colocado uma vez: cria 0x26 primeiro, é derrotado ($1F0C) e depois cria 0x6B. Gravação sigma4-final-not-beaten do David (R7, WRAM igual em todos os quadros): X derrotado em f6205, f11112, f17013, f24974, o encontro restaurado em f7758, f13219, f18592, f26570; a derrota do chefe ($1F0C 0->1) em f34759, depois o próximo dono, 0x6b, aparece em f35183. Imagens com o PPU do Mesen2 exatas em todos os quadros f34759..35183 (425 de 425). Base do nome: o rótulo zeroStage1 é contrariado pelo nível e pelo que ele cria; a ROM não dá nome à criatura. Limite: ataques, seleção, dano, apresentação e música pertencem aos outros passos.",
            "en": "2026-09-25 (card L9, from B2's identity), ROM-first mode: owner 0x65 (main 88:C3B2): level-12 boss placed once: spawns 0x26 first, is beaten ($1F0C), then spawns 0x6B. David's sigma4-final-not-beaten take (R7, WRAM equal on every frame): X defeated at f6205, f11112, f17013, f24974, the encounter restored at f7758, f13219, f18592, f26570; the boss's defeat ($1F0C 0->1) at f34759, then next owner 0x6b appears at f35183. Pictures under Mesen2's PPU exact on every frame f34759..35183 (425 of 425). Name basis: label zeroStage1 is contradicted by its level and its spawns; the ROM names no creature. Bound: attacks, selection, damage, presentation and music belong to the other steps."
          }
        }
      ]
    },
    {
      "id": "boss.sigma-final",
      "category": "bosses",
      "title": {
        "pt": "Sigma final",
        "en": "Sigma final"
      },
      "steps": [
        {
          "id": "boss.sigma-final.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/tasks/done/B14-boss-entry-intakes.md",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "tools/oracle/intake_movie.py",
            "tools/rom/ppu_gate.py",
            "tools/rom/apu_gate.py"
          ],
          "note": {
            "en": "2026-09-28 B14, ROM-first recorded entrance in sigma-final-attempt-1: all catalogue entry states witnessed; position/arena, doors, intro, controls, camera and HP fill covered by 15997/15997 WRAM entries and 15996/15996 exact pictures. Music: committed A23 full-window gate, 15996/15996 APU frames and 330588/330588 port reads, no uncaptured live reads; WAV hash checked. Current named-take intake and source bindings are in the card Result. Bound: this recorded entrance; player-loss return is separate.",
            "pt": "2026-09-28 B14, entrada gravada ROM-first em sigma-final-attempt-1: todos os estados de entrada catalogados vistos; posição/arena, portas, intro, controles, câmera e HP cobertos por 15997/15997 estados WRAM e 15996/15996 imagens exatas. Música: gate A23 da janela completa, 15996/15996 quadros APU e 330588/330588 leituras de portas, nenhuma leitura viva ausente; hash WAV conferido. Intake atual e vínculos de origem no Result do cartão. Limite: esta entrada gravada; retorno após derrota separado."
          }
        },
        {
          "id": "boss.sigma-final.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "docs/tasks/done/B4-fortress-boss-evidence.md",
            "docs/tasks/done/L32-ledger-fortress-boss-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L32, KB do B4 boss_evidence_fortress_2026-09-26.json, decisão 1), modo ROM-first: sigma-final (id 0x65), tabela de estados 88:C3B2 (eventID_zeroStage1_65_main). Estados vistos 4 de 4, imagem exata no primeiro quadro de cada estado. Takes: sigma-final-attempt-1_1_15997. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação. 0x6B é uma parte da luta (só a verificação de contato), não seu dono.",
            "en": "2026-09-26 (card L32, B4's KB boss_evidence_fortress_2026-09-26.json, decision 1), ROM-first mode: sigma-final (id 0x65), state table 88:C3B2 (eventID_zeroStage1_65_main). States seen 4 of 4, picture-exact on the first frame of every state. Takes: sigma-final-attempt-1_1_15997. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step. 0x6B is a part of the fight (contact check only), not its owner."
          }
        },
        {
          "id": "boss.sigma-final.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_evidence_fortress_2026-09-26.json",
            "docs/tasks/done/B4-fortress-boss-evidence.md",
            "docs/tasks/done/L32-ledger-fortress-boss-attacks.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta L32, KB do B4 boss_evidence_fortress_2026-09-26.json, decisão 2), modo ROM-first: seleção do sigma-final (id 0x65): resultados vistos 6 de 6 em 10 ramos nos manipuladores de escolha; sítios de RNG 88:CC4C, 88:CC53, 88:CC64, 88:CC6C, 88:CC9C, 88:CCE0, 88:CD27. Takes: sigma-final-attempt-1_1_15997. Limite: estados de introdução e derrota pertencem aos passos de entrada e saída; sons pertencem ao passo de apresentação. 0x6B é uma parte da luta (só a verificação de contato), não seu dono.",
            "en": "2026-09-26 (card L32, B4's KB boss_evidence_fortress_2026-09-26.json, decision 2), ROM-first mode: sigma-final (id 0x65) selection: outcomes seen 6 of 6 across 10 branches in the picking handlers; RNG sites 88:CC4C, 88:CC53, 88:CC64, 88:CC6C, 88:CC9C, 88:CCE0, 88:CD27. Takes: sigma-final-attempt-1_1_15997. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step. 0x6B is a part of the fight (contact check only), not its owner."
          }
        },
        {
          "id": "boss.sigma-final.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_deflect_witnesses_2026-10-09_r99.json",
            "knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json",
            "docs/tasks/done/R131-count-class-p-proofs.md"
          ],
          "note": {
            "pt": "2026-10-11 (L67, carta R131): 18 de 18 casos de dano do Sigma (forma final) (id 0x65) vistos ou provados. Os 17 vistos: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.sigma-final.damage/witnessed (12 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.sigma-final.damage/summary/total); read at git 13f6e217b; plus 5 parts 65:weapon:9, 65:weapon:12, 65:weapon:13, 65:weapon:16, 65:weapon:17 per knowledge_base/mmx1/rom/boss_deflect_witnesses_2026-10-09_r99.json#/rows/boss.sigma-final.damage/parts. O último, a arma 5 (Chameleon Sting carregada, tiro 0x11), é provado pela ROM: o tiro grava +30 = 2 em 83:9B8C e o laço de acerto do chefe (84:9B43) pula todo tiro com +30 diferente de 0 em 84:9B5F/84:9B62, antes do teste de colisão e do dano; o censo F4 mostra que este chefe chega a 84:9B43 sem sítios não resolvidos (knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json).",
            "en": "2026-10-11 (L67, card R131): 18 of 18 damage cases of the Sigma (final form) (id 0x65) seen or proven. The 17 seen: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.sigma-final.damage/witnessed (12 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.sigma-final.damage/summary/total); read at git 13f6e217b; plus 5 parts 65:weapon:9, 65:weapon:12, 65:weapon:13, 65:weapon:16, 65:weapon:17 per knowledge_base/mmx1/rom/boss_deflect_witnesses_2026-10-09_r99.json#/rows/boss.sigma-final.damage/parts. The last, weapon 5 (charged Chameleon Sting, shot 0x11), is proven from the ROM: the shot stores +30 = 2 at 83:9B8C and the boss hit loop (84:9B43) skips every shot with +30 not 0 at 84:9B5F/84:9B62, before the hitbox test and the damage; the F4 census shows this boss reaches 84:9B43 with no unresolved site (knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json)."
          }
        },
        {
          "id": "boss.sigma-final.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/derived/gc7_sigma3_sequential_route_retraction.json",
            "knowledge_base/mmx1/derived/gc7_sigma4_final_battle_chain.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "knowledge_base/mmx1/rom/boss_cells_h39_2026-10-12.json",
            "knowledge_base/mmx1/rom/boss_child_cells_2026-10-13_b48.json",
            "docs/tasks/done/B48-vile-child-cells.md",
            "docs/tasks/done/H39-animation-ends-before-cell-proofs.md",
            "docs/tasks/done/A33-a30-early-divergence.md"
          ],
          "note": {
            "pt": "2026-10-13 (L187, carta B48): 63 de 63 partes vistas ou provadas (knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.sigma-final.presentation/parts (49 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.sigma-final.presentation/missing and 11 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (8 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-sigma-final-65-0-normal-hunt_2_10520, 3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma-final-win_2_44618), of all 63 parts; other sound and unclassified parts count unseen); read at git e41099768; plus 2 method-f parts 6B:cell:3E:AFBF6A, 6B:cell:3E:AFBFA4 per knowledge_base/mmx1/rom/boss_cells_h39_2026-10-12.json#/steps/boss.sigma-final.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1428:31:cell:3E:AFBFB5 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-13_b48.json#/steps/boss.sigma-final.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)): 49 partes de imagem vistas em gravações conferidas, 11 sons dentro de janelas de áudio inteiras, 3 quadros que a ROM nunca desenha (dois fins de animação, H39; o quadro AF:BFB5 da peça 1428:31, trocado pela animação 12 na mesma chamada, 88:D114-88:D122, B48).",
            "en": "2026-10-13 (L187, card B48): 63 of 63 parts seen or proven (knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.sigma-final.presentation/parts (49 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.sigma-final.presentation/missing and 11 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (8 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-sigma-final-65-0-normal-hunt_2_10520, 3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/sigma-final-win_2_44618), of all 63 parts; other sound and unclassified parts count unseen); read at git e41099768; plus 2 method-f parts 6B:cell:3E:AFBF6A, 6B:cell:3E:AFBFA4 per knowledge_base/mmx1/rom/boss_cells_h39_2026-10-12.json#/steps/boss.sigma-final.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:1428:31:cell:3E:AFBFB5 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-13_b48.json#/steps/boss.sigma-final.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)): 49 picture parts seen in verified takes, 11 sounds inside whole audio windows, 3 cells the ROM never draws (two animation ends, H39; child 1428:31's AF:BFB5, replaced by animation 12 in the same call, 88:D114-88:D122, B48)."
          }
        },
        {
          "id": "boss.sigma-final.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_fortress_spikes_2026-09-26.json",
            "tools/tests/test_branch_fortress_spikes.py",
            "docs/tasks/done/R17-branch-takes-fortress-deaths-spikes.md"
          ],
          "note": {
            "pt": "2026-09-26 (card R17, regra do L9 por uma gravação ramificada), modo ROM-first (megaman-x.exe --rom-first): gravação ramificada sigma-final-death-branch = savestate de sigma-final-attempt-1 e as linhas dela até o fim, f15997, depois entradas achadas por busca de objetivo (método do R16): X derrotado na luta de 0x6B f15248, volta ao checkpoint f15496, o encontro restaurado f17407 (0x65 ativo de novo: o encontro de Sigma recomeça com 0x65 (leitura do L20)); WRAM igual 17.526 de 17.526, imagens exatas 17.525 de 17.525. Morte e passagem: R9 sigma-final-win: win f13897, w_1f23/$D3 f15531, ending f23001 (L20 decision 1); X defeated in 0x6B's fight R8 f15249 (KB intake_david_0925b_2026-09-25.json). Limite: uma gravação ramificada.",
            "en": "2026-09-26 (card R17, L9's rule by a branch take), ROM-first mode (megaman-x.exe --rom-first): branch take sigma-final-death-branch = sigma-final-attempt-1's savestate and its own lines to its end, f15997, then inputs found by a goal search (R16's method): X defeated in 0x6B's fight f15248, checkpoint return f15496, the encounter restored f17407 (0x65 active again: the Sigma encounter restarts with 0x65 (L20's reading)); WRAM equal 17,526 of 17,526, pictures exact 17,525 of 17,525. Death and handoff: R9 sigma-final-win: win f13897, w_1f23/$D3 f15531, ending f23001 (L20 decision 1); X defeated in 0x6B's fight R8 f15249 (KB intake_david_0925b_2026-09-25.json). Bound: one branch take."
          }
        }
      ]
    },
    {
      "id": "boss.thunder-slimer",
      "category": "bosses",
      "title": {
        "pt": "Thunder Slimer",
        "en": "Thunder Slimer"
      },
      "steps": [
        {
          "id": "boss.thunder-slimer.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 18,
            "total": 31,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.entry/summary with knowledge_base/mmx1/rom/boss_thunder_slimer_entry_map_supplement_2026-10-09_r75.json#/map_steps/boss.thunder-slimer.entry (seen 3 of total 31); read at git 1a58e97c2; plus 13 parts child:1928:32:state:+01=02 +02=02, child:1928:32:state:+01=04, child:1428:19:state:+01=00 +02=00, child:1428:19:state:+01=02 +02=00, child:1428:19:state:+01=02 +02=02, child:1428:19:state:+01=02 +02=04, child:1428:19:state:+01=02 +02=06, child:1428:19:state:+01=02 +02=08, child:1428:19:state:+01=02 +02=0A, child:1428:19:state:+01=02 +02=0C, child:1428:19:state:+01=02 +02=0E, child:1428:19:state:+01=02 +02=10, child:1428:19:state:+01=04 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r83.json#/rows/boss.thunder-slimer.entry/parts; plus 1 parts 03:state:5 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json#/rows/boss.thunder-slimer.entry/parts; plus 1 method-f parts child:1928:32:state:+01=00 +02=02 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b46.json#/steps/boss.thunder-slimer.entry/parts (exclusion_proof cites the ROM by bank:addr, card B46)"
          },
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.thunder-slimer.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 24,
            "total": 25,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.attacks/witnessed (19 witnessed of the map total 25, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.attacks/summary/total); read at git af0352d26; plus 5 parts 03:spawn:84B429, 03:spawn:84B5F9, 03:spawn:84B619, 03:spawn:84B673, 03:spawn:84B7CF per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json#/steps/boss.thunder-slimer.attacks/evidence; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.thunder-slimer.attacks/evidence"
          },
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json",
            "tools/tests/test_midboss_evidence.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 parcial 2, continuação (2026-09-27), W37: 19/20 estados vistos, 19 com imagens exatas. O exec de 84:B451 no take verificado não deixa +01=02 +10=02 no snapshot do dono. O estado continua ausente; sem crédito.",
            "en": "B8 partial 2 continuation (2026-09-27), W37: 19/20 states seen, 19 picture-exact. The verified take executes 84:B451 but its owner snapshots never hold +01=02 +10=02. The state remains missing; no credit."
          }
        },
        {
          "id": "boss.thunder-slimer.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 24,
            "total": 29,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.selection/witnessed (24 witnessed of the map total 29, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.selection/summary/total); read at git af0352d26; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.thunder-slimer.selection/evidence"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json",
            "tools/tests/test_midboss_evidence.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 parcial 2, continuação (2026-09-27), W37: 23/29 saídas vistas. Seis takes com intake verificado não mostram as transições pedidas após N (84:B27D, B77C, B00A, B03E, B453, B477); exec sozinho não conta. Sem crédito.",
            "en": "B8 partial 2 continuation (2026-09-27), W37: 23/29 outcomes seen. Six verified intakes do not show the requested transitions after N (84:B27D, B77C, B00A, B03E, B453, B477); exec alone does not count. No credit."
          }
        },
        {
          "id": "boss.thunder-slimer.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json",
            "tools/tests/test_midboss_evidence.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/r29_batch1_damage_witness_2026-10-08.json",
            "knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json",
            "knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-10_r119.json",
            "knowledge_base/mmx1/rom/volunteer_takes_2026-10-11_r139.json",
            "knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json",
            "docs/tasks/done/R139-take-verification-split.md"
          ],
          "note": {
            "pt": "2026-10-12 (L78, carta R139): 18 de 18 casos de dano do Thunder Slimer (id 0x03) vistos. Os dois novos, 03:weapon:10 e 03:weapon:17, vêm dos takes voluntários vol-b5-thunder-slimer-1 e -2, aceitos pela regra wram_verified da R139 (portão de imagem com WRAM N de N, portão de quadros N de N, sem parada), lidos pelo redutor de acertos B6/B7 (tabela 86:EF37, todo acerto igual) (knowledge_base/mmx1/rom/volunteer_takes_2026-10-11_r139.json). Vistos: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.damage/witnessed (4 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.damage/summary/total); read at git af0352d26; plus 3 parts 03:weapon:0, 03:weapon:4, 03:weapon:12 per knowledge_base/mmx1/rom/r29_batch1_damage_witness_2026-10-08.json#/parts/boss.thunder-slimer.damage; plus 3 parts 03:weapon:1, 03:weapon:11, 03:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json#/candidates/boss.thunder-slimer.damage/parts; plus 5 parts 03:weapon:3, 03:weapon:6, 03:weapon:7, 03:weapon:13, 03:weapon:15 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-10_r119.json#/parts/boss.thunder-slimer.damage; plus 2 parts 03:weapon:10, 03:weapon:17 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-11_r139.json#/candidates/boss.thunder-slimer.damage/parts; plus 1 method-f parts 03:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.thunder-slimer.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131).",
            "en": "2026-10-12 (L78, card R139): 18 of 18 damage cases of Thunder Slimer (id 0x03) seen. The two new ones, 03:weapon:10 and 03:weapon:17, come from the volunteer takes vol-b5-thunder-slimer-1 and -2, accepted by R139's wram_verified rule (picture gate WRAM N of N, frame gate N of N, no stop), read by the B6/B7 hit reducer (table 86:EF37, every hit equal) (knowledge_base/mmx1/rom/volunteer_takes_2026-10-11_r139.json). Seen: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.damage/witnessed (4 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.damage/summary/total); read at git af0352d26; plus 3 parts 03:weapon:0, 03:weapon:4, 03:weapon:12 per knowledge_base/mmx1/rom/r29_batch1_damage_witness_2026-10-08.json#/parts/boss.thunder-slimer.damage; plus 3 parts 03:weapon:1, 03:weapon:11, 03:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json#/candidates/boss.thunder-slimer.damage/parts; plus 5 parts 03:weapon:3, 03:weapon:6, 03:weapon:7, 03:weapon:13, 03:weapon:15 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-10_r119.json#/parts/boss.thunder-slimer.damage; plus 2 parts 03:weapon:10, 03:weapon:17 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-11_r139.json#/candidates/boss.thunder-slimer.damage/parts; plus 1 method-f parts 03:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.thunder-slimer.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)."
          }
        },
        {
          "id": "boss.thunder-slimer.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 281,
            "total": 284,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.presentation/parts with knowledge_base/mmx1/rom/boss_thunder_slimer_map_supplement_2026-10-09_r72.json#/map_steps/boss.thunder-slimer.presentation (116 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.presentation/missing and 6 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-thunder-slimer-03-0-charged-r1-hunt_1_4855, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-thunder-slimer-03-0-normal-hunt_1_4845, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b15-thunder-slimer-03-2-normal-hunt_2_20596, 3 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/s38-spark-mandrill-class-3d-hunt_1_23160), of all 284 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 159 method-f parts 03:cell:01:AFA4EF, 03:cell:01:AFA4F2, 03:cell:01:AFA4F7, 03:cell:01:AFA4FA, 03:cell:01:AFA4FD, 03:cell:01:AFA500, 03:cell:01:AFA503, 03:cell:01:AFA508, 03:cell:01:AFA50B, 03:cell:01:AFA50E, 03:cell:01:AFA511, 03:cell:01:AFA514, 03:cell:01:AFA517, 03:cell:01:AFA51C, 03:cell:01:AFA51F, 03:cell:02:AFA540, 03:cell:02:AFA545, 03:cell:02:AFA54A, 03:cell:02:AFA54D, 03:cell:02:AFA550, 03:cell:02:AFA553, 03:cell:02:AFA558, 03:cell:02:AFA55B, 03:cell:02:AFA55E, 03:cell:02:AFA563, 03:cell:02:AFA566, 03:cell:02:AFA569, 03:cell:02:AFA56C, 03:cell:02:AFA571, 03:cell:02:AFA574, 03:cell:02:AFA577, 03:cell:02:AFA57A, 03:cell:02:AFA57F, 03:cell:02:AFA584, 03:cell:02:AFA589, 03:cell:02:AFA58C, 03:cell:02:AFA58F, 03:cell:02:AFA594, 03:cell:02:AFA599, 03:cell:02:AFA59E, 03:cell:02:AFA5A3, 03:cell:02:AFA5A8, 03:cell:04:AFA5F2, 03:cell:04:AFA5F5, 03:cell:04:AFA5F8, 03:cell:04:AFA5FB, 03:cell:04:AFA5FE, 03:cell:04:AFA603, 03:cell:04:AFA606, 03:cell:04:AFA609, 03:cell:04:AFA60C, 03:cell:04:AFA60F, 03:cell:1E:AFB119, 03:cell:1E:AFB11C, 03:cell:1E:AFB11F, 03:cell:1E:AFB122, 03:cell:1E:AFB125, 03:cell:1E:AFB128, 03:cell:1E:AFB12B, 03:cell:1E:AFB12E, 03:cell:1E:AFB131, 03:cell:1E:AFB134, 03:cell:1E:AFB137, 03:cell:1E:AFB13A, 03:cell:1E:AFB13D, 03:cell:1E:AFB140, 03:cell:1E:AFB143, 03:cell:1E:AFB146, 03:cell:1E:AFB149, 03:cell:1E:AFB14C, 03:cell:1E:AFB14F, 03:cell:1E:AFB152, 03:cell:1E:AFB155, 03:cell:1E:AFB158, 03:cell:1E:AFB15B, 03:cell:1E:AFB15E, 03:cell:1E:AFB161, 03:cell:1E:AFB164, 03:cell:1E:AFB167, 03:cell:1E:AFB16A, 03:cell:1E:AFB16D, 03:cell:1E:AFB170, 03:cell:1E:AFB173, 03:cell:1E:AFB176, 03:cell:1E:AFB179, 03:cell:1E:AFB17C, 03:cell:1E:AFB181, 03:cell:1E:AFB184, 03:cell:1E:AFB187, 03:cell:1E:AFB18A, 03:cell:20:AFB299, 03:cell:20:AFB29C, 03:cell:20:AFB29F, 03:cell:20:AFB2A2, 03:cell:20:AFB2A7, 03:cell:20:AFB2AA, 03:cell:20:AFB2AD, 03:cell:20:AFB2B0, 03:cell:20:AFB2B5, 03:cell:20:AFB2B8, 03:cell:20:AFB2BB, 03:cell:20:AFB2BE, 03:cell:20:AFB2C1, 03:cell:20:AFB2C4, 03:cell:20:AFB2C7, 03:cell:20:AFB2CA, 03:cell:20:AFB2CD, 03:cell:20:AFB2D0, 03:cell:20:AFB2D3, 03:cell:20:AFB2D6, 03:cell:20:AFB2D9, 03:cell:20:AFB2DC, 03:cell:20:AFB2DF, 03:cell:20:AFB2E2, 03:cell:20:AFB2E5, 03:cell:20:AFB2E8, 03:cell:20:AFB2EB, 03:cell:20:AFB2EE, 03:cell:20:AFB2F1, 03:cell:20:AFB2F4, 03:cell:20:AFB2F7, 03:cell:20:AFB2FA, 03:cell:20:AFB2FD, 03:cell:20:AFB300, 03:cell:20:AFB303, 03:cell:20:AFB306, 03:cell:20:AFB309, 03:cell:20:AFB30C, 03:cell:20:AFB30F, 03:cell:20:AFB312, 03:cell:20:AFB317, 03:cell:20:AFB31A, 03:cell:20:AFB31D, 03:cell:20:AFB320, 03:cell:20:AFB325, 03:cell:20:AFB32A, 03:cell:20:AFB32F, 03:cell:20:AFB332, 03:cell:20:AFB335, 03:cell:20:AFB338, 03:cell:20:AFB33B, 03:cell:20:AFB340, 03:cell:20:AFB343, 03:cell:20:AFB348, 03:cell:20:AFB34D, 03:cell:20:AFB352, 03:cell:20:AFB357, 03:cell:20:AFB35A, 03:cell:20:AFB35D, 03:cell:20:AFB360, 03:cell:20:AFB363, 03:cell:20:AFB368, 03:cell:20:AFB36B, 03:cell:20:AFB36E, 03:cell:20:AFB371, 03:cell:3C:AFBEF0, 03:cell:3C:AFBEF3, 03:cell:3C:AFBEF6, 03:cell:3C:AFBEF9 per knowledge_base/mmx1/rom/boss_thunder_slimer_undrawn_cells_2026-10-09_r77.json#/steps/boss.thunder-slimer.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.thunder-slimer.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r105.json",
            "knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json",
            "knowledge_base/mmx1/rom/boss_loss_retry_2026-10-15_r157.json"
          ],
          "note": {
            "pt": "2026-10-15 (L253, carta R157): 8 de 8 partes (knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.outro/witnessed (5 witnessed of the map total 8, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.outro/summary/total); read at git fcbbb5796; plus 1 parts 03:state:34 per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r105.json#/steps/boss.thunder-slimer.outro/evidence; plus 1 parts 03:state:38 per knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json#/steps/boss.thunder-slimer.outro/parts; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.thunder-slimer.outro/evidence; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-15_r157.json#/rows/boss.thunder-slimer.outro/parts); a parte que faltava era a morte do jogador e o retorno: em vol-b6-thunder-slimer-death-1 o X morre durante a luta (f4228), volta no mesmo checkpoint (f4494) e a luta recomeça (f6657). A gravação tem a WRAM igual em todos os quadros (regra R139, aprovada pelo David em 12/10).",
            "en": "2026-10-15 (L253, card R157): 8 of 8 parts (knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.thunder-slimer.outro/witnessed (5 witnessed of the map total 8, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.thunder-slimer.outro/summary/total); read at git fcbbb5796; plus 1 parts 03:state:34 per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r105.json#/steps/boss.thunder-slimer.outro/evidence; plus 1 parts 03:state:38 per knowledge_base/mmx1/rom/deep_items_declared_resolved_2026-10-09.json#/steps/boss.thunder-slimer.outro/parts; plus 0 parts per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-11_r139.json#/steps/boss.thunder-slimer.outro/evidence; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-15_r157.json#/rows/boss.thunder-slimer.outro/parts); the missing part was the player's loss and retry: in vol-b6-thunder-slimer-death-1 X dies during the fight (f4228), comes back at the same checkpoint (f4494) and the fight starts again (f6657). The take's WRAM is equal at every frame (R139's rule, approved by David on 10/12)."
          }
        }
      ]
    },
    {
      "id": "boss.submarine",
      "category": "bosses",
      "title": {
        "pt": "Submarino",
        "en": "Submarine"
      },
      "steps": [
        {
          "id": "boss.submarine.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "docs/tasks/done/R35-gate-clock-drift-f993.md"
          ],
          "note": {
            "pt": "2026-10-08 (L8, regra do B17): todos os estados de entrada numa tomada verificada inteira com imagens exatas e áudio de campanha inteiro. 28:s0 em f7348 (slot 0E68; testemunha de chamada do R31, traço ligado a launch-octopus-and-sting-flooded_2_38342); áudio inteiro em launch-octopus-and-sting-flooded_2_38342 (38341/38341 quadros de WRAM, 670206/670206 leituras de porta, 38340/38340 quadros de APU; R35 corrigiu o HDMA ligado no meio do quadro).",
            "en": "2026-10-08 (L8, B17 rule): every entry state in one whole pixel-exact verified take plus a whole campaign audio window. 28:s0 at f7348 (slot 0E68; R31 call witness, trace bound to launch-octopus-and-sting-flooded_2_38342); whole audio in launch-octopus-and-sting-flooded_2_38342 (WRAM 38341/38341, port reads 670206/670206, APU frames 38340/38340; R35 fixed the HDMA enabled mid-frame)."
          }
        },
        {
          "id": "boss.submarine.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r102.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/R102-attack-spawn-sites-call-captures.md"
          ],
          "note": {
            "pt": "2026-10-09 (L40, regra do LG6 s2): verificado; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json lista 0 faltando e 0 excluídas, 7 de 7 partes testemunhadas (pontos de criação de filhos pelas capturas de chamada do alocador do R102, registros em knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r102.json); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa.",
            "en": "2026-10-09 (L40, LG6 s2 rule): verified; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json lists 0 missing and 0 excluded, 7 of 7 parts witnessed (child spawn sites by R102's allocator call captures, records in knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r102.json); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step."
          }
        },
        {
          "id": "boss.submarine.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "tools/tests/test_b24_boss_structural_catalogues.py",
            "docs/tasks/done/B24-boss-structural-catalogues.md"
          ],
          "note": {
            "en": "2026-10-01 B24: ROM-cited conditional catalogue; 1/1 unique consecutive same-owner transitions in currently WRAM-verified, pixel-exact takes. ENDGAME ROM-first rule; no statistical-law gate. 530 takes re-swept; receipts and exact witnesses in build/B24/boss-step-sweep.json. Other step kinds remain separate.",
            "pt": "2026-10-01 B24: catálogo condicional citado na ROM; 1/1 transições consecutivas únicas do mesmo dono em tomadas com WRAM verificada e imagens exatas. Regra ROM-first do ENDGAME; sem gate de lei estatística. 530 tomadas reavaliadas; recibos e testemunhos em build/B24/boss-step-sweep.json. Os demais passos continuam separados."
          }
        },
        {
          "id": "boss.submarine.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_submarine_limit_closure_2026-10-09_r69.json",
            "knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-09_r82.json",
            "knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json",
            "knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json",
            "docs/tasks/done/R131-count-class-p-proofs.md"
          ],
          "note": {
            "pt": "2026-10-11 (L67, carta R131): 18 de 18 casos de dano do submarino (id 0x28) vistos ou provados. Os 17 vistos: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.submarine.damage/witnessed (1 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.submarine.damage/summary/total; catalogue_limits 82:D994 closed per knowledge_base/mmx1/rom/boss_submarine_limit_closure_2026-10-09_r69.json#/resolved_limits); read at git a672dfcc6; plus 5 parts 28:weapon:0, 28:weapon:1, 28:weapon:12, 28:weapon:14, 28:weapon:16 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-09_r82.json#/parts/boss.submarine.damage; plus 11 parts 28:weapon:10, 28:weapon:11, 28:weapon:13, 28:weapon:15, 28:weapon:17, 28:weapon:2, 28:weapon:3, 28:weapon:4, 28:weapon:6, 28:weapon:7, 28:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json#/candidates/boss.submarine.damage/parts. O último, a arma 5 (Chameleon Sting carregada, tiro 0x11), é provado pela ROM: o tiro grava +30 = 2 em 83:9B8C e o laço de acerto do chefe (84:9B43) pula todo tiro com +30 diferente de 0 em 84:9B5F/84:9B62, antes do teste de colisão e do dano; o censo F4 mostra que este chefe chega a 84:9B43 sem sítios não resolvidos (knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json).",
            "en": "2026-10-11 (L67, card R131): 18 of 18 damage cases of the submarine (id 0x28) seen or proven. The 17 seen: knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.submarine.damage/witnessed (1 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.submarine.damage/summary/total; catalogue_limits 82:D994 closed per knowledge_base/mmx1/rom/boss_submarine_limit_closure_2026-10-09_r69.json#/resolved_limits); read at git a672dfcc6; plus 5 parts 28:weapon:0, 28:weapon:1, 28:weapon:12, 28:weapon:14, 28:weapon:16 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-09_r82.json#/parts/boss.submarine.damage; plus 11 parts 28:weapon:10, 28:weapon:11, 28:weapon:13, 28:weapon:15, 28:weapon:17, 28:weapon:2, 28:weapon:3, 28:weapon:4, 28:weapon:6, 28:weapon:7, 28:weapon:9 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json#/candidates/boss.submarine.damage/parts. The last, weapon 5 (charged Chameleon Sting, shot 0x11), is proven from the ROM: the shot stores +30 = 2 at 83:9B8C and the boss hit loop (84:9B43) skips every shot with +30 not 0 at 84:9B5F/84:9B62, before the hitbox test and the damage; the F4 census shows this boss reaches 84:9B43 with no unresolved site (knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json)."
          }
        },
        {
          "id": "boss.submarine.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 58,
            "total": 61,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.submarine.presentation/parts with knowledge_base/mmx1/rom/boss_submarine_map_supplement_2026-10-09_r69.json#/map_steps/boss.submarine.presentation (27 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.submarine.presentation/missing and 4 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-lo-0x07-selection-01-04-02-02-03-02-03-0a-at-81-c88-hunt_2_21896), of all 61 parts; other sound and unclassified parts count unseen); read at git 0f969a1d6; plus 3 parts child:1928:2B:cell:80:AFD97E, child:1928:2B:cell:80:AFD983, child:1928:2B:cell:80:AFD988 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r74.json#/rows/boss.submarine.presentation/parts; plus 13 parts child:0E68:49:cell:80:AFD951, child:0E68:49:cell:80:AFD954, child:0E68:49:cell:80:AFD957, child:0E68:49:cell:80:AFD95A, child:0E68:49:cell:80:AFD95F, child:0E68:49:cell:80:AFD962, child:0E68:49:cell:80:AFD965, child:0E68:49:cell:80:AFD968, child:0E68:49:cell:80:AFD96B, child:0E68:49:cell:80:AFD970, child:0E68:49:cell:80:AFD973, child:0E68:49:cell:80:AFD976, child:0E68:49:cell:80:AFD979 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r83.json#/rows/boss.submarine.presentation/parts; plus 8 parts child:0E68:4B:cell:81:AFD993, child:0E68:4B:cell:81:AFD996, child:0E68:4B:cell:81:AFD999, child:0E68:4B:cell:81:AFD99C, child:0E68:4B:cell:81:AFD9A1, child:0E68:4B:cell:81:AFD9A4, child:0E68:4B:cell:81:AFD9A7, child:0E68:4B:cell:81:AFD9AA per knowledge_base/mmx1/rom/boss_owner_pool_children_2026-10-09_r90.json#/rows/boss.submarine.presentation/parts; plus 1 method-f parts child:1928:0C:cell:1A:AFAFE3 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.submarine.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 2 sound parts 28:sound:82D6E8, 28:sound:82D6F5 traced per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/sound/boss.submarine.presentation inside whole APU-gated windows (b8-lo-0x07-selection-01-04-02-02-03-02-03-0a-at-81-c88-hunt_2_21896)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        },
        {
          "id": "boss.submarine.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/boss_outro_child_closure_2026-10-08_r43.json",
            "knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json",
            "knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json",
            "docs/tasks/done/B35-loss-retry-from-volunteer-deaths.md"
          ],
          "note": {
            "pt": "2026-10-12 (L89, carta B35): 7 de 7 partes da saída do submarino (id 0x28) vistas. A última, player-loss-retry, vem do take voluntário vol-b5-submarine-death-1: morte no quadro 1545, retorno ao checkpoint 1872, encontro restaurado 3116, portão de quadros 4937 de 4937 sobre a janela 2-4938 (regras R16; regra 15 do ledger, revisão 2026-10-12-outro-loss-retry) (knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json). Vistos: knowledge_base/mmx1/rom/boss_outro_child_closure_2026-10-08_r43.json#/steps/boss.submarine.outro (seen 6 of total 7; resolved_limits 82:D994 close the map's outro limit); read at git faf7cf42c; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.submarine.outro/parts; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json#/rows/boss.submarine.outro/parts.",
            "en": "2026-10-12 (L89, card B35): 7 of 7 outro parts of the submarine (id 0x28) seen. The last, player-loss-retry, comes from the volunteer take vol-b5-submarine-death-1: death at frame 1545, checkpoint return 1872, encounter restored 3116, frame gate 4937 of 4937 over the window 2-4938 (R16 rules; ledger rule 15, revision 2026-10-12-outro-loss-retry) (knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json). Seen: knowledge_base/mmx1/rom/boss_outro_child_closure_2026-10-08_r43.json#/steps/boss.submarine.outro (seen 6 of total 7; resolved_limits 82:D994 close the map's outro limit); read at git faf7cf42c; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.submarine.outro/parts; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json#/rows/boss.submarine.outro/parts."
          }
        }
      ]
    },
    {
      "id": "boss.lo-midboss-0x21",
      "category": "bosses",
      "title": {
        "pt": "Subchefe de LO, objeto 0x21 (colocado duas vezes; rótulo angler)",
        "en": "LO mid-boss, object 0x21 (placed twice; label angler)"
      },
      "steps": [
        {
          "id": "boss.lo-midboss-0x21.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 12,
            "total": 17,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.lo-midboss-0x21.entry/summary with knowledge_base/mmx1/rom/boss_lo_midboss_0x21_map_supplement_2026-10-09_r73.json#/map_steps/boss.lo-midboss-0x21.entry (seen 3 of total 17); read at git 497efd4ff; plus 8 parts child:1928:1C:state:+01=02, child:1928:1C:state:+01=04, child:1628:0A:state:+01=00, child:1628:0A:state:+01=02, child:1628:0A:state:+01=04, child:1928:1E:state:+01=02, child:1928:20:state:+01=02, child:1928:20:state:+01=04 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r74.json#/rows/boss.lo-midboss-0x21.entry/parts; plus 1 parts child:1928:1E:state:+01=04 per knowledge_base/mmx1/rom/boss_entry_parts_2026-10-13_b50.json#/rows/boss.lo-midboss-0x21.entry/parts"
          },
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json"
          ],
          "note": {
            "pt": "Subchefe da ROM, revisão granular-v3 (card L18, 2026-09-25): objeto 0x21 colocado duas vezes em LO (S30), trava a câmera em 82:AF1B e 82:B381 e define seu HP em 82:AE64 (disassembly), como os subchefes do B2; encontro separado do submarino 0x28 (tomada LO inundada: 0x21 f3472-6768, 0x28 f7348-10402, E35). Pendente: nada creditado.",
            "en": "ROM mid-boss, revision granular-v3 (card L18, 2026-09-25): object 0x21 placed twice in LO (S30), locks the camera at 82:AF1B and 82:B381 and sets its HP at 82:AE64 (disassembly), like B2's mid-bosses; a separate encounter from the submarine 0x28 (flooded LO take: 0x21 f3472-6768, 0x28 f7348-10402, E35). Pending: nothing credited."
          }
        },
        {
          "id": "boss.lo-midboss-0x21.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-04_b42.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B42-boss-spawn-call-captures.md"
          ],
          "note": {
            "pt": "Subchefe da ROM, revisão granular-v3 (card L18, 2026-09-25): objeto 0x21 colocado duas vezes em LO (S30), trava a câmera em 82:AF1B e 82:B381 e define seu HP em 82:AE64 (disassembly), como os subchefes do B2; encontro separado do submarino 0x28 (tomada LO inundada: 0x21 f3472-6768, 0x28 f7348-10402, E35). Pendente: nada creditado. 2026-10-05 (LG6 s2): verificado; boss_step_sweep_2026-10-04_b45.json lista 0 faltando e 0 excluídas, 17 de 17 partes testemunhadas (capturas de chamada B42, varreduras do slot do dono); boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa (resolvidos: 82:B649, 82:B68D, 82:B6D1, 82:B716, 82:B741, 82:B848).",
            "en": "ROM mid-boss, revision granular-v3 (card L18, 2026-09-25): object 0x21 placed twice in LO (S30), locks the camera at 82:AF1B and 82:B381 and sets its HP at 82:AE64 (disassembly), like B2's mid-bosses; a separate encounter from the submarine 0x28 (flooded LO take: 0x21 f3472-6768, 0x28 f7348-10402, E35). Pending: nothing credited. 2026-10-05 (LG6 s2): verified; boss_step_sweep_2026-10-04_b45.json lists 0 missing and 0 excluded, 17 of 17 parts witnessed (call captures B42, owner-slot scans); boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step (resolved: 82:B649, 82:B68D, 82:B6D1, 82:B716, 82:B741, 82:B848)."
          }
        },
        {
          "id": "boss.lo-midboss-0x21.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_b27_2026-10-03.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B27-variable-write-transitions.md"
          ],
          "note": {
            "pt": "2026-10-03 (B27): 17 de 17 partes testemunhadas; a escolha 21:choice:13 (82:B086, +01=02 +02=06 +03=00 -> +03=01) em b15-lo-midboss-0x21-21-5-charged-hunt f3903, verificado e com imagens exatas; transicao de escrita variavel pelo provador do B23, padrao unico.",
            "en": "2026-10-03 (B27): 17 of 17 parts witnessed; choice 21:choice:13 (82:B086, +01=02 +02=06 +03=00 -> +03=01) in b15-lo-midboss-0x21-21-5-charged-hunt f3903, verified and picture-exact; variable-write transition by B23's prover, unique pattern."
          }
        },
        {
          "id": "boss.lo-midboss-0x21.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "partial",
          "partial": {
            "seen": 16,
            "total": 18,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.lo-midboss-0x21.damage/witnessed (10 witnessed of the map total 18, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.lo-midboss-0x21.damage/summary/total); read at git 7041aa42c; plus 5 parts 21:weapon:13, 21:weapon:17, 21:weapon:3, 21:weapon:6, 21:weapon:7 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json#/candidates/boss.lo-midboss-0x21.damage/parts; plus 1 method-f parts 21:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.lo-midboss-0x21.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json",
            "tools/tests/test_midboss_evidence.py",
            "docs/tasks/done/B8-hunt-batch-boss-gaps.md"
          ],
          "note": {
            "pt": "B8 final (2026-09-27), W37: E.SPARK normal em f3599 tira 1 HP (64 -> 63), igual a 86:F03D; WRAM 368/368, imagens 367/367. Total 47/47 hits iguais, armas 4/9 normais e 1/9 carregadas. Quatro takes verificados continuam sem GameSettings.txt na fonte e no ramo, impedindo T2. Matriz incompleta; sem crédito.",
            "en": "B8 final (2026-09-27), W37: normal E.SPARK at f3599 removes 1 HP (64 -> 63), equal to 86:F03D; WRAM 368/368, pictures 367/367. Total 47/47 equal hits, weapons 4/9 normal and 1/9 charged. Four verified takes still lack GameSettings.txt in source and branch, blocking T2. Matrix incomplete; no credit."
          }
        },
        {
          "id": "boss.lo-midboss-0x21.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 117,
            "total": 119,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.lo-midboss-0x21.presentation/parts with knowledge_base/mmx1/rom/boss_lo_midboss_0x21_presentation_map_supplement_2026-10-09_r75.json#/map_steps/boss.lo-midboss-0x21.presentation (76 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.lo-midboss-0x21.presentation/missing and 4 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-lo-midboss-0x21-21-1-normal-hunt_1_3642, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json#/results/b15-lo-midboss-0x21-21-5-charged-hunt_1_4356, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-lo-0x07-selection-01-04-02-02-03-02-03-0a-at-81-c88-hunt_2_21896), of all 119 parts; other sound and unclassified parts count unseen); read at git 2733d6efb; plus 37 method-f parts 21:cell:10:AFAC12, 21:cell:10:AFAC17, 21:cell:10:AFAC1C, 21:cell:10:AFAC21, 21:cell:10:AFAC26, 21:cell:10:AFAC2B, 21:cell:10:AFAC30, 21:cell:10:AFAC35, 21:cell:10:AFAC3A, 21:cell:10:AFAC3F, 21:cell:10:AFAC44, 21:cell:10:AFAC49, 21:cell:10:AFAC4E, 21:cell:10:AFAC53, 21:cell:10:AFAC58, 21:cell:10:AFAC5D, 21:cell:14:AFAD2E, 21:cell:14:AFAD33, 21:cell:14:AFAD38, 21:cell:14:AFAD3D, 21:cell:14:AFAD42, 21:cell:78:AFD7B4, 21:cell:78:AFD7B7, 21:cell:78:AFD7BA, 21:cell:78:AFD7BD, 21:cell:78:AFD7C2, 21:cell:78:AFD7C5, 21:cell:78:AFD7C8, 21:cell:78:AFD7CB, 21:cell:78:AFD7D0, 21:cell:78:AFD7D3, 21:cell:78:AFD7D6, 21:cell:78:AFD7D9, 21:cell:78:AFD7DE, 21:cell:78:AFD7E1, 21:cell:78:AFD7E4, 21:cell:78:AFD7E7 per knowledge_base/mmx1/rom/boss_lo_midboss_undrawn_cells_2026-10-09_r79.json#/steps/boss.lo-midboss-0x21.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json"
          ],
          "note": {
            "pt": "Subchefe da ROM, revisão granular-v3 (card L18, 2026-09-25): objeto 0x21 colocado duas vezes em LO (S30), trava a câmera em 82:AF1B e 82:B381 e define seu HP em 82:AE64 (disassembly), como os subchefes do B2; encontro separado do submarino 0x28 (tomada LO inundada: 0x21 f3472-6768, 0x28 f7348-10402, E35). Pendente: nada creditado.",
            "en": "ROM mid-boss, revision granular-v3 (card L18, 2026-09-25): object 0x21 placed twice in LO (S30), locks the camera at 82:AF1B and 82:B381 and sets its HP at 82:AE64 (disassembly), like B2's mid-bosses; a separate encounter from the submarine 0x28 (flooded LO take: 0x21 f3472-6768, 0x28 f7348-10402, E35). Pending: nothing credited."
          }
        },
        {
          "id": "boss.lo-midboss-0x21.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_loss_retry_2026-10-15_r157.json"
          ],
          "note": {
            "pt": "2026-10-15 (L253, carta R157): 3 de 3 partes (knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.lo-midboss-0x21.outro/witnessed (2 witnessed of the map total 3, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.lo-midboss-0x21.outro/summary/total); read at git fcbbb5796; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-15_r157.json#/rows/boss.lo-midboss-0x21.outro/parts); a parte que faltava era a morte do jogador e o retorno: em vol-b6-lo-midboss-death-1 o X morre durante a luta (f3639 e f8798), volta no mesmo checkpoint (f3903 e f9062) e a luta do subchefe recomeça (f5543 e f9430). A gravação tem a WRAM igual em todos os quadros (regra R139, aprovada pelo David em 12/10).",
            "en": "2026-10-15 (L253, card R157): 3 of 3 parts (knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.lo-midboss-0x21.outro/witnessed (2 witnessed of the map total 3, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.lo-midboss-0x21.outro/summary/total); read at git fcbbb5796; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-15_r157.json#/rows/boss.lo-midboss-0x21.outro/parts); the missing part was the player's loss and retry: in vol-b6-lo-midboss-death-1 X dies during the fight (f3639 and f8798), comes back at the same checkpoint (f3903 and f9062) and the midboss fight starts again (f5543 and f9430). The take's WRAM is equal at every frame (R139's rule, approved by David on 10/12)."
          }
        }
      ],
      "memberOids": [
        "0x21"
      ]
    },
    {
      "id": "boss.utuboros",
      "category": "bosses",
      "title": {
        "pt": "Utuboros — identidade a confirmar",
        "en": "identity to confirm"
      },
      "steps": [
        {
          "id": "boss.utuboros.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_native_window_witnesses_2026-10-08_r31.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "docs/tasks/done/R35-gate-clock-drift-f993.md"
          ],
          "note": {
            "pt": "2026-10-08 (L8, regra do B17): todos os estados de entrada numa tomada verificada inteira com imagens exatas e áudio de campanha inteiro. 23:s0 em f10404 (slot 0E68), 24:s0 e 25:s0 em f10405 (slots 0EA8 e 1028; testemunhas de chamada do R31, traços ligados a launch-octopus-and-sting-flooded_2_38342); áudio inteiro em launch-octopus-and-sting-flooded_2_38342 (38341/38341 quadros de WRAM, 670206/670206 leituras de porta, 38340/38340 quadros de APU; R35 corrigiu o HDMA ligado no meio do quadro).",
            "en": "2026-10-08 (L8, B17 rule): every entry state in one whole pixel-exact verified take plus a whole campaign audio window. 23:s0 at f10404 (slot 0E68), 24:s0 and 25:s0 at f10405 (slots 0EA8 and 1028; R31 call witnesses, traces bound to launch-octopus-and-sting-flooded_2_38342); whole audio in launch-octopus-and-sting-flooded_2_38342 (WRAM 38341/38341, port reads 670206/670206, APU frames 38340/38340; R35 fixed the HDMA enabled mid-frame)."
          }
        },
        {
          "id": "boss.utuboros.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json",
            "tools/tests/test_midboss_evidence.py",
            "docs/tasks/done/B5-midboss-evidence-and-credit.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta B5, KB midboss_evidence_2026-09-26.json, decisão 1 do B3), modo ROM-first: utuboros (B2), cabeça 0x23 (82:BD6B eventID_utuborosHead_23_main, estado de luta 82:BE1A), corpo 0x24 (82:C393, um estado de luta 82:C3BE cuja única escrita própria é +01=4 em 82:C3D3) e cauda 0x25 (82:C734, estado de luta 82:C76B). Estados vistos 14 de 14 (0x23 12, 0x25 2) mais o estado único do corpo 0x24, imagem exata no primeiro quadro de cada estado. Take: launch-octopus-and-sting-flooded_2_38342. Limite: estados de intro e derrota pertencem às etapas de entrada e saída; sons pertencem à etapa de apresentação (lane B).",
            "en": "2026-09-26 (card B5, KB midboss_evidence_2026-09-26.json, B3's decision 1), ROM-first mode: utuboros (B2), head 0x23 (82:BD6B eventID_utuborosHead_23_main, fight state 82:BE1A), body 0x24 (82:C393, one fight state 82:C3BE whose only own write is +01=4 at 82:C3D3) and tail 0x25 (82:C734, fight state 82:C76B). States seen 14 of 14 (0x23 12, 0x25 2) plus the body 0x24's single state, picture-exact on the first frame of every state. Take: launch-octopus-and-sting-flooded_2_38342. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step (lane B)."
          }
        },
        {
          "id": "boss.utuboros.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json",
            "tools/tests/test_midboss_evidence.py",
            "docs/tasks/done/B5-midboss-evidence-and-credit.md"
          ],
          "note": {
            "pt": "2026-09-26 (carta B5, KB midboss_evidence_2026-09-26.json, decisão 2 do B3), modo ROM-first: seleção do utuboros (cabeça 0x23 (82:BD6B eventID_utuborosHead_23_main, estado de luta 82:BE1A), corpo 0x24 (82:C393, um estado de luta 82:C3BE cuja única escrita própria é +01=4 em 82:C3D3) e cauda 0x25 (82:C734, estado de luta 82:C76B)): resultados vistos 16 de 16 em 54 ramos nos manipuladores de escolha; sítio de RNG 82:BF3C; o corpo 0x24 não tem manipulador de escolha (a saída +01=4 em 82:C3D3 vista). Take: launch-octopus-and-sting-flooded_2_38342. Limite: estados de intro e derrota pertencem às etapas de entrada e saída; sons pertencem à etapa de apresentação (lane B).",
            "en": "2026-09-26 (card B5, KB midboss_evidence_2026-09-26.json, B3's decision 2), ROM-first mode: utuboros selection (head 0x23 (82:BD6B eventID_utuborosHead_23_main, fight state 82:BE1A), body 0x24 (82:C393, one fight state 82:C3BE whose only own write is +01=4 at 82:C3D3) and tail 0x25 (82:C734, fight state 82:C76B)): outcomes seen 16 of 16 across 54 branches in the picking handlers; RNG site 82:BF3C; the body 0x24 has no picking handler (its exit +01=4 at 82:C3D3 seen). Take: launch-octopus-and-sting-flooded_2_38342. Bound: intro and defeat states belong to the entry and outro steps; sounds belong to the presentation step (lane B)."
          }
        },
        {
          "id": "boss.utuboros.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 51,
            "total": 56,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.utuboros.damage/witnessed (18 witnessed of the map total 56, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.utuboros.damage/summary/total; catalogue_limits 82:C2CB, 82:C2F4, 82:C33A closed per knowledge_base/mmx1/rom/boss_utuboros_limit_closure_2026-10-09_r70.json#/resolved_limits); read at git fcbbb5796; plus 6 parts 23:weapon:10, 23:weapon:2, 23:weapon:6, 25:weapon:10, 25:weapon:2, 25:weapon:6 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-09_r109.json#/candidates/boss.utuboros.damage/parts; plus 1 parts 25:weapon:8 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-10_r113.json#/parts/boss.utuboros.damage; plus 2 parts 24:weapon:8, 24:weapon:16 per knowledge_base/mmx1/rom/boss_damage_hunts_2026-10-10_r119.json#/parts/boss.utuboros.damage; plus 3 parts 24:weapon:2, 24:weapon:6, 24:weapon:10 per knowledge_base/mmx1/rom/utuboros_volunteer_deflects_2026-10-11_r137.json#/rows/boss.utuboros.damage/parts; plus 2 parts 24:weapon:7, 25:weapon:15 per knowledge_base/mmx1/rom/boss_hunts_2026-10-12_h30.json#/parts/boss.utuboros.damage; plus 1 parts 23:weapon:8 per knowledge_base/mmx1/rom/utuboros_fire_wave_dry_2026-10-12_ai3b.json#/parts/boss.utuboros.damage; plus 11 parts 23:weapon:11, 23:weapon:13, 23:weapon:15, 23:weapon:17, 23:weapon:3, 23:weapon:7, 25:weapon:11, 25:weapon:13, 25:weapon:17, 25:weapon:3, 25:weapon:7 per knowledge_base/mmx1/rom/volunteer_takes_2026-10-15_r157.json#/candidates/boss.utuboros.damage/parts; plus 4 parts 24:weapon:3, 24:weapon:13, 24:weapon:15, 24:weapon:17 per knowledge_base/mmx1/rom/utuboros_volunteer_deflects_2026-10-15_r157.json#/rows/boss.utuboros.damage/parts; plus 3 method-f parts 23:weapon:5, 24:weapon:5, 25:weapon:5 per knowledge_base/mmx1/rom/boss_damage_weapon5_method_f_2026-10-11_r131.json#/steps/boss.utuboros.damage/parts (sweep-excluded; exclusion_proof cites the ROM by bank:addr, card R131)"
          },
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.utuboros.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 41,
            "total": 96,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.utuboros.presentation/parts with knowledge_base/mmx1/rom/boss_utuboros_presentation_map_supplement_2026-10-13_r152.json#/map_steps/boss.utuboros.presentation with knowledge_base/mmx1/rom/boss_utuboros_presentation_map_supplement_2026-10-14_r153.json#/map_steps/boss.utuboros.presentation with knowledge_base/mmx1/rom/boss_utuboros_presentation_map_supplement_2026-10-14_r154.json#/map_steps/boss.utuboros.presentation with knowledge_base/mmx1/rom/boss_utuboros_presentation_declared_bounds_2026-10-14_r155.json#/map_steps/boss.utuboros.presentation (35 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.utuboros.presentation/missing and 6 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (6 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b8-lo-0x07-selection-01-04-02-02-03-02-03-0a-at-81-c88-hunt_2_21896), of all 96 parts; other sound and unclassified parts count unseen); read at git 1dddd6641"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.utuboros.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "knowledge_base/mmx1/rom/boss_outro_child_closure_2026-10-08_r43.json",
            "knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json",
            "knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json",
            "docs/tasks/done/B35-loss-retry-from-volunteer-deaths.md"
          ],
          "note": {
            "pt": "2026-10-12 (L89, carta B35): 13 de 13 partes da saída do Utuboros (id 0x23) vistas. A última, player-loss-retry, vem do take voluntário vol-b5-utuboros-death-1: morte no quadro 4482, retorno ao checkpoint 4829, encontro restaurado 9063, portão de quadros 13652 de 13652 sobre a janela 1-13652 (regras R16; regra 15 do ledger, revisão 2026-10-12-outro-loss-retry) (knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json). Vistos: knowledge_base/mmx1/rom/boss_outro_child_closure_2026-10-08_r43.json#/steps/boss.utuboros.outro (seen 12 of total 13; resolved_limits 82:C2CB, 82:C2F4, 82:C33A close the map's outro limit); read at git faf7cf42c; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.utuboros.outro/parts; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json#/rows/boss.utuboros.outro/parts.",
            "en": "2026-10-12 (L89, card B35): 13 of 13 outro parts of Utuboros (id 0x23) seen. The last, player-loss-retry, comes from the volunteer take vol-b5-utuboros-death-1: death at frame 4482, checkpoint return 4829, encounter restored 9063, frame gate 13652 of 13652 over the window 1-13652 (R16 rules; ledger rule 15, revision 2026-10-12-outro-loss-retry) (knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json). Seen: knowledge_base/mmx1/rom/boss_outro_child_closure_2026-10-08_r43.json#/steps/boss.utuboros.outro (seen 12 of total 13; resolved_limits 82:C2CB, 82:C2F4, 82:C33A close the map's outro limit); read at git faf7cf42c; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.utuboros.outro/parts; plus 1 parts player-loss-retry per knowledge_base/mmx1/rom/boss_loss_retry_2026-10-12_b35.json#/rows/boss.utuboros.outro/parts."
          }
        }
      ]
    },
    {
      "id": "boss.chameleon-capsule-guardian",
      "category": "bosses",
      "title": {
        "pt": "Guardião da cápsula de Chameleon",
        "en": "Chameleon capsule guardian"
      },
      "steps": [
        {
          "id": "boss.chameleon-capsule-guardian.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_entry_sweep_2026-09-30.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "tools/tests/test_boss_entry_sweep.py",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "docs/tasks/done/B17-boss-entry-sweep.md"
          ],
          "note": {
            "pt": "2026-09-30 (B17, regra do B14): todos os estados de entrada numa janela inteira com imagens exatas e áudio de campanha inteiro. 09:s0 em f5741 de sting-chameleon_1_25606 (imagens 25605/25605; áudio 399382/399382 leituras).",
            "en": "2026-09-30 (B17, B14 rule): every entry state in one whole pixel-exact window plus a whole campaign audio window. 09:s0 at f5741 in sting-chameleon_1_25606 (pictures 25605/25605; audio 399382/399382 reads)."
          }
        },
        {
          "id": "boss.chameleon-capsule-guardian.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 16,
            "total": 17,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.chameleon-capsule-guardian.attacks/witnessed (16 witnessed of the map total 17, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.chameleon-capsule-guardian.attacks/summary/total); read at git efd5b74b2"
          },
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.chameleon-capsule-guardian.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 16,
            "total": 19,
            "$source": "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.chameleon-capsule-guardian.selection/witnessed (16 witnessed of the map total 19, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.chameleon-capsule-guardian.selection/summary/total); read at git efd5b74b2"
          },
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.chameleon-capsule-guardian.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r100.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r100.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/R100-guardian-digging-damage-call-captures.md"
          ],
          "note": {
            "pt": "2026-10-09 (L38, regra do LG6 s2): verificado; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r100.json lista 0 faltando e 0 excluídas, 6 de 6 partes testemunhadas por capturas de chamada (R100: 09:damage:row:00, 09:damage:row:05, 09:damage:row:06, 09:interrupt:81:CC58, 09:interrupt:81:CC6E, 09:interrupt:81:CC50; as duas linhas 00 são tiros do buster rebatidos, tabela 80, 84:9EEA, tiro +01 02 -> 04, regra do R99); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa.",
            "en": "2026-10-09 (L38, LG6 s2 rule): verified; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r100.json lists 0 missing and 0 excluded, 6 of 6 parts witnessed by call captures (R100: 09:damage:row:00, 09:damage:row:05, 09:damage:row:06, 09:interrupt:81:CC58, 09:interrupt:81:CC6E, 09:interrupt:81:CC50; the two row-00 parts are deflected buster shots, table 80, 84:9EEA, shot +01 02 -> 04, R99 rule); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step."
          }
        },
        {
          "id": "boss.chameleon-capsule-guardian.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 48,
            "total": 49,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.chameleon-capsule-guardian.presentation/parts (45 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.chameleon-capsule-guardian.presentation/missing and 3 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b13-guardian-q10-hunt_1_5909, 1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/p56-astra-dismount-c26-r3_1_16553), of all 49 parts; other sound and unclassified parts count unseen); read at git 2733d6efb"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.chameleon-capsule-guardian.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "knowledge_base/mmx1/rom/boss_outro_closure_parts_2026-10-04_b43.json",
            "knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json",
            "knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/tasks/done/B47-outro-death-handoff.md",
            "docs/tasks/done/B43-outro-closure-partials.md",
            "docs/tasks/done/R42-boss-outro-reducer.md"
          ],
          "note": {
            "pt": "2026-10-13 (L185, carta B47): 6 de 6 partes vistas ou provadas (knowledge_base/mmx1/rom/boss_outro_closure_parts_2026-10-04_b43.json#/steps/boss.chameleon-capsule-guardian.outro (seen 4 of total 6; resolved_limits 81:CC13 close the map's outro limit); read at git 3b92efeed; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.chameleon-capsule-guardian.outro/parts; plus 1 parts death-handoff per knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json#/rows/boss.chameleon-capsule-guardian.outro/parts; plus 1 parts 09:outro:lethal-hit:+38 per knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json#/steps/boss.chameleon-capsule-guardian.outro/parts): os caminhos de derrota vistos em gravações conferidas; a passagem pela morte vista em sc-a_1_32607 (derrota f13400, saída f13541, próximo dono 0x0A f24247); o golpe letal com +38 declarado impossível (R118).",
            "en": "2026-10-13 (L185, card B47): 6 of 6 parts seen or proven (knowledge_base/mmx1/rom/boss_outro_closure_parts_2026-10-04_b43.json#/steps/boss.chameleon-capsule-guardian.outro (seen 4 of total 6; resolved_limits 81:CC13 close the map's outro limit); read at git 3b92efeed; plus 0 parts per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.chameleon-capsule-guardian.outro/parts; plus 1 parts death-handoff per knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json#/rows/boss.chameleon-capsule-guardian.outro/parts; plus 1 parts 09:outro:lethal-hit:+38 per knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json#/steps/boss.chameleon-capsule-guardian.outro/parts): the defeat paths seen in verified takes; the death handoff seen in sc-a_1_32607 (defeat f13400, removal f13541, next owner 0x0A f24247); the lethal hit with +38 declared impossible (R118)."
          }
        }
      ]
    },
    {
      "id": "boss.armadillo-digging-machines",
      "category": "bosses",
      "title": {
        "pt": "Escavadoras de Armadillo",
        "en": "Armadillo digging machines"
      },
      "steps": [
        {
          "id": "boss.armadillo-digging-machines.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_entry_sweep_2026-09-30.json",
            "tools/oracle/post/boss_entry_sweep.py",
            "tools/tests/test_boss_entry_sweep.py",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "docs/tasks/done/B17-boss-entry-sweep.md"
          ],
          "note": {
            "pt": "2026-09-30 (B17, regra do B14): todos os estados de entrada numa janela inteira com imagens exatas e áudio de campanha inteiro. 2C:s0 em f2109 de armored-armadillo_1_15055 (imagens 15054/15054; áudio 386890/386890 leituras).",
            "en": "2026-09-30 (B17, B14 rule): every entry state in one whole pixel-exact window plus a whole campaign audio window. 2C:s0 at f2109 in armored-armadillo_1_15055 (pictures 15054/15054; audio 386890/386890 reads)."
          }
        },
        {
          "id": "boss.armadillo-digging-machines.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-03_b31.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-03_b31.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/B31-boss-parts-by-call-capture.md"
          ],
          "note": {
            "pt": "2026-10-03 (B31): testemunha por captura de chamada; 12 chamadas ao alocador em aa-a f4112 (dono D 0E68, OID 2C; filhos 1928..1A88, +0A=23 em 83:C337).",
            "en": "2026-10-03 (B31): call-capture witness; 12 allocator calls at aa-a f4112 (owner D 0E68, OID 2C; children 1928..1A88, +0A=23 at 83:C337)."
          }
        },
        {
          "id": "boss.armadillo-digging-machines.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "tools/tests/test_b24_boss_structural_catalogues.py",
            "docs/tasks/done/B24-boss-structural-catalogues.md"
          ],
          "note": {
            "en": "2026-10-01 B24: ROM-cited conditional catalogue; 3/3 unique consecutive same-owner transitions in currently WRAM-verified, pixel-exact takes. ENDGAME ROM-first rule; no statistical-law gate. 530 takes re-swept; receipts and exact witnesses in build/B24/boss-step-sweep.json. Other step kinds remain separate.",
            "pt": "2026-10-01 B24: catálogo condicional citado na ROM; 3/3 transições consecutivas únicas do mesmo dono em tomadas com WRAM verificada e imagens exatas. Regra ROM-first do ENDGAME; sem gate de lei estatística. 530 tomadas reavaliadas; recibos e testemunhos em build/B24/boss-step-sweep.json. Os demais passos continuam separados."
          }
        },
        {
          "id": "boss.armadillo-digging-machines.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r100.json",
            "knowledge_base/mmx1/rom/boss_call_captures_2026-10-09_r100.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/R100-guardian-digging-damage-call-captures.md"
          ],
          "note": {
            "pt": "2026-10-09 (L38, regra do LG6 s2): verificado; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r100.json lista 0 faltando e 0 excluídas, 5 de 5 partes testemunhadas por capturas de chamada (R100: 2C:damage:row:00, 2C:damage:row:09, 2C:interrupt:83:BF6B, 2C:interrupt:83:BF71, 2C:interrupt:83:BFB8; as duas linhas 00 são tiros do buster rebatidos, tabela 80, 84:9EEA, tiro +01 02 -> 04, regra do R99); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json não tem limite de catálogo nem cota aberta para esta etapa.",
            "en": "2026-10-09 (L38, LG6 s2 rule): verified; knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r100.json lists 0 missing and 0 excluded, 5 of 5 parts witnessed by call captures (R100: 2C:damage:row:00, 2C:damage:row:09, 2C:interrupt:83:BF6B, 2C:interrupt:83:BF71, 2C:interrupt:83:BFB8; the two row-00 parts are deflected buster shots, table 80, 84:9EEA, shot +01 02 -> 04, R99 rule); knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json has no open catalogue limit or bound for this step."
          }
        },
        {
          "id": "boss.armadillo-digging-machines.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 29,
            "total": 31,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.armadillo-digging-machines.presentation/parts (18 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.armadillo-digging-machines.presentation/missing and 7 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (1 in knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json#/results/armored-armadillo_1_15055, 4 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/b13-digging-q93-hunt_1_3622, 2 in knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json#/results/hadouken_1_73902), of all 31 parts; other sound and unclassified parts count unseen); read at git 509444742; plus 1 method-f parts child:1928:02:cell:08:AFA878 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.armadillo-digging-machines.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 3 method-f parts child:1928:23:cell:37:AFBEA5, child:1928:23:cell:37:AFBEAA, child:1928:23:cell:37:AFBEAF per knowledge_base/mmx1/rom/boss_child_cells_2026-10-13_b49.json#/steps/boss.armadillo-digging-machines.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.armadillo-digging-machines.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 6,
            "total": 7,
            "$source": "knowledge_base/mmx1/rom/boss_outro_closure_parts_2026-10-04_b43.json#/steps/boss.armadillo-digging-machines.outro (seen 4 of total 7; resolved_limits 83:BF44 close the map's outro limit); read at git 3b92efeed; plus 1 parts 2C:outro:state-08 per knowledge_base/mmx1/rom/boss_outro_reducer_2026-10-08_r42.json#/rows/boss.armadillo-digging-machines.outro/parts; plus 1 parts death-handoff per knowledge_base/mmx1/rom/boss_outro_parts_2026-10-13_b47.json#/rows/boss.armadillo-digging-machines.outro/parts"
          },
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        }
      ]
    },
    {
      "id": "boss.highway-giant-bee",
      "category": "bosses",
      "title": {
        "pt": "Abelha gigante da abertura",
        "en": "Highway giant bee"
      },
      "steps": [
        {
          "id": "boss.highway-giant-bee.entry",
          "category": "bosses",
          "title": {
            "pt": "Entrada e ativação na campanha",
            "en": "Campaign entrance and activation"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Validar posição e arena, portas, intro, bloqueio/liberação de controles, câmera, música e enchimento de HP contra a origem.",
            "en": "Validate position and arena, doors, intro, control lock/release, camera, music and HP fill against source."
          },
          "evidence": [
            "docs/tasks/done/B14-boss-entry-intakes.md",
            "knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json",
            "tools/oracle/intake_movie.py",
            "tools/rom/ppu_gate.py",
            "tools/rom/apu_gate.py",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json"
          ],
          "note": {
            "en": "2026-09-28 B14, ROM-first recorded entrance in intro-highway: all catalogue entry states witnessed; position/arena, doors, intro, controls, camera and HP fill covered by 15577/15577 WRAM entries and 15576/15576 exact pictures. Music: committed A23 full-window gate, 15576/15576 APU frames and 493583/493583 port reads, no uncaptured live reads; WAV hash checked. Current named-take intake and source bindings are in the card Result. Bound: this recorded entrance; player-loss return is separate.",
            "pt": "2026-09-28 B14, entrada gravada ROM-first em intro-highway: todos os estados de entrada catalogados vistos; posição/arena, portas, intro, controles, câmera e HP cobertos por 15577/15577 estados WRAM e 15576/15576 imagens exatas. Música: gate A23 da janela completa, 15576/15576 quadros APU e 493583/493583 leituras de portas, nenhuma leitura viva ausente; hash WAV conferido. Intake atual e vínculos de origem no Result do cartão. Limite: esta entrada gravada; retorno após derrota separado."
          }
        },
        {
          "id": "boss.highway-giant-bee.attacks",
          "category": "bosses",
          "title": {
            "pt": "Movimento e todos os ataques",
            "en": "Movement and every attack"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Inventariar cada estado e ataque observado, integrar trajetórias/tempos/caixas e provar todos os ramos por ghost; filhos com recurso próprio são referenciados, não pontuados novamente.",
            "en": "Inventory every observed state and attack, integrate trajectories/timing/boxes and prove every branch by ghost; separately budgeted children are referenced, not credited twice."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "knowledge_base/mmx1/rom/boss_highway_bee_limit_closure_2026-10-09_r71.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json",
            "knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json"
          ],
          "note": {
            "pt": "2026-10-15 (L261, carta H46): 11 de 11 partes (knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.highway-giant-bee.attacks/witnessed (4 witnessed of the map total 11, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.highway-giant-bee.attacks/summary/total; catalogue_limits 82:BB1C, 82:BD1E closed per knowledge_base/mmx1/rom/boss_highway_bee_limit_closure_2026-10-09_r71.json#/resolved_limits); read at git 0f969a1d6; plus 6 parts 22:spawn:82B906, 22:spawn:82B9EB, 22:spawn:82BB1C, 22:spawn:82BB85, 22:spawn:82BC34, 22:spawn:82BD1E per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json#/steps/boss.highway-giant-bee.attacks/evidence; plus 1 parts 22:spawn:82BC08 per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/parts/boss.highway-giant-bee.attacks); a que faltava, o ponto onde a abelha cria o filho (82:BBFD aloca o slot, 82:BC08 grava o OID 0D), foi vista no traço B31 da gravação b22 no quadro f4128.",
            "en": "2026-10-15 (L261, card H46): 11 of 11 parts (knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.highway-giant-bee.attacks/witnessed (4 witnessed of the map total 11, knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.highway-giant-bee.attacks/summary/total; catalogue_limits 82:BB1C, 82:BD1E closed per knowledge_base/mmx1/rom/boss_highway_bee_limit_closure_2026-10-09_r71.json#/resolved_limits); read at git 0f969a1d6; plus 6 parts 22:spawn:82B906, 22:spawn:82B9EB, 22:spawn:82BB1C, 22:spawn:82BB85, 22:spawn:82BC34, 22:spawn:82BD1E per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r102.json#/steps/boss.highway-giant-bee.attacks/evidence; plus 1 parts 22:spawn:82BC08 per knowledge_base/mmx1/rom/boss_traces_2026-10-15_h46.json#/parts/boss.highway-giant-bee.attacks); the missing one, the spawn site where the bee creates its child (82:BBFD allocates the slot, 82:BC08 stores OID 0D), was seen in the B31 trace of take b22 at f4128."
          }
        },
        {
          "id": "boss.highway-giant-bee.selection",
          "category": "bosses",
          "title": {
            "pt": "Seleção, condições e RNG",
            "en": "Selection, conditions and RNG"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Classificar cada transição como determinística, condicional ou aleatória; provar condições e distribuição conforme gate estatístico ENDGAME.",
            "en": "Classify every transition as deterministic, conditional or random; prove conditions and distribution under the ENDGAME statistical gate."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r109.json",
            "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json",
            "tools/oracle/post/boss_step_sweep.py",
            "docs/tasks/done/R109-volunteer-batch-5.md",
            "docs/tasks/done/R114-r109-sweep-and-damage-credit.md"
          ],
          "note": {
            "pt": "2026-10-10 (L45, regra do LG6 s2): verificado; as 13 partes do mapa estão testemunhadas: 12 pela varredura knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json e a última (22:choice:82BC86:9) pela varredura knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r109.json, sobre as gravações do lote 5 do voluntário com captura completa (memória e imagens iguais em todos os quadros).",
            "en": "2026-10-10 (L45, LG6 s2 rule): verified; all 13 map parts are witnessed: 12 by the sweep knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json and the last (22:choice:82BC86:9) by the sweep knowledge_base/mmx1/rom/boss_step_sweep_2026-10-09_r109.json, over the volunteer batch-5 takes with full intake (memory and pictures equal on every frame)."
          }
        },
        {
          "id": "boss.highway-giant-bee.damage",
          "category": "bosses",
          "title": {
            "pt": "Dano, fraquezas e interrupções",
            "en": "Damage, weaknesses and interruptions"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Completar matriz de dano de Buster e oito armas, normal/carregada, HP, invulnerabilidade, fraquezas e interrupções de ataque com atribuição por tiro.",
            "en": "Complete damage matrix for Buster and eight normal/charged weapons, HP, invulnerability, weaknesses and attack interrupts with per-shot attribution."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/boss_damage_secondary_2026-09-28.json",
            "tools/oracle/post/reduce_secondary_boss_damage.py",
            "tools/tests/test_reduce_secondary_boss_damage.py",
            "docs/tasks/done/B15-secondary-boss-damage.md",
            "knowledge_base/mmx1/rom/midboss_evidence_2026-09-26.json"
          ],
          "note": {
            "en": "2026-09-28 B15: 18 B3/B6 normal/charged weapon groups; 2 seen and ROM-table equal under recorded WRAM gates, 16 source-proved exclusions, 0 stops. The KB records shot IDs, actual damage rows, source inventories, per-case gates and exclusions. B6/B7 matrix scope; this does not assert additional presentation/audio or per-shot interruption gates.",
            "pt": "2026-09-28 B15: 18 grupos de armas normais/carregadas B3/B6; 2 vistos e iguais à tabela da ROM com WRAM verificada, 16 exclusões comprovadas, 0 pendências na matriz. IDs, linhas, inventário, gates e exclusões constam na KB. Escopo B6/B7: não acrescenta gates de apresentação, áudio ou interrupções individuais."
          }
        },
        {
          "id": "boss.highway-giant-bee.presentation",
          "category": "bosses",
          "title": {
            "pt": "Animação, paleta e som",
            "en": "Animation, palette and sound"
          },
          "weightBp": 13,
          "status": "pending",
          "partial": {
            "seen": 85,
            "total": 106,
            "$source": "knowledge_base/mmx1/rom/boss_coverage_map_2026-10-02.json#/steps/boss.highway-giant-bee.presentation/parts with knowledge_base/mmx1/rom/boss_highway_bee_map_supplement_2026-10-09_r71.json#/map_steps/boss.highway-giant-bee.presentation (21 picture parts witnessed per knowledge_base/mmx1/rom/boss_step_sweep_2026-10-04_b45.json#/steps/boss.highway-giant-bee.presentation/missing and 0 sound parts whose /evidence frame lies inside a whole APU-gated window of the same take (none in knowledge_base/mmx1/rom/campaign_audio_2026-09-25.json or knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r34.json or knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json or knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a30.json or knowledge_base/mmx1/rom/campaign_audio_2026-10-12_a33.json), of all 106 parts; other sound and unclassified parts count unseen); read at git 355560fc9; plus 13 parts child:1628:08:cell:27:AFB72D, child:1928:22:cell:17:AFAE91, child:1928:22:cell:17:AFAE94, child:1928:22:cell:17:AFAE97, child:1928:22:cell:17:AFAE9A, child:1928:22:cell:17:AFAE9D, child:1928:24:cell:27:AFB732, child:1928:24:cell:27:AFB737, child:1928:24:cell:27:AFB73C, child:1928:25:cell:36:AFBE84, child:1928:25:cell:36:AFBE89, child:1928:25:cell:36:AFBE8E, child:1928:25:cell:36:AFBE93 per knowledge_base/mmx1/rom/boss_supplement_witnesses_2026-10-09_r74.json#/rows/boss.highway-giant-bee.presentation/parts; plus 1 parts child:1428:0D:cell:2F:AFBA8F per knowledge_base/mmx1/rom/boss_child_cells_2026-10-12_h33.json#/rows/boss.highway-giant-bee.presentation/parts; plus 47 parts child:0E68:27:cell:31:AFBB48, child:0E68:27:cell:31:AFBB4B, child:0E68:27:cell:31:AFBB4E, child:0E68:27:cell:31:AFBB51, child:0E68:27:cell:31:AFBB54, child:0E68:27:cell:31:AFBB57, child:0E68:27:cell:31:AFBB5A, child:0E68:27:cell:31:AFBB5D, child:0E68:27:cell:31:AFBB62, child:0E68:27:cell:31:AFBB65, child:0E68:27:cell:31:AFBB68, child:0E68:27:cell:31:AFBB6B, child:0E68:27:cell:31:AFBB6E, child:0E68:27:cell:31:AFBB71, child:0E68:27:cell:31:AFBB74, child:0E68:27:cell:31:AFBB77, child:0E68:27:cell:31:AFBB7A, child:0E68:27:cell:31:AFBB7D, child:0E68:27:cell:31:AFBB80, child:0E68:27:cell:31:AFBB83, child:0E68:27:cell:31:AFBB86, child:0E68:27:cell:31:AFBB89, child:0E68:27:cell:31:AFBB8C, child:0E68:27:cell:31:AFBB8F, child:0E68:27:cell:31:AFBB92, child:0E68:27:cell:31:AFBB95, child:0E68:27:cell:31:AFBB98, child:0E68:27:cell:31:AFBB9B, child:0E68:27:cell:31:AFBB9E, child:0E68:27:cell:31:AFBBA1, child:0E68:27:cell:31:AFBBA4, child:0E68:27:cell:31:AFBBAC, child:0E68:27:cell:31:AFBBAF, child:0E68:27:cell:31:AFBBB2, child:0E68:27:cell:31:AFBBB5, child:0E68:27:cell:31:AFBBCB, child:0E68:27:cell:31:AFBBCE, child:0E68:27:cell:31:AFBBD1, child:0E68:27:cell:31:AFBBD4, child:0E68:27:cell:31:AFBBD7, child:0E68:27:cell:31:AFBBDA, child:0E68:27:cell:31:AFBBDD, child:0E68:27:cell:31:AFBBE0, child:0E68:27:cell:31:AFBBE3, child:0E68:27:cell:31:AFBBE6, child:0E68:27:cell:31:AFBBE9, child:0E68:27:cell:31:AFBBEC per knowledge_base/mmx1/rom/boss_child_creators_2026-10-12_h34.json#/rows/boss.highway-giant-bee.presentation/parts; plus 2 method-f parts child:1928:22:cell:17:AFAEB7, child:1928:22:cell:17:AFAEA0 per knowledge_base/mmx1/rom/boss_unrequested_child_cells_2026-10-11_h28.json#/steps/boss.highway-giant-bee.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77); plus 1 method-f parts child:0E68:27:cell:31:AFBBA7 per knowledge_base/mmx1/rom/boss_child_cells_2026-10-14_b53.json#/steps/boss.highway-giant-bee.presentation/parts (exclusion_proof cites the ROM by bank:addr, card R77)"
          },
          "acceptance": {
            "pt": "Comparar todas as poses, paletas, âncoras e sons de ataque, acerto e morte com render e áudio de origem.",
            "en": "Compare all poses, palettes, anchors and attack/hit/death sounds against source render and audio."
          },
          "evidence": [
            "docs/goal/runbooks/RUNBOOK-boss.md",
            "docs/STATE.md",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json",
            "docs/history/cockpit/ENDGAME-gap-map.md",
            "knowledge_base/mmx1/derived/gc5_partial_midboss_roster.json"
          ],
          "note": {
            "pt": "Encontro previsto explicitamente no escopo; identidade, tabela/OID e variantes precisam de confirmação na origem antes de implementar. Não é conclusão de pesquisa.",
            "en": "Encounter explicitly included in scope; identity, table/OID and variants require source confirmation before implementation. This is not completed research."
          }
        },
        {
          "id": "boss.highway-giant-bee.outro",
          "category": "bosses",
          "title": {
            "pt": "Morte, retorno e transição",
            "en": "Death, retry and handoff"
          },
          "weightBp": 13,
          "status": "verified",
          "acceptance": {
            "pt": "Verificar morte, explosões e transição até o dono seguinte; derrota do jogador deve restaurar o encontro correto; rematches não duplicam a IA.",
            "en": "Verify death, explosions and transition to the next owner; player defeat must restore the correct encounter; rematches do not duplicate AI credit."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/branch_deaths_2026-10-02_b22_resume4.json",
            "knowledge_base/mmx1/rom/boss_step_sweep_b22_resume4_2026-10-02.json",
            "tools/tests/test_boss_step_sweep.py",
            "docs/tasks/done/B22-outro-branch-takes.md"
          ],
          "note": {
            "pt": "2026-10-02 B22: catalogo completo; derrota/passagem e perda/retorno/restauracao do mesmo dono em janelas vinculadas, com WRAM e imagens inteiros exatos, sem divergencia.",
            "en": "2026-10-02 B22: complete catalogue; bound defeat/handoff and player-loss/checkpoint-return/same-owner-restoration windows, whole WRAM and pictures exact with no divergence."
          }
        }
      ]
    },
    {
      "id": "stage.intro-highway",
      "category": "stages",
      "title": {
        "pt": "Intro Highway",
        "en": "Intro Highway"
      },
      "steps": [
        {
          "id": "stage.intro-highway.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "tools/tests/test_stage_population_visual.py",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-09-26.json",
            "knowledge_base/mmx1/rom/section_block_maps_2026-09-26.json",
            "docs/tasks/done/V12-reference-pictures-same-clock.md"
          ],
          "note": {
            "pt": "2026-09-26 (card G3, regra do W37), modo ROM-first: cada seção da fase (nível 0 em $1F7A, checkpoint $1F81; os checkpoints da ROM [0, 1, 2]: início da fase 80:995D, objetos de checkpoint 81:FF5E, S35) está numa gravação com WRAM igual, intro-highway_1_15577 (WRAM 15577 of 15577), e a imagem ROM-first de cada quadro é igual à do original (referência buffer V12 no mesmo relógio, PPU do Mesen2: 15576 of 15576). Seções: checkpoint 0 f411-5860; checkpoint 1 f5861-9073; checkpoint 2 f9074-14833. A carga do mapa 80:BAC1 não tem variante 80:BC5C neste nível. A fase não registra anchor em docs/stage-fidelity/anchors.json. Limite: a rota gravada; as células do mapa decodificado que nenhum quadro da fase mostra (5,855 de 9,667 células não vazias da camada principal; câmera x 0-7446, y 0-482) não são afirmadas; nenhum KB cita os limites de câmera da ROM. A imagem do motor legado não é certificada.",
            "en": "2026-09-26 (card G3, W37's rule), ROM-first mode: every section of the stage (level 0 at $1F7A, checkpoint $1F81; the ROM's checkpoints [0, 1, 2]: stage start 80:995D, checkpoint objects 81:FF5E, S35) is in one WRAM-equal take, intro-highway_1_15577 (WRAM 15577 of 15577), and every frame's ROM-first picture equals the original's (V12 same-clock buffer reference, Mesen2's PPU: 15576 of 15576). Sections: checkpoint 0 f411-5860; checkpoint 1 f5861-9073; checkpoint 2 f9074-14833. Map load 80:BAC1 has no 80:BC5C load variant for this level. The stage registers no anchor in docs/stage-fidelity/anchors.json. Bound: the recorded route; the decoded map's cells that no stage frame shows (5,855 of 9,667 non-empty main-layer cells; camera x 0-7446, y 0-482) are not claimed; no KB cites the ROM's camera limits. The legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.intro-highway.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-02_s45.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S45-terrain-crash-reruns.md"
          ],
          "note": {
            "pt": "2026-10-02: todas as 18 classes de colisao enumeradas de intro-highway vistas pela sonda do X (84:910D) em tomadas verificadas. Regra do S38; S45.",
            "en": "2026-10-02: all 18 enumerated collision classes of intro-highway seen by X's probe (84:910D) in verified takes. S38 rule; S45."
          }
        },
        {
          "id": "stage.intro-highway.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 15,577 of 15,577 frames of David's intro-highway recording (R6): the title, the whole stage (level 0 f411..14833; checkpoints 1 and 2 at f5861 and f9074; Vile f10607..12863) and the stage select. Pictures under Mesen2's PPU exact on 15,209 of 15,576 frames (colour math 303, other 58, sprite limits 6); the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route; the legacy engine's camera is not certified.",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 15.577 de 15.577 quadros da gravação intro-highway do David (R6): título, a fase inteira (nível 0 f411..14833; checkpoints 1 e 2 em f5861 e f9074; Vile f10607..12863) e a seleção de fases. Imagens com a PPU do Mesen2 exatas em 15.209 de 15.576 quadros (colour math 303, other 58, limite de sprites 6); a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.intro-highway.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "docs/tasks/done/S30-stage-population-from-placements.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30 na granular-v3), modo ROM-first: a lista da ROM do nível 0 (80:DB71, M4) tem 91 entradas, 38 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa execução verificada (S30: 38 de 38), com a borda do gatilho medida (80:DC36; primeiros nascimentos: right 38), e está ligada a um recurso do ledger: 30 pelo S30 (E35 family 28, B2 owner or part 2), 8 pelos recursos da granular-v3 (0x36 -> enemy.oid_36 x5, 0x11 -> enemy.oid_11 x3). Filhos: os objetos do censo nascidos a até 48 px dos seus posicionamentos (regra de análise do S30, não um ponteiro da ROM) são 0x27 (enemy.se_strider) x3, 0x12 (enemy.oid_11) x3, todos ligados. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas, então nenhuma entrada é exclusiva de variante; o S30 não aponta variante desta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; o S30 acha 0 nascimentos fora da posição da ROM e 0 com parâmetro diferente nas suas 13 fases. Entradas dos finders 0-2 não são ocorrências do censo (S30): 36 de 53 nasceram na posição da ROM. Execuções: intro-highway_1_15577 (14,423 quadros no nível 0), com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30 on granular-v3), ROM-first mode: level 0's ROM list (80:DB71, M4) holds 91 entries, 38 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a verified run (S30: 38 of 38), with its trigger edge measured (80:DC36; first spawns: right 38), and is linked to a ledger feature: 30 by S30 (E35 family 28, B2 owner or part 2), 8 by granular-v3's features (0x36 -> enemy.oid_36 x5, 0x11 -> enemy.oid_11 x3). Children: the census objects born within 48 px of its placements (S30's analysis rule, not a ROM pointer) are 0x27 (enemy.se_strider) x3, 0x12 (enemy.oid_11) x3, each linked. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries, so no entry is variant-only; S30 names no variant of this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; S30 finds 0 spawns off their ROM position and 0 with a different parameter in its 13 stages. Entries of finders 0-2 are not census occurrences (S30): 36 of 53 spawned at their ROM position. Runs: intro-highway_1_15577 (14,423 frames at level 0), WRAM equal on every frame of each (E35 runs: wram_equal = frames). Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.intro-highway.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's intro-highway recording (level 0 f411..14833: checkpoints 1 and 2 at f5861 and f9074, census 0x22 in two runs f3658..5401, Vile f10607..12863, then the stage select) equal in WRAM on 15,577 of 15,577 frames (R6); pictures exact on 15,209 of 15,576 (the residuals belong to the visual step). Bound: the one recorded route, with no death; placements on screen are not counted (placements_coverage.py covers CP, SE and FM only).",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação intro-highway do David (nível 0 f411..14833: checkpoints 1 e 2 em f5861 e f9074, censo 0x22 em duas passagens f3658..5401, Vile f10607..12863, depois a seleção de fases) igual em WRAM em 15.577 de 15.577 quadros (R6); imagens exatas em 15.209 de 15.576 (os resíduos são do passo visual). Limite: a única rota gravada, sem morte; colocações na tela não contadas (placements_coverage.py cobre só CP, SE e FM)."
          }
        },
        {
          "id": "stage.intro-highway.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-10-03_s48.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S48-ih-fm-retry-intakes.md"
          ],
          "note": {
            "pt": "2026-10-03: os tres checkpoints, morte e retorno, portas, camera e saida conferidos nas rotas reais. Retries cp0 a cp2 a tolerancia zero (cp2 por ramo novo, morte f10127); tomada inteira a tolerancia zero: 15576 de 15576 imagens, 15577 de 15577 estados. Regra S35 preservada.",
            "en": "2026-10-03: all three checkpoints, death and retry, doors, camera and exit checked on actual routes. Retries cp0 to cp2 at zero tolerance (cp2 by a new branch, death f10127); whole take at zero tolerance: 15576 of 15576 pictures, 15577 of 15577 states. S35 rule preserved."
          }
        }
      ]
    },
    {
      "id": "stage.chill-penguin",
      "category": "stages",
      "title": {
        "pt": "Chill Penguin",
        "en": "Chill Penguin"
      },
      "steps": [
        {
          "id": "stage.chill-penguin.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_cp_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "docs/stage-fidelity/anchors.json",
            "docs/stage-fidelity/movie_anchors/chill-penguin.json",
            "tools/tests/test_rom_ppu_gate.py",
            "tools/tests/test_rom_spawn_anchor.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): todas as âncoras de CP passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 0.0 %, região do ator máx. 2.0 %) difere em 0 pixels (0.00 %) e a região do ator em 0 de 1,856 (V7; WRAM 1,206 de 1,206 até ela); as 244 âncoras do filme (docs/stage-fidelity/movie_anchors/chill-penguin.json) caem em quadros cuja imagem ROM-first é igual à do original (V5: 19,006 de 19,008; f146 e f16877, limites por linha do LakeSnes, não têm âncora). Limite: a rota gravada e o início da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): every CP anchor passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 0.0 %, actor region max 2.0 %) differs in 0 pixels (0.00 %) and its actor region in 0 of 1,856 (V7; WRAM 1,206 of 1,206 up to it); the 244 movie anchors (docs/stage-fidelity/movie_anchors/chill-penguin.json) fall on frames whose ROM-first picture equals the original's (V5: 19,006 of 19,008; f146 and f16877, LakeSnes per-line limits, hold no anchor). Bound: the recorded route and the stage start; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.chill-penguin.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "content/x1/stages/tiles/chill-penguin_full.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s62.json",
            "knowledge_base/mmx1/rom/cp36_probe_trace_2026-10-12_r142.json",
            "docs/tasks/done/R142-cp36-trace-and-song10-window.md"
          ],
          "note": {
            "pt": "2026-10-12 (L98, carta R142): 18 de 18 classes de terreno do Chill Penguin vistas. As 17 classes antigas e a classe $36: knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s62.json#/stages/chill-penguin (seen_classes 17 of classes 18; runtime_domain_complete False); read at git c853a89f2; plus 1 parts $36 per knowledge_base/mmx1/rom/cp36_probe_trace_2026-10-12_r142.json#/steps/stage.chill-penguin.terrain/parts. A classe $36 foi vista numa sonda lateral do X (84:9A24, retorno 84:9A69, bloco 685, atributo bruto 54) lida num rastro do S32 (84:910D, quadro 5718), aceito por stage_terrain_coverage.scan_trace (knowledge_base/mmx1/rom/cp36_probe_trace_2026-10-12_r142.json).",
            "en": "2026-10-12 (L98, card R142): 18 of 18 terrain classes of Chill Penguin seen. The 17 earlier classes and class $36: knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s62.json#/stages/chill-penguin (seen_classes 17 of classes 18; runtime_domain_complete False); read at git c853a89f2; plus 1 parts $36 per knowledge_base/mmx1/rom/cp36_probe_trace_2026-10-12_r142.json#/steps/stage.chill-penguin.terrain/parts. Class $36 was seen as an X side probe (84:9A24, return 84:9A69, block 685, raw attribute 54) read in an S32 trace (84:910D, frame 5718), accepted by stage_terrain_coverage.scan_trace (knowledge_base/mmx1/rom/cp36_probe_trace_2026-10-12_r142.json)."
          }
        },
        {
          "id": "stage.chill-penguin.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e rolagem incluídas, em 19,009 de 19,009 quadros da gravação de CP, 278 quadros de lag entre eles (K8); câmera 31 de 31 e imagem exata em 19,006 de 19,008 quadros (V5). Limite: a única rota gravada; a câmera do motor legado não é certificada.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 19,009 of 19,009 frames of the CP recording, 278 lag frames among them (K8); camera check 31 of 31 and picture exact on 19,006 of 19,008 frames (V5). Bound: the one recorded route; the legacy engine's camera is not certified."
          }
        },
        {
          "id": "stage.chill-penguin.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "docs/tasks/done/S30-stage-population-from-placements.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30 na granular-v3), modo ROM-first: a lista da ROM do nível 8 (80:DB71, M4) tem 92 entradas, 59 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa execução verificada (S30: 59 de 59), com a borda do gatilho medida (80:DC36; primeiros nascimentos: right 54, left 3, top 2), e está ligada a um recurso do ledger: 44 pelo S30 (E35 family 42, E36 census.0x4d owner (candidate) 1, E35 census.0x02 owner (candidate) 1), 15 pelos recursos da granular-v3 (0x36 -> enemy.oid_36 x6, 0x2F -> enemy.oid_2f x2, 0x57 -> enemy.oid_57 x3, 0x3A -> enemy.oid_57 x4). Filhos: os objetos do censo nascidos a até 48 px dos seus posicionamentos (regra de análise do S30, não um ponteiro da ROM) são 0x5C (census.0x5c, verified) x1, 0x3A (enemy.oid_57) x5, 0x02 (boss.chill-penguin) x2, todos ligados. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas, então nenhuma entrada é exclusiva de variante; o S30 não aponta variante desta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; o S30 acha 0 nascimentos fora da posição da ROM e 0 com parâmetro diferente nas suas 13 fases. Entradas dos finders 0-2 não são ocorrências do censo (S30): 33 de 33 nasceram na posição da ROM. Execuções: armored-armadillo-auto_1_7731 (925 quadros no nível 8), armored-armadillo_1_15055 (604 quadros no nível 8), boomer-kuwanger-auto_1_3016 (885 quadros no nível 8), boomer-kuwanger_1_40070 (713 quadros no nível 8), chill-penguin-new-game_1_21068 (20,820 quadros no nível 8), chill-penguin_2_19010 (18,906 quadros no nível 8), items-collection_2_15104 (170 quadros no nível 8), launch-octopus-auto_1_4717 (925 quadros no nível 8), spark-mandrill-auto_1_2901 (905 quadros no nível 8), sting-chameleon-auto_1_5497 (885 quadros no nível 8), com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30 on granular-v3), ROM-first mode: level 8's ROM list (80:DB71, M4) holds 92 entries, 59 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a verified run (S30: 59 of 59), with its trigger edge measured (80:DC36; first spawns: right 54, left 3, top 2), and is linked to a ledger feature: 44 by S30 (E35 family 42, E36 census.0x4d owner (candidate) 1, E35 census.0x02 owner (candidate) 1), 15 by granular-v3's features (0x36 -> enemy.oid_36 x6, 0x2F -> enemy.oid_2f x2, 0x57 -> enemy.oid_57 x3, 0x3A -> enemy.oid_57 x4). Children: the census objects born within 48 px of its placements (S30's analysis rule, not a ROM pointer) are 0x5C (census.0x5c, verified) x1, 0x3A (enemy.oid_57) x5, 0x02 (boss.chill-penguin) x2, each linked. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries, so no entry is variant-only; S30 names no variant of this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; S30 finds 0 spawns off their ROM position and 0 with a different parameter in its 13 stages. Entries of finders 0-2 are not census occurrences (S30): 33 of 33 spawned at their ROM position. Runs: armored-armadillo-auto_1_7731 (925 frames at level 8), armored-armadillo_1_15055 (604 frames at level 8), boomer-kuwanger-auto_1_3016 (885 frames at level 8), boomer-kuwanger_1_40070 (713 frames at level 8), chill-penguin-new-game_1_21068 (20,820 frames at level 8), chill-penguin_2_19010 (18,906 frames at level 8), items-collection_2_15104 (170 frames at level 8), launch-octopus-auto_1_4717 (925 frames at level 8), spark-mandrill-auto_1_2901 (905 frames at level 8), sting-chameleon-auto_1_5497 (885 frames at level 8), WRAM equal on every frame of each (E35 runs: wram_equal = frames). Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.chill-penguin.opening-traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia inicial medida",
            "en": "Measured opening traversal"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "content/x1/stages/tiles/chill-penguin_full.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Trecho de 1200 quadros comparado a tolerância 1px; não é a fase inteira nem gate final de desvio zero.",
            "en": "1200-frame section compared at 1px tolerance; not the full stage or final zero-deviation gate."
          }
        },
        {
          "id": "stage.chill-penguin.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 25,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_cp_movie_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L2), modo ROM-first (megaman-x.exe --rom-first): da entrada à saída da gravação de CP (intro, checkpoints 0 a 2, chefe, saída) igual na WRAM em 19,009 de 19,009 quadros (K8) e exata em pixels em 19,006 de 19,008 (V5; f146 e f16877 são limites por linha do LakeSnes); 72 de 92 colocações vistas na tela. Limite: a única rota gravada; mortes, retries e as 20 colocações nunca vistas na tela não estão cobertas.",
            "en": "2026-09-24 (card L2), ROM-first mode (megaman-x.exe --rom-first): entry to exit of the CP recording (intro, checkpoints 0 to 2, boss, exit) equal in WRAM on 19,009 of 19,009 frames (K8) and pixel-exact on 19,006 of 19,008 (V5; f146 and f16877 are LakeSnes per-line limits); 72 of 92 placements reached on screen. Bound: the one recorded route; deaths, retries and the 20 never-on-screen placements are not covered."
          }
        },
        {
          "id": "stage.chill-penguin.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retry_acceptance_2026-10-02.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S35-checkpoint-retries.md"
          ],
          "note": {
            "pt": "2026-10-02: os tres checkpoints, morte e retorno, duas portas, camera e saida foram conferidos nas rotas reais. As imagens exigidas passaram a tolerancia zero; a campanha tem 21067/21067 imagens e 21068/21068 estados iguais. CP0 reutiliza prova estrita retida; CP1, CP2 e campanha passaram por programas novos. Regra S35 preservada.",
            "en": "2026-10-02: all three checkpoints, death and retry, both doors, camera and exit were checked on actual routes. Required pictures passed at zero tolerance; the campaign has 21067/21067 pictures and 21068/21068 equal states. CP0 reuses retained strict proof; CP1, CP2 and campaign passed fresh programs. S35 rule preserved."
          }
        }
      ]
    },
    {
      "id": "stage.storm-eagle",
      "category": "stages",
      "title": {
        "pt": "Storm Eagle",
        "en": "Storm Eagle"
      },
      "steps": [
        {
          "id": "stage.storm-eagle.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_se_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md",
            "docs/stage-fidelity/movie_anchors/storm-eagle.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_2026-09-24.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L11, a partir do V11), modo ROM-first: todas as âncoras registradas de Storm Eagle passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f1633) difere em 0 pixels (0.00 %) com o LakeSnes e 0 (0.00 %) com o PPU do Mesen2; WRAM 1,633 de 1,633 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). As 236 âncoras do filme (docs/stage-fidelity/movie_anchors/storm-eagle.json) caem em quadros cuja imagem ROM-first é igual à do original com o PPU do Mesen2 (V8: 236 de 236). Limite: a rota gravada e o início da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L11, from V11), ROM-first mode: every registered anchor of Storm Eagle passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f1633) differs in 0 pixels (0.00 %) under LakeSnes and 0 (0.00 %) under Mesen2's PPU; WRAM 1,633 of 1,633 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). The 236 movie anchors (docs/stage-fidelity/movie_anchors/storm-eagle.json) fall on frames whose ROM-first picture equals the original's under Mesen2's PPU (V8: 236 of 236). Bound: the recorded route and the stage start; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.storm-eagle.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-01.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json",
            "docs/tasks/done/S38-stage-terrain-rule-and-gaps.md"
          ],
          "note": {
            "pt": "2026-10-01: todas as 13 classes de colisao enumeradas de storm-eagle vistas pela sonda do X (84:910D) em tomadas verificadas. As tres que faltavam vieram do traco S32 da gravacao se-a do David (WRAM 21773/21773, imagem exata): $03 em f7118 e $04 em f7600 (parede, retorno 99D3), $3A em f7141 (lateral 81:9CDD). Regra do S38.",
            "en": "2026-10-01: all 13 enumerated collision classes of storm-eagle seen by X's probe (84:910D) in verified takes. The three missing ones came from the S32 trace of David's se-a take (WRAM 21773/21773, pixels exact): $03 at f7118 and $04 at f7600 (wall, return 99D3), $3A at f7141 (side 81:9CDD). S38's rule."
          }
        },
        {
          "id": "stage.storm-eagle.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e rolagem incluídas, em 21,058 de 21,058 quadros da gravação de SE, 651 quadros de lag entre eles (K8); imagem exata em 21,056 de 21,057 quadros (V6; o outro, f163 na intro da fase, difere em 12 pixels da linha 151 depois de um forced blank por HDMA, compatível com o limite por linha do LakeSnes do V5). Conferência de câmera 33 de 35: em f4801 e f18601 a câmera da WRAM e o scroll do BG1 diferem 1 e 4 px, em quadros cuja WRAM e imagem são iguais às do original. Limite: a única rota gravada; a câmera do motor legado não é certificada.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 21,058 of 21,058 frames of the SE recording, 651 lag frames among them (K8); picture exact on 21,056 of 21,057 frames (V6; the other, f163 in the stage intro, differs in 12 pixels of row 151 after an HDMA forced blank, consistent with V5's LakeSnes per-line limit). Camera check 33 of 35: at f4801 and f18601 the WRAM camera and the BG1 scroll differ by 1 and 4 px, in frames whose WRAM and picture equal the original's. Bound: the one recorded route; the legacy engine's camera is not certified."
          }
        },
        {
          "id": "stage.storm-eagle.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "tools/tests/test_stage_population_visual.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: 41 de 41 ocorrências vistas; as entradas 24, 26, 27 (0x46) nasceram na posição da ROM na gravação se-a do David (WRAM 21773/21773, imagens exatas). Mesmo critério do G3.",
            "en": "2026-10-01: 41 of 41 occurrences seen; entries 24, 26, 27 (0x46) spawned at the ROM position in David's se-a take (WRAM 21773/21773, pictures exact). G3's predicate."
          }
        },
        {
          "id": "stage.storm-eagle.opening-traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia inicial medida",
            "en": "Measured opening traversal"
          },
          "weightBp": 5,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "content/x1/stages/tiles/storm-eagle_full.json",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Trecho de 1200 quadros comparado a tolerância 1px; não é a fase inteira nem gate final de desvio zero.",
            "en": "1200-frame section compared at 1px tolerance; not the full stage or final zero-deviation gate."
          }
        },
        {
          "id": "stage.storm-eagle.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 25,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): da entrada à saída da gravação de SE (intro, checkpoints 0 a 2, chefe, saída) igual na WRAM em 21,058 de 21,058 quadros (K8) e exata em pixels em 21,056 de 21,057 (V6; f163, na intro da fase, compatível com o limite por linha do LakeSnes do V5); toda seção depois da intro exata, o chefe f14860..19519 em 4,660 de 4,660; 69 de 106 colocações vistas na tela. Limite: a única rota gravada; mortes, retries e as 37 colocações nunca vistas na tela não estão cobertas.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): entry to exit of the SE recording (intro, checkpoints 0 to 2, boss, exit) equal in WRAM on 21,058 of 21,058 frames (K8) and pixel-exact on 21,056 of 21,057 (V6; f163 in the stage intro, consistent with V5's LakeSnes per-line limit); every section after the intro exact, the boss f14860..19519 on 4,660 of 4,660; 69 of 106 placements reached on screen. Bound: the one recorded route; deaths, retries and the 37 never-on-screen placements are not covered."
          }
        },
        {
          "id": "stage.storm-eagle.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "content/x1/stages/tiles/storm-eagle_full.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: retornos vistos nos checkpoints 0, 1 e 2 (se-bc, mortes f2663/f9390/f16755, retorno ao mesmo checkpoint, imagens exatas); objetos de câmera 25 e 28 na posição da ROM (se-a f4063/f4149). Porta: não se aplica; saída: vista (S35).",
            "en": "2026-10-01: retries seen at checkpoints 0, 1 and 2 (se-bc deaths f2663/f9390/f16755, same-checkpoint return, pictures exact); camera objects 25 and 28 at the ROM position (se-a f4063/f4149). Door: not applicable; exit: seen (S35)."
          }
        }
      ]
    },
    {
      "id": "stage.flame-mammoth",
      "category": "stages",
      "title": {
        "pt": "Flame Mammoth",
        "en": "Flame Mammoth"
      },
      "steps": [
        {
          "id": "stage.flame-mammoth.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_fm_2026-09-25.json",
            "knowledge_base/mmx1/rom/fm_belt_drop_anchor_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "docs/stage-fidelity/real_flame_mammoth_belt_drop.png",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md",
            "docs/tasks/done/V13-fm-belt-drop-anchor.md",
            "docs/stage-fidelity/movie_anchors/flame-mammoth.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L13, a partir do V11 e do V13), modo ROM-first: todas as âncoras registradas de Flame Mammoth passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f1457) difere em 0 pixels (0.00 %) com o LakeSnes e 0 (0.00 %) com o PPU do Mesen2; WRAM 1,457 de 1,457 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). A âncora `belt_drop` (máx. 2.0 %, com as suas ignore_rects), recunhada pelo V13 a partir do filme flame-mammoth no quadro f2409 (imagem do mesmo relógio do V12; X (562, 623), câmera (434, 512)), difere em 0 pixels (0.00 %) com o PPU do Mesen2; WRAM 2,409 de 2,409 até ela. As 403 âncoras do filme (docs/stage-fidelity/movie_anchors/flame-mammoth.json) caem em quadros cuja imagem ROM-first é igual à do original com o PPU do Mesen2 (V8: 403 de 403). Limite: a rota gravada e o início da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L13, from V11 and V13), ROM-first mode: every registered anchor of Flame Mammoth passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f1457) differs in 0 pixels (0.00 %) under LakeSnes and 0 (0.00 %) under Mesen2's PPU; WRAM 1,457 of 1,457 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). The `belt_drop` anchor (max 2.0 %, its own ignore_rects), re-minted by V13 from the flame-mammoth movie at f2409 (V12's same-clock picture; X (562, 623), camera (434, 512)), differs in 0 pixels (0.00 %) under Mesen2's PPU; WRAM 2,409 of 2,409 up to it. The 403 movie anchors (docs/stage-fidelity/movie_anchors/flame-mammoth.json) fall on frames whose ROM-first picture equals the original's under Mesen2's PPU (V8: 403 of 403). Bound: the recorded route and the stage start; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.flame-mammoth.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s60.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S59-fm-terrain-reachability.md"
          ],
          "note": {
            "pt": "2026-10-03: todas as 20 classes de colisao enumeradas de flame-mammoth vistas pela sonda do X (84:910D) em tomadas verificadas (as 12 tomadas novas S59 com tolerancia 0; as demais classes em recibos no limiar padrao do oraculo); as 12 que faltavam eram alcancaveis em tomadas nao rastreadas (geometria do S59, ramos com as linhas da propria fonte).",
            "en": "2026-10-03: all 20 enumerated collision classes of flame-mammoth seen by X's probe (84:910D) in verified takes (the 12 new S59 takes at tolerance 0; the other classes from receipts at the oracle's default threshold); the 12 missing ones were reachable in untraced takes (S59 geometry, branches with the source's own lines)."
          }
        },
        {
          "id": "stage.flame-mammoth.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e rolagem incluídas, em 30,150 de 30,150 quadros da gravação de FM, 668 quadros de lag entre eles (K8); imagem exata em 30,148 de 30,149 quadros (V6; o outro, f235 na intro da fase, difere em 11 pixels da linha 103 depois de um forced blank por HDMA, compatível com o limite por linha do LakeSnes do V5). Conferência de câmera 49 de 50: em f16802 a câmera da WRAM e o scroll do BG1 diferem 2 px, em quadros cuja WRAM e imagem são iguais às do original. Limite: a única rota gravada; a câmera do motor legado não é certificada.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 30,150 of 30,150 frames of the FM recording, 668 lag frames among them (K8); picture exact on 30,148 of 30,149 frames (V6; the other, f235 in the stage intro, differs in 11 pixels of row 103 after an HDMA forced blank, consistent with V5's LakeSnes per-line limit). Camera check 49 of 50: at f16802 the WRAM camera and the BG1 scroll differ by 2 px, in frames whose WRAM and picture equal the original's. Bound: the one recorded route; the legacy engine's camera is not certified."
          }
        },
        {
          "id": "stage.flame-mammoth.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "tools/tests/test_stage_population_visual.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: bit limpo 49 de 49: as entradas 15, 27, 29, 34, 38, 39 nasceram na posição da ROM na gravação fm-a (com lava, WRAM 11231/11231, imagens exatas). Bit ligado 49 de 49 (G3).",
            "en": "2026-10-01: bit clear 49 of 49: entries 15, 27, 29, 34, 38, 39 spawned at the ROM position in David's fm-a take (lava, WRAM 11231/11231, pictures exact). Bit set 49 of 49 (G3)."
          }
        },
        {
          "id": "stage.flame-mammoth.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "tools/tests/test_rom_frame_gate.py",
            "tools/tests/test_rom_ppu_gate.py"
          ],
          "note": {
            "pt": "2026-09-24 (card L4), modo ROM-first (megaman-x.exe --rom-first): da entrada à saída da gravação de FM (intro, checkpoints 0 a 2, chefe, saída) igual na WRAM em 30,150 de 30,150 quadros (K8) e exata em pixels em 30,148 de 30,149 (V6; f235, na intro da fase, compatível com o limite por linha do LakeSnes do V5); toda seção depois da intro exata, o chefe f24276..28063 em 3,788 de 3,788; 72 de 95 colocações vistas na tela. Limite: a única rota gravada; mortes, retries e as 23 colocações nunca vistas na tela não estão cobertas.",
            "en": "2026-09-24 (card L4), ROM-first mode (megaman-x.exe --rom-first): entry to exit of the FM recording (intro, checkpoints 0 to 2, boss, exit) equal in WRAM on 30,150 of 30,150 frames (K8) and pixel-exact on 30,148 of 30,149 (V6; f235 in the stage intro, consistent with V5's LakeSnes per-line limit); every section after the intro exact, the boss f24276..28063 on 3,788 of 3,788; 72 of 95 placements reached on screen. Bound: the one recorded route; deaths, retries and the 23 never-on-screen placements are not covered."
          }
        },
        {
          "id": "stage.flame-mammoth.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-10-03_s48.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S48-ih-fm-retry-intakes.md"
          ],
          "note": {
            "pt": "2026-10-03: os tres checkpoints, morte e retorno, portas, camera e saida conferidos nas rotas reais. Retries cp0 e cp1 a tolerancia zero (cp1 por ramo novo, morte f9634); cp2 pelo retorno L27 na tomada inteira, tambem a tolerancia zero: 23046 de 23046 imagens, 23047 de 23047 estados. Regra S35 preservada.",
            "en": "2026-10-03: all three checkpoints, death and retry, doors, camera and exit checked on actual routes. Retries cp0 and cp1 at zero tolerance (cp1 by a new branch, death f9634); cp2 by the L27 return inside the whole take, also at zero tolerance: 23046 of 23046 pictures, 23047 of 23047 states. S35 rule preserved."
          }
        }
      ]
    },
    {
      "id": "stage.spark-mandrill",
      "category": "stages",
      "title": {
        "pt": "Spark Mandrill",
        "en": "Spark Mandrill"
      },
      "steps": [
        {
          "id": "stage.spark-mandrill.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_sm_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L11, a partir do V11), modo ROM-first: todas as âncoras registradas de Spark Mandrill passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f1323) difere em 0 pixels (0.00 %) com o LakeSnes e 0 (0.00 %) com o PPU do Mesen2; WRAM 1,323 de 1,323 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). Limite: o início da fase, a única âncora registrada da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L11, from V11), ROM-first mode: every registered anchor of Spark Mandrill passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f1323) differs in 0 pixels (0.00 %) under LakeSnes and 0 (0.00 %) under Mesen2's PPU; WRAM 1,323 of 1,323 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). Bound: the stage start, the stage's only registered anchor; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.spark-mandrill.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-01.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S38-stage-terrain-rule-and-gaps.md",
            "build/coord/completion-2026-10-02/class3d-acceptance.json"
          ],
          "note": {
            "pt": "2026-10-02: as cinco classes de colisao enumeradas de Spark foram vistas pela sonda do X (84:910D). A ultima, $3D, passou pelo intake oficial com 23159/23159 imagens a tolerancia zero e 23160/23160 estados WRAM; regra S38. Outros escopos do H13 permanecem abertos.",
            "en": "2026-10-02: all five enumerated Spark collision classes were seen by X's probe (84:910D). The last, $3D, passed official intake with 23159/23159 zero-tolerance pictures and 23160/23160 WRAM states; S38 rule. Other H13 scopes remain open."
          }
        },
        {
          "id": "stage.spark-mandrill.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 27,368 of 27,368 frames of David's Spark Mandrill recording (R6): the stage from f123 with checkpoints 1 and 2, a game over and the stage replayed from checkpoint 0, the boss (0x31, f23243..25410) and the post-boss screens ($1F7A 32, f26062..26084). Pictures under Mesen2's PPU exact on 26,777 of 27,367 frames (colour math 558, write placement 20, other 12); the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route; the legacy engine's camera is not certified.",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 27.368 de 27.368 quadros da gravação Spark Mandrill do David (R6): a fase desde f123 com checkpoints 1 e 2, um game over e a fase repetida desde o checkpoint 0, o chefe (0x31, f23243..25410) e as telas pós-chefe ($1F7A 32, f26062..26084). Imagens com a PPU do Mesen2 exatas em 26.777 de 27.367 quadros (colour math 558, posição de escrita 20, other 12); a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.spark-mandrill.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_declared_impossible_2026-10-09.json",
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "knowledge_base/mmx1/rom/stage_population_visual_2026-10-09_r104.json",
            "knowledge_base/mmx1/rom/stage_placements_camera_proof_2026-10-09_r106.json",
            "knowledge_base/mmx1/rom/armadillo_62_attempt_2026-10-09_r108.json",
            "knowledge_base/mmx1/rom/armadillo_62_rom_bounds_2026-10-09_r110.json",
            "docs/tasks/done/R104-stage-placements-never-seen.md",
            "docs/tasks/done/R106-placements-map-render-and-camera-proof.md",
            "docs/tasks/done/R108-armadillo-62-in-normal-play.md",
            "docs/tasks/done/R110-armadillo-62-rom-bounds.md",
            "docs/tasks/done/W2-wiki-forced-situation-gifs.md"
          ],
          "note": {
            "pt": "2026-10-09 (L43): verificado. Todas as 88 ocorrências do censo estão resolvidas: as vistas na posição da ROM (stage_population_visual_2026-09-26.json) e as que o David declarou impossíveis no jogo normal (knowledge_base/mmx1/rom/stage_population_declared_impossible_2026-10-09.json: \"marcar isso como impossível de replicar pelo jogo e marcar isso como feito\"). Evidência: 647 gravações verificadas sem o nascimento (R104), travas e limites da câmera (R106), sete rotas e quatro buscas (R108), velocidades do X e câmera pela ROM (R110); só forçando a câmera elas nascem (W2). Não é uma prova completa pela ROM: conta pela decisão do dono.",
            "en": "2026-10-09 (L43): verified. All 88 census occurrences are resolved: those seen at their ROM position (stage_population_visual_2026-09-26.json) and those David declared impossible in normal play (knowledge_base/mmx1/rom/stage_population_declared_impossible_2026-10-09.json). Evidence: 647 verified recordings without the birth (R104), camera locks and borders (R106), seven routes and four hunts (R108), X speeds and camera from the ROM (R110); they are born only when the camera is forced (W2). Not a complete ROM proof: counted by the owner's decision."
          }
        },
        {
          "id": "stage.spark-mandrill.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's Spark Mandrill recording (stage from f123; checkpoint 1 f6851; death at checkpoint 1 at f9930 with no lives left, continue at f11441, the stage replayed from checkpoint 0 at f12226; checkpoints 1 f19121 and 2 f23031; boss 0x31 f23243..25410; post-boss screens ($1F7A 32) f26062..26084) equal in WRAM on 27,368 of 27,368 frames (R6); pictures exact on 26,777 of 27,367 (the residuals belong to the visual step). Bound: the one recorded route; placements on screen are not counted; $1F0C never changes in this take (R6).",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação Spark Mandrill do David (fase desde f123; checkpoint 1 f6851; morte no checkpoint 1 em f9930 sem vidas, continue em f11441, fase repetida desde o checkpoint 0 em f12226; checkpoints 1 f19121 e 2 f23031; chefe 0x31 f23243..25410; telas pós-chefe ($1F7A 32) f26062..26084) igual em WRAM em 27.368 de 27.368 quadros (R6); imagens exatas em 26.777 de 27.367 (os resíduos são do passo visual). Limite: a única rota gravada; colocações na tela não contadas; $1F0C não muda nesta gravação (R6)."
          }
        },
        {
          "id": "stage.spark-mandrill.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-10-03_s49.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S49-spark-mandrill-projection.md"
          ],
          "note": {
            "pt": "2026-10-03: os tres checkpoints, morte e retorno, portas, camera e saida conferidos nas rotas reais com a prova de campo do H13. Retries cp0 e cp1 a tolerancia zero (antes paravam no quadro 5081); cp2 pelo ramo de morte, tambem a tolerancia zero; tomada inteira 27367 de 27367 imagens, 27368 de 27368 estados. Regra S35 preservada.",
            "en": "2026-10-03: all three checkpoints, death and retry, doors, camera and exit checked on actual routes with H13's field proof. Retries cp0 and cp1 at zero tolerance (they stopped at frame 5081 before); cp2 by the death branch, also at zero tolerance; whole take 27367 of 27367 pictures, 27368 of 27368 states. S35 rule preserved."
          }
        }
      ]
    },
    {
      "id": "stage.armored-armadillo",
      "category": "stages",
      "title": {
        "pt": "Armored Armadillo",
        "en": "Armored Armadillo"
      },
      "steps": [
        {
          "id": "stage.armored-armadillo.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_aa_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L11, a partir do V11), modo ROM-first: todas as âncoras registradas de Armored Armadillo passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f1474) difere em 0 pixels (0.00 %) com o LakeSnes e 0 (0.00 %) com o PPU do Mesen2; WRAM 1,474 de 1,474 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). Limite: o início da fase, a única âncora registrada da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L11, from V11), ROM-first mode: every registered anchor of Armored Armadillo passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f1474) differs in 0 pixels (0.00 %) under LakeSnes and 0 (0.00 %) under Mesen2's PPU; WRAM 1,474 of 1,474 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). Bound: the stage start, the stage's only registered anchor; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.armored-armadillo.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s56.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S56-aa-terrain-07-and-spike.md"
          ],
          "note": {
            "pt": "2026-10-03: todas as 21 classes de colisao enumeradas de armored-armadillo vistas pela sonda do X (84:910D) em tomadas verificadas; $07 num ramo antes da leitura da propria fonte e o espinho $3F pela leitura de chao com o caminho de contato 84:98D8 (S56, tolerancia 0).",
            "en": "2026-10-03: all 21 enumerated collision classes of armored-armadillo seen by X's probe (84:910D) in verified takes; $07 from a branch before the source's own read and spike $3F by the floor read with the contact path 84:98D8 (S56, tolerance 0)."
          }
        },
        {
          "id": "stage.armored-armadillo.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 15,055 of 15,055 frames of David's armored-armadillo take (R7): the stage select, the intro ($1F7A 16, f256..275), the whole stage (level 3 f276..12800; checkpoints 1 and 2 at f5324 and f8253), the boss (finder 3 id 0x14, f8632..12180), Rolling Shield at f12181, the post-boss screens ($1F7A 29, f12801..12823) and the fortress scene (level 9, f13690..14451). Pictures under Mesen2's PPU exact on 15,031 of 15,054 frames; the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route, with no death; the legacy engine's camera is not certified.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 15.055 de 15.055 quadros da gravação armored-armadillo do David (R7): a seleção de fases, a introdução ($1F7A 16, f256..275), a fase inteira (nível 3 f276..12800; checkpoints 1 e 2 em f5324 e f8253), o chefe (finder 3 id 0x14, f8632..12180), o Rolling Shield em f12181, as telas pós-chefe ($1F7A 29, f12801..12823) e a cena da fortaleza (nível 9, f13690..14451). Imagens com a PPU do Mesen2 exatas em 15.031 de 15.054 quadros; a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada, sem morte; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.armored-armadillo.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_declared_impossible_2026-10-09.json",
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "knowledge_base/mmx1/rom/stage_population_visual_2026-10-09_r104.json",
            "knowledge_base/mmx1/rom/stage_placements_camera_proof_2026-10-09_r106.json",
            "knowledge_base/mmx1/rom/armadillo_62_attempt_2026-10-09_r108.json",
            "knowledge_base/mmx1/rom/armadillo_62_rom_bounds_2026-10-09_r110.json",
            "docs/tasks/done/R104-stage-placements-never-seen.md",
            "docs/tasks/done/R106-placements-map-render-and-camera-proof.md",
            "docs/tasks/done/R108-armadillo-62-in-normal-play.md",
            "docs/tasks/done/R110-armadillo-62-rom-bounds.md",
            "docs/tasks/done/W2-wiki-forced-situation-gifs.md"
          ],
          "note": {
            "pt": "2026-10-09 (L43): verificado. Todas as 109 ocorrências do censo estão resolvidas: as vistas na posição da ROM (stage_population_visual_2026-09-26.json) e as que o David declarou impossíveis no jogo normal (knowledge_base/mmx1/rom/stage_population_declared_impossible_2026-10-09.json: \"marcar isso como impossível de replicar pelo jogo e marcar isso como feito\"). Evidência: 647 gravações verificadas sem o nascimento (R104), travas e limites da câmera (R106), sete rotas e quatro buscas (R108), velocidades do X e câmera pela ROM (R110); só forçando a câmera elas nascem (W2). Não é uma prova completa pela ROM: conta pela decisão do dono.",
            "en": "2026-10-09 (L43): verified. All 109 census occurrences are resolved: those seen at their ROM position (stage_population_visual_2026-09-26.json) and those David declared impossible in normal play (knowledge_base/mmx1/rom/stage_population_declared_impossible_2026-10-09.json). Evidence: 647 verified recordings without the birth (R104), camera locks and borders (R106), seven routes and four hunts (R108), X speeds and camera from the ROM (R110); they are born only when the camera is forced (W2). Not a complete ROM proof: counted by the owner's decision."
          }
        },
        {
          "id": "stage.armored-armadillo.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's armored-armadillo take (stage select f164, intro $1F7A 16 f256..275, stage f276..12800: checkpoints 1 f5324 and 2 f8253, the boss 0x14 f8632..12180 defeated ($1F0C) at f11646, Rolling Shield at f12181, post-boss screens ($1F7A 29) f12801..12823) equal in WRAM on 15,055 of 15,055 frames (R7); pictures exact on 15,031 of 15,054 (the residuals belong to the visual step). Bound: the one recorded route, with no death; placements on screen are not counted.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação armored-armadillo do David (seleção de fases f164, introdução $1F7A 16 f256..275, fase f276..12800: checkpoints 1 f5324 e 2 f8253, o chefe 0x14 f8632..12180 derrotado ($1F0C) em f11646, Rolling Shield em f12181, telas pós-chefe ($1F7A 29) f12801..12823) igual em WRAM em 15.055 de 15.055 quadros (R7); imagens exatas em 15.031 de 15.054 (os resíduos são do passo visual). Limite: a única rota gravada, sem morte; colocações na tela não contadas."
          }
        },
        {
          "id": "stage.armored-armadillo.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/aa_transition_2026-09-30.json",
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-09-26.json",
            "docs/tasks/done/T4-aa-retry-reduction.md"
          ],
          "note": {
            "pt": "2026-09-30 (T3+T4): 35/35 partes de transição em tomadas verificadas; as duas mortes com retorno nos checkpoints 0 e 1 (s35-armored-armadillo-cp0/cp1-hunt, WRAM e imagens exatas) restauram vidas, posição e ação do X.",
            "en": "2026-09-30 (T3+T4): 35/35 transition parts in verified takes; the two checkpoint 0 and 1 death retries (s35-armored-armadillo-cp0/cp1-hunt, WRAM and pictures exact) restore lives, X position and action."
          }
        }
      ]
    },
    {
      "id": "stage.launch-octopus",
      "category": "stages",
      "title": {
        "pt": "Launch Octopus",
        "en": "Launch Octopus"
      },
      "steps": [
        {
          "id": "stage.launch-octopus.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_lo_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L11, a partir do V11), modo ROM-first: todas as âncoras registradas de Launch Octopus passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f1189) difere em 7 pixels (0.01 %) com o LakeSnes e 7 (0.01 %) com o PPU do Mesen2 (Mesen2: x 115..140, linhas 129..131); WRAM 1,189 de 1,189 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). Limite: o início da fase, a única âncora registrada da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L11, from V11), ROM-first mode: every registered anchor of Launch Octopus passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f1189) differs in 7 pixels (0.01 %) under LakeSnes and 7 (0.01 %) under Mesen2's PPU (Mesen2: x 115..140, rows 129..131); WRAM 1,189 of 1,189 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). Bound: the stage start, the stage's only registered anchor; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.launch-octopus.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s60.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S60-terrain-geometry-cp-sc-lo.md"
          ],
          "note": {
            "pt": "2026-10-03: todas as 21 classes de colisao enumeradas de launch-octopus vistas pela sonda do X (84:910D) em tomadas verificadas (tomadas novas S57/S60 com tolerancia 0; as demais classes em recibos no limiar padrao do oraculo); $04/$0B/$0C de uma tomada fora do residuo de IRQ do LO (S60) e o espinho $3F pelo caminho de contato 84:98D8 (S57).",
            "en": "2026-10-03: all 21 enumerated collision classes of launch-octopus seen by X's probe (84:910D) in verified takes (new S57/S60 takes at tolerance 0; the other classes from receipts at the oracle's default threshold); $04/$0B/$0C from a take outside the LO IRQ residual (S60) and spike $3F by the 84:98D8 contact path (S57)."
          }
        },
        {
          "id": "stage.launch-octopus.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 38,341 of 38,341 frames of David's launch-octopus-and-sting-flooded take (R7): the stage select, the intro ($1F7A 14, f295..313), the whole stage (level 1 f314..28000; checkpoints 1 and 2 at f6044 and f19277; X defeated by the boss at f22174), the boss (finder 3 id 0x07, f19512..22425 and f22958..27406), Homing Torpedo at f27407 and the post-boss screens ($1F7A 27, f28001..28023). Pictures under Mesen2's PPU exact on 38,182 of 38,340 frames (the 158 others in f3485..3556 and f6067..6154); the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route; the legacy engine's camera is not certified.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 38.341 de 38.341 quadros da gravação launch-octopus-and-sting-flooded do David (R7): a seleção de fases, a introdução ($1F7A 14, f295..313), a fase inteira (nível 1 f314..28000; checkpoints 1 e 2 em f6044 e f19277; o X derrotado pelo chefe em f22174), o chefe (finder 3 id 0x07, f19512..22425 e f22958..27406), o Homing Torpedo em f27407 e as telas pós-chefe ($1F7A 27, f28001..28023). Imagens com a PPU do Mesen2 exatas em 38.182 de 38.340 quadros (os 158 outros em f3485..3556 e f6067..6154); a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.launch-octopus.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, varredura do S30 refeita em 27 gravações inteiras com WRAM igual; regra do L19 sem mudança, decisão 6 do coordenador), modo ROM-first: a lista da ROM do nível 1 (80:DB71, M4) tem 67 entradas, 18 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa gravação inteira com WRAM igual (vistas 18 de 18), com a borda do gatilho medida (80:DC36; primeiros nascimentos: right 18), e está ligada a um recurso do ledger (granular-v3 feature (L18) 17, census row verified in the ledger 1). Filhos (decisão 3, que substitui a regra de 48 px do S30): os objetos cujo criador rastreado é o objeto de um posicionamento ou seus descendentes; o dono de cada um é o recurso do criador, então todo filho está ligado. Filhos destes posicionamentos entre os seis ids rastreados: nenhum; nascimentos dos seis ids neste nível por criador rastreado: 0x4A x45 por 3:0x4B, 0x4A x10 por es:0x25. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas; nenhuma variante é nomeada para esta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; nas 27 gravações, 0 de 2751 nascimentos ficam fora da posição da ROM e 0 têm outro parâmetro. Execuções neste nível: chill-penguin_2_19010 (74 quadros), flame-mammoth-lava_2_23048 (2,905 quadros), flame-mammoth_2_30151 (163 quadros), intro-highway_1_15577 (744 quadros), launch-octopus-and-sting-flooded_2_38342 (28,339 quadros), launch-octopus-auto_1_4717 (3,792 quadros), storm-eagle_1_21058 (92 quadros); WRAM igual em todos os quadros de cada uma. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card S31, S30's scan re-run over 27 WRAM-equal whole takes; L19's rule unchanged, coordinator decision 6), ROM-first mode: level 1's ROM list (80:DB71, M4) holds 67 entries, 18 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a WRAM-equal whole take (seen 18 of 18), with its trigger edge measured (80:DC36; first spawns: right 18), and is linked to a ledger feature (granular-v3 feature (L18) 17, census row verified in the ledger 1). Children (decision 3, replacing S30's 48 px rule): the objects whose traced creator is a placement's object or its descendants; each is owned by its creator's feature, so every child is linked. Children of these placements among the six traced ids: none; births of the six ids at this level by traced creator: 0x4A x45 by 3:0x4B, 0x4A x10 by es:0x25. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries; no variant is named for this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; in the 27 takes 0 of 2751 spawns are off their ROM position and 0 carry another parameter. Runs at this level: chill-penguin_2_19010 (74 frames), flame-mammoth-lava_2_23048 (2,905 frames), flame-mammoth_2_30151 (163 frames), intro-highway_1_15577 (744 frames), launch-octopus-and-sting-flooded_2_38342 (28,339 frames), launch-octopus-auto_1_4717 (3,792 frames), storm-eagle_1_21058 (92 frames); WRAM equal on every frame of each. Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.launch-octopus.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's launch-octopus take (stage select f203, intro $1F7A 14 f295..313, stage f314..28000: checkpoints 1 f6044 and 2 f19277; the boss 0x07 from f19512; X defeated at checkpoint 2 at f22174, lives 2->1 at f22395, the encounter restored at f22958; the boss defeated ($1F0C) at f26872; Homing Torpedo at f27407; post-boss screens ($1F7A 27) f28001..28023) equal in WRAM on 38,341 of 38,341 frames (R7); pictures exact on 38,182 of 38,340 (the residuals belong to the visual step). Bound: the one recorded route; placements on screen are not counted.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação launch-octopus do David (seleção de fases f203, introdução $1F7A 14 f295..313, fase f314..28000: checkpoints 1 f6044 e 2 f19277; o chefe 0x07 desde f19512; o X derrotado no checkpoint 2 em f22174, vidas 2->1 em f22395, o encontro restaurado em f22958; o chefe derrotado ($1F0C) em f26872; Homing Torpedo em f27407; telas pós-chefe ($1F7A 27) f28001..28023) igual em WRAM em 38.341 de 38.341 quadros (R7); imagens exatas em 38.182 de 38.340 (os resíduos são do passo visual). Limite: a única rota gravada; colocações na tela não contadas."
          }
        },
        {
          "id": "stage.launch-octopus.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-09-26.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "tools/tests/test_stage_terrain_transitions.py"
          ],
          "note": {
            "en": "2026-09-26 (S35, W37): all 3 checkpoint retries restore X at the same checkpoint with exact pictures; all 2 ROM door placements open, lock the camera and close. Camera-region/section objects and stage exit are seen in WRAM-equal campaign takes, with exact pictures on the transition frames. Bank:address, take and frames in the S35 KB.",
            "pt": "2026-09-26 (S35, W37): os 3 retries restauram X no mesmo checkpoint com imagens exatas; as 2 portas da ROM abrem, travam a camera e fecham. Regioes de camera, gatilhos de secao e saida da fase vistos na campanha com WRAM igual e imagens exatas nos quadros das transicoes. Banco:endereco, take e quadros no KB S35."
          }
        }
      ]
    },
    {
      "id": "stage.boomer-kuwanger",
      "category": "stages",
      "title": {
        "pt": "Boomer Kuwanger",
        "en": "Boomer Kuwanger"
      },
      "steps": [
        {
          "id": "stage.boomer-kuwanger.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_bk_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L11, a partir do V11), modo ROM-first: todas as âncoras registradas de Boomer Kuwanger passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f2318) difere em 0 pixels (0.00 %) com o LakeSnes e 0 (0.00 %) com o PPU do Mesen2; WRAM 2,318 de 2,318 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). Limite: o início da fase, a única âncora registrada da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L11, from V11), ROM-first mode: every registered anchor of Boomer Kuwanger passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f2318) differs in 0 pixels (0.00 %) under LakeSnes and 0 (0.00 %) under Mesen2's PPU; WRAM 2,318 of 2,318 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). Bound: the stage start, the stage's only registered anchor; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.boomer-kuwanger.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-09-27.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S38-stage-terrain-rule-and-gaps.md",
            "docs/tasks/done/S41-terrain-target-retarget.md",
            "docs/tasks/done/S42-terrain-credit-round-2.md"
          ],
          "note": {
            "pt": "2026-09-28 (coordenador): todas as classes de colisao enumeradas de boomer-kuwanger vistas pela sonda do X (84:910D) em tomadas verificadas. A ultima, $36, veio da caca S41 s38-boomer-kuwanger-class-36-r3 (a partir de f6901, fonte boomer-kuwanger_1_40070 verificada; WRAM 675/675, imagem 674/674), depois de reconstruir o ponto de controle 6901. Regra do S38.",
            "en": "2026-09-28 (coordinator): every enumerated collision class of boomer-kuwanger seen by X's probe (84:910D) in verified takes. The last one, $36, came from the S41 hunt s38-boomer-kuwanger-class-36-r3 (from f6901, verified source boomer-kuwanger_1_40070; WRAM 675/675, pictures 674/674) after rebuilding the f6901 checkpoint. S38's rule."
          }
        },
        {
          "id": "stage.boomer-kuwanger.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 40,070 of 40,070 frames of David's Boomer Kuwanger recording (R6): the stage from f714 with checkpoints 1 and 2, four deaths, a continue that replays it from checkpoint 0, the boss and the post-boss screens ($1F7A 33, f38009..38031). Pictures under Mesen2's PPU exact on 39,988 of 40,069 frames (other 80, colour math 1); the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route; the legacy engine's camera is not certified.",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 40.070 de 40.070 quadros da gravação Boomer Kuwanger do David (R6): a fase desde f714 com checkpoints 1 e 2, quatro mortes, um continue que a repete desde o checkpoint 0, o chefe e as telas pós-chefe ($1F7A 33, f38009..38031). Imagens com a PPU do Mesen2 exatas em 39.988 de 40.069 quadros (other 80, colour math 1); a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.boomer-kuwanger.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, varredura do S30 refeita em 27 gravações inteiras com WRAM igual; regra do L19 sem mudança, decisão 6 do coordenador), modo ROM-first: a lista da ROM do nível 7 (80:DB71, M4) tem 82 entradas, 40 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa gravação inteira com WRAM igual (vistas 40 de 40), com a borda do gatilho medida (80:DC36; primeiros nascimentos: top 28, right 11, left 1), e está ligada a um recurso do ledger (granular-v3 feature (L18) 27, S31 decision 2 11, census row verified in the ledger 2). Filhos (decisão 3, que substitui a regra de 48 px do S30): os objetos cujo criador rastreado é o objeto de um posicionamento ou seus descendentes; o dono de cada um é o recurso do criador, então todo filho está ligado. Filhos destes posicionamentos entre os seis ids rastreados: 0x43 x60; nascimentos dos seis ids neste nível por criador rastreado: 0x42 x4 por placement 10, 0x42 x4 por placement 13, 0x42 x4 por placement 16, 0x42 x4 por placement 18, 0x42 x4 por placement 21, 0x43 x60 por 3:0x42, 0x4A x36 por es:0x25, 0x16 x5 por placement 49, 0x16 x3 por placement 33, 0x16 x2 por placement 39, 0x16 x2 por placement 48, 0x16 x2 por placement 38, 0x16 x2 por placement 47. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas; nenhuma variante é nomeada para esta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; nas 27 gravações, 0 de 2751 nascimentos ficam fora da posição da ROM e 0 têm outro parâmetro. Execuções neste nível: boomer-kuwanger-auto_1_3016 (2,131 quadros), boomer-kuwanger_1_40070 (39,316 quadros), items-collection_2_15104 (8,868 quadros), spark-mandrill_1_27368 (122 quadros); WRAM igual em todos os quadros de cada uma. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card S31, S30's scan re-run over 27 WRAM-equal whole takes; L19's rule unchanged, coordinator decision 6), ROM-first mode: level 7's ROM list (80:DB71, M4) holds 82 entries, 40 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a WRAM-equal whole take (seen 40 of 40), with its trigger edge measured (80:DC36; first spawns: top 28, right 11, left 1), and is linked to a ledger feature (granular-v3 feature (L18) 27, S31 decision 2 11, census row verified in the ledger 2). Children (decision 3, replacing S30's 48 px rule): the objects whose traced creator is a placement's object or its descendants; each is owned by its creator's feature, so every child is linked. Children of these placements among the six traced ids: 0x43 x60; births of the six ids at this level by traced creator: 0x42 x4 by placement 10, 0x42 x4 by placement 13, 0x42 x4 by placement 16, 0x42 x4 by placement 18, 0x42 x4 by placement 21, 0x43 x60 by 3:0x42, 0x4A x36 by es:0x25, 0x16 x5 by placement 49, 0x16 x3 by placement 33, 0x16 x2 by placement 39, 0x16 x2 by placement 48, 0x16 x2 by placement 38, 0x16 x2 by placement 47. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries; no variant is named for this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; in the 27 takes 0 of 2751 spawns are off their ROM position and 0 carry another parameter. Runs at this level: boomer-kuwanger-auto_1_3016 (2,131 frames), boomer-kuwanger_1_40070 (39,316 frames), items-collection_2_15104 (8,868 frames), spark-mandrill_1_27368 (122 frames); WRAM equal on every frame of each. Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.boomer-kuwanger.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "2026-09-24 (card L7), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's Boomer Kuwanger recording (stage from f714; checkpoints 1 f9772 and 2 f17936; deaths at checkpoints 0, 2, 1 and 2 at f4970, f18708, f26709 and f33575; a game over and continue at f19080, the stage replayed from checkpoint 0 at f20596; the boss defeated at f36858; post-boss screens ($1F7A 33) f38009..38031) equal in WRAM on 40,070 of 40,070 frames (R6); pictures exact on 39,988 of 40,069 (the residuals belong to the visual step). Bound: the one recorded route; placements on screen are not counted (placements_coverage.py covers CP, SE and FM only).",
            "pt": "2026-09-24 (card L7), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação Boomer Kuwanger do David (fase desde f714; checkpoints 1 f9772 e 2 f17936; mortes nos checkpoints 0, 2, 1 e 2 em f4970, f18708, f26709 e f33575; game over e continue em f19080, a fase repetida desde o checkpoint 0 em f20596; chefe derrotado em f36858; telas pós-chefe ($1F7A 33) f38009..38031) igual em WRAM em 40.070 de 40.070 quadros (R6); imagens exatas em 39.988 de 40.069 (os resíduos são do passo visual). Limite: a única rota gravada; colocações na tela não contadas (placements_coverage.py cobre só CP, SE e FM)."
          }
        },
        {
          "id": "stage.boomer-kuwanger.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-09-26.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "tools/tests/test_stage_terrain_transitions.py"
          ],
          "note": {
            "en": "2026-09-26 (S35, W37): all 3 checkpoint retries restore X at the same checkpoint with exact pictures; all 2 ROM door placements open, lock the camera and close. Camera-region/section objects and stage exit are seen in WRAM-equal campaign takes, with exact pictures on the transition frames. Bank:address, take and frames in the S35 KB.",
            "pt": "2026-09-26 (S35, W37): os 3 retries restauram X no mesmo checkpoint com imagens exatas; as 2 portas da ROM abrem, travam a camera e fecham. Regioes de camera, gatilhos de secao e saida da fase vistos na campanha com WRAM igual e imagens exatas nos quadros das transicoes. Banco:endereco, take e quadros no KB S35."
          }
        }
      ]
    },
    {
      "id": "stage.sting-chameleon",
      "category": "stages",
      "title": {
        "pt": "Sting Chameleon",
        "en": "Sting Chameleon"
      },
      "steps": [
        {
          "id": "stage.sting-chameleon.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/spawn_anchor_sc_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V11-se-fm-stage-anchors.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L11, a partir do V11), modo ROM-first: todas as âncoras registradas de Sting Chameleon passam. A âncora registrada de início da fase (docs/stage-fidelity/anchors.json `spawn`, máx. 2.0 %) no quadro que a captura de tela mostra (f1858) difere em 0 pixels (0.00 %) com o LakeSnes e 0 (0.00 %) com o PPU do Mesen2; WRAM 1,858 de 1,858 até ela; ali a imagem ROM-first é igual ao replay do original com os dois PPUs (0 px). Limite: o início da fase, a única âncora registrada da fase; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L11, from V11), ROM-first mode: every registered anchor of Sting Chameleon passes. The registered stage-start anchor (docs/stage-fidelity/anchors.json `spawn`, max 2.0 %) at the frame the screenshot shows (f1858) differs in 0 pixels (0.00 %) under LakeSnes and 0 (0.00 %) under Mesen2's PPU; WRAM 1,858 of 1,858 up to it; there the ROM-first picture equals the original's replay under both PPUs (0 px). Bound: the stage start, the stage's only registered anchor; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.sting-chameleon.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "content/x1/stages/tiles/sting-chameleon_full.json",
            "docs/STATE.md",
            "knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json",
            "docs/goal/DEEP-INVESTIGATIONS.md",
            "docs/tasks/done/R118-declare-r115-impossible.md",
            "docs/tasks/done/R115-deep-rule-candidates.md"
          ],
          "note": {
            "pt": "2026-10-10 (L50, regra do LG6 s2): verificado; 24 de 24 partes: as já vistas como antes, e $38 declaradas impossíveis para a pontuação atual pelo David em 2026-10-10 (\"pode marcar como impossível para a nossa pontuação atual\"; knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, itens de docs/goal/DEEP-INVESTIGATIONS.md). Se alguém achar um jeito de fazer acontecer, a parte volta a ser \"fazível\" e precisa de uma testemunha.",
            "en": "2026-10-10 (L50, LG6 s2 rule): verified; 24 of 24 parts: those already seen as before, and $38 declared impossible for the current score by David on 2026-10-10 (knowledge_base/mmx1/rom/deep_items_declared_impossible_2026-10-10_r118.json, items of docs/goal/DEEP-INVESTIGATIONS.md). If someone finds a way to make it happen, the part becomes \"feasible\" again and needs a witness."
          }
        },
        {
          "id": "stage.sting-chameleon.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 25,606 of 25,606 frames of David's sting-chameleon take (R7): the stage select, the intro ($1F7A 15, f217..231), the whole stage (level 2 f232..24128; checkpoints 1 and 2 at f15178 and f19265; a death at checkpoint 0 at f3951), the boss (finder 3 id 0x0A, f19644..23543), Chameleon Sting at f23544 and the post-boss screens ($1F7A 28, f24129..24151). The flooded variant (take launch-octopus-and-sting-flooded, level 2 f28570..38342, the variant bit set on 9,773 of 9,773 frames) is equal on every frame too. Pictures under Mesen2's PPU exact on 25,572 of 25,605 and 9,773 of 9,773 frames; the 2026-09-24 methodology gives camera to the state gate. Bound: the recorded routes; the legacy engine's camera is not certified.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 25.606 de 25.606 quadros da gravação sting-chameleon do David (R7): a seleção de fases, a introdução ($1F7A 15, f217..231), a fase inteira (nível 2 f232..24128; checkpoints 1 e 2 em f15178 e f19265; uma morte no checkpoint 0 em f3951), o chefe (finder 3 id 0x0A, f19644..23543), o Chameleon Sting em f23544 e as telas pós-chefe ($1F7A 28, f24129..24151). A variante inundada (gravação launch-octopus-and-sting-flooded, nível 2 f28570..38342, bit da variante ligado em 9.773 de 9.773 quadros) também é igual em todo quadro. Imagens com a PPU do Mesen2 exatas em 25.572 de 25.605 e 9.773 de 9.773 quadros; a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: as rotas gravadas; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.sting-chameleon.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "tools/tests/test_stage_population_visual.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "knowledge_base/mmx1/rom/take_credits_2026-10-01.json"
          ],
          "note": {
            "pt": "2026-10-01: variante inundada (bit ligado) 36 de 36: as entradas 47, 51-57, 59, 61-63, 66, 67, 74 nasceram na posição da ROM na gravação sc-a (WRAM 32607/32607, imagens exatas). Bit limpo 36 de 36 (G3).",
            "en": "2026-10-01: flooded variant (bit set) 36 of 36: entries 47, 51-57, 59, 61-63, 66, 67, 74 spawned at the ROM position in David's sc-a take (WRAM 32607/32607, pictures exact). Bit clear 36 of 36 (G3)."
          }
        },
        {
          "id": "stage.sting-chameleon.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's sting-chameleon take (stage select f125, intro $1F7A 15 f217..231, stage f232..24128: checkpoints 1 f15178 and 2 f19265, a death at checkpoint 0 at f3951 (lives 2->1 at f4142), the boss 0x0A f19644..23543, Chameleon Sting at f23544, post-boss screens ($1F7A 28) f24129..24151) equal in WRAM on 25,606 of 25,606 frames (R7); the flooded variant's route (f28570..38342 of the launch-octopus take: a death at f30360, the heart at f32454) is equal on every frame too. Pictures exact on 25,572 of 25,605 (the residuals belong to the visual step). Bound: the recorded routes; placements on screen are not counted.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação sting-chameleon do David (seleção de fases f125, introdução $1F7A 15 f217..231, fase f232..24128: checkpoints 1 f15178 e 2 f19265, uma morte no checkpoint 0 em f3951 (vidas 2->1 em f4142), o chefe 0x0A f19644..23543, Chameleon Sting em f23544, telas pós-chefe ($1F7A 28) f24129..24151) igual em WRAM em 25.606 de 25.606 quadros (R7); a rota da variante inundada (f28570..38342 da gravação launch-octopus: uma morte em f30360, o heart em f32454) também é igual em todo quadro. Imagens exatas em 25.572 de 25.605 (os resíduos são do passo visual). Limite: as rotas gravadas; colocações na tela não contadas."
          }
        },
        {
          "id": "stage.sting-chameleon.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-10-01.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "tools/tests/test_stage_terrain_transitions.py"
          ],
          "note": {
            "en": "2026-10-01 (S44): all 3 checkpoint retries restore X at the same checkpoint in exact WRAM/picture-gated takes. Camera, section, door and exit parts are seen or not applicable in the dated retry KB. Only this complete transition step is credited.",
            "pt": "2026-10-01 (S44): os 3 retries restauram X no mesmo checkpoint em takes com WRAM e imagens exatas. Camera, secao, portas e saida estao vistas ou nao se aplicam no KB datado. Apenas este passo completo de transicao pontua."
          }
        }
      ]
    },
    {
      "id": "stage.sigma-1",
      "category": "stages",
      "title": {
        "pt": "Sigma Palace 1",
        "en": "Sigma Palace 1"
      },
      "steps": [
        {
          "id": "stage.sigma-1.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_visual_2026-09-26.json",
            "tools/tests/test_stage_population_visual.py",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-09-26.json",
            "knowledge_base/mmx1/rom/section_block_maps_2026-09-26.json",
            "docs/tasks/done/V12-reference-pictures-same-clock.md"
          ],
          "note": {
            "pt": "2026-09-26 (card G3, regra do W37), modo ROM-first: cada seção da fase (nível 9 em $1F7A, checkpoint $1F81; os checkpoints da ROM [0, 1, 2, 4]: início da fase 80:995D, objetos de checkpoint 81:FF5E, S35) está numa gravação com WRAM igual, sigma1-zero-arm_2_35588 (WRAM 35587 of 35587), e a imagem ROM-first de cada quadro é igual à do original (referência buffer V12 no mesmo relógio, PPU do Mesen2: 35586 of 35586). Seções: checkpoint 0 f94-7612; checkpoint 1 f7613-14252; checkpoint 2 f14253-22129; checkpoint 4 f22130-35588. A carga do mapa 80:BAC1 não tem variante 80:BC5C neste nível. A fase não registra anchor em docs/stage-fidelity/anchors.json. Limite: a rota gravada; as células do mapa decodificado que nenhum quadro da fase mostra (1,592 de 7,159 células não vazias da camada principal; câmera x 0-5632, y 0-2304) não são afirmadas; nenhum KB cita os limites de câmera da ROM. A imagem do motor legado não é certificada.",
            "en": "2026-09-26 (card G3, W37's rule), ROM-first mode: every section of the stage (level 9 at $1F7A, checkpoint $1F81; the ROM's checkpoints [0, 1, 2, 4]: stage start 80:995D, checkpoint objects 81:FF5E, S35) is in one WRAM-equal take, sigma1-zero-arm_2_35588 (WRAM 35587 of 35587), and every frame's ROM-first picture equals the original's (V12 same-clock buffer reference, Mesen2's PPU: 35586 of 35586). Sections: checkpoint 0 f94-7612; checkpoint 1 f7613-14252; checkpoint 2 f14253-22129; checkpoint 4 f22130-35588. Map load 80:BAC1 has no 80:BC5C load variant for this level. The stage registers no anchor in docs/stage-fidelity/anchors.json. Bound: the recorded route; the decoded map's cells that no stage frame shows (1,592 of 7,159 non-empty main-layer cells; camera x 0-5632, y 0-2304) are not claimed; no KB cites the ROM's camera limits. The legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.sigma-1.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "content/x1/stages/tiles/sigma-1_full.json",
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-09-27.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "tools/tests/test_stage_terrain_coverage.py",
            "docs/tasks/done/S38-stage-terrain-rule-and-gaps.md",
            "docs/tasks/done/S42-terrain-credit-round-2.md"
          ],
          "note": {
            "pt": "2026-09-28 S42: 9/9 classes enumeradas vistas. As sete classes S38 permanecem; $36: s38-sigma-1-class-36-r2-hunt_5462_5857, hook f5724, WRAM/frame gate 396/396; $3D: s38-sigma-1-class-3d-r3-hunt_21722_22250, hook f22117, 529/529. Ambos os intakes verificados. Carga 80:BAC1, tabela 95:F48A, lookup 84:910D. Escopo S38: carga/variantes/listas/reescritas observadas. Dominios de entrada 84:9122/84:913D, alcancabilidade 84:80C2, integracao dos escritores e motor legado continuam fora deste passo (KB runtime_domain_scope).",
            "en": "2026-09-28 S42: 9/9 enumerated classes seen. The seven S38 classes remain; $36: s38-sigma-1-class-36-r2-hunt_5462_5857, hook f5724, WRAM/frame gate 396/396; $3D: s38-sigma-1-class-3d-r3-hunt_21722_22250, hook f22117, 529/529. Both intakes verified. Load 80:BAC1, table 95:F48A, lookup 84:910D. S38 scope: enumerated load/variant/list/observed-rewrite classes. Input domains 84:9122/84:913D, offset-list reachability 84:80C2, writer integration and legacy engine wiring remain outside this step (KB runtime_domain_scope)."
          }
        },
        {
          "id": "stage.sigma-1.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 35,587 of 35,587 frames of David's sigma1-zero-arm take (R7): the stage entered from the stage select at f94 and played to its end (level 9 f94..35588; checkpoints 1, 2 and 4 at f7613, f14253 and f22130; the 0x66 encounter f6840..14253 with $1F0C at f12332; Zero's arm at f14236; the 0x05 encounter defeated at f20247; the last boss 0x63 f22347..34561, X defeated at f23709 and the encounter restored at f24511, its defeat at f34010); take sigma2, equal on every frame, leaves level 9 at f114. Pictures under Mesen2's PPU exact on 35,541 of 35,586 frames; the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route (Zero's branch); the legacy engine's camera is not certified.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 35.587 de 35.587 quadros da gravação sigma1-zero-arm do David (R7): a fase, entrada pela seleção em f94 e jogada até o fim (nível 9 f94..35588; checkpoints 1, 2 e 4 em f7613, f14253 e f22130; o encontro 0x66 f6840..14253 com $1F0C em f12332; o braço do Zero em f14236; o encontro 0x05 derrotado em f20247; o último chefe 0x63 f22347..34561, o X derrotado em f23709 e o encontro restaurado em f24511, sua derrota em f34010); a gravação sigma2, igual em todo quadro, sai do nível 9 em f114. Imagens com a PPU do Mesen2 exatas em 35.541 de 35.586 quadros; a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada (ramo do Zero); a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.sigma-1.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, varredura do S30 refeita em 27 gravações inteiras com WRAM igual; regra do L19 sem mudança, decisão 6 do coordenador), modo ROM-first: a lista da ROM do nível 9 (80:DB71, M4) tem 117 entradas, 69 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa gravação inteira com WRAM igual (vistas 69 de 69), com a borda do gatilho medida (80:DC36; primeiros nascimentos: right 55, top 11, bottom 2, left 1), e está ligada a um recurso do ledger (granular-v3 feature (L18) 41, E35 family 16, census row verified in the ledger 5, S31 decision 2 4, B2 owner or part 3). Filhos (decisão 3, que substitui a regra de 48 px do S30): os objetos cujo criador rastreado é o objeto de um posicionamento ou seus descendentes; o dono de cada um é o recurso do criador, então todo filho está ligado. Filhos destes posicionamentos entre os seis ids rastreados: 0x3C x7, 0x43 x14; nascimentos dos seis ids neste nível por criador rastreado: 0x3C x10 por 3:0x66, 0x3C x4 por 3:0x67, 0x3C x3 por 3:0x33, 0x42 x2 por placement 57, 0x42 x2 por placement 61, 0x42 x2 por placement 64, 0x42 x2 por placement 69, 0x43 x14 por 3:0x42, 0x4A x12 por es:0x25. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas; nenhuma variante é nomeada para esta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; nas 27 gravações, 0 de 2751 nascimentos ficam fora da posição da ROM e 0 têm outro parâmetro. Execuções neste nível: armored-armadillo_1_15055 (762 quadros), flame-mammoth-arm-capsule_1_13555 (230 quadros), flame-mammoth_2_30151 (552 quadros), sigma1-zero-arm_2_35588 (35,495 quadros), sigma2_2_41296 (112 quadros), vile-zero-with-arm_1_18668 (16,274 quadros); WRAM igual em todos os quadros de cada uma. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card S31, S30's scan re-run over 27 WRAM-equal whole takes; L19's rule unchanged, coordinator decision 6), ROM-first mode: level 9's ROM list (80:DB71, M4) holds 117 entries, 69 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a WRAM-equal whole take (seen 69 of 69), with its trigger edge measured (80:DC36; first spawns: right 55, top 11, bottom 2, left 1), and is linked to a ledger feature (granular-v3 feature (L18) 41, E35 family 16, census row verified in the ledger 5, S31 decision 2 4, B2 owner or part 3). Children (decision 3, replacing S30's 48 px rule): the objects whose traced creator is a placement's object or its descendants; each is owned by its creator's feature, so every child is linked. Children of these placements among the six traced ids: 0x3C x7, 0x43 x14; births of the six ids at this level by traced creator: 0x3C x10 by 3:0x66, 0x3C x4 by 3:0x67, 0x3C x3 by 3:0x33, 0x42 x2 by placement 57, 0x42 x2 by placement 61, 0x42 x2 by placement 64, 0x42 x2 by placement 69, 0x43 x14 by 3:0x42, 0x4A x12 by es:0x25. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries; no variant is named for this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; in the 27 takes 0 of 2751 spawns are off their ROM position and 0 carry another parameter. Runs at this level: armored-armadillo_1_15055 (762 frames), flame-mammoth-arm-capsule_1_13555 (230 frames), flame-mammoth_2_30151 (552 frames), sigma1-zero-arm_2_35588 (35,495 frames), sigma2_2_41296 (112 frames), vile-zero-with-arm_1_18668 (16,274 frames); WRAM equal on every frame of each. Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.sigma-1.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's sigma1-zero-arm take (level 9 from f94: checkpoints 1 f7613, 2 f14253 and 4 f22130; encounters 0x66 ($1F0C f12332) and 0x05 (f20247); Zero's arm at f14236; the last boss 0x63 from f22347, X defeated at f23709 (lives 3->2), the encounter restored at f24511 and defeated at f34010, its slot freed after f34561; level 9 to the take's end f35588, then take sigma2 enters level 10 at f114) equal in WRAM on every frame (35,587 of 35,587; sigma2 41,295 of 41,295; R7); pictures exact on 35,541 of 35,586 (the residuals belong to the visual step). Bound: the one recorded route (Zero's branch); placements on screen are not counted; the encounters' identities and credit belong to the boss steps.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação sigma1-zero-arm do David (nível 9 desde f94: checkpoints 1 f7613, 2 f14253 e 4 f22130; encontros 0x66 ($1F0C f12332) e 0x05 (f20247); o braço do Zero em f14236; o último chefe 0x63 desde f22347, o X derrotado em f23709 (vidas 3->2), o encontro restaurado em f24511 e derrotado em f34010, slot livre após f34561; nível 9 até o fim da gravação f35588, e a gravação sigma2 entra no nível 10 em f114) igual em WRAM em todo quadro (35.587 de 35.587; sigma2 41.295 de 41.295; R7); imagens exatas em 35.541 de 35.586 (os resíduos são do passo visual). Limite: a única rota gravada (ramo do Zero); colocações na tela não contadas; identidade e crédito dos encontros são dos passos de chefe."
          }
        },
        {
          "id": "stage.sigma-1.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-10-03_k21.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S50-sigma1-retries-on-xeon.md"
          ],
          "note": {
            "pt": "2026-10-03: os quatro checkpoints, morte e retorno, portas, camera e saida conferidos nas rotas reais, capturados no XEON (gates identicos ao desktop, H18). Retries cp0 e cp1 por ramos novos, cp2 e cp4 rechecados, tudo a tolerancia zero; tomada inteira com a prova de campo: 35586 de 35586 imagens, 35587 de 35587 estados. Regra S35 preservada.",
            "en": "2026-10-03: all four checkpoints, death and retry, doors, camera and exit checked on actual routes, captured on the XEON (gates byte-identical to the desktop, H18). Retries cp0 and cp1 by new branches, cp2 and cp4 rechecked, all at zero tolerance; whole take with the field proof: 35586 of 35586 pictures, 35587 of 35587 states. S35 rule preserved."
          }
        }
      ]
    },
    {
      "id": "stage.sigma-2",
      "category": "stages",
      "title": {
        "pt": "Sigma Palace 2",
        "en": "Sigma Palace 2"
      },
      "steps": [
        {
          "id": "stage.sigma-2.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/sigma_bridge_anchors_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V14-sigma-bridge-anchors.md",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "docs/evidence/2026-07-08-ms5-sigma-source-plane-bridge-probe/stills/sigma-2/source.png"
          ],
          "note": {
            "pt": "2026-09-25 (card L17, a partir do V14), modo ROM-first: a única âncora registrada da fase Sigma 2 passa. `source_plane_bridge_best_frame` (docs/stage-fidelity/anchors.json; referência: a imagem registrada, o quadro 78724 do filme oficial BizHawk V1.0) no quadro f316 do take sigma2 do David (R7), o primeiro cuja câmera (0, 1536) e X (128, 1536) na WRAM ($1E4D/$1E50, $0BAD/$0BB0) são os da entrada e cuja imagem do mesmo relógio do V12 é igual à registrada fora das ignore_rects: com as suas ignore_rects e máx. 0.0 %, a imagem ROM-first (PPU do Mesen2) difere em 0 pixels (0.00 %); WRAM 316 de 316 até ela; ali a imagem ROM-first é igual à do take (0 px). A fase não registra outra âncora nem âncoras de filme. Limite: a vista da âncora no take gravado; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L17, from V14), ROM-first mode: the one registered anchor of Sigma stage 2 passes. `source_plane_bridge_best_frame` (docs/stage-fidelity/anchors.json; reference: the registered still, the official BizHawk V1.0 movie's frame 78724) at f316 of David's sigma2 take (R7), the first frame whose camera (0, 1536) and X (128, 1536) from WRAM ($1E4D/$1E50, $0BAD/$0BB0) are the entry's and whose V12 same-clock picture equals the still outside the ignore_rects: under its own ignore_rects and max 0.0 %, the ROM-first picture (Mesen2's PPU) differs in 0 pixels (0.00 %); WRAM 316 of 316 up to it; there the ROM-first picture equals the take's (0 px). The stage registers no other anchor and no movie anchors. Bound: the anchor's view on the recorded take; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.sigma-2.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-09-27.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S38-stage-terrain-rule-and-gaps.md",
            "docs/tasks/done/S41-terrain-target-retarget.md",
            "docs/tasks/done/S42-terrain-credit-round-2.md"
          ],
          "note": {
            "pt": "2026-09-28: todas as 6 classes de colisao enumeradas de sigma-2 vistas pela sonda do X (84:910D) em tomadas verificadas. Regra do S38.",
            "en": "2026-09-28: all 6 enumerated collision classes of sigma-2 seen by X's probe (84:910D) in verified takes. S38's rule."
          }
        },
        {
          "id": "stage.sigma-2.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 41,295 of 41,295 frames of David's sigma2 take (R7): the stage from f114 (level 10 f114..41296; checkpoints 1, 2 and 3 at f7518, f13754 and f15504; encounters 0x02 and 0x17/0x52 defeated at f6891 and f13229; the last encounter (0x5D..0x60) from f15930 with X defeated at f20154 and f26262, a game over and continue at f26580, the stage replayed from checkpoint 0 at f27061 with both encounters again (f30104, f35205) and the last one f37659..40816); take sigma3, equal on every frame, leaves level 10 at f100. Pictures under Mesen2's PPU exact on 41,293 of 41,294 frames; the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route; the legacy engine's camera is not certified.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 41.295 de 41.295 quadros da gravação sigma2 do David (R7): a fase desde f114 (nível 10 f114..41296; checkpoints 1, 2 e 3 em f7518, f13754 e f15504; encontros 0x02 e 0x17/0x52 derrotados em f6891 e f13229; o último encontro (0x5D..0x60) desde f15930 com o X derrotado em f20154 e f26262, game over e continue em f26580, a fase repetida desde o checkpoint 0 em f27061 com os dois encontros de novo (f30104, f35205) e o último f37659..40816); a gravação sigma3, igual em todo quadro, sai do nível 10 em f100. Imagens com a PPU do Mesen2 exatas em 41.293 de 41.294 quadros; a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.sigma-2.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, varredura do S30 refeita em 27 gravações inteiras com WRAM igual; regra do L19 sem mudança, decisão 6 do coordenador), modo ROM-first: a lista da ROM do nível 10 (80:DB71, M4) tem 77 entradas, 39 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa gravação inteira com WRAM igual (vistas 39 de 39), com a borda do gatilho medida (80:DC36; primeiros nascimentos: right 20, top 18, bottom 1), e está ligada a um recurso do ledger (E35 family 19, granular-v3 feature (L18) 15, S31 decision 2 3, census row verified in the ledger 1, B2 owner or part 1). Filhos (decisão 3, que substitui a regra de 48 px do S30): os objetos cujo criador rastreado é o objeto de um posicionamento ou seus descendentes; o dono de cada um é o recurso do criador, então todo filho está ligado. Filhos destes posicionamentos entre os seis ids rastreados: nenhum; nascimentos dos seis ids neste nível por criador rastreado: 0x16 x2 por placement 44, 0x16 x2 por placement 43, 0x16 x2 por placement 41. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas; nenhuma variante é nomeada para esta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; nas 27 gravações, 0 de 2751 nascimentos ficam fora da posição da ROM e 0 têm outro parâmetro. Execuções neste nível: sigma2_2_41296 (41,183 quadros), sigma3_2_26312 (98 quadros); WRAM igual em todos os quadros de cada uma. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card S31, S30's scan re-run over 27 WRAM-equal whole takes; L19's rule unchanged, coordinator decision 6), ROM-first mode: level 10's ROM list (80:DB71, M4) holds 77 entries, 39 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a WRAM-equal whole take (seen 39 of 39), with its trigger edge measured (80:DC36; first spawns: right 20, top 18, bottom 1), and is linked to a ledger feature (E35 family 19, granular-v3 feature (L18) 15, S31 decision 2 3, census row verified in the ledger 1, B2 owner or part 1). Children (decision 3, replacing S30's 48 px rule): the objects whose traced creator is a placement's object or its descendants; each is owned by its creator's feature, so every child is linked. Children of these placements among the six traced ids: none; births of the six ids at this level by traced creator: 0x16 x2 by placement 44, 0x16 x2 by placement 43, 0x16 x2 by placement 41. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries; no variant is named for this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; in the 27 takes 0 of 2751 spawns are off their ROM position and 0 carry another parameter. Runs at this level: sigma2_2_41296 (41,183 frames), sigma3_2_26312 (98 frames); WRAM equal on every frame of each. Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.sigma-2.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's sigma2 take (level 10 from f114: checkpoints 1 f7518, 2 f13754 and 3 f15504; a death at f882; encounters 0x02 (f6891) and 0x17/0x52 (f13229); the last encounter from f15930, X defeated at f20154 (lives 1->0) and f26262 (game over, continue with 2 lives at f26580); the stage replayed from checkpoint 0 (f27061): 0x02 again (f30104), 0x17/0x52 again (f35205), the last encounter f37659..40816; then take sigma3 enters level 11 at f100) equal in WRAM on every frame (41,295 of 41,295; sigma3 26,311 of 26,311; R7); pictures exact on 41,293 of 41,294. Bound: the one recorded route; placements on screen are not counted; the encounters' identities and credit belong to the boss steps.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação sigma2 do David (nível 10 desde f114: checkpoints 1 f7518, 2 f13754 e 3 f15504; uma morte em f882; encontros 0x02 (f6891) e 0x17/0x52 (f13229); o último encontro desde f15930, o X derrotado em f20154 (vidas 1->0) e f26262 (game over, continue com 2 vidas em f26580); a fase repetida desde o checkpoint 0 (f27061): 0x02 de novo (f30104), 0x17/0x52 de novo (f35205), o último encontro f37659..40816; depois a gravação sigma3 entra no nível 11 em f100) igual em WRAM em todo quadro (41.295 de 41.295; sigma3 26.311 de 26.311; R7); imagens exatas em 41.293 de 41.294. Limite: a única rota gravada; colocações na tela não contadas; identidade e crédito dos encontros são dos passos de chefe."
          }
        },
        {
          "id": "stage.sigma-2.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retry_acceptance_sigma2_2026-10-02.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S35-checkpoint-retries.md"
          ],
          "note": {
            "pt": "2026-10-02: os quatro checkpoints, morte e retorno, tres portas, camera e saida foram conferidos nas rotas reais por programas novos. Todos os quadros exigidos pela regra S35 passaram a tolerancia zero e a memoria foi igual durante os percursos completos. Os limites e as janelas originais estao no artefato de aceitacao.",
            "en": "2026-10-02: all four checkpoints, death and retry, three doors, camera and exit were checked on actual routes using fresh programs. Every picture required by the S35 rule passed at zero tolerance and memory matched throughout the complete runs. Original windows and limits are retained in the acceptance artifact."
          }
        }
      ]
    },
    {
      "id": "stage.sigma-3",
      "category": "stages",
      "title": {
        "pt": "Sigma Palace 3",
        "en": "Sigma Palace 3"
      },
      "steps": [
        {
          "id": "stage.sigma-3.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/sigma_bridge_anchors_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V14-sigma-bridge-anchors.md",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "docs/evidence/2026-07-08-ms5-sigma-source-plane-bridge-probe/stills/sigma-3/source.png"
          ],
          "note": {
            "pt": "2026-09-25 (card L17, a partir do V14), modo ROM-first: a única âncora registrada da fase Sigma 3 passa. `source_plane_bridge_best_frame` (docs/stage-fidelity/anchors.json; referência: a imagem registrada, o quadro 86880 do filme oficial BizHawk V1.0) no quadro f277 do take sigma3 do David (R7), o primeiro cuja câmera (0, 768) e X (128, 768) na WRAM ($1E4D/$1E50, $0BAD/$0BB0) são os da entrada e cuja imagem do mesmo relógio do V12 é igual à registrada fora das ignore_rects: com as suas ignore_rects e máx. 0.0 %, a imagem ROM-first (PPU do Mesen2) difere em 0 pixels (0.00 %); WRAM 277 de 277 até ela; ali a imagem ROM-first é igual à do take (0 px). A fase não registra outra âncora nem âncoras de filme. Limite: a vista da âncora no take gravado; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L17, from V14), ROM-first mode: the one registered anchor of Sigma stage 3 passes. `source_plane_bridge_best_frame` (docs/stage-fidelity/anchors.json; reference: the registered still, the official BizHawk V1.0 movie's frame 86880) at f277 of David's sigma3 take (R7), the first frame whose camera (0, 768) and X (128, 768) from WRAM ($1E4D/$1E50, $0BAD/$0BB0) are the entry's and whose V12 same-clock picture equals the still outside the ignore_rects: under its own ignore_rects and max 0.0 %, the ROM-first picture (Mesen2's PPU) differs in 0 pixels (0.00 %); WRAM 277 of 277 up to it; there the ROM-first picture equals the take's (0 px). The stage registers no other anchor and no movie anchors. Bound: the anchor's view on the recorded take; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.sigma-3.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-10-03_s54.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "docs/tasks/done/S54-spike-floor-dispatch-rule.md"
          ],
          "note": {
            "pt": "2026-10-03: todas as 9 classes de colisao enumeradas de sigma-3 vistas pela sonda do X (84:910D) em tomadas verificadas; o espinho $3F pela leitura de chao do X com o caminho de contato 84:98D8 no mesmo quadro (S54, tolerancia 0).",
            "en": "2026-10-03: all 9 enumerated collision classes of sigma-3 seen by X's probe (84:910D) in verified takes; spike $3F by X's floor read with the contact path 84:98D8 in the same frame (S54, tolerance 0)."
          }
        },
        {
          "id": "stage.sigma-3.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, on 26,311 of 26,311 frames of David's sigma3 take (R7): the stage from f100 (level 11 f100..26312; checkpoints 1 to 5 at f3377, f6818, f11045, f14906 and f18533; encounters 0x14, 0x07 and 0x0C/0x0E defeated at f2755, f14284 and f17910; the last encounter (0x62, 0x61) from f18909 with X defeated at f20068 and the encounter restored at f20969, its slots to f25086); take sigma4, equal on every frame, leaves level 11 at f117. Pictures under Mesen2's PPU exact on 26,279 of 26,310 frames; the 2026-09-24 methodology gives camera to the state gate. Bound: the one recorded route; the legacy engine's camera is not certified.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, em 26.311 de 26.311 quadros da gravação sigma3 do David (R7): a fase desde f100 (nível 11 f100..26312; checkpoints 1 a 5 em f3377, f6818, f11045, f14906 e f18533; encontros 0x14, 0x07 e 0x0C/0x0E derrotados em f2755, f14284 e f17910; o último encontro (0x62, 0x61) desde f18909 com o X derrotado em f20068 e o encontro restaurado em f20969, slots até f25086); a gravação sigma4, igual em todo quadro, sai do nível 11 em f117. Imagens com a PPU do Mesen2 exatas em 26.279 de 26.310 quadros; a metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: a única rota gravada; a câmera do motor legado não é certificada."
          }
        },
        {
          "id": "stage.sigma-3.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "tools/tests/test_stage_population_owners.py",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card S31, varredura do S30 refeita em 27 gravações inteiras com WRAM igual; regra do L19 sem mudança, decisão 6 do coordenador), modo ROM-first: a lista da ROM do nível 11 (80:DB71, M4) tem 89 entradas, 36 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa gravação inteira com WRAM igual (vistas 36 de 36), com a borda do gatilho medida (80:DC36; primeiros nascimentos: right 22, top 9, bottom 5), e está ligada a um recurso do ledger (granular-v3 feature (L18) 22, census row verified in the ledger 5, E35 family 4, S31 decision 2 4, B2 owner or part 1). Filhos (decisão 3, que substitui a regra de 48 px do S30): os objetos cujo criador rastreado é o objeto de um posicionamento ou seus descendentes; o dono de cada um é o recurso do criador, então todo filho está ligado. Filhos destes posicionamentos entre os seis ids rastreados: 0x43 x8; nascimentos dos seis ids neste nível por criador rastreado: 0x42 x1 por placement 62, 0x42 x1 por placement 69, 0x42 x1 por placement 71, 0x42 x1 por placement 76, 0x43 x8 por 3:0x42, 0x4A x1 por es:0x25. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas; nenhuma variante é nomeada para esta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; nas 27 gravações, 0 de 2751 nascimentos ficam fora da posição da ROM e 0 têm outro parâmetro. Execuções neste nível: sigma3_2_26312 (26,213 quadros), sigma4-final-not-beaten_2_37016 (115 quadros); WRAM igual em todos os quadros de cada uma. Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-26 (card S31, S30's scan re-run over 27 WRAM-equal whole takes; L19's rule unchanged, coordinator decision 6), ROM-first mode: level 11's ROM list (80:DB71, M4) holds 89 entries, 36 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a WRAM-equal whole take (seen 36 of 36), with its trigger edge measured (80:DC36; first spawns: right 22, top 9, bottom 5), and is linked to a ledger feature (granular-v3 feature (L18) 22, census row verified in the ledger 5, E35 family 4, S31 decision 2 4, B2 owner or part 1). Children (decision 3, replacing S30's 48 px rule): the objects whose traced creator is a placement's object or its descendants; each is owned by its creator's feature, so every child is linked. Children of these placements among the six traced ids: 0x43 x8; births of the six ids at this level by traced creator: 0x42 x1 by placement 62, 0x42 x1 by placement 69, 0x42 x1 by placement 71, 0x42 x1 by placement 76, 0x43 x8 by 3:0x42, 0x4A x1 by es:0x25. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries; no variant is named for this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; in the 27 takes 0 of 2751 spawns are off their ROM position and 0 carry another parameter. Runs at this level: sigma3_2_26312 (26,213 frames), sigma4-final-not-beaten_2_37016 (115 frames); WRAM equal on every frame of each. Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.sigma-3.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode (megaman-x.exe --rom-first): entry to exit of David's sigma3 take (level 11 from f100: checkpoints 1 to 5 at f3377, f6818, f11045, f14906 and f18533; encounters 0x14 (f2755), 0x07 (f14284) and 0x0C/0x0E (f17910); the last encounter from f18909, X defeated at f20068 (lives 2->1), restored at f20969, its slots to f25086; then take sigma4 enters level 12 at f117) equal in WRAM on every frame (26,311 of 26,311; sigma4 37,015 of 37,015; R7); pictures exact on 26,279 of 26,310. Bound: the one recorded route; placements on screen are not counted; the encounters' identities and credit belong to the boss steps.",
            "pt": "2026-09-25 (card L8), modo ROM-first (megaman-x.exe --rom-first): entrada à saída da gravação sigma3 do David (nível 11 desde f100: checkpoints 1 a 5 em f3377, f6818, f11045, f14906 e f18533; encontros 0x14 (f2755), 0x07 (f14284) e 0x0C/0x0E (f17910); o último encontro desde f18909, o X derrotado em f20068 (vidas 2->1), restaurado em f20969, slots até f25086; depois a gravação sigma4 entra no nível 12 em f117) igual em WRAM em todo quadro (26.311 de 26.311; sigma4 37.015 de 37.015; R7); imagens exatas em 26.279 de 26.310. Limite: a única rota gravada; colocações na tela não contadas; identidade e crédito dos encontros são dos passos de chefe."
          }
        },
        {
          "id": "stage.sigma-3.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-10-03_s47.json",
            "tools/oracle/post/stage_terrain_transitions.py",
            "docs/tasks/done/S47-sigma3-retry-intakes.md"
          ],
          "note": {
            "pt": "2026-10-03: os seis checkpoints, morte e retorno, portas, camera e saida foram conferidos nas rotas reais. Retries cp0 a cp4 passaram a tolerancia zero (cp1 por ramo novo, morte por inimigo); a tomada inteira sigma3 tambem a tolerancia zero: 26310 of 26310 pictures, 26311 of 26311 states. Regra S35 preservada.",
            "en": "2026-10-03: all six checkpoints, death and retry, doors, camera and exit were checked on actual routes. Retries cp0 to cp4 passed at zero tolerance (cp1 by a new branch, death by an enemy); the whole sigma3 take also at zero tolerance: 26310 of 26310 pictures, 26311 of 26311 states. S35 rule preserved."
          }
        }
      ]
    },
    {
      "id": "stage.sigma-4",
      "category": "stages",
      "title": {
        "pt": "Sigma Palace 4",
        "en": "Sigma Palace 4"
      },
      "steps": [
        {
          "id": "stage.sigma-4.visual",
          "category": "stages",
          "title": {
            "pt": "Geometria e visual da fase inteira",
            "en": "Full-stage geometry and visuals"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Gate pixel aprovado em todos os anchors da fase inteira, usando geometria decodificada real; sem screenshots no lugar do cenário.",
            "en": "Pixel gate passes every full-stage anchor using actual decoded geometry; no screenshot substitutes for scenery."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/sigma_bridge_anchors_2026-09-25.json",
            "docs/stage-fidelity/anchors.json",
            "tools/rom/spawn_anchor_rom_first.py",
            "tools/tests/test_rom_spawn_anchor.py",
            "docs/tasks/done/V14-sigma-bridge-anchors.md",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "docs/evidence/2026-07-08-ms5-sigma-source-plane-bridge-probe/stills/sigma-4/source.png"
          ],
          "note": {
            "pt": "2026-09-25 (card L17, a partir do V14), modo ROM-first: a única âncora registrada da fase Sigma 4 passa. `source_plane_bridge_best_frame` (docs/stage-fidelity/anchors.json; referência: a imagem registrada, o quadro 99112 do filme oficial BizHawk V1.0) no quadro f440 do take sigma4-final-not-beaten do David (R7), o primeiro cuja câmera (0, 1536) e X (128, 1648) na WRAM ($1E4D/$1E50, $0BAD/$0BB0) são os da entrada e cuja imagem do mesmo relógio do V12 é igual à registrada fora das ignore_rects: com as suas ignore_rects e máx. 0.0 %, a imagem ROM-first (PPU do Mesen2) difere em 0 pixels (0.00 %); WRAM 440 de 440 até ela; ali a imagem ROM-first é igual à do take (0 px). A fase não registra outra âncora nem âncoras de filme. Limite: a vista da âncora no take gravado; a imagem do motor legado não é certificada.",
            "en": "2026-09-25 (card L17, from V14), ROM-first mode: the one registered anchor of Sigma stage 4 passes. `source_plane_bridge_best_frame` (docs/stage-fidelity/anchors.json; reference: the registered still, the official BizHawk V1.0 movie's frame 99112) at f440 of David's sigma4-final-not-beaten take (R7), the first frame whose camera (0, 1536) and X (128, 1648) from WRAM ($1E4D/$1E50, $0BAD/$0BB0) are the entry's and whose V12 same-clock picture equals the still outside the ignore_rects: under its own ignore_rects and max 0.0 %, the ROM-first picture (Mesen2's PPU) differs in 0 pixels (0.00 %); WRAM 440 of 440 up to it; there the ROM-first picture equals the take's (0 px). The stage registers no other anchor and no movie anchors. Bound: the anchor's view on the recorded take; the legacy engine's picture is not certified."
          }
        },
        {
          "id": "stage.sigma-4.terrain",
          "category": "stages",
          "title": {
            "pt": "Colisões e perigos locais",
            "en": "Local collisions and hazards"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Todas as superfícies e perigos da fase têm colisão/efeitos medidos; mecanismos compartilhados são reutilizados, não reimplementados por fase.",
            "en": "Every stage surface and hazard has measured collision/effects; shared mechanisms are reused rather than reimplemented per stage."
          },
          "evidence": [
            "content/x1/stages/tiles/sigma-4_full.json",
            "knowledge_base/mmx1/rom/stage_terrain_coverage_2026-09-27.json",
            "tools/oracle/post/stage_terrain_coverage.py",
            "tools/tests/test_stage_terrain_coverage.py",
            "docs/tasks/done/S36-per-section-block-maps.md",
            "docs/tasks/done/S37-engine-per-section-collision.md",
            "docs/tasks/done/S38-stage-terrain-rule-and-gaps.md"
          ],
          "note": {
            "pt": "2026-09-27 S38 parcial, ROM-first: 2/2 classes enumeradas ($00, $3B) vistas por probes de X no take sigma4-final-not-beaten_2_37016, hooks f468/f491, intervalos 468..470/491..493 dentro de WRAM e frame gate 37015/37015. Mapa content/x1/stages/tiles/sigma-4_full.json, carga 80:BAC1, atributos 95:FABF; lookup 84:910D, parede 84:99D3, lateral 81:9CDD, dispatch compartilhado de piso/teto 84:961C/84:94A9. Escopo autorizado na retomada S38 de 2026-09-27 09:00: todas as classes enumeradas de carga/variantes/listas/reescritas observadas. A prova exaustiva dos dominios de entrada de 84:9122/84:913D e da alcancabilidade das listas de 84:80C2 fica fora deste passo e continua aberta (Results S36/S37; KB runtime_domain_scope). Nao certifica a integracao dos escritores nem o motor legado.",
            "en": "2026-09-27 S38 partial, ROM-first: 2/2 enumerated classes ($00, $3B) seen by X probes in sigma4-final-not-beaten_2_37016, hooks f468/f491, brackets 468..470/491..493 inside WRAM and frame gate 37015/37015. Map content/x1/stages/tiles/sigma-4_full.json, load 80:BAC1, attributes 95:FABF; lookup 84:910D, wall 84:99D3, side 81:9CDD, shared floor/ceiling dispatch 84:961C/84:94A9. Scope authorized by the 2026-09-27 09:00 S38 resume: every enumerated load/variant/list/observed-rewrite class. Exhaustive input domains of 84:9122/84:913D and offset-list reachability at 84:80C2 are outside this step and remain open (S36/S37 Results; KB runtime_domain_scope). Writer integration and the legacy engine are not certified."
          }
        },
        {
          "id": "stage.sigma-4.camera",
          "category": "stages",
          "title": {
            "pt": "Câmera e deslocamento",
            "en": "Camera and scrolling"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Câmera, limites, scroll, parallax e transições verticais conferidos em vídeo de toda a rota com diff_stats.",
            "en": "Camera, bounds, scrolling, parallax and vertical transitions checked over the complete route video with diff_stats."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925c_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925b_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "tools/tests/test_intake_david_0925b.py",
            "tools/tests/test_intake_david_0925c.py",
            "tools/tests/test_ppu_reference_buffer.py",
            "docs/tasks/done/R9-intake-david-sigma-final-win-0925.md",
            "docs/tasks/done/L21-ledger-sigma4-route.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L21, regra do L8 para câmera e percurso de fase), modo ROM-first (megaman-x.exe --rom-first): o programa gerado iguala a WRAM do original, câmera e scroll incluídos, na rota gravada. A gravação sigma4-final-not-beaten do David (R7) entra no nível 12 pela saída da sigma 3 em f117 e chega à arena (0x65 desde f1322); o X é derrotado ali quatro vezes e a cada vez o encontro volta (f7758, f13219, f18592, f26570; B2). A gravação krl.mmo (R9) joga o nível 12 desde f88 até a arena (0x65 desde f1715) e a vitória (f13897), depois a saída da fase: nível 0, o final, desde f23001. A gravação boss.mmo (R8) joga o nível 12 f1501..15997. WRAM igual em todo quadro (37.015 de 37.015; 44.617 de 44.617; 15.997 de 15.997); imagens com a referência de mesmo relógio do V12 exatas em todo quadro (37.014 de 37.014; 44.616 de 44.616, nível 12 22.913 de 22.913; 15.996 de 15.996). A metodologia de 2026-09-24 dá a câmera ao gate de estado. Limite: as rotas gravadas; a câmera do motor legado não é certificada.",
            "en": "2026-09-25 (card L21, L8's rule for stage camera and traversal), ROM-first mode (megaman-x.exe --rom-first): the generated program equals the original's WRAM, camera and scroll included, over the recorded route. David's sigma4-final-not-beaten take (R7) enters level 12 from sigma 3's exit at f117 and reaches the arena (0x65 from f1322); X is defeated there four times and each time the encounter comes back (f7758, f13219, f18592, f26570; B2). His krl.mmo take (R9) plays level 12 from f88 to the arena (0x65 from f1715) and the win (f13897), then the stage's exit: level 0, the ending, from f23001. His boss.mmo take (R8) plays level 12 f1501..15997. WRAM equal on every frame (37,015 of 37,015; 44,617 of 44,617; 15,997 of 15,997); pictures under V12's same-clock reference exact on every frame (37,014 of 37,014; 44,616 of 44,616, level 12 22,913 of 22,913; 15,996 of 15,996). The 2026-09-24 methodology gives camera to the state gate. Bound: the recorded routes; the legacy engine's camera is not certified."
          }
        },
        {
          "id": "stage.sigma-4.population",
          "category": "stages",
          "title": {
            "pt": "Colocação e integração das famílias",
            "en": "Family placement and integration"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Cada ocorrência do censo ligada à família correta, posição e gatilho medidos; zero placeholders, além de variantes e filhos relevantes.",
            "en": "Every census occurrence linked to the correct family, measured position and trigger; zero placeholders, including relevant variants and children."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/enemy_evidence_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "docs/tasks/done/L18-ledger-revision-v3.md",
            "docs/tasks/done/S30-stage-population-from-placements.md",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L19, a partir do S30 na granular-v3), modo ROM-first: a lista da ROM do nível 12 (80:DB71, M4) tem 5 entradas, 3 delas ocorrências do censo (finder 3, 80:F8DD). Toda ocorrência do censo nasceu na posição da ROM (deslocamento de 0 px no primeiro quadro) numa execução verificada (S30: 3 de 3), com a borda do gatilho medida (80:DC36; primeiros nascimentos: top 3), e está ligada a um recurso do ledger: 1 pelo S30 (B2 owner or part 1), 2 pelos recursos da granular-v3 (0x68 -> enemy.oid_6a x2). Filhos: os objetos do censo nascidos a até 48 px dos seus posicionamentos (regra de análise do S30, não um ponteiro da ROM) são 0x6A (enemy.oid_6a) x22, todos ligados. Variantes: nenhuma relevante (a lista é escolhida só pelo nível e a máscara do byte 0 em 80:DD3C..DD45 é 0 nas 1147 entradas, então nenhuma entrada é exclusiva de variante; o S30 não aponta variante desta fase). Zero placeholders: toda ocorrência é a própria entrada da lista da ROM rodada pela rotina da ROM; o S30 acha 0 nascimentos fora da posição da ROM e 0 com parâmetro diferente nas suas 13 fases. Entradas dos finders 0-2 não são ocorrências do censo (S30): 2 de 2 nasceram na posição da ROM. Execuções: sigma4-final-not-beaten_2_37016 (36,900 quadros no nível 12), com WRAM igual em todos os quadros de cada uma (execuções do E35: wram_equal = quadros). Limite: as situações observadas nessas execuções; o motor legado não é certificado.",
            "en": "2026-09-25 (card L19, from S30 on granular-v3), ROM-first mode: level 12's ROM list (80:DB71, M4) holds 5 entries, 3 of them census occurrences (finder 3, 80:F8DD). Every census occurrence spawned at its ROM position (offset 0 px on its first frame) in a verified run (S30: 3 of 3), with its trigger edge measured (80:DC36; first spawns: top 3), and is linked to a ledger feature: 1 by S30 (B2 owner or part 1), 2 by granular-v3's features (0x68 -> enemy.oid_6a x2). Children: the census objects born within 48 px of its placements (S30's analysis rule, not a ROM pointer) are 0x6A (enemy.oid_6a) x22, each linked. Variants: none relevant (the list is chosen by level only and the byte-0 mask 80:DD3C..DD45 is 0 in all 1147 entries, so no entry is variant-only; S30 names no variant of this stage). Zero placeholders: every occurrence is the ROM list's own entry run by the ROM routine; S30 finds 0 spawns off their ROM position and 0 with a different parameter in its 13 stages. Entries of finders 0-2 are not census occurrences (S30): 2 of 2 spawned at their ROM position. Runs: sigma4-final-not-beaten_2_37016 (36,900 frames at level 12), WRAM equal on every frame of each (E35 runs: wram_equal = frames). Bound: the situations observed in these runs; the legacy engine is not certified."
          }
        },
        {
          "id": "stage.sigma-4.traversal",
          "category": "stages",
          "title": {
            "pt": "Travessia da fase",
            "en": "Stage traversal"
          },
          "weightBp": 30,
          "status": "verified",
          "acceptance": {
            "pt": "Travessia da entrada à saída comparada à origem com vídeo/diff_stats e regressões; abrange rotas, perigos e encontros, não só abertura.",
            "en": "Entry-to-exit traversal compared to source with video/diff_stats and regressions; covers routes, hazards and encounters, not only the opening."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925c_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925b_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/boss_identity_2026-09-25.json",
            "tools/tests/test_intake_david_0925.py",
            "tools/tests/test_intake_david_0925b.py",
            "tools/tests/test_intake_david_0925c.py",
            "tools/tests/test_ppu_reference_buffer.py",
            "docs/tasks/done/R9-intake-david-sigma-final-win-0925.md",
            "docs/tasks/done/L21-ledger-sigma4-route.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L21, regra do L8 para câmera e percurso de fase), modo ROM-first (megaman-x.exe --rom-first): entrada à saída. A gravação sigma4-final-not-beaten do David (R7) entra no nível 12 pela saída da sigma 3 em f117 e chega à arena (0x65 desde f1322); o X é derrotado ali quatro vezes e a cada vez o encontro volta (f7758, f13219, f18592, f26570; B2). A gravação krl.mmo (R9) joga o nível 12 desde f88 até a arena (0x65 desde f1715) e a vitória (f13897), depois a saída da fase: nível 0, o final, desde f23001. A gravação boss.mmo (R8) joga o nível 12 f1501..15997. WRAM igual em todo quadro (37.015 de 37.015; 44.617 de 44.617; 15.997 de 15.997); imagens com a referência de mesmo relógio do V12 exatas em todo quadro (37.014 de 37.014; 44.616 de 44.616, nível 12 22.913 de 22.913; 15.996 de 15.996). Limite: as rotas gravadas; colocações na tela não contadas; identidade e crédito dos encontros são dos passos de chefe.",
            "en": "2026-09-25 (card L21, L8's rule for stage camera and traversal), ROM-first mode (megaman-x.exe --rom-first): entry to exit. David's sigma4-final-not-beaten take (R7) enters level 12 from sigma 3's exit at f117 and reaches the arena (0x65 from f1322); X is defeated there four times and each time the encounter comes back (f7758, f13219, f18592, f26570; B2). His krl.mmo take (R9) plays level 12 from f88 to the arena (0x65 from f1715) and the win (f13897), then the stage's exit: level 0, the ending, from f23001. His boss.mmo take (R8) plays level 12 f1501..15997. WRAM equal on every frame (37,015 of 37,015; 44,617 of 44,617; 15,997 of 15,997); pictures under V12's same-clock reference exact on every frame (37,014 of 37,014; 44,616 of 44,616, level 12 22,913 of 22,913; 15,996 of 15,996). Bound: the recorded routes; placements on screen are not counted; the encounters' identities and credit belong to the boss steps."
          }
        },
        {
          "id": "stage.sigma-4.transition",
          "category": "stages",
          "title": {
            "pt": "Checkpoints e transições",
            "en": "Checkpoints and transitions"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Validar todos os checkpoints, mortes, retry, portas e saída da fase nas rotas reais da campanha.",
            "en": "Validate every checkpoint, death, retry, door and stage exit through actual campaign routes."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json",
            "tools/tests/test_g10_sigma4_campaign.py",
            "knowledge_base/mmx1/rom/checkpoint_retries_2026-09-26.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-26.json",
            "docs/tasks/done/L21-ledger-sigma4-route.md"
          ],
          "note": {
            "pt": "2026-09-26 (card G10, regra do W37), modo ROM-first: cada parte aparece nas quatro gravações do nível 12 com WRAM igual. Checkpoints: a lista do nível 12 (5 entradas) não tem nenhum escritor de checkpoint (finder-2 0x0B 81:FF5E, 0x0E 82:FB52, 0x02 87:F898; 0x67, 0x66, 0x69, 0x48, 0x52 não colocados), então o conjunto é {0}, do início da fase 80:995D; $1F81 = 0 em todo quadro do nível 12 dentro da fase. Mortes e retry: sigma4-final-not-beaten f6205, 11112, 17013, 24974, 36115; sigma-final-attempt-1 f15249; sigma-final-attempt-2 f8680, 21201; 5 retries por 80:9989 de volta ao checkpoint 0 com imagens exatas (S35); game over em f11321 até a seleção de fase e volta ao nível 12 em f11919. Portas: a porta de chefe é o OID 0x07 do finder 0 (80:D342 -> 80:F369 -> 81:E6C5, contato 81:E71C, X congelado 81:E725); o nível 12 não coloca entrada de finder 0, seus slots ficam vazios em todo quadro e o X nunca entra no estado de porta 0x1A (81:96EA). Trava de rolagem: $1E60 e $1E6E ficam 0; o objeto de região de câmera finder-2 0x00 (81:F6AB) e o gatilho de seção 0x18 (83:FD7B) rodam nas quatro gravações. Saída da fase: o código do 0x65 grava $1F7B = 4 (88:CE74, sigma-final-win f15450); 80:9C00 CMP #$04, 80:9C04 JMP 80:9C79 monta o final (w_endingRoll 1, nível 0, $D2 2, $D3 $16), visto em f23001. Imagens exatas inteiras: 37.014 de 37.014; 15.996 de 15.996; 44.616 de 44.616 (L21, L20). KB knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json.",
            "en": "2026-09-26 (card G10, W37's rule), ROM-first mode: every part is seen in the four WRAM-equal level-12 takes. Checkpoints: level 12's list (5 entries) holds no checkpoint writer (finder-2 0x0B 81:FF5E, 0x0E 82:FB52, 0x02 87:F898; 0x67, 0x66, 0x69, 0x48, 0x52 not placed), so the set is {0} from the stage start 80:995D; $1F81 = 0 on every in-stage level-12 frame. Deaths and retry: sigma4-final-not-beaten f6205, 11112, 17013, 24974, 36115; sigma-final-attempt-1 f15249; sigma-final-attempt-2 f8680, 21201; 5 retries through 80:9989 back at checkpoint 0 with pictures exact (S35); game over f11321 to the stage select and back into level 12 at f11919. Doors: the boss door is finder-0 OID 0x07 (80:D342 -> 80:F369 -> 81:E6C5, contact 81:E71C, X freeze 81:E725); level 12 places no finder-0 entry, its finder-0 slots are empty on every frame and X never takes the door state 0x1A (81:96EA). Scroll lock: $1E60 and $1E6E stay 0; the camera-region object finder-2 0x00 (81:F6AB) and the section trigger 0x18 (83:FD7B) run in all four takes. Stage exit: 0x65's code stores $1F7B = 4 (88:CE74, sigma-final-win f15450); 80:9C00 CMP #$04, 80:9C04 JMP 80:9C79 sets the ending (w_endingRoll 1, level 0, $D2 2, $D3 $16), seen at f23001. Pictures exact whole: 37,014 of 37,014; 15,996 of 15,996; 44,616 of 44,616 (L21, L20). KB knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "item.heart.chill-penguin",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Chill Penguin",
        "en": "Heart Tank — Chill Penguin"
      },
      "steps": [
        {
          "id": "item.heart.chill-penguin.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Chill Penguin",
            "en": "Heart Tank — Chill Penguin"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json",
            "tools/tests/test_intake_david_0924.py",
            "docs/tasks/done/R6-intake-david-recordings-0924.md"
          ],
          "note": {
            "en": "ROM-first mode (card L7): heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); placement list 85:9A16, finder-0 entry at column 164 (x 5260, y 692), param 0x01 = its bit in $7E1F9C, tested at 81:E99D. David's CP new-game recording (R6, 21,068 of 21,068 frames equal): a finder-0 slot holds id 0x0B f11666..11920, $1F9C 0x00->0x01 at f11831, maximum health $7E1F9A (ram_map max_health; stored at 81:EB57) 16->17 at f11915 and 17->18 at f11919, slot freed at f11921. Pictures under Mesen2's PPU exact on every frame f11664..11923 (260 of 260). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run.",
            "pt": "Modo ROM-first (card L7): heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); lista 85:9A16, entrada do finder 0 na coluna 164 (x 5260, y 692), param 0x01 = seu bit em $7E1F9C, testado em 81:E99D. Gravação CP new game do David (R6, 21.068 de 21.068 quadros iguais): um slot do finder 0 guarda o id 0x0B em f11666..11920, $1F9C 0x00->0x01 em f11831, vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57) 16->17 em f11915 e 17->18 em f11919, slot livre em f11921. Imagens com a PPU do Mesen2 exatas em todo quadro f11664..11923 (260 de 260). O SFX 0x0C (81:EB64) só passa pelo gate no lado da CPU; sem rodada de APU."
          }
        }
      ]
    },
    {
      "id": "item.heart.storm-eagle",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Storm Eagle",
        "en": "Heart Tank — Storm Eagle"
      },
      "steps": [
        {
          "id": "item.heart.storm-eagle.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Storm Eagle",
            "en": "Heart Tank — Storm Eagle"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/object_tables_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_se_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json"
          ],
          "note": {
            "pt": "Modo ROM-first (card L5): heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992); colocação na lista 85:91A8 param 0x04 = seu bit em $7E1F9C, testado em 81:E99D. Capturas do K8 (sha256 em frame_gate_movies, 21.058 de 21.058 quadros iguais): slot $1628 ativo f2183..2361, $1F9C 0xFB->0xFF em f2272, vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57, limite 0x20) 30->31 em f2356 e 31->32 em f2360, $0BCF acompanhando, slot liberado em f2362. E34: 179 de 179 chamadas exatas; V6: 161 de 161 quadros na tela exatos (rótulos do V6 = K8 + 1). O SFX 0x0C (81:EB64) só é coberto do lado da CPU; sem execução do APU.",
            "en": "ROM-first mode (card L5): heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992); placement list 85:91A8 param 0x04 = its bit in $7E1F9C, tested at 81:E99D. K8 captures (sha256 in frame_gate_movies, 21,058 of 21,058 frames equal): slot $1628 active f2183..2361, $1F9C 0xFB->0xFF at f2272, maximum health $7E1F9A (ram_map max_health; stored at 81:EB57, capped at 0x20) 30->31 at f2356 and 31->32 at f2360, $0BCF following, slot freed at f2362. E34: 179 of 179 calls exact; V6: 161 of 161 on-screen frames exact (V6 labels are K8 + 1). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run."
          }
        }
      ]
    },
    {
      "id": "item.heart.flame-mammoth",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Flame Mammoth",
        "en": "Heart Tank — Flame Mammoth"
      },
      "steps": [
        {
          "id": "item.heart.flame-mammoth.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Flame Mammoth",
            "en": "Heart Tank — Flame Mammoth"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/frame_gate_movies_2026-09-24.json",
            "knowledge_base/mmx1/rom/object_tables_gate_2026-09-24.json",
            "knowledge_base/mmx1/rom/ppu_gate_fm_movie_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json"
          ],
          "note": {
            "pt": "Modo ROM-first (card L5): heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992); colocação na lista 85:8EBE param 0x10 = seu bit em $7E1F9C, testado em 81:E99D. Capturas do K8 (sha256 em frame_gate_movies, 30.150 de 30.150 quadros iguais): slot $1628 ativo f9536..9809, $1F9C 0xEF->0xFF em f9720, vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57, limite 0x20) 30->31 em f9804 e 31->32 em f9808, $0BCF acompanhando, slot liberado em f9810. E34: 274 de 274 chamadas exatas; V6: 257 de 257 quadros na tela exatos (rótulos do V6 = K8 + 1). O SFX 0x0C (81:EB64) só é coberto do lado da CPU; sem execução do APU.",
            "en": "ROM-first mode (card L5): heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992); placement list 85:8EBE param 0x10 = its bit in $7E1F9C, tested at 81:E99D. K8 captures (sha256 in frame_gate_movies, 30,150 of 30,150 frames equal): slot $1628 active f9536..9809, $1F9C 0xEF->0xFF at f9720, maximum health $7E1F9A (ram_map max_health; stored at 81:EB57, capped at 0x20) 30->31 at f9804 and 31->32 at f9808, $0BCF following, slot freed at f9810. E34: 274 of 274 calls exact; V6: 257 of 257 on-screen frames exact (V6 labels are K8 + 1). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run."
          }
        }
      ]
    },
    {
      "id": "item.heart.spark-mandrill",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Spark Mandrill",
        "en": "Heart Tank — Spark Mandrill"
      },
      "steps": [
        {
          "id": "item.heart.spark-mandrill.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Spark Mandrill",
            "en": "Heart Tank — Spark Mandrill"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py",
            "docs/tasks/done/V12-reference-pictures-same-clock.md",
            "docs/tasks/done/L7-ledger-new-recordings-and-tours.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L12, imagens no mesmo relógio do V12 com a linha do L7), modo ROM-first: gravação spark-mandrill do David (R6): 0x0B f8536..8954, $1F9C 0x01 -> 0x41 em f8865 (85:94D4 param 0x40), $1F9A 18 -> 20 (L7). A WRAM do programa gerado é igual à captura em todos os quadros f1..27368 (27.368 de 27.368). Imagens com a PPU do Mesen2 contra a referência do buffer de tela do V12 exatas em todos os quadros f8534..8957, o slot -2..+3 (424 de 424; o L7 tinha 417: os 7 quadros f8655..8859 eram da captura antiga, V12). Os 24 quadros restantes da gravação (classe de uma linha: f5075..5441, f6129, f16183, f17812..17914) ficam fora. Limite: o som só é verificado no lado da CPU (WRAM); sem rodada de APU.",
            "en": "2026-09-25 (card L12, V12's same-clock pictures with L7's row), ROM-first mode: David's spark-mandrill take (R6): 0x0B f8536..8954, $1F9C 0x01 -> 0x41 f8865 (85:94D4 param 0x40), $1F9A 18 -> 20 (L7). The generated program's WRAM equals the capture on every frame f1..27368 (27,368 of 27,368). Pictures under Mesen2's PPU against V12's screen-buffer reference exact on every frame f8534..8957, the slot -2..+3 (424 of 424; L7 had 417: the 7 frames f8655..8859 were the old capture, V12). The take's 24 remaining frames (one-row class: f5075..5441, f6129, f16183, f17812..17914) lie outside. Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "item.heart.armored-armadillo",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Armored Armadillo",
        "en": "Heart Tank — Armored Armadillo"
      },
      "steps": [
        {
          "id": "item.heart.armored-armadillo.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Armored Armadillo",
            "en": "Heart Tank — Armored Armadillo"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); placement list 85:8A0B, finder-0 entry at column 38 (x 1226, y 2359), param 0x02 = its bit in $7E1F9C, tested at 81:E99D. David's armored-armadillo take (R7, 15,055 of 15,055 frames equal): a finder-0 slot holds id 0x0B f5792..6010, $1F9C 0xCD->0xCF at f5921 (81:EAEC TSB), maximum health $7E1F9A (ram_map max_health; stored at 81:EB57) 26->27 at f6005 and 27->28 at f6009, slot freed at f6011. Pictures under Mesen2's PPU exact on every frame f5790..6013 (224 of 224). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run.",
            "pt": "2026-09-25 (card L8), modo ROM-first: heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); lista 85:8A0B, entrada do finder 0 na coluna 38 (x 1226, y 2359), param 0x02 = seu bit em $7E1F9C, testado em 81:E99D. Gravação armored-armadillo do David (R7, 15.055 de 15.055 quadros iguais): um slot do finder 0 guarda o id 0x0B em f5792..6010, $1F9C 0xCD->0xCF em f5921 (81:EAEC TSB), vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57) 26->27 em f6005 e 27->28 em f6009, slot livre em f6011. Imagens com a PPU do Mesen2 exatas em todo quadro f5790..6013 (224 de 224). O SFX 0x0C (81:EB64) só passa pelo gate no lado da CPU; sem rodada de APU."
          }
        }
      ]
    },
    {
      "id": "item.heart.launch-octopus",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Launch Octopus",
        "en": "Heart Tank — Launch Octopus"
      },
      "steps": [
        {
          "id": "item.heart.launch-octopus.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Launch Octopus",
            "en": "Heart Tank — Launch Octopus"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); placement list 85:85AA, finder-0 entry at column 198 (x 6344, y 1204), param 0x80 = its bit in $7E1F9C, tested at 81:E99D. David's launch-octopus take (R7, 38,341 of 38,341 frames equal): a finder-0 slot holds id 0x0B f14112..14288, $1F9C 0x41->0xC1 at f14199 (81:EAEC TSB), maximum health $7E1F9A (ram_map max_health; stored at 81:EB57) 20->21 at f14283 and 21->22 at f14287, slot freed at f14289. Pictures under Mesen2's PPU exact on every frame f14110..14291 (182 of 182). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run.",
            "pt": "2026-09-25 (card L8), modo ROM-first: heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); lista 85:85AA, entrada do finder 0 na coluna 198 (x 6344, y 1204), param 0x80 = seu bit em $7E1F9C, testado em 81:E99D. Gravação launch-octopus do David (R7, 38.341 de 38.341 quadros iguais): um slot do finder 0 guarda o id 0x0B em f14112..14288, $1F9C 0x41->0xC1 em f14199 (81:EAEC TSB), vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57) 20->21 em f14283 e 21->22 em f14287, slot livre em f14289. Imagens com a PPU do Mesen2 exatas em todo quadro f14110..14291 (182 de 182). O SFX 0x0C (81:EB64) só passa pelo gate no lado da CPU; sem rodada de APU."
          }
        }
      ]
    },
    {
      "id": "item.heart.boomer-kuwanger",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Boomer Kuwanger",
        "en": "Heart Tank — Boomer Kuwanger"
      },
      "steps": [
        {
          "id": "item.heart.boomer-kuwanger.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Boomer Kuwanger",
            "en": "Heart Tank — Boomer Kuwanger"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); placement list 85:97B6, finder-0 entry at column 50 (x 1618, y 874), param 0x20 = its bit in $7E1F9C, tested at 81:E99D. The Boomer Kuwanger run of David's items-collection take (R7, 15,103 of 15,103 frames equal): a finder-0 slot holds id 0x0B f6914..7194, $1F9C 0xCF->0xEF at f7105 (81:EAEC TSB), maximum health $7E1F9A (ram_map max_health; stored at 81:EB57) 28->29 at f7189 and 29->30 at f7193, slot freed at f7195. Pictures under Mesen2's PPU exact on every frame f6912..7197 (286 of 286). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run.",
            "pt": "2026-09-25 (card L8), modo ROM-first: heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); lista 85:97B6, entrada do finder 0 na coluna 50 (x 1618, y 874), param 0x20 = seu bit em $7E1F9C, testado em 81:E99D. A passagem Boomer Kuwanger da gravação items-collection do David (R7, 15.103 de 15.103 quadros iguais): um slot do finder 0 guarda o id 0x0B em f6914..7194, $1F9C 0xCF->0xEF em f7105 (81:EAEC TSB), vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57) 28->29 em f7189 e 29->30 em f7193, slot livre em f7195. Imagens com a PPU do Mesen2 exatas em todo quadro f6912..7197 (286 de 286). O SFX 0x0C (81:EB64) só passa pelo gate no lado da CPU; sem rodada de APU."
          }
        }
      ]
    },
    {
      "id": "item.heart.sting-chameleon",
      "category": "objects",
      "title": {
        "pt": "Heart Tank — Sting Chameleon",
        "en": "Heart Tank — Sting Chameleon"
      },
      "steps": [
        {
          "id": "item.heart.sting-chameleon.acceptance",
          "category": "objects",
          "title": {
            "pt": "Heart Tank — Sting Chameleon",
            "en": "Heart Tank — Sting Chameleon"
          },
          "weightBp": 15,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json",
            "tools/tests/test_intake_david_0925.py",
            "docs/tasks/done/R7-intake-david-recordings-0925.md"
          ],
          "note": {
            "en": "2026-09-25 (card L8), ROM-first mode: heart tank = misc table 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); placement list 85:87BB, finder-0 entry at column 51 (x 1647, y 890), param 0x08 = its bit in $7E1F9C, tested at 81:E99D. The flooded Sting Chameleon run of David's launch-octopus-and-sting-flooded take (R7, 38,341 of 38,341 frames equal; the variant bit set on all 9,773 frames of the run): a finder-0 slot holds id 0x0B f32378..32543, $1F9C 0xC1->0xC9 at f32454 (81:EAEC TSB), maximum health $7E1F9A (ram_map max_health; stored at 81:EB57) 22->23 at f32538 and 23->24 at f32542, slot freed at f32544. Pictures under Mesen2's PPU exact on every frame f32376..32546 (171 of 171). SFX 0x0C (81:EB64) is gated on the CPU side only; no APU run.",
            "pt": "2026-09-25 (card L8), modo ROM-first: heart tank = tabela misc 80F320 id 0x0B (stub 80:F37D, main 81:E992; card L5); lista 85:87BB, entrada do finder 0 na coluna 51 (x 1647, y 890), param 0x08 = seu bit em $7E1F9C, testado em 81:E99D. A fase Sting Chameleon inundada da gravação launch-octopus-and-sting-flooded do David (R7, 38.341 de 38.341 quadros iguais; bit da variante ligado nos 9.773 quadros da passagem): um slot do finder 0 guarda o id 0x0B em f32378..32543, $1F9C 0xC1->0xC9 em f32454 (81:EAEC TSB), vida máxima $7E1F9A (ram_map max_health; gravada em 81:EB57) 22->23 em f32538 e 23->24 em f32542, slot livre em f32544. Imagens com a PPU do Mesen2 exatas em todo quadro f32376..32546 (171 de 171). O SFX 0x0C (81:EB64) só passa pelo gate no lado da CPU; sem rodada de APU."
          }
        }
      ]
    },
    {
      "id": "item.subtank.flame-mammoth",
      "category": "objects",
      "title": {
        "pt": "Sub Tank — Flame Mammoth",
        "en": "Sub Tank — Flame Mammoth"
      },
      "steps": [
        {
          "id": "item.subtank.flame-mammoth.acceptance",
          "category": "objects",
          "title": {
            "pt": "Sub Tank — Flame Mammoth",
            "en": "Sub Tank — Flame Mammoth"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925b_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925c_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py",
            "tools/tests/test_intake_david_0925b.py",
            "tools/tests/test_intake_david_0925c.py",
            "docs/tasks/done/R8-intake-david-sigma-final-0925.md",
            "docs/tasks/done/R9-intake-david-sigma-final-win-0925.md",
            "docs/tasks/done/L12-ledger-v12-exact-windows.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L20, regra do L12: apanhado e usado em gravações com WRAM igual, imagens sob a referência do V12), modo ROM-first: byte de tanque $1F86. A coleta da ROM, 81:E64A..81:E660 (LDX #$00; LDA $1F83,X; BMI para o byte seguinte; LDA #$80; STA $1F83,X; LDA $1633; TSB $1F99; INX; CPX #$04), liga o bit 7 no primeiro de $1F83..$1F86 que não o tem, então a fase de um byte é o nível na sua troca $00 -> $80: flame-mammoth (nível 4), gravação items-collection do David (R7) f13332. O knowledge_base/mmx1/ram_map.json não tem entrada de tanque para ele (chama o byte de weapon_slot_x_buster); o laço de coleta acima e estas gravações mostram o quarto byte de tanque. Usado (esvaziado de $8E a $80 em 14 passos, com a vida do X subindo): boss.mmo (R8) f9488..9540, vida 1 -> 29, chefes 0x65 ativos; krl.mmo (R9) f8770..8822, vida 8 -> 32, chefes 0x65 ativos. A WRAM do programa gerado é igual à captura em todos os quadros dessas gravações (items-collection (R7) 15,103, boss.mmo (R8) 15,997, krl.mmo (R9) 44,617). Imagens sob a PPU do Mesen2 contra a referência de buffer de tela do V12: exatas em todos os quadros da gravação da coleta (15,102 de 15,102), e em todos os quadros de boss.mmo (R8) (15,996 de 15,996), krl.mmo (R9) (44,616 de 44,616). Limite: o som é conferido só do lado da CPU (WRAM); sem execução da APU.",
            "en": "2026-09-25 (card L20, L12's rule: picked up and used in WRAM-equal takes, pictures under V12's reference), ROM-first mode: tank byte $1F86. The ROM's pickup 81:E64A..81:E660 (LDX #$00; LDA $1F83,X; BMI to the next byte; LDA #$80; STA $1F83,X; LDA $1633; TSB $1F99; INX; CPX #$04) sets bit 7 in the first of $1F83..$1F86 that lacks it, so a byte's stage is the level at its $00 -> $80 change: flame-mammoth (level 4), David's take items-collection (R7) f13332. knowledge_base/mmx1/ram_map.json has no tank entry for it (it names the byte weapon_slot_x_buster); the pickup loop above and these takes show the fourth tank byte. Used (drained $8E -> $80 in 14 steps, X's health rising): boss.mmo (R8) f9488..9540, health 1 -> 29, bosses 0x65 active; krl.mmo (R9) f8770..8822, health 8 -> 32, bosses 0x65 active. The generated program's WRAM equals the capture on every frame of these takes (items-collection (R7) 15,103, boss.mmo (R8) 15,997, krl.mmo (R9) 44,617). Pictures under Mesen2's PPU against V12's screen-buffer reference: exact on every frame of the pickup take (15,102 of 15,102), and on every frame of boss.mmo (R8) (15,996 of 15,996), krl.mmo (R9) (44,616 of 44,616). Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "item.subtank.storm-eagle",
      "category": "objects",
      "title": {
        "pt": "Sub Tank — Storm Eagle",
        "en": "Sub Tank — Storm Eagle"
      },
      "steps": [
        {
          "id": "item.subtank.storm-eagle.acceptance",
          "category": "objects",
          "title": {
            "pt": "Sub Tank — Storm Eagle",
            "en": "Sub Tank — Storm Eagle"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925b_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925c_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py",
            "tools/tests/test_intake_david_0925b.py",
            "tools/tests/test_intake_david_0925c.py",
            "docs/tasks/done/R8-intake-david-sigma-final-0925.md",
            "docs/tasks/done/R9-intake-david-sigma-final-win-0925.md",
            "docs/tasks/done/L12-ledger-v12-exact-windows.md",
            "knowledge_base/mmx1/ram_map.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L20, regra do L12: apanhado e usado em gravações com WRAM igual, imagens sob a referência do V12), modo ROM-first: byte de tanque $1F84. A coleta da ROM, 81:E64A..81:E660 (LDX #$00; LDA $1F83,X; BMI para o byte seguinte; LDA #$80; STA $1F83,X; LDA $1633; TSB $1F99; INX; CPX #$04), liga o bit 7 no primeiro de $1F83..$1F86 que não o tem, então a fase de um byte é o nível na sua troca $00 -> $80: storm-eagle (nível 5), gravação storm-eagle-and-spark-dark do David (R7) f4679. O knowledge_base/mmx1/ram_map.json o chama de sub_tank_2. Usado (esvaziado de $8E a $80 em 14 passos, com a vida do X subindo): boss.mmo (R8) f13867..13919, vida 1 -> 29, chefes 0x65, 0x6B ativos. A WRAM do programa gerado é igual à captura em todos os quadros dessas gravações (storm-eagle-and-spark-dark (R7) 25,919, boss.mmo (R8) 15,997). Imagens sob a PPU do Mesen2 contra a referência de buffer de tela do V12: exatas em todos os quadros da gravação da coleta menos f21065 (25,917 de 25,918; f21065 vem 16,386 quadros depois da coleta), e em todos os quadros de boss.mmo (R8) (15,996 de 15,996). Limite: o som é conferido só do lado da CPU (WRAM); sem execução da APU.",
            "en": "2026-09-25 (card L20, L12's rule: picked up and used in WRAM-equal takes, pictures under V12's reference), ROM-first mode: tank byte $1F84. The ROM's pickup 81:E64A..81:E660 (LDX #$00; LDA $1F83,X; BMI to the next byte; LDA #$80; STA $1F83,X; LDA $1633; TSB $1F99; INX; CPX #$04) sets bit 7 in the first of $1F83..$1F86 that lacks it, so a byte's stage is the level at its $00 -> $80 change: storm-eagle (level 5), David's take storm-eagle-and-spark-dark (R7) f4679. knowledge_base/mmx1/ram_map.json names it sub_tank_2. Used (drained $8E -> $80 in 14 steps, X's health rising): boss.mmo (R8) f13867..13919, health 1 -> 29, bosses 0x65, 0x6B active. The generated program's WRAM equals the capture on every frame of these takes (storm-eagle-and-spark-dark (R7) 25,919, boss.mmo (R8) 15,997). Pictures under Mesen2's PPU against V12's screen-buffer reference: exact on every frame of the pickup take but f21065 (25,917 of 25,918; f21065 comes 16,386 frames after the pickup), and on every frame of boss.mmo (R8) (15,996 of 15,996). Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "item.subtank.spark-mandrill",
      "category": "objects",
      "title": {
        "pt": "Sub Tank — Spark Mandrill",
        "en": "Sub Tank — Spark Mandrill"
      },
      "steps": [
        {
          "id": "item.subtank.spark-mandrill.acceptance",
          "category": "objects",
          "title": {
            "pt": "Sub Tank — Spark Mandrill",
            "en": "Sub Tank — Spark Mandrill"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py",
            "docs/tasks/done/V12-reference-pictures-same-clock.md",
            "docs/tasks/done/L7-ledger-new-recordings-and-tours.md",
            "docs/tasks/done/L8-ledger-david-takes-0925.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L12, imagens no mesmo relógio do V12 com as linhas do L7 e do L8), modo ROM-first: coletado na gravação spark-mandrill do David (R6): $1F83 0x00 -> 0x80 em f2204, 0x82 em f12658 (L7); usado nas gravações do R7: SC f10093..10105, Sigma 1 f32412..32460, Sigma 4 f32683..32715 (L8). A WRAM do programa gerado é igual à captura em todos os quadros das quatro gravações (27.368, 25.606, 35.587, 37.015). Imagens com a PPU do Mesen2 contra a referência do buffer de tela do V12 exatas em todos os quadros da janela de coleta f2064..2288 (225 de 225; o L8 tinha f2065 não exato: a captura antiga, V12) e em todos os quadros das três gravações em que é usado (25.605, 35.586, 37.014). Limite: o som só é verificado no lado da CPU (WRAM); sem rodada de APU.",
            "en": "2026-09-25 (card L12, V12's same-clock pictures with L7's and L8's rows), ROM-first mode: picked up in David's spark-mandrill take (R6): $1F83 0x00 -> 0x80 f2204, 0x82 f12658 (L7); used in R7's takes: SC f10093..10105, Sigma 1 f32412..32460, Sigma 4 f32683..32715 (L8). The generated program's WRAM equals the capture on every frame of the four takes (27,368, 25,606, 35,587, 37,015). Pictures under Mesen2's PPU against V12's screen-buffer reference exact on every frame of the pickup window f2064..2288 (225 of 225; L8 had f2065 not exact: the old capture, V12) and on every frame of the three takes where it is used (25,605, 35,586, 37,014). Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "item.subtank.armored-armadillo",
      "category": "objects",
      "title": {
        "pt": "Sub Tank — Armored Armadillo",
        "en": "Sub Tank — Armored Armadillo"
      },
      "steps": [
        {
          "id": "item.subtank.armored-armadillo.acceptance",
          "category": "objects",
          "title": {
            "pt": "Sub Tank — Armored Armadillo",
            "en": "Sub Tank — Armored Armadillo"
          },
          "weightBp": 20,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925b_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0925c_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py",
            "tools/tests/test_intake_david_0925b.py",
            "tools/tests/test_intake_david_0925c.py",
            "docs/tasks/done/R8-intake-david-sigma-final-0925.md",
            "docs/tasks/done/R9-intake-david-sigma-final-win-0925.md",
            "docs/tasks/done/L12-ledger-v12-exact-windows.md",
            "knowledge_base/mmx1/ram_map.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L20, regra do L12: apanhado e usado em gravações com WRAM igual, imagens sob a referência do V12), modo ROM-first: byte de tanque $1F85. A coleta da ROM, 81:E64A..81:E660 (LDX #$00; LDA $1F83,X; BMI para o byte seguinte; LDA #$80; STA $1F83,X; LDA $1633; TSB $1F99; INX; CPX #$04), liga o bit 7 no primeiro de $1F83..$1F86 que não o tem, então a fase de um byte é o nível na sua troca $00 -> $80: armored-armadillo (nível 3), gravação armored-armadillo do David (R7) f2428. O knowledge_base/mmx1/ram_map.json o chama de sub_tank_3. Usado (esvaziado de $8E a $80 em 14 passos, com a vida do X subindo): boss.mmo (R8) f12674..12726, vida 1 -> 29, chefes 0x65, 0x6B ativos; krl.mmo (R9) f12729..12781, vida 4 -> 32, chefes 0x65, 0x6B ativos. A WRAM do programa gerado é igual à captura em todos os quadros dessas gravações (armored-armadillo (R7) 15,055, boss.mmo (R8) 15,997, krl.mmo (R9) 44,617). Imagens sob a PPU do Mesen2 contra a referência de buffer de tela do V12: exatas em todos os quadros da gravação da coleta (15,054 de 15,054), e em todos os quadros de boss.mmo (R8) (15,996 de 15,996), krl.mmo (R9) (44,616 de 44,616). Limite: o som é conferido só do lado da CPU (WRAM); sem execução da APU.",
            "en": "2026-09-25 (card L20, L12's rule: picked up and used in WRAM-equal takes, pictures under V12's reference), ROM-first mode: tank byte $1F85. The ROM's pickup 81:E64A..81:E660 (LDX #$00; LDA $1F83,X; BMI to the next byte; LDA #$80; STA $1F83,X; LDA $1633; TSB $1F99; INX; CPX #$04) sets bit 7 in the first of $1F83..$1F86 that lacks it, so a byte's stage is the level at its $00 -> $80 change: armored-armadillo (level 3), David's take armored-armadillo (R7) f2428. knowledge_base/mmx1/ram_map.json names it sub_tank_3. Used (drained $8E -> $80 in 14 steps, X's health rising): boss.mmo (R8) f12674..12726, health 1 -> 29, bosses 0x65, 0x6B active; krl.mmo (R9) f12729..12781, health 4 -> 32, bosses 0x65, 0x6B active. The generated program's WRAM equals the capture on every frame of these takes (armored-armadillo (R7) 15,055, boss.mmo (R8) 15,997, krl.mmo (R9) 44,617). Pictures under Mesen2's PPU against V12's screen-buffer reference: exact on every frame of the pickup take (15,054 of 15,054), and on every frame of boss.mmo (R8) (15,996 of 15,996), krl.mmo (R9) (44,616 of 44,616). Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "upgrade.boots",
      "category": "objects",
      "title": {
        "pt": "Pernas: cápsula e melhoria de dash",
        "en": "Legs: capsule and dash upgrade"
      },
      "steps": [
        {
          "id": "upgrade.boots.acceptance",
          "category": "objects",
          "title": {
            "pt": "Pernas: cápsula e melhoria de dash",
            "en": "Legs: capsule and dash upgrade"
          },
          "weightBp": 35,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_capture_buffer_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py",
            "docs/tasks/done/V12-reference-pictures-same-clock.md",
            "docs/tasks/done/L7-ledger-new-recordings-and-tours.md",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "knowledge_base/mmx1/rom/events_2026-09-24.json",
            "knowledge_base/mmx1/ram_map.json",
            "knowledge_base/mmx1/rom/sfx_ae_af_witness_2026-10-10_r112.json"
          ],
          "note": {
            "pt": "2026-09-25 (card L12, imagens no mesmo relógio do V12 com a linha do L7), modo ROM-first: a cápsula das pernas na gravação chill-penguin-new-game do David (R6): cápsula 0x4D f7142..10075, $1F99 0x00 -> 0x08 em f9707, dash por 397 quadros a partir de f9987, nenhum antes (L7). A WRAM do programa gerado é igual à captura em todos os quadros f1..21068 (21.068 de 21.068). Imagens com a PPU do Mesen2 contra a referência do buffer de tela do V12 exatas em todos os quadros da janela da cápsula f7142..10075 (2.934 de 2.934; o L7 tinha 2.933: f8877 era da captura antiga, V12) e em todos os quadros da gravação (21.067 de 21.067), incluindo o dash a partir de f9987. Limite: o som só é verificado no lado da CPU (WRAM); sem rodada de APU.",
            "en": "2026-09-25 (card L12, V12's same-clock pictures with L7's row), ROM-first mode: the leg-parts capsule in David's chill-penguin-new-game take (R6): capsule 0x4D f7142..10075, $1F99 0x00 -> 0x08 f9707, dash 397 frames from f9987, none earlier (L7). The generated program's WRAM equals the capture on every frame f1..21068 (21,068 of 21,068). Pictures under Mesen2's PPU against V12's screen-buffer reference exact on every frame of the capsule window f7142..10075 (2,934 of 2,934; L7 had 2,933: f8877 was the old capture, V12) and on every frame of the take (21,067 of 21,067), the dash from f9987 included. Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "upgrade.body",
      "category": "objects",
      "title": {
        "pt": "Peitoral: cápsula e redução de dano",
        "en": "Body: capsule and damage reduction"
      },
      "steps": [
        {
          "id": "upgrade.body.acceptance",
          "category": "objects",
          "title": {
            "pt": "Peitoral: cápsula e redução de dano",
            "en": "Body: capsule and damage reduction"
          },
          "weightBp": 35,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "tools/tests/test_objects_evidence.py",
            "docs/tasks/done/O1-objects-evidence.md",
            "docs/tasks/done/L29-ledger-object-residuals.md",
            "knowledge_base/mmx1/rom/sfx_ae_af_witness_2026-10-10_r112.json"
          ],
          "note": {
            "pt": "2026-09-26 (card L29, KB do O1 com a regra de resíduo do L8), modo ROM-first (megaman-x.exe --rom-first): todo comportamento que o título nomeia roda em gravações com WRAM igual inteira: capsule (87:D0B2): primeiro sting-chameleon f11461, 1 quadros, imagens 1 de 1; damage reduction (84:9D41): primeiro sting-chameleon f12612, 402 quadros, imagens 401 de 402. Imagens exatas em 402 de 403 quadros; o outro, launch-octopus-auto f4710, é um resíduo de imagem que pertence ao passo visual (regra do L8; o O1 segurou o passo por ele sob a redação mais estrita do L26). Limite: os comportamentos gravados.",
            "en": "2026-09-26 (card L29, O1's KB with L8's residual rule), ROM-first mode (megaman-x.exe --rom-first): every behaviour the title names runs in WRAM-equal whole takes: capsule (87:D0B2): first sting-chameleon f11461, 1 frames, pictures 1 of 1; damage reduction (84:9D41): first sting-chameleon f12612, 402 frames, pictures 401 of 402. Pictures exact on 402 of 403 frames; the one other, launch-octopus-auto f4710, is a picture residual that belongs to the visual step (L8's rule; O1 held the step for it under L26's stricter wording). Bound: the recorded behaviours."
          }
        }
      ]
    },
    {
      "id": "upgrade.helmet",
      "category": "objects",
      "title": {
        "pt": "Capacete: cápsula e blocos quebráveis",
        "en": "Helmet: capsule and breakable blocks"
      },
      "steps": [
        {
          "id": "upgrade.helmet.acceptance",
          "category": "objects",
          "title": {
            "pt": "Capacete: cápsula e blocos quebráveis",
            "en": "Helmet: capsule and breakable blocks"
          },
          "weightBp": 35,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "tools/tests/test_objects_evidence.py",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "knowledge_base/mmx1/rom/x_state_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/sfx_ae_af_witness_2026-10-10_r112.json"
          ],
          "note": {
            "pt": "2026-09-26 (card O1, decisões 1-3 do coordenador, a partir das gravações do R10 e do R12 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David, com imagens exatas nos quadros de cada um (V12); comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: helmet.capsule 87:D0B2 (storm-eagle-and-spark-dark f8651, 1 0x4D/0x4E); helmet.breakable_blocks 81:9EA5 (storm-eagle-and-spark-dark f20814, 1). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card O1, coordinator decisions 1-3, from R10's and R12's WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes, pictures exact on each one's frames (V12); behaviour, bank:addr, first (take, frame), snapshots: capsule 87:D0B2 (storm-eagle-and-spark-dark f8651, 1 0x4D/0x4E); breakable blocks 81:9EA5 (storm-eagle-and-spark-dark f20814, 1). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "upgrade.arms",
      "category": "objects",
      "title": {
        "pt": "Braços: cápsula, alternativa de Zero e carga",
        "en": "Arms: capsule, Zero alternative and charge"
      },
      "steps": [
        {
          "id": "upgrade.arms.acceptance",
          "category": "objects",
          "title": {
            "pt": "Braços: cápsula, alternativa de Zero e carga",
            "en": "Arms: capsule, Zero alternative and charge"
          },
          "weightBp": 35,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "tools/tests/test_objects_evidence.py",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "knowledge_base/mmx1/rom/intake_david_0925d_2026-09-25.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json",
            "knowledge_base/mmx1/rom/sfx_ae_af_witness_2026-10-10_r112.json"
          ],
          "note": {
            "pt": "2026-09-26 (card O1, decisões 1-3 do coordenador, a partir das gravações do R10 e do R12 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David, com imagens exatas nos quadros de cada um (V12); comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: arms.capsule 87:D0B2 (flame-mammoth-arm-capsule f11486, 1 0x4D/0x4E); arms.zero 88:D7D5 (sigma1-zero-arm f14236, 1); arms.charge 81:98C6 (sigma1-zero-arm f14434, 6551). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card O1, coordinator decisions 1-3, from R10's and R12's WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes, pictures exact on each one's frames (V12); behaviour, bank:addr, first (take, frame), snapshots: capsule 87:D0B2 (flame-mammoth-arm-capsule f11486, 1 0x4D/0x4E); Zero alternative 88:D7D5 (sigma1-zero-arm f14236, 1); charge 81:98C6 (sigma1-zero-arm f14434, 6551). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "object.hadouken",
      "category": "objects",
      "title": {
        "pt": "Hadouken: obtenção e uso",
        "en": "Hadouken: acquisition and use"
      },
      "steps": [
        {
          "id": "object.hadouken.acceptance",
          "category": "objects",
          "title": {
            "pt": "Hadouken: obtenção e uso",
            "en": "Hadouken: acquisition and use"
          },
          "weightBp": 40,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0926b_2026-09-26.json",
            "tools/tests/test_intake_david_0926b.py",
            "docs/tasks/done/R15-intake-david-hadouken-0926.md",
            "knowledge_base/mmx1/rom/sfx_ae_af_witness_2026-10-10_r112.json"
          ],
          "note": {
            "pt": "2026-09-26 (card R15, gravação pegar hadouken.mmo do David), modo ROM-first (megaman-x.exe --rom-first): obtenção e uso rodam na gravação inteira com WRAM igual (73.902 de 73.902 quadros após a fusão pela regra do R9; imagens exatas 73.901 de 73.901): a cápsula 0x4D aparece na quinta carga no nível 3 ($1F7E = 5 em f37.010; 87:CAC8), a cápsula 0x4E subID 1 liga o bit 7 de $1F7E em f38.024 (87:D0DB); hadukenCheck (81:A0EA) passa 23 vezes, ação do X $42 e depois o tiro (projétil id $04, 81:A121), primeiro em f38.237 e f38.254; imagens exatas nesses quadros. Limite: os comportamentos gravados.",
            "en": "2026-09-26 (card R15, David's take pegar hadouken.mmo), ROM-first mode (megaman-x.exe --rom-first): acquisition and use run in the WRAM-equal whole take (73,902 of 73,902 frames after R9's merge; pictures exact 73,901 of 73,901): capsule 0x4D spawns at the fifth level-3 load ($1F7E = 5 at f37,010; 87:CAC8), capsule 0x4E subID 1 sets $1F7E bit 7 at f38,024 (87:D0DB); hadukenCheck (81:A0EA) passes 23 times, X action $42 then the shot (projectile id $04, 81:A121), first at f38,237 and f38,254; pictures exact on those frames. Bound: the recorded behaviours."
          }
        }
      ]
    },
    {
      "id": "object.ride-armor",
      "category": "objects",
      "title": {
        "pt": "Ride Armor: entrar, pilotar e sair",
        "en": "Ride Armor: enter, pilot and exit"
      },
      "steps": [
        {
          "id": "object.ride-armor.acceptance",
          "category": "objects",
          "title": {
            "pt": "Ride Armor: entrar, pilotar e sair",
            "en": "Ride Armor: enter, pilot and exit"
          },
          "weightBp": 70,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "tools/tests/test_objects_evidence.py",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card O1, decisões 1-3 do coordenador, a partir das gravações do R10 e do R12 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David, com imagens exatas nos quadros de cada um (V12); comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: ride.enter 83:8605 (chill-penguin-new-game f11047, 9 0x2F); ride.pilot 81:8E7F (chill-penguin-new-game f11090, 2631 0x2F); ride.exit 83:8673 (chill-penguin-new-game f11546, 4 0x2F). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card O1, coordinator decisions 1-3, from R10's and R12's WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes, pictures exact on each one's frames (V12); behaviour, bank:addr, first (take, frame), snapshots: enter 83:8605 (chill-penguin-new-game f11047, 9 0x2F); pilot 81:8E7F (chill-penguin-new-game f11090, 2631 0x2F); exit 83:8673 (chill-penguin-new-game f11546, 4 0x2F). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "object.pickups",
      "category": "objects",
      "title": {
        "pt": "Vida, energia, munição e drops",
        "en": "Health, energy, ammo and drops"
      },
      "steps": [
        {
          "id": "object.pickups.acceptance",
          "category": "objects",
          "title": {
            "pt": "Vida, energia, munição e drops",
            "en": "Health, energy, ammo and drops"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json",
            "tools/tests/test_objects_evidence_o2.py",
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md"
          ],
          "note": {
            "pt": "2026-09-26 (card O2, decisões 1-3 do coordenador, sobre as gravações do O1 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David (regra do O1, leitura residual do L29); comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: pickups.health 82:E590 (flame-mammoth-lava f4237, 269); pickups.energy 81:E653 (spark-mandrill f2204, 4); pickups.ammo 81:E0CE (chill-penguin-new-game f12219, 161); pickups.drops 84:A384 (intro-highway f1438, 106). KB knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json.",
            "en": "2026-09-26 (card O2, coordinator decisions 1-3, over O1's WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes (O1's rule, L29's residual reading); behaviour, bank:addr, first (take, frame), snapshots: health 82:E590 (flame-mammoth-lava f4237, 269); energy (sub tank) 81:E653 (spark-mandrill f2204, 4); ammo (weapon energy) 81:E0CE (chill-penguin-new-game f12219, 161); drops 84:A384 (intro-highway f1438, 106). KB knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "object.stage-changes",
      "category": "objects",
      "title": {
        "pt": "Mudanças nas fases após derrotar chefes",
        "en": "Stage changes after boss defeats"
      },
      "steps": [
        {
          "id": "object.stage-changes.acceptance",
          "category": "objects",
          "title": {
            "pt": "Mudanças nas fases após derrotar chefes",
            "en": "Stage changes after boss defeats"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "tools/tests/test_objects_evidence.py",
            "docs/tasks/done/O1-objects-evidence.md",
            "docs/tasks/done/L29-ledger-object-residuals.md"
          ],
          "note": {
            "pt": "2026-09-26 (card L29, KB do O1 com a regra de resíduo do L8), modo ROM-first (megaman-x.exe --rom-first): todo comportamento que o título nomeia roda em gravações com WRAM igual inteira: SC flooded (after LO) (80:BC95): primeiro launch-octopus-and-sting-flooded f28915, 8.357 quadros, imagens 8.357 de 8.357; SM dark (after SE) (80:BC83): primeiro storm-eagle-and-spark-dark f16923, 10.005 quadros, imagens 10.004 de 10.005; FM frozen (after CP) (80:BC71): primeiro items-collection f9381, 15.597 quadros, imagens 15.597 de 15.597. Imagens exatas em 33.958 de 33.959 quadros; o outro, storm-eagle-and-spark-dark f21065, é um resíduo de imagem que pertence ao passo visual (regra do L8; o O1 segurou o passo por ele sob a redação mais estrita do L26). Limite: os comportamentos gravados.",
            "en": "2026-09-26 (card L29, O1's KB with L8's residual rule), ROM-first mode (megaman-x.exe --rom-first): every behaviour the title names runs in WRAM-equal whole takes: SC flooded (after LO) (80:BC95): first launch-octopus-and-sting-flooded f28915, 8,357 frames, pictures 8,357 of 8,357; SM dark (after SE) (80:BC83): first storm-eagle-and-spark-dark f16923, 10,005 frames, pictures 10,004 of 10,005; FM frozen (after CP) (80:BC71): first items-collection f9381, 15,597 frames, pictures 15,597 of 15,597. Pictures exact on 33,958 of 33,959 frames; the one other, storm-eagle-and-spark-dark f21065, is a picture residual that belongs to the visual step (L8's rule; O1 held the step for it under L26's stricter wording). Bound: the recorded behaviours."
          }
        }
      ]
    },
    {
      "id": "object.moving-platforms",
      "category": "objects",
      "title": {
        "pt": "Plataformas móveis e elevadores",
        "en": "Moving platforms and elevators"
      },
      "steps": [
        {
          "id": "object.moving-platforms.acceptance",
          "category": "objects",
          "title": {
            "pt": "Plataformas móveis e elevadores",
            "en": "Moving platforms and elevators"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "tools/tests/test_objects_evidence.py",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card O1, decisões 1-3 do coordenador, a partir das gravações do R10 e do R12 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David, com imagens exatas nos quadros de cada um (V12); comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: platform.0x16 87:9794 (boomer-kuwanger f14828, 5956 0x16); platform.0x3F 87:B216 (boomer-kuwanger f11135, 10766 0x3F); platform.0x48 87:C07A (storm-eagle-and-spark-dark f10847, 212 0x48); platform.0x2B 88:97BA (armored-armadillo f1132, 2572 0x2B); elevator.0x3D 87:ADD8 (boomer-kuwanger f4553, 4157 0x3D). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json.",
            "en": "2026-09-26 (card O1, coordinator decisions 1-3, from R10's and R12's WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes, pictures exact on each one's frames (V12); behaviour, bank:addr, first (take, frame), snapshots: moving platforms 87:9794 (boomer-kuwanger f14828, 5956 0x16); moving platforms 87:B216 (boomer-kuwanger f11135, 10766 0x3F); moving platforms 87:C07A (storm-eagle-and-spark-dark f10847, 212 0x48); moving platforms 88:97BA (armored-armadillo f1132, 2572 0x2B); elevators 87:ADD8 (boomer-kuwanger f4553, 4157 0x3D). KB knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "object.destructibles",
      "category": "objects",
      "title": {
        "pt": "Blocos, obstáculos e cenário destrutível",
        "en": "Breakable blocks, obstacles and scenery"
      },
      "steps": [
        {
          "id": "object.destructibles.acceptance",
          "category": "objects",
          "title": {
            "pt": "Blocos, obstáculos e cenário destrutível",
            "en": "Breakable blocks, obstacles and scenery"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json",
            "tools/tests/test_objects_evidence_o2.py",
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "knowledge_base/mmx1/rom/x_state_coverage_2026-09-24.json",
            "knowledge_base/mmx1/rom/census_owners_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card O2, decisões 1-3 do coordenador, sobre as gravações do O1 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David (regra do O1, leitura residual do L29); comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: block.helmet_3c 81:9EBC (storm-eagle-and-spark-dark f20814, 1); block.0x41 87:B542 (storm-eagle-and-spark-dark f4604, 2); obstacle.0x18 83:BBD2 (sting-chameleon f3015, 20087); obstacle.0x0F 82:9689 (intro-highway f1873, 1233); scenery.0x46 87:BC8B (storm-eagle-and-spark-dark f6497, 485). KB knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json.",
            "en": "2026-09-26 (card O2, coordinator decisions 1-3, over O1's WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes (O1's rule, L29's residual reading); behaviour, bank:addr, first (take, frame), snapshots: breakable blocks 81:9EBC (storm-eagle-and-spark-dark f20814, 1); breakable blocks 87:B542 (storm-eagle-and-spark-dark f4604, 2); obstacles 83:BBD2 (sting-chameleon f3015, 20087); obstacles 82:9689 (intro-highway f1873, 1233); scenery 87:BC8B (storm-eagle-and-spark-dark f6497, 485). KB knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "object.conveyors-water",
      "category": "objects",
      "title": {
        "pt": "Esteiras, correntes, água e perigos ambientais",
        "en": "Conveyors, currents, water and environmental hazards"
      },
      "steps": [
        {
          "id": "object.conveyors-water.acceptance",
          "category": "objects",
          "title": {
            "pt": "Esteiras, correntes, água e perigos ambientais",
            "en": "Conveyors, currents, water and environmental hazards"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/small_areas_2026-09-26.json",
            "tools/tests/test_small_areas.py",
            "knowledge_base/mmx1/rom/objects_evidence_o2_2026-09-26.json",
            "knowledge_base/mmx1/rom/objects_evidence_2026-09-26.json"
          ],
          "note": {
            "pt": "2026-09-26 (gang G4, regra do O2: O1/W37 com a leitura residual do L29 só para quadros colour_math, sobre as 22 gravações do O1 com WRAM igual inteira e suas capturas K5): todo comportamento que o título nomeia roda nas gravações do David; comportamento, banco:endereço, primeiro (gravação, quadro), snapshots: conveyor.0x39 83:E1BC (flame-mammoth-lava q8923, 955); currents 87:DABD (storm-eagle-and-spark-dark q12729, 720); water 84:9557 (launch-octopus-and-sting-flooded q1175, 32.596); hazard.0x42 87:B808 (boomer-kuwanger q2964, 7.438); hazard.0x43 87:B91C (boomer-kuwanger q2998, 3.387); hazard.0x44 87:BA72 (boomer-kuwanger q2964, 7.148); hazard.0x4C 87:C994 (flame-mammoth-lava q9840, 2.189). Água é o estado de água do X: os tipos de tile de colisão 0x0D/0x0E despacham (84:9490, 84:9600) para 84:9557 / 84:987E (TSB $0C18 bit0, peso $21, teto de queda $FD40) e os tipos 0x00/0x0F/0x10 para 84:9529 / 84:969C (saída); na água 81:9B7B faz as bolhas; visto em 3 gravações (launch-octopus-and-sting-flooded 49 entradas, 49 saídas). Imagens exatas em todo quadro visto, exceto resíduos colour_math: launch-octopus-auto 11 (f3656, f3666, f3672). Limite: as gravações registradas. KB knowledge_base/mmx1/rom/small_areas_2026-09-26.json.",
            "en": "2026-09-26 (gang G4, O2's rule: O1/W37 with L29's residual reading for colour_math frames only, over O1's 22 WRAM-equal whole takes and their K5 captures): every behaviour the title names runs in David's takes; behaviour, bank:addr, first (take, frame), snapshots: conveyors 83:E1BC (flame-mammoth-lava f8923, 955); currents 87:DABD (storm-eagle-and-spark-dark f12729, 720); water 84:9557 (launch-octopus-and-sting-flooded f1175, 32,596); environmental hazards 87:B808 (boomer-kuwanger f2964, 7,438); environmental hazards 87:B91C (boomer-kuwanger f2998, 3,387); environmental hazards 87:BA72 (boomer-kuwanger f2964, 7,148); environmental hazards 87:C994 (flame-mammoth-lava f9840, 2,189). Water is X's water state: collision tile types 0x0D/0x0E dispatch (84:9490, 84:9600) to 84:9557 / 84:987E (TSB $0C18 bit0, weight $21, fall cap $FD40) and types 0x00/0x0F/0x10 to 84:9529 / 84:969C (exit); in water 81:9B7B makes the bubbles; seen in 3 takes (launch-octopus-and-sting-flooded 49 entries, 49 exits). Pictures exact on every seen frame except colour_math residuals: launch-octopus-auto 11 (f3656, f3666, f3672). Bound: the recorded takes. KB knowledge_base/mmx1/rom/small_areas_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "foundation.pack",
      "category": "campaign",
      "title": {
        "pt": "Pack X1 com 13 fases, identidade tipada e caminhos seguros",
        "en": "Pack identity and safe paths"
      },
      "steps": [
        {
          "id": "foundation.pack.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Pack X1 com 13 fases, identidade tipada e caminhos seguros",
            "en": "Pack identity and safe paths"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "O manifest X1 lista as 13 configurações de fase, todos os arquivos referenciados existem, StageId/BossId/WeaponId permanecem tipos distintos e os caminhos fora da raiz são rejeitados.",
            "en": "Preserve the exact accepted behavior and limitations of the referenced foundation contracts."
          },
          "evidence": [
            "content/x1/manifest.json",
            "tests/cpp/content_pack_contract_test.cpp",
            "tests/cpp/content_paths_contract_test.cpp",
            "tests/cpp/stage_identity_contract_test.cpp",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Verificado como contrato de infraestrutura. Isso não certifica paridade visual, inimigos, armas ou progressão; os arrays de weapons e enemies do manifest continuam vazios.",
            "en": "Existing accepted foundation contract; not complete campaign fidelity or physical owner QA."
          }
        }
      ]
    },
    {
      "id": "foundation.controls",
      "category": "campaign",
      "title": {
        "pt": "Controles e opções com validação e persistência",
        "en": "Input bindings and settings data"
      },
      "steps": [
        {
          "id": "foundation.controls.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Controles e opções com validação e persistência",
            "en": "Input bindings and settings data"
          },
          "weightBp": 75,
          "status": "verified",
          "acceptance": {
            "pt": "Bindings padrão de teclado e gamepad são seguros; remapeamentos válidos persistem; conflitos são rejeitados; limites, idioma e bindings das opções preservam estado válido.",
            "en": "Preserve the exact accepted behavior and limitations of the referenced foundation contracts."
          },
          "evidence": [
            "tests/cpp/input_bindings_contract_test.cpp",
            "tests/cpp/settings_contract_test.cpp",
            "src/app/input_bindings.cpp",
            "src/data/settings.cpp",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Verificado no contrato de dados e configuração. QA físico e a interação combinada completa continuam fora deste critério.",
            "en": "Existing accepted foundation contract; not complete campaign fidelity or physical owner QA."
          }
        }
      ]
    },
    {
      "id": "foundation.save-password",
      "category": "campaign",
      "title": {
        "pt": "Slots, progressão persistente e password",
        "en": "Save and password data contracts"
      },
      "steps": [
        {
          "id": "foundation.save-password.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Slots, progressão persistente e password",
            "en": "Save and password data contracts"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Segurança dos slots nomeados e numerados, save/load de progressão e armas, reset de nova campanha e estado de cursor/dígitos do password são cobertos por contratos diretos.",
            "en": "Preserve the exact accepted behavior and limitations of the referenced foundation contracts."
          },
          "evidence": [
            "tests/cpp/save_system_contract_test.cpp",
            "tests/cpp/password_entry_contract_test.cpp",
            "tests/cpp/mmx1_password_contract_test.cpp",
            "src/data/save_system.cpp",
            "src/data/mmx1_password.cpp"
          ],
          "note": {
            "pt": "Verificado como contrato de dados. Não afirma que uma campanha completa foi salva, restaurada e terminada por todas as rotas.",
            "en": "Existing accepted foundation contract; not complete campaign fidelity or physical owner QA."
          }
        }
      ]
    },
    {
      "id": "foundation.catalog",
      "category": "campaign",
      "title": {
        "pt": "Catálogo tipado dos chefes e recompensas de X1",
        "en": "Typed boss/reward catalog"
      },
      "steps": [
        {
          "id": "foundation.catalog.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Catálogo tipado dos chefes e recompensas de X1",
            "en": "Typed boss/reward catalog"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "O catálogo mantém oito relações únicas de Maverick entre fase, chefe, recompensa e fraqueza, além das quatro entradas únicas da rota Sigma, com os cursores de origem corrigidos.",
            "en": "Preserve the exact accepted behavior and limitations of the referenced foundation contracts."
          },
          "evidence": [
            "tests/cpp/catalog_contract_test.cpp",
            "src/data/x1_catalog.cpp",
            "src/data/x1_catalog.h",
            "content/x1/manifest.json"
          ],
          "note": {
            "pt": "Verificado como catálogo. A tabela correta não prova que todos os encontros estão alcançáveis ou completos em jogo.",
            "en": "Existing accepted foundation contract; not complete campaign fidelity or physical owner QA."
          }
        }
      ]
    },
    {
      "id": "delivery.package",
      "category": "delivery",
      "title": {
        "pt": "Pacote de teste X1 verificado após extração",
        "en": "Extracted portable baseline package"
      },
      "steps": [
        {
          "id": "delivery.package.acceptance",
          "category": "delivery",
          "title": {
            "pt": "Pacote de teste X1 verificado após extração",
            "en": "Extracted portable baseline package"
          },
          "weightBp": 75,
          "status": "verified",
          "acceptance": {
            "pt": "Uma versão identificada deve ser empacotada, ter checksum verificado, iniciar em pasta vazia, responder a --help e passar um autoteste extraído sem levar ROM ou KB bruto.",
            "en": "Preserve the exact accepted behavior and limitations of the referenced foundation contracts."
          },
          "evidence": [
            "docs/goal/ENDGAME.md",
            "RELEASE-CHECKLIST.md",
            "docs/STATE.md"
          ],
          "note": {
            "pt": "Pacote local verificado no baseline 7788dc7f1: checksum, extração em pasta vazia, PATH sem o toolchain MSYS2, ajuda e caminhadas de Chill Penguin e Storm Eagle aprovados. Sem ROM nem KB bruto; 42 arquivos de KB de runtime permitidos. Revisão manual título→seleção separada; não é uma distribuição pública do jogo completo.",
            "en": "Existing accepted foundation contract; not complete campaign fidelity or physical owner QA."
          }
        }
      ]
    },
    {
      "id": "campaign.title-select",
      "category": "campaign",
      "title": {
        "pt": "Título, seleção e navegação completas",
        "en": "Complete title, selection and navigation"
      },
      "steps": [
        {
          "id": "campaign.title-select.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Título, seleção e navegação completas",
            "en": "Complete title, selection and navigation"
          },
          "weightBp": 55,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/goal/ENDGAME.md",
            "knowledge_base/mmx1/rom/title_menu_tapes_2026-09-26.json",
            "tools/tests/test_title_menu_tapes.py",
            "knowledge_base/mmx1/rom/intake_title_menu_2026-09-25.json",
            "tools/tests/test_intake_title_menu.py",
            "knowledge_base/mmx1/rom/ppu_gate_title_start_2026-09-26.json",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json"
          ],
          "note": {
            "pt": "2026-09-26 (card R13, decisões 1-3 do coordenador): pontua: toda função da tela de título roda num filme inteiro com WRAM igual e imagens exatas. Fitas desde o power-on pelo método do K14 (make_tape.lua): title-options-all (2253 quadros) roda cada item do OPTION MODE uma vez e sai por EXIT; title-password-accepted (2401 quadros) digita a senha que a própria ROM escreveu na gravação chill-penguin-new-game do David (f17960, 7 1 0 7 6 2 6 6 3 2 7 0 em $7EFFCB..$7EFFD6) e confirma. Intakes (intake_movie.py --ppu mesen2, referência buffer do V12): title-options-all frame gate 2252 of 2252, WRAM 2252 of 2252, imagens 2251 of 2251; title-password-accepted frame gate 2400 of 2400, WRAM 2400 of 2400, imagens 2399 of 2399. Vistas: troca de botões 80:EB68 title-options-all f1020, estéreo/mono 80:EBE5 title-options-all f1488, teste de BGM 80:EC27 title-options-all f1566 e 80:EC51 title-options-all f1592, teste de SE 80:EC6B title-options-all f1762 e 80:EC9D title-options-all f1788, EXIT 80:ECD0 title-options-all f1958; senha aceita 80:F201 title-password-accepted f1776. Os quatro filmes do R11 como no R11 (imagens dos três filmes do K14 exatas inteiras desde o V15); a seleção de fases 80:9576 nas gravações do R10 (17 com imagens exatas inteiras; intro-highway f14833). Exigidas 15, vistas em filmes verificados 15. KB knowledge_base/mmx1/rom/title_menu_tapes_2026-09-26.json.",
            "en": "2026-09-26 (card R13, coordinator decisions 1-3): credited: every title function runs in a WRAM-equal whole movie with pictures exact. Tapes from power-on by K14's method (make_tape.lua): title-options-all (2253 frames) runs every option item once, then EXIT; title-password-accepted (2401 frames) types the password the ROM wrote in David's chill-penguin-new-game (f17960, 7 1 0 7 6 2 6 6 3 2 7 0 in $7EFFCB..$7EFFD6) and confirms it. Intakes (intake_movie.py --ppu mesen2, V12's buffer reference): title-options-all frame gate 2252 of 2252, WRAM 2252 of 2252, pictures 2251 of 2251; title-password-accepted frame gate 2400 of 2400, WRAM 2400 of 2400, pictures 2399 of 2399. Seen: key config 80:EB68 title-options-all f1020, stereo/mono 80:EBE5 title-options-all f1488, BGM test 80:EC27 title-options-all f1566 and 80:EC51 title-options-all f1592, SE test 80:EC6B title-options-all f1762 and 80:EC9D title-options-all f1788, EXIT 80:ECD0 title-options-all f1958; accepted password 80:F201 title-password-accepted f1776. R11's four movies as R11 (the three K14 movies' pictures exact whole since V15); the stage select 80:9576 in R10's takes (17 with pictures exact whole; intro-highway f14833). Required 15, seen in verified movies 15. KB knowledge_base/mmx1/rom/title_menu_tapes_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "campaign.pause",
      "category": "campaign",
      "title": {
        "pt": "Menu de pausa, armas e tanques",
        "en": "Pause menu, weapons and tanks"
      },
      "steps": [
        {
          "id": "campaign.pause.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Menu de pausa, armas e tanques",
            "en": "Pause menu, weapons and tanks"
          },
          "weightBp": 45,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/pause_menu_2026-09-25.json",
            "tools/tests/test_pause_menu.py",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "docs/tasks/done/L23-ledger-campaign-scenes.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L26, decisões 1-3 do coordenador, a partir das gravações do R10 com WRAM igual inteira e suas capturas K5): toda função do menu de pausa do banco 80 do re/mmx1 roda nas gravações do David, com imagens exatas nos quadros de cada uma (V12). Abertura mainPauseMenuCheck_00 80:9E68 ($1F24 = 1 em 80:9E82) 21; estados de $1EC9 (CODE_JP_80C424): $00 80:C43E 21, $02 80:C4C6 21, $04 80:C4DB, $06 80:C4ED 21; cursor menuLeftRightInput 80:C787 16, menu_pressedUp 80:C7F6 26, menu_pressedDown 80:C856 73; sub-tanque 80:C6E3 8, depois 80:C723; START numa arma 80:C71E 10; célula $09 checkUpgradeSelect 80:C93C 12 (recusa getSelecteUpgrade 80:C94F 1, saída 80:C70B 11, depois $D3 = $0A em 80:9AF6); troca de arma 80:CE3A 1. Pausas em 13 das 21 gravações. KB knowledge_base/mmx1/rom/pause_menu_2026-09-25.json.",
            "en": "2026-09-25 (card L26, coordinator decisions 1-3, from R10's WRAM-equal whole takes and their K5 captures): every pause-menu function of re/mmx1 bank 80 runs in David's takes, pictures exact on each one's frames (V12). Opening mainPauseMenuCheck_00 80:9E68 ($1F24 = 1 at 80:9E82) 21; $1EC9 states (CODE_JP_80C424): $00 80:C43E 21, $02 80:C4C6 21, $04 80:C4DB, $06 80:C4ED 21; cursor menuLeftRightInput 80:C787 16, menu_pressedUp 80:C7F6 26, menu_pressedDown 80:C856 73; sub tank 80:C6E3 8, then 80:C723; START on a weapon 80:C71E 10; cell $09 checkUpgradeSelect 80:C93C 12 (refused getSelecteUpgrade 80:C94F 1, exit 80:C70B 11, then $D3 = $0A at 80:9AF6); weapon switch 80:CE3A 1. Pauses in 13 of 21 takes. KB knowledge_base/mmx1/rom/pause_menu_2026-09-25.json."
          }
        }
      ]
    },
    {
      "id": "campaign.campaign-progression",
      "category": "campaign",
      "title": {
        "pt": "Progressão, rematches e ordem da fortaleza",
        "en": "Progression, rematches and fortress order"
      },
      "steps": [
        {
          "id": "campaign.campaign-progression.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Progressão, rematches e ordem da fortaleza",
            "en": "Progression, rematches and fortress order"
          },
          "weightBp": 75,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/take_chain_2026-09-25.json",
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "tools/tests/test_take_chain.py",
            "tools/tests/test_campaign_scenes.py",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "docs/tasks/done/L20-ledger-sigma-win-ending.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L24, decisões 1-5 do coordenador, a partir do KB de cenas do R10): as gravações do David se ligam na seleção de fases. Junção = a gravação N termina numa seleção de fases e a N+1 começa numa com o mesmo cursor $1F7A e os mesmos bytes de progresso, os que o codificador de senha CODE_FN_80F090 lê: $1F99 (80:F090), $1F9C (80:F095), bit 6 de $1F88..$1F96 (80:F09E), bit 7 de $1F7E (80:F0AD), $1F9B (80:F0BE). Cadeia de 14 gravações (13 junções, bytes crus também iguais): intro-highway -> flame-mammoth-lava -> chill-penguin-new-game -> boomer-kuwanger -> spark-mandrill -> sting-chameleon -> launch-octopus-and-sting-flooded -> storm-eagle-and-spark-dark -> armored-armadillo -> items-collection -> sigma1-zero-arm -> sigma2 -> sigma3 -> sigma4-final-not-beaten; R8 e R9 pela entrada no nível 12 (f424, decisão 2) até o final do R9. Os 33 elos do L20: 21 dentro de uma gravação (R10), 10 através de junções, 2 pela decisão 4: o código do SC (88:853E..88:8F29) e do SM (88:9BE1..88:A381) não escreve $1F0C; o fim da luta (88:8D1C, 88:A34F) leva à arma (f23544, f25411). Fora da cadeia: flame-mammoth-arm-capsule e os 4 tours automáticos. KB knowledge_base/mmx1/rom/take_chain_2026-09-25.json.",
            "en": "2026-09-25 (card L24, coordinator decisions 1-5, from R10's scenes KB): David's takes join at the stage select. Join = take N ends in a stage select and take N+1 starts in one with the same cursor $1F7A and the same progress bytes, the ones the password encoder CODE_FN_80F090 reads: $1F99 (80:F090), $1F9C (80:F095), bit 6 of $1F88..$1F96 (80:F09E), bit 7 of $1F7E (80:F0AD), $1F9B (80:F0BE). Chain of 14 takes (13 joins, raw bytes equal too): intro-highway -> flame-mammoth-lava -> chill-penguin-new-game -> boomer-kuwanger -> spark-mandrill -> sting-chameleon -> launch-octopus-and-sting-flooded -> storm-eagle-and-spark-dark -> armored-armadillo -> items-collection -> sigma1-zero-arm -> sigma2 -> sigma3 -> sigma4-final-not-beaten; R8 and R9 by the level-12 entry (f424, decision 2) to R9's ending. L20's 33 links: 21 inside a take (R10), 10 across joins, 2 by decision 4: SC's code (88:853E..88:8F29) and SM's (88:9BE1..88:A381) write no $1F0C; their fight end (88:8D1C, 88:A34F) leads to the weapon get (f23544, f25411). Off the chain: flame-mammoth-arm-capsule and the 4 auto tours. KB knowledge_base/mmx1/rom/take_chain_2026-09-25.json."
          }
        }
      ]
    },
    {
      "id": "campaign.intro-story",
      "category": "campaign",
      "title": {
        "pt": "Abertura, Vile e Zero",
        "en": "Opening, Vile and Zero"
      },
      "steps": [
        {
          "id": "campaign.intro-story.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Abertura, Vile e Zero",
            "en": "Opening, Vile and Zero"
          },
          "weightBp": 60,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "knowledge_base/mmx1/rom/stage_population_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "tools/tests/test_campaign_scenes.py",
            "tools/tests/test_intake_david_0924.py",
            "tools/tests/test_ppu_reference_buffer.py",
            "tools/tests/test_stage_population.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L23, decisão 3 do coordenador, a partir do KB de cenas do R10, da ingestão do R6, do S30, do V12 e de uma leitura de re/mmx1), modo ROM-first: as rotinas de história da fase de abertura, pela ROM: a caixa de diálogo eventID_3C_textBoxFace (80:FADD -> eventID_textBoxFace_3c_main 87:ABA3) e os atores da história eventID_32_mechVile (80:FAAB -> eventID_mechVile_32_main 83:CF70) e eventID_33_zero (80:FAB0 -> eventID_zero_33_main 88:A382). A lista de posicionamento da ROM do nível 0 (S30, 91 entradas) não põe nenhum deles; a ROM os cria por código: 83:D793 grava o id 0x33 no +$0A de um slot novo, no código de mechVile; 83:D84F grava o id 0x3C no +$0A de um slot novo, no código de mechVile; 88:A781 grava o id 0x3C no +$0A de um slot novo, no código de zero. Depois da conclusão ($1F9B $00 -> $04 em f14378) a fase roda CODE_809B70 ($D3 $08, 80:9B70) f14378-14490 e CODE_809B8D ($D3 $0A, 80:9B8D) f14491-14831, depois a seleção de fases a partir de f14833. A gravação intro-highway.mmo do David (R6) roda todas: 0x32 f10607-12863, 0x33 f12148-14378, 0x3C f11449-12057 e f13046-14261 (slots de objeto do R6). A WRAM do programa gerado é igual à captura em todos os quadros (15,577 de 15,577) e as imagens sob a PPU do Mesen2 contra a referência de buffer de tela do V12 são exatas em todos os quadros (15,576 de 15,576). Limite: o som é conferido só do lado da CPU (WRAM); sem execução da APU.",
            "en": "2026-09-25 (card L23, coordinator decision 3, from R10's scenes KB, R6's intake, S30, V12 and a read of re/mmx1), ROM-first mode: the intro stage's story handlers, from the ROM: the dialogue box eventID_3C_textBoxFace (80:FADD -> eventID_textBoxFace_3c_main 87:ABA3) and the story actors eventID_32_mechVile (80:FAAB -> eventID_mechVile_32_main 83:CF70) and eventID_33_zero (80:FAB0 -> eventID_zero_33_main 88:A382). Level 0's ROM placement list (S30, 91 entries) places none of them; the ROM spawns them from code: 83:D793 writes id 0x33 into a new slot's +$0A in mechVile's code; 83:D84F writes id 0x3C into a new slot's +$0A in mechVile's code; 88:A781 writes id 0x3C into a new slot's +$0A in zero's code. After the clear ($1F9B $00 -> $04 at f14378) the stage runs CODE_809B70 ($D3 $08, 80:9B70) f14378-14490 and CODE_809B8D ($D3 $0A, 80:9B8D) f14491-14831, then the stage select from f14833. David's take intro-highway.mmo (R6) runs every one: 0x32 f10607-12863, 0x33 f12148-14378, 0x3C f11449-12057 and f13046-14261 (R6's object slots). The generated program's WRAM equals the capture on every frame (15,577 of 15,577) and the pictures under Mesen2's PPU against V12's screen-buffer reference are exact on every frame (15,576 of 15,576). Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "campaign.weapon-get",
      "category": "campaign",
      "title": {
        "pt": "Vitória e aquisição das oito armas",
        "en": "Victory and all eight weapon rewards"
      },
      "steps": [
        {
          "id": "campaign.weapon-get.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Vitória e aquisição das oito armas",
            "en": "Victory and all eight weapon rewards"
          },
          "weightBp": 60,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/campaign_scenes_2026-09-25.json",
            "knowledge_base/mmx1/rom/intake_david_0924_2026-09-24.json",
            "knowledge_base/mmx1/rom/intake_david_0925_2026-09-25.json",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "knowledge_base/mmx1/ram_map.json",
            "tools/tests/test_campaign_scenes.py",
            "tools/tests/test_intake_david_0924.py",
            "tools/tests/test_intake_david_0925.py",
            "tools/tests/test_ppu_reference_buffer.py",
            "docs/tasks/done/R10-campaign-scenes-kb.md",
            "docs/tasks/done/L23-ledger-campaign-scenes.md",
            "docs/tasks/done/L25-ledger-weapon-get.md"
          ],
          "note": {
            "pt": "2026-09-25 (card L25, correção do coordenador à decisão 1 do L23, a partir do KB de cenas do R10), modo ROM-first (megaman-x.exe --rom-first): para cada um dos 8 Mavericks, a arma nova roda desde o quadro em que o bit 6 do seu slot liga ($1F88..$1F96, ram_map.json), por CODE_809B70 ($D3 $08, 80:9B70) e CODE_809B8D ($D3 $0A, 80:9B8D, com a tela da arma $1F7A 27..34), até a seleção de fases: Homing Torpedo (launch-octopus, gravação launch-octopus-and-sting-flooded): f27407, CODE_809B70 até f27890, tela da arma $1F7A 27, seleção de fases f28368; Chameleon Sting (sting-chameleon, gravação sting-chameleon): f23544, CODE_809B70 até f24018, tela da arma $1F7A 28, seleção de fases f25174; Rolling Shield (armored-armadillo, gravação armored-armadillo): f12181, CODE_809B70 até f12690, tela da arma $1F7A 29, seleção de fases f14452; Fire Wave (flame-mammoth, gravação flame-mammoth-lava): f20894, CODE_809B70 até f21433, tela da arma $1F7A 30, seleção de fases f22599; Storm Tornado (storm-eagle, gravação storm-eagle-and-spark-dark): f15000, CODE_809B70 até f15468, tela da arma $1F7A 31, seleção de fases f16418; Electric Spark (spark-mandrill, gravação spark-mandrill): f25411, CODE_809B70 até f25951, tela da arma $1F7A 32, seleção de fases f26939; Boomerang Cutter (boomer-kuwanger, gravação boomer-kuwanger): f37393, CODE_809B70 até f37898, tela da arma $1F7A 33, seleção de fases f39756; Shotgun Ice (chill-penguin, gravação chill-penguin-new-game): f16654, CODE_809B70 até f17139, tela da arma $1F7A 34, seleção de fases f20224. Toda gravação tem WRAM igual inteira; imagens com a referência do V12 exatas em todo quadro dessas execuções (15.446 de 15.446). O L23 achou que a sequência $D2 $02 da sua decisão 1 roda na entrada da fase, não depois da arma. Limite: as armas gravadas, uma por Maverick; o comportamento das armas é dos passos de arma.",
            "en": "2026-09-25 (card L25, a coordinator correction of L23's decision 1, from R10's scenes KB), ROM-first mode (megaman-x.exe --rom-first): for each of the 8 Mavericks, the weapon get runs from the frame its slot's bit 6 sets ($1F88..$1F96, ram_map.json), through CODE_809B70 ($D3 $08, 80:9B70) and CODE_809B8D ($D3 $0A, 80:9B8D, with the weapon screen $1F7A 27..34), to the stage select: Homing Torpedo (launch-octopus, take launch-octopus-and-sting-flooded): f27407, CODE_809B70 to f27890, weapon screen $1F7A 27, stage select f28368; Chameleon Sting (sting-chameleon, take sting-chameleon): f23544, CODE_809B70 to f24018, weapon screen $1F7A 28, stage select f25174; Rolling Shield (armored-armadillo, take armored-armadillo): f12181, CODE_809B70 to f12690, weapon screen $1F7A 29, stage select f14452; Fire Wave (flame-mammoth, take flame-mammoth-lava): f20894, CODE_809B70 to f21433, weapon screen $1F7A 30, stage select f22599; Storm Tornado (storm-eagle, take storm-eagle-and-spark-dark): f15000, CODE_809B70 to f15468, weapon screen $1F7A 31, stage select f16418; Electric Spark (spark-mandrill, take spark-mandrill): f25411, CODE_809B70 to f25951, weapon screen $1F7A 32, stage select f26939; Boomerang Cutter (boomer-kuwanger, take boomer-kuwanger): f37393, CODE_809B70 to f37898, weapon screen $1F7A 33, stage select f39756; Shotgun Ice (chill-penguin, take chill-penguin-new-game): f16654, CODE_809B70 to f17139, weapon screen $1F7A 34, stage select f20224. Every take is WRAM equal whole; pictures under V12's reference exact on every frame of those runs (15,446 of 15,446). L23 found that the $D2 $02 sequence its decision 1 named runs at stage entry, not after the get. Bound: the recorded gets, one per Maverick; the weapons' own behaviour belongs to the weapon steps."
          }
        }
      ]
    },
    {
      "id": "campaign.ending",
      "category": "campaign",
      "title": {
        "pt": "Final e créditos",
        "en": "Ending and credits"
      },
      "steps": [
        {
          "id": "campaign.ending.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Final e créditos",
            "en": "Ending and credits"
          },
          "weightBp": 65,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "knowledge_base/mmx1/rom/intake_david_0925c_2026-09-25.json",
            "tools/tests/test_intake_david_0925c.py",
            "docs/tasks/done/R9-intake-david-sigma-final-win-0925.md",
            "knowledge_base/mmx1/rom/ppu_gate_mesen2_buffer_2026-09-25.json",
            "tools/tests/test_ppu_reference_buffer.py"
          ],
          "note": {
            "pt": "2026-09-25 (card L20, a partir do KB e do Result do R9 e de uma leitura de 80:A50A), modo ROM-first: a gravação da vitória do David, krl.mmo (R9), roda o final dentro da gravação: a vitória (a subida de $1F0C com 0x6B ativo) em f13897, nível 12 até f23000, depois nível 0 de f23001 ($D3 $0A -> $16) até o fim da gravação em f44618; os créditos a partir de f30808 ($D3 $04 -> $0C). A WRAM do programa gerado é igual à captura em todos os quadros f2..44618 (44,617 de 44,617) e as imagens sob a PPU do Mesen2 contra a referência de buffer de tela do V12 são exatas em todos os quadros (44,616 de 44,616; nível 0: 21,618 de 21,618). Último estado, pela leitura da rotina dos créditos: o laço 80:A516..80:A526 de 80:A50A (JSR (80:A528,X) por $1E49, JSR pauseFunc_05, BRA de volta; sem saída) salta por 8 entradas $00..$0E; cada rotina grava o índice seguinte (80:A53A .. 80:A635); a de $0C (80:A61C) apaga b_colorV_cb/cc/cd até 0 e depois grava $0E em 80:A635; a de $0E, 80:A637, é um RTS sozinho, então $0E é o último estado dos créditos. R9 (Result): $1E49 passa por $02 em f30843, $04..$0E em f36400..36622 e fica em $0E até o fim da gravação, f44618. Limite: o som é conferido só do lado da CPU (WRAM); sem execução da APU.",
            "en": "2026-09-25 (card L20, from R9's KB and Result and a read of 80:A50A), ROM-first mode: David's win take krl.mmo (R9) runs the ending inside the take: the win (the $1F0C rise with 0x6B active) at f13897, level 12 to f23000, then level 0 from f23001 ($D3 $0A -> $16) to the take's end f44618; the roll (credits) from f30808 ($D3 $04 -> $0C). The generated program's WRAM equals the capture on every frame f2..44618 (44,617 of 44,617) and the pictures under Mesen2's PPU against V12's screen-buffer reference are exact on every frame (44,616 of 44,616; level 0: 21,618 of 21,618). Last state, by a read of the roll's routine: 80:A50A's loop 80:A516..80:A526 (JSR (80:A528,X) by $1E49, JSR pauseFunc_05, BRA back; no exit) jumps through 8 entries $00..$0E; each handler stores the next index (80:A53A .. 80:A635); $0C's handler (80:A61C) fades b_colorV_cb/cc/cd to 0, then stores $0E at 80:A635; $0E's handler 80:A637 is a bare RTS, so $0E is the roll's last state. R9 (Result): $1E49 steps $02 at f30843, $04..$0E at f36400..36622 and holds $0E to the take's end, f44618. Bound: sound is checked on the CPU side only (WRAM); no APU run."
          }
        }
      ]
    },
    {
      "id": "campaign.audio",
      "category": "campaign",
      "title": {
        "pt": "BGM e transições de áudio da campanha",
        "en": "Campaign BGM and audio transitions"
      },
      "steps": [
        {
          "id": "campaign.audio.acceptance",
          "category": "campaign",
          "title": {
            "pt": "BGM e transições de áudio da campanha",
            "en": "Campaign BGM and audio transitions"
          },
          "weightBp": 65,
          "status": "partial",
          "partial": {
            "seen": 32,
            "total": 33,
            "$source": "knowledge_base/mmx1/rom/campaign_audio_parts_2026-10-08_r41.json#/parts (music ids seen true 32 of 33, each upload inside a whole campaign audio window); read at git 36e1cb52a"
          },
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/goal/ENDGAME.md",
            "knowledge_base/mmx1/rom/campaign_audio_parts_2026-10-08_r41.json",
            "knowledge_base/mmx1/rom/campaign_audio_2026-10-08_r35.json",
            "docs/tasks/done/R41-campaign-audio-parts.md"
          ],
          "note": {
            "pt": "2026-10-08 (L9, card R41; regra LG1 numa lista fechada nova, nenhum peso mudou): as 33 músicas $10..$30, fechadas pela ROM (tabela 86:806B, teste de BGM das opções 80:EC3B); conta uma música cujo envio $FA cai numa janela de áudio de campanha inteira (WRAM, leituras de porta e quadros de APU N de N; R35). Vistas 32 de 33; falta $10, que já toca no primeiro quadro de intro-highway (envio no estado inicial). Efeitos sonoros contam em player, weapon e enemy.",
            "en": "2026-10-08 (L9, card R41; rule LG1 on a new closed list, no weight changed): the 33 music ids $10..$30, closed by the ROM (table 86:806B, option BGM test 80:EC3B); a song counts when its $FA upload lies in a whole campaign audio window (WRAM, port reads and APU frames N of N; R35). Seen 32 of 33; $10 is missing, already playing at intro-highway f1 (upload in the start state). Sound effects count under player, weapon and enemy."
          }
        }
      ]
    },
    {
      "id": "campaign.integration",
      "category": "campaign",
      "title": {
        "pt": "Salvar, retornar, terminar e controles reais",
        "en": "Save, resume, finish and physical controls"
      },
      "steps": [
        {
          "id": "campaign.integration.acceptance",
          "category": "campaign",
          "title": {
            "pt": "Salvar, retornar, terminar e controles reais",
            "en": "Save, resume, finish and physical controls"
          },
          "weightBp": 100,
          "status": "partial",
          "partial": {
            "seen": 3,
            "total": 4,
            "$source": "knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json#/campaign_integration/parts (seen true 3 of 4: save, resume, finish, physical_controls); read at git 82ac4e471"
          },
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/goal/ENDGAME.md",
            "knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json",
            "tools/tests/test_g10_sigma4_campaign.py"
          ],
          "note": {
            "pt": "2026-09-26 (card G10): incompleto. Visto: salvar (codificador de senha 80:F00F -> 80:F090, chill-penguin-new-game f17960), retomar (title-password-accepted: aceita em 80:F201 no f1776, os bytes que o codificador lê no f1777 iguais aos salvos; continue após game over, sigma4-final-not-beaten f11321 -> f11919), terminar (cadeia L24 de 16 gravações, da abertura ao final). Falta: controles reais; nenhuma gravação com WRAM igual mostra um controle no nosso exe. Depende do David: uma sessão no megaman-x.exe --rom-first com o controle dele, com o log de entradas reproduzido no Mesen2 com WRAM igual. KB knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json.",
            "en": "2026-09-26 (card G10): not whole. Seen: save (password encoder 80:F00F -> 80:F090, chill-penguin-new-game f17960), resume (title-password-accepted: accepted 80:F201 at f1776, the bytes the encoder reads at f1777 equal the saved ones; continue after game over, sigma4-final-not-beaten f11321 -> f11919), finish (L24 chain of 16 takes, intro to ending). Missing: physical controls; no WRAM-equal take shows a pad on our exe. Needs David: a session on megaman-x.exe --rom-first with his pad, its input log replayed in Mesen2 WRAM equal. KB knowledge_base/mmx1/rom/g10_sigma4_campaign_2026-09-26.json."
          }
        }
      ]
    },
    {
      "id": "delivery.docs",
      "category": "delivery",
      "title": {
        "pt": "Documentação de instalação e jogo",
        "en": "Installation and play documentation"
      },
      "steps": [
        {
          "id": "delivery.docs.acceptance",
          "category": "delivery",
          "title": {
            "pt": "Documentação de instalação e jogo",
            "en": "Installation and play documentation"
          },
          "weightBp": 50,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "README.md",
            "docs/rom/README.md",
            "docs/tasks/done/T6-next-docs.md",
            "tools/package_release.py"
          ],
          "note": {
            "pt": "2026-09-30 (T6-next-docs): 4/4 obrigações — build/instalação, controles, lançamento ROM-first com a ROM do usuário (só local) e zip do motor legado que inicia e passa o autoteste de fase (ctest -L release). Onboarding humano e smoke final do pacote ficam com o dono e a regressão final.",
            "en": "2026-09-30 (T6-next-docs): 4/4 obligations - build/install, controls, ROM-first launch with the user-supplied ROM (local-only) and the legacy-engine zip booting and passing a stage autotest (ctest -L release). Human onboarding and the final package smoke stay with the owner and final regression."
          }
        }
      ]
    },
    {
      "id": "delivery.final-regression",
      "category": "delivery",
      "title": {
        "pt": "Regressões completas no candidato final",
        "en": "Full regression on final candidate"
      },
      "steps": [
        {
          "id": "delivery.final-regression.acceptance",
          "category": "delivery",
          "title": {
            "pt": "Regressões completas no candidato final",
            "en": "Full regression on final candidate"
          },
          "weightBp": 75,
          "status": "pending",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/goal/ENDGAME.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        }
      ]
    },
    {
      "id": "delivery.showcase",
      "category": "delivery",
      "title": {
        "pt": "Longplay completo e comparações por fase",
        "en": "Full longplay and per-stage comparisons"
      },
      "steps": [
        {
          "id": "delivery.showcase.acceptance",
          "category": "delivery",
          "title": {
            "pt": "Longplay completo e comparações por fase",
            "en": "Full longplay and per-stage comparisons"
          },
          "weightBp": 100,
          "status": "verified",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/evidence/final-showcase/README.md",
            "docs/evidence/final-showcase/manifest.json",
            "tools/video/showcase/render.py",
            "docs/tasks/done/D1-final-showcase.md"
          ],
          "note": {
            "pt": "2026-09-30 (D1): longplay do jogo inteiro no motor (13 fases, 1h35) e montagem lado a lado das 13 fases (original SNES x motor, 30 s cada), com instruções de regeneração, manifesto e 13 quadros; WRAM igual em todo quadro. Vídeos locais (política de evidência). David assistiu e aprovou em 30/09 (\"achei muito bom, não vi diferença nenhuma\"). Som ainda ausente em 5 fases da montagem/longplay (SM, LO, BK, FM, Sigma 1), a acrescentar.",
            "en": "2026-09-30 (D1): full-game engine longplay (13 stages, 1h35) and 13-stage side-by-side montage (original SNES vs engine, 30 s each), with regeneration instructions, manifest and 13 stills; WRAM equal on every frame. Videos local-only (evidence policy). David watched and approved on 2026-09-30. Sound still missing in 5 stages (SM, LO, BK, FM, Sigma 1), to be added."
          }
        }
      ]
    },
    {
      "id": "delivery.owner",
      "category": "delivery",
      "title": {
        "pt": "Dono joga do início aos créditos e aceita",
        "en": "Owner plays opening to credits and accepts"
      },
      "steps": [
        {
          "id": "delivery.owner.acceptance",
          "category": "delivery",
          "title": {
            "pt": "Dono joga do início aos créditos e aceita",
            "en": "Owner plays opening to credits and accepts"
          },
          "weightBp": 100,
          "status": "pending",
          "acceptance": {
            "pt": "Comportamento descrito medido na origem, integrado no motor e verificado pelos gates aplicáveis de ENDGAME.",
            "en": "Named behavior measured in the source, integrated into the engine and verified by applicable ENDGAME gates."
          },
          "evidence": [
            "docs/goal/ENDGAME.md"
          ],
          "note": {
            "pt": "Escopo ainda não fechado por evidência integrada; não pontua.",
            "en": "Scope not yet closed by integrated evidence; earns no credit."
          }
        }
      ]
    }
  ],
  "legacyMapping": [
    {
      "oldId": "x1-01-pack-identity-paths",
      "oldWeightBp": 100,
      "featureIds": [
        "foundation.pack"
      ],
      "note": {
        "pt": "Aceite preservado; peso recalibrado dentro dos 100% de X1.",
        "en": "Acceptance preserved; weight recalibrated within X1 total scope."
      }
    },
    {
      "oldId": "x1-02-input-options",
      "oldWeightBp": 200,
      "featureIds": [
        "foundation.controls"
      ],
      "note": {
        "pt": "Aceite preservado; peso recalibrado dentro dos 100% de X1.",
        "en": "Acceptance preserved; weight recalibrated within X1 total scope."
      }
    },
    {
      "oldId": "x1-03-save-password",
      "oldWeightBp": 300,
      "featureIds": [
        "foundation.save-password"
      ],
      "note": {
        "pt": "Aceite preservado; peso recalibrado dentro dos 100% de X1.",
        "en": "Acceptance preserved; weight recalibrated within X1 total scope."
      }
    },
    {
      "oldId": "x1-04-catalog-route",
      "oldWeightBp": 100,
      "featureIds": [
        "foundation.catalog"
      ],
      "note": {
        "pt": "Aceite preservado; peso recalibrado dentro dos 100% de X1.",
        "en": "Acceptance preserved; weight recalibrated within X1 total scope."
      }
    },
    {
      "oldId": "x1-05-release-package",
      "oldWeightBp": 100,
      "featureIds": [
        "delivery.package"
      ],
      "note": {
        "pt": "Aceite preservado; peso recalibrado dentro dos 100% de X1.",
        "en": "Acceptance preserved; weight recalibrated within X1 total scope."
      }
    }
  ],
  "scopeRoster": {
    "knownEnemyDefinitions": [
      "intro_spikeball",
      "intro_robot",
      "intro_helicopter",
      "axemax",
      "walker",
      "bat",
      "cp_bat",
      "mad_pecker",
      "se_drone",
      "se_met",
      "stretch_bird",
      "se_strider",
      "se_mech",
      "se_turret",
      "se_eaglet",
      "cp_snowball",
      "rush_roader"
    ],
    "censusObjectOids": [
      "0x01",
      "0x02",
      "0x03",
      "0x04",
      "0x05",
      "0x06",
      "0x07",
      "0x08",
      "0x0A",
      "0x0B",
      "0x0C",
      "0x0D",
      "0x0E",
      "0x0F",
      "0x10",
      "0x11",
      "0x12",
      "0x13",
      "0x14",
      "0x15",
      "0x16",
      "0x17",
      "0x18",
      "0x19",
      "0x1A",
      "0x1B",
      "0x1C",
      "0x1D",
      "0x1E",
      "0x1F",
      "0x20",
      "0x21",
      "0x22",
      "0x26",
      "0x27",
      "0x28",
      "0x29",
      "0x2A",
      "0x2B",
      "0x2C",
      "0x2D",
      "0x2E",
      "0x2F",
      "0x30",
      "0x31",
      "0x32",
      "0x33",
      "0x34",
      "0x35",
      "0x36",
      "0x37",
      "0x38",
      "0x39",
      "0x3A",
      "0x3B",
      "0x3C",
      "0x3D",
      "0x3F",
      "0x40",
      "0x41",
      "0x42",
      "0x43",
      "0x44",
      "0x46",
      "0x47",
      "0x48",
      "0x49",
      "0x4A",
      "0x4B",
      "0x4C",
      "0x4D",
      "0x4E",
      "0x4F",
      "0x50",
      "0x51",
      "0x52",
      "0x53",
      "0x54",
      "0x57",
      "0x58",
      "0x59",
      "0x5A",
      "0x5B",
      "0x5C",
      "0x5D",
      "0x5E",
      "0x5F",
      "0x60",
      "0x61",
      "0x62",
      "0x63",
      "0x64",
      "0x65",
      "0x66",
      "0x67",
      "0x68",
      "0x69",
      "0x6A",
      "0x6B"
    ],
    "unresolvedCensusOids": [
      "0x01",
      "0x02",
      "0x03",
      "0x05",
      "0x06",
      "0x07",
      "0x08",
      "0x0A",
      "0x0C",
      "0x0D",
      "0x0E",
      "0x10",
      "0x11",
      "0x12",
      "0x13",
      "0x14",
      "0x16",
      "0x17",
      "0x18",
      "0x1A",
      "0x1B",
      "0x1C",
      "0x1D",
      "0x1E",
      "0x1F",
      "0x20",
      "0x21",
      "0x22",
      "0x26",
      "0x28",
      "0x2B",
      "0x2C",
      "0x2F",
      "0x30",
      "0x31",
      "0x32",
      "0x33",
      "0x34",
      "0x35",
      "0x36",
      "0x37",
      "0x38",
      "0x39",
      "0x3A",
      "0x3B",
      "0x3C",
      "0x3D",
      "0x3F",
      "0x40",
      "0x42",
      "0x43",
      "0x44",
      "0x46",
      "0x47",
      "0x48",
      "0x4A",
      "0x4B",
      "0x4C",
      "0x4D",
      "0x4E",
      "0x4F",
      "0x52",
      "0x57",
      "0x58",
      "0x59",
      "0x5A",
      "0x5B",
      "0x5C",
      "0x5D",
      "0x5E",
      "0x5F",
      "0x60",
      "0x61",
      "0x62",
      "0x63",
      "0x64",
      "0x65",
      "0x66",
      "0x67",
      "0x68",
      "0x69",
      "0x6A",
      "0x6B"
    ],
    "note": {
      "pt": "17 definições conhecidas não representam o elenco completo. OID sempre requer contexto de tabela.",
      "en": "17 known definitions are not the complete roster. OID always requires table context."
    }
  }
}
