{
  "article_slug": "building-a-navigation-debug-panel-in-godot",
  "artifact": "Standalone Godot navigation debug panel correctness proof",
  "checks": [
    {
      "id": "astargrid_goal_solid_guard",
      "message": "Goal cell is solid; reject before allow_partial_path scans the grid.",
      "passed": true,
      "title": "Goal solidity is checked before allow_partial_path",
      "verdict": "GOAL_SOLID"
    },
    {
      "id": "astargrid_allow_partial_endpoint",
      "panel_message": "allow_partial_path ended at (2, 2) before the requested goal.",
      "panel_verdict": "PARTIAL_PATH",
      "passed": true,
      "raw_last_cell": {
        "x": 2,
        "y": 2
      },
      "raw_path_size": 2,
      "requested_goal": {
        "x": 6,
        "y": 2
      },
      "title": "AStarGrid2D allow_partial_path can return a path ending short"
    },
    {
      "id": "navigationserver_unsynced_map",
      "map_iteration_id": 0,
      "passed": true,
      "title": "Same-frame query exposes map iteration 0",
      "verdict": "UNSYNCED_NAVIGATION_MAP"
    },
    {
      "id": "navigationserver_region_bake_missing",
      "map_iteration_id": 1,
      "passed": true,
      "region_count": 1,
      "title": "Synced region without polygons is not the same as iteration 0",
      "verdict": "REGION_BAKE_MISSING"
    },
    {
      "disconnected_endpoint_distance_px": 154.0,
      "disconnected_path_points": 2,
      "disconnected_verdict": "PATH_ENDED_SHORT",
      "id": "navigationserver_disconnected_island_probe",
      "passed": true,
      "region_count": 2,
      "same_island_verdict": "OK",
      "title": "Two valid islands still fail the endpoint probe"
    },
    {
      "id": "query_result_reports_path_length",
      "passed": true,
      "path_length": 96.0,
      "path_points": 2,
      "title": "NavigationPathQueryResult2D exposes path length"
    },
    {
      "id": "raw_corridor_reports_region_metadata",
      "owner_ids": [
        1101,
        1101
      ],
      "passed": true,
      "rid_ids": [
        1120986464256,
        1120986464256
      ],
      "segment_types": [
        0,
        0
      ],
      "title": "Raw corridor metadata includes the traversed region"
    },
    {
      "id": "probe_report_json_round_trips",
      "passed": true,
      "serialized_bytes": 373,
      "title": "The JSON-safe probe report round-trips through the parser"
    },
    {
      "expected_link_rid": 1370094567424,
      "id": "navigation_link_segment_type_is_exposed",
      "owner_ids": [
        0,
        2202,
        0,
        0
      ],
      "passed": true,
      "rid_ids": [
        1361504632834,
        1370094567424,
        1365799600129,
        1365799600129
      ],
      "segment_types": [
        0,
        1,
        0,
        0
      ],
      "title": "Link metadata identifies a path segment that crosses NavigationLink2D"
    },
    {
      "id": "extracted_package_reruns_cleanly",
      "passed": true,
      "observed": {
        "workspace_check_count": 9,
        "check_ids_match_workspace": true,
        "scene_smoke_passed": true,
        "engine": "4.7.1-stable (official)"
      }
    }
  ],
  "engine": {
    "build": "official",
    "hash": "a13da4feb8d8aefc283c3763d33a2f170a18d541",
    "hex": 263937,
    "major": 4,
    "minor": 7,
    "patch": 1,
    "status": "stable",
    "string": "4.7.1-stable (official)",
    "timestamp": 0
  },
  "failed": [],
  "failed_count": 0,
  "measurement_scope": "Correctness and scene-smoke verification only; no performance, throughput, or allocation claim.",
  "passed": true,
  "passed_count": 10,
  "proof_boundary": {
    "performance": "No path-query timing or NavigationServer throughput claim is made.",
    "rid_lifetime": "Numeric RID ids identify resources only during the captured engine session.",
    "verified_here": "Named AStarGrid2D guards, NavigationServer2D sync and region verdicts, disconnected-island endpoint handling, raw path metadata, link identification, and JSON-safe report serialization."
  },
  "verified_at": "2026-07-19T10:36:56",
  "check_count": 10,
  "scene_smoke": {
    "check_count": 9,
    "has_output": true,
    "has_panel": true,
    "passed": true,
    "scene_path": "res://scenes/articles/navigation_debug_panel_demo.tscn"
  },
  "published_files": {
    "source_zip": {
      "path": "/downloads/pathforge/building-a-navigation-debug-panel-in-godot-godot-4.7.1-demo.zip",
      "bytes": 14384,
      "sha256": "be429162f49a6a6b03f55080c0b49a45a8b8a80615bc483a3ff1529b5ff7193a"
    },
    "source_manifest": [
      {
        "path": "project.godot",
        "bytes": 612,
        "sha256": "93c399e240aa500abe3d5ac87ac371afaea4f169f9733b10c445b2f55c6dbcac"
      },
      {
        "path": "scenes/articles/navigation_debug_panel_demo.tscn",
        "bytes": 343,
        "sha256": "f71917a68e538a47568a9057278affa87a7d4ee05de76d3553f711dfc9dac07a"
      },
      {
        "path": "scripts/articles/nav_debug_panel.gd",
        "bytes": 11867,
        "sha256": "ea80e51845300989193c8eea2bed78d1dd784f4b02a5d4d2a5e36638646697cf"
      },
      {
        "path": "scripts/articles/navigation_debug_panel_demo.gd",
        "bytes": 5711,
        "sha256": "5fe58e8419205f96e42e1a771b1515ede8f4702f4bb9d287d07d9a54aaa0570b"
      },
      {
        "path": "scripts/shared/astar_grid_diagnostics.gd",
        "bytes": 2791,
        "sha256": "98c4dd4eba17222612cc35e615256ecf9b2beae37be72333149693131c2a9c16"
      },
      {
        "path": "scripts/shared/navigation_debug_panel_verifier.gd",
        "bytes": 12360,
        "sha256": "c2f768374f92a95c6b340775e30e07a9d3aee93ec37d1038fff63463e279c478"
      },
      {
        "path": "scripts/shared/path_failure_report.gd",
        "bytes": 1870,
        "sha256": "7d350aa8d3338cab483dd45f769e28a41b906fd41e720d940fc120aeb5a2403d"
      },
      {
        "path": "tools/run_navigation_debug_panel_scene_smoke.ps1",
        "bytes": 817,
        "sha256": "1fa47f6152d87db53583d906d969889cbbcc903b8919c07ba994d15f63e07ee7"
      },
      {
        "path": "tools/run_navigation_debug_panel_verification.ps1",
        "bytes": 843,
        "sha256": "faec7644c0c6b85eebc6c281c4ec44f905a9ca6704f11efd33fcba0eaa154412"
      },
      {
        "path": "tools/smoke_navigation_debug_panel_scene.gd",
        "bytes": 1594,
        "sha256": "6d29c1f1c6b1dfb8d7bac53fb3a80a9202ea357a358e216d6471bd4213607e7d"
      },
      {
        "path": "tools/verify_navigation_debug_panel.gd",
        "bytes": 925,
        "sha256": "f4b005b0c5e5a6f9a64edd09fdb7668af73245b2f40b41b5d85824f3ec7afe1a"
      }
    ]
  },
  "extracted_package_rerun": {
    "passed": true,
    "workspace_check_count": 9,
    "published_check_count": 10,
    "check_ids_match_workspace": true,
    "scene_smoke_passed": true,
    "engine": "4.7.1-stable (official)"
  }
}
