{
  "article_slug": "pac-man-style-maze-chase-in-godot",
  "artifact": "Maze Chase Starter for Godot",
  "check_count": 16,
  "checks": [
    {
      "id": "tilemap_walkability_builds_maze_grid",
      "observed": {
        "summary": "The authored scene exposes a 21x17 TileMapLayer-derived maze contract."
      },
      "passed": true
    },
    {
      "id": "player_buffers_legal_turn_until_intersection",
      "observed": {
        "summary": "A blocked downward input remains buffered until the x=5 intersection."
      },
      "passed": true
    },
    {
      "id": "player_cell_changes_only_when_move_commits",
      "observed": {
        "summary": "Interpolation never mutates the authoritative cell before commit."
      },
      "passed": true
    },
    {
      "id": "shared_player_field_guides_multiple_pursuers",
      "observed": {
        "summary": "Two pursuers descend the same player-centered Dijkstra field."
      },
      "passed": true
    },
    {
      "id": "ambusher_uses_projected_player_target",
      "observed": {
        "summary": "The ambusher targets a legal cell ahead of the player's heading."
      },
      "passed": true
    },
    {
      "id": "scatter_mode_uses_per_pursuer_targets",
      "observed": {
        "summary": "Each pursuer owns a different scatter corner."
      },
      "passed": true
    },
    {
      "id": "frightened_mode_uses_rescanned_flee_field",
      "observed": {
        "summary": "The inverted seed is rescanned into a field whose downhill step can increase player distance."
      },
      "passed": true
    },
    {
      "id": "ordinary_mode_rejects_immediate_reverse",
      "observed": {
        "summary": "An ordinary move keeps heading right instead of reversing toward the target."
      },
      "passed": true
    },
    {
      "id": "dead_end_allows_reverse_fallback",
      "observed": {
        "summary": "The no-reverse rule yields when reverse is the only legal exit."
      },
      "passed": true
    },
    {
      "id": "reserved_targets_prevent_same_cell_choice",
      "observed": {
        "summary": "The second pursuer sees the first pursuer's ephemeral next-cell claim."
      },
      "passed": true
    },
    {
      "id": "horizontal_tunnel_wraps_both_directions",
      "observed": {
        "summary": "The authored middle lane wraps from both edges."
      },
      "passed": true
    },
    {
      "id": "pellet_collects_once_on_committed_cell",
      "observed": {
        "summary": "A committed pellet cell changes scoreable state once."
      },
      "passed": true
    },
    {
      "id": "power_pellet_switches_contact_outcome",
      "observed": {
        "summary": "A power pellet switches every pursuer into the frightened contact state."
      },
      "passed": true
    },
    {
      "id": "runnable_scene_moves_player_and_pursuers",
      "observed": {
        "summary": "The runnable scene starts multiple reserved pursuer moves without setup code."
      },
      "passed": true
    },
    {
      "id": "source_tree_has_only_local_resource_dependencies",
      "observed": {
        "summary": "The scene resolves entirely through resources included in the starter project."
      },
      "passed": true
    },
    {
      "id": "extracted_package_reruns_cleanly",
      "passed": true,
      "observed": {
        "extracted_workspace_check_count": 15,
        "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_gap": "Deterministic tutorial correctness only. No FPS, throughput, allocation, memory, production-readiness, or original arcade-algorithm claim.",
  "passed": true,
  "passed_count": 16,
  "scene_smoke": {
    "actors": 5,
    "board": "21x17 TileMapLayer-backed authored maze",
    "passed": true,
    "scene": "res://scenes/maze_chase_demo.tscn"
  },
  "scope": [
    "buffered cell-authoritative movement",
    "shared and policy-specific Dijkstra fields",
    "frightened flee-field rescan",
    "ordinary no-reverse rule and dead-end fallback",
    "ephemeral next-cell reservations",
    "horizontal tunnel wrapping",
    "pellet and power-pellet state",
    "runnable authored scene"
  ],
  "published_files": {
    "source_zip": {
      "path": "/downloads/pathforge/pac-man-style-maze-chase-in-godot-source.zip",
      "bytes": 17132,
      "sha256": "c9131e3df554cad7d0159972b8fefb1b4bdba055253b1e87363e746e8fc0355d"
    },
    "source_manifest": [
      {
        "path": ".gitignore",
        "bytes": 21,
        "sha256": "c0e170dc771599cb1779262ab8d2c7130d2391629beb6f711be44eeb8bcf67a0"
      },
      {
        "path": "LICENSE",
        "bytes": 1066,
        "sha256": "162b2144048b30b68057a3259769ef2c83b8c86539f31fb6f542bea7c0292ef2"
      },
      {
        "path": "README.md",
        "bytes": 1662,
        "sha256": "b11862fb4adaa549c66f039ad87279b2d4a90431cd0f2573573dd7c2192094a5"
      },
      {
        "path": "project.godot",
        "bytes": 3995,
        "sha256": "63c75628ae1a506c9c0a1e336bbd520b9bdd7337fc71d2c5be033affb32a9a6f"
      },
      {
        "path": "scenes/maze_chase_demo.tscn",
        "bytes": 6072,
        "sha256": "1015fad0e62d7e2bd9f5a77c2523ef49481331c83f66f8efc4bf95a691517e32"
      },
      {
        "path": "scripts/grid_actor.gd",
        "bytes": 3550,
        "sha256": "c45205dae77dc70bf5c57274b098ab3606c38646fa9c5440bd0716398c293574"
      },
      {
        "path": "scripts/grid_actor.gd.uid",
        "bytes": 20,
        "sha256": "10cf5582024126ac8972735861723abbf2df4ca61f60619bfe2b526691835b3d"
      },
      {
        "path": "scripts/maze_board.gd",
        "bytes": 7855,
        "sha256": "4455d2cd4cf123d40761f043f094c8a53f65cefc0c4b866f59177c9144409dfb"
      },
      {
        "path": "scripts/maze_board.gd.uid",
        "bytes": 20,
        "sha256": "66b0a659e035fda44d6b2b1103e8c945625a1be1874d0d69e46839cad88e9d02"
      },
      {
        "path": "scripts/maze_chase_demo.gd",
        "bytes": 8958,
        "sha256": "76a5c008efd6ec19b04ac28b8c55b2a1e9ce2075a6547d71cc6f51703ab4db79"
      },
      {
        "path": "scripts/maze_chase_demo.gd.uid",
        "bytes": 20,
        "sha256": "7e3649d0195ad79430857523373c785f22e1d4958a1b549844eef5d72bf745e7"
      },
      {
        "path": "scripts/maze_rules.gd",
        "bytes": 8074,
        "sha256": "4a368bfccbcae663d62d8453083c8ed19a57e167c9937f053b063cd85b7a81f9"
      },
      {
        "path": "scripts/maze_rules.gd.uid",
        "bytes": 19,
        "sha256": "3e461a00cbbcd28d102b967eb03f014cbf3f3b1fd1a412447c991d55b072787e"
      },
      {
        "path": "tools/verify_artifact.gd",
        "bytes": 10994,
        "sha256": "ebdf2bb5c67986f19fa779709a23e2a17af0970162d8460205a00fcf132a6683"
      },
      {
        "path": "tools/verify_artifact.gd.uid",
        "bytes": 20,
        "sha256": "fee8a1d3e83a4cf9d69f224957df720432b41dd9d4280db58118c2249120186e"
      }
    ]
  },
  "extracted_package_rerun": {
    "passed": true,
    "workspace_check_count": 15,
    "published_check_count": 16,
    "check_ids_match_workspace": true,
    "scene_smoke_passed": true,
    "engine": "4.7.1-stable (official)"
  }
}
