{
  "project": "NES 1942 disassembly and analysis",
  "saved_report_date": "2026-10-20",
  "publication_check_utc": "2026-11-06T04:11:59.404912+00:00",
  "publication_check": {
    "source_hashes_checked": 33,
    "all_sources_match": true,
    "saved_report_hashes_checked": 7,
    "all_saved_reports_match": true,
    "full_analysis_suite_rerun_for_publication": false
  },
  "reconstruction": {
    "cartridge_bytes": 40976,
    "cartridge_sha256": "34b3c8d72ca0558834f7daaba3b4d6dc25af8d331afdaf0ba4e81de7eed1a671",
    "coverage_bytes": 32768,
    "code_bytes": 16995,
    "data_bytes": 15773,
    "instruction_count": 7523,
    "direct_edge_count": 8689,
    "header_equal": true,
    "prg_equal": true,
    "chr_equal": true
  },
  "saved_analysis": {
    "status": "passed",
    "scope": "Complete cartridge reconstruction and documented subsystem checks; not exhaustive gameplay or hardware certification.",
    "checks": [
      "verify_disassembly.py",
      "verify_control_flow.py",
      "build_trace_emulator.py",
      "decode_graphics.py",
      "decode_sound.py",
      "decode_gameplay.py",
      "verify_runtime.py",
      "verify_execution.py",
      "verify_graphics.py",
      "verify_sound.py",
      "verify_gameplay.py"
    ],
    "input_sha256": {
      "reverse/1942.asm": "fbe5801ef31bc2dcef97ffe3a13b209251aa0d9d02be60df8bb79b7dbe5c39a6",
      "reverse/1942_annotated.asm": "046c9a7409ca81ae5cdf1985531fd9eecb5d72b2c8f5f3a6e566847f8c5734b6",
      "reverse/1942_chr.asm": "c1a3a8bcb33962c89e9be73c03f9c6fd534d12f98531abd73d4a1a3a528716d8",
      "reverse/1942.cfg": "b276b3f7b220b18d5f4d924177097c64d0e792eae67d695ce7a9aa353beb5ba9",
      "reverse/1942_reverse_notes.md": "9ea4ff3905ffe64bb69391b5862a90432befd521986d8f92c190952d6e987f5f",
      "reverse/execution_analysis.md": "1eef0d91cb06d29255193093bb33c3928a2bbab7dc7aae2441d9a0d3dbb0cdb6",
      "reverse/gameplay_analysis.md": "726ebf35c5f3665fe1f23786d9db4adf40f180ab2ef121d4b5026ba6a7989861",
      "reverse/graphics_analysis.md": "11c980ce5f708a8e68e3d9b8ed5fed284b6c1a4eba2491647bc58340acff00ac",
      "reverse/sound_analysis.md": "4189ab779a42d183dc337a66843691675713bd0e8e890c27621f7534fa6808f7",
      "reverse/fixtures/boss_hit_34.npz": "350057de92baf18468be6096476ff9c207780541c126a4559bdb66eb1a7846d1",
      "reverse/fixtures/boss_hit_35.npz": "bd6a153cea54a319b9cafb02a6beb2ae8e9ce738bcd2a00f619d81743de61bdb",
      "reverse/fixtures/final_stage_00ef.npz": "c9c796216f956200d604a33f6ce1c834e308e911984ead21d7b75cac22ae99f0",
      "reverse/fixtures/provenance.json": "75f1862af3565c378c80beca27ea1cf9add21e687dd81373ddfb080b5b998700",
      "reverse/fixtures/stage_31_ready.npz": "d10af92a7404ffa07dcc69fd0ea01c2ab6ff564ccb279af70f4a6fe452f52535",
      "scripts/verify_disassembly.py": "85cbf81a84fb8df0a6b60cae2882b27f7010762ae423d1c2ed7bfaa5ae439997",
      "scripts/verify_control_flow.py": "aea4e2a072fc728edf32ec777e691075adadf0fb09aec6b9ed04f9832118548f",
      "scripts/build_trace_emulator.py": "f34aa5ca7a18cd776d9ece4fe909d6bf3b7c33c86f7c5d2303de1e8236f2301d",
      "scripts/decode_graphics.py": "fed215476d9dda791ad47e8a378b659119c038a64e1608e08476dcfde4f9e3e3",
      "scripts/decode_sound.py": "06ffe92342831731372e2d38f98559440fa3e9afcd72d07e43a176521e2f240a",
      "scripts/decode_gameplay.py": "cca7f60eb22e38099a38f42070fea7c7440efb5ce932fa931066f581eec5d135",
      "scripts/verify_runtime.py": "f9d0ffe6ec7f6850a9d6199bc6d287cc0d3d7374e709f68ccaf855124c08038d",
      "scripts/verify_execution.py": "2c9559488c4ed58b1377cbd59a232cb3d8159a2a2ff6bd878d121d53e71a9e15",
      "scripts/verify_graphics.py": "cde03a3cf23be24adf4e9b805c5c4add46ba1c1c2ce73298246d988c66f3c1e1",
      "scripts/verify_sound.py": "a03ab2edd0e686ccf89b79fd8c593f15569188d6bcfce7adf30794d12106d62a",
      "scripts/verify_gameplay.py": "aa7a9b211031582b20cb15d73bf4d50a5d29567d0a8537b46953d34e0f0703e9",
      "scripts/trace_emulator.py": "49d5fbb278e9b0e43e60a8ef60a8134a3aa7628c5e713af2b7db82b9760015f5",
      "scripts/native_trace/audit_trace.cpp": "78da22b9f44539565ca09778ed679855aa64fe75d0763c5cb0139b6ac1532a30",
      "scripts/native_trace/audit_trace.hpp": "6f42dc7bda46775e7580cd34bce2e7e7c35a8e494fa8492834a9d908ba0f7bc5",
      "nes1942/env.py": "c26d76c7246a167f63179f0d1fc8c32635448f4773d3823ea83792a63cac4be3",
      "requirements-analysis.txt": "0c087aba1d3efd270822ff25eb5ff807d8d5fac9dea45169da1ea54fae127a2c",
      "scripts/verify_analysis.py": "a4f84422e6f4de78491d2feb7d6aaa3c9fb3671e80b305bc19ae34c5f173c360",
      "README.md": "c5e6c6bc190194dbdace89a5bd7095e3aaa70628d9cea9307df6237a1d2a9804",
      "docs/disassembly_completion.md": "161bbb3fedeb5dd37e6bf2e2c1f5578b320b0df232f969cc699b0c16c08f6dbb"
    },
    "report_sha256": {
      "verification.json": "98398c5fcd318fc0f485933f8f2d915f01c9c8d0a496d7b5b7be60933f8ae5fe",
      "control_flow.json": "784e15bbc3667b3318513756024f525fec1b3640bae3167d7318c14ac91cdf9e",
      "runtime.json": "d35d490c4c25649b5270ee42f2581199b3696b08a5e41e0e93f60c7d81c70547",
      "execution.json": "cc2340af9db6e4e3654d05794fd7d7754c31fd2c84fccd98a854a892698a7de6",
      "graphics/runtime.json": "bd2aedeb13e98e42032f39c453eea9d15db079b4d1850e69a8e758a4fee7ec15",
      "sound/runtime.json": "5128847a5aa5c7a3365afb2b1465fa8de7d4d46da13cc45ba4069b26b0e472e2",
      "gameplay/runtime.json": "578b8c91ccefb3bf7d4f2950cf4a0b3b898bdc5615838128de8cda6be2d781a9"
    },
    "limitations": [
      "No complete power-on winning replay.",
      "Natural replay coverage is reported separately from controlled-RAM routine tests.",
      "The emulator does not synthesize APU audio; tests compare driver RAM and hardware writes.",
      "Physical NES timing, video and audio acceptance have not been performed."
    ]
  }
}
