{
	"artifact": "tower_defense_path_validation",
	"cases": [
		{
			"actual_fill_pct": 0.0,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 280.0,
				"max": 280,
				"median": 280,
				"min": 280,
				"p95": 280
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.595033333333333,
				"max": 1.524,
				"median": 0.466,
				"min": 0.442,
				"p95": 1.309
			},
			"legal_count": 120,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 120
			},
			"sample_count": 120,
			"scenario": "playable_20x14",
			"target_fill_pct": 0.0,
			"tower_count": 0
		},
		{
			"actual_fill_pct": 0.0,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 4.56666666666667,
				"max": 27,
				"median": 1,
				"min": 1,
				"p95": 27
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.0688833333333333,
				"max": 0.704,
				"median": 0.0,
				"min": 0.0,
				"p95": 0.47
			},
			"legal_count": 120,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 102,
				"dirty_region_reroute": 18
			},
			"sample_count": 120,
			"scenario": "playable_20x14",
			"target_fill_pct": 0.0,
			"tower_count": 0
		},
		{
			"actual_fill_pct": 25.1798561151079,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 280.0,
				"max": 280,
				"median": 280,
				"min": 280,
				"p95": 280
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.459366666666667,
				"max": 0.927,
				"median": 0.413,
				"min": 0.123,
				"p95": 0.842
			},
			"legal_count": 119,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 119,
				"sealed": 1
			},
			"sample_count": 120,
			"scenario": "playable_20x14",
			"target_fill_pct": 25.0,
			"tower_count": 70
		},
		{
			"actual_fill_pct": 25.1798561151079,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 5.975,
				"max": 282,
				"median": 1,
				"min": 1,
				"p95": 21
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.0509083333333333,
				"max": 0.614,
				"median": 0.0,
				"min": 0.0,
				"p95": 0.372
			},
			"legal_count": 119,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 102,
				"dirty_region_reroute": 17,
				"sealed": 1
			},
			"sample_count": 120,
			"scenario": "playable_20x14",
			"target_fill_pct": 25.0,
			"tower_count": 70
		},
		{
			"actual_fill_pct": 50.0,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 280.0,
				"max": 280,
				"median": 280,
				"min": 280,
				"p95": 280
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.394133333333333,
				"max": 0.988,
				"median": 0.362,
				"min": 0.127,
				"p95": 0.622
			},
			"legal_count": 106,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 106,
				"sealed": 14
			},
			"sample_count": 120,
			"scenario": "playable_20x14",
			"target_fill_pct": 50.0,
			"tower_count": 139
		},
		{
			"actual_fill_pct": 50.0,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 36.9583333333333,
				"max": 328,
				"median": 1,
				"min": 1,
				"p95": 305
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.08285,
				"max": 1.295,
				"median": 0.0,
				"min": 0.0,
				"p95": 0.562
			},
			"legal_count": 106,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 102,
				"dirty_region_reroute": 4,
				"sealed": 14
			},
			"sample_count": 120,
			"scenario": "playable_20x14",
			"target_fill_pct": 50.0,
			"tower_count": 139
		},
		{
			"actual_fill_pct": 75.1798561151079,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 280.0,
				"max": 280,
				"median": 280,
				"min": 280,
				"p95": 280
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.287768115942029,
				"max": 0.477,
				"median": 0.298,
				"min": 0.119,
				"p95": 0.328
			},
			"legal_count": 51,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 51,
				"sealed": 18
			},
			"sample_count": 69,
			"scenario": "playable_20x14",
			"target_fill_pct": 75.0,
			"tower_count": 209
		},
		{
			"actual_fill_pct": 75.1798561151079,
			"board_size": "20x14",
			"cells_scanned": {
				"avg": 76.5507246376812,
				"max": 296,
				"median": 1,
				"min": 1,
				"p95": 294
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.0854782608695652,
				"max": 0.417,
				"median": 0.001,
				"min": 0.0,
				"p95": 0.388
			},
			"legal_count": 51,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 51,
				"sealed": 18
			},
			"sample_count": 69,
			"scenario": "playable_20x14",
			"target_fill_pct": 75.0,
			"tower_count": 209
		},
		{
			"actual_fill_pct": 0.0,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 16384.0,
				"max": 16384,
				"median": 16384,
				"min": 16384,
				"p95": 16384
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 21.9305916666667,
				"max": 52.446,
				"median": 17.035,
				"min": 13.778,
				"p95": 42.144
			},
			"legal_count": 240,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 240
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 0.0,
			"tower_count": 0
		},
		{
			"actual_fill_pct": 0.0,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 7.44166666666667,
				"max": 27,
				"median": 1,
				"min": 1,
				"p95": 27
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.196075,
				"max": 1.336,
				"median": 0.001,
				"min": 0.0,
				"p95": 0.916
			},
			"legal_count": 240,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 180,
				"dirty_region_reroute": 60
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 0.0,
			"tower_count": 0
		},
		{
			"actual_fill_pct": 25.003052130387,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 16384.0,
				"max": 16384,
				"median": 16384,
				"min": 16384,
				"p95": 16384
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 16.56045,
				"max": 57.199,
				"median": 13.937,
				"min": 12.547,
				"p95": 27.03
			},
			"legal_count": 240,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 240
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 25.0,
			"tower_count": 4096
		},
		{
			"actual_fill_pct": 25.003052130387,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 143.554166666667,
				"max": 16451,
				"median": 1,
				"min": 1,
				"p95": 30
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 0.422920833333333,
				"max": 37.376,
				"median": 0.001,
				"min": 0.0,
				"p95": 0.63
			},
			"legal_count": 240,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 180,
				"dirty_region_confirmed": 2,
				"dirty_region_reroute": 58
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 25.0,
			"tower_count": 4096
		},
		{
			"actual_fill_pct": 50.0,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 16384.0,
				"max": 16384,
				"median": 16384,
				"min": 16384,
				"p95": 16384
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 13.4734125,
				"max": 50.294,
				"median": 11.625,
				"min": 6.926,
				"p95": 22.206
			},
			"legal_count": 203,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 203,
				"sealed": 37
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 50.0,
			"tower_count": 8191
		},
		{
			"actual_fill_pct": 50.0,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 2534.14583333333,
				"max": 16441,
				"median": 1,
				"min": 1,
				"p95": 16424
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 2.16001666666667,
				"max": 30.992,
				"median": 0.0,
				"min": 0.0,
				"p95": 14.1
			},
			"legal_count": 203,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 180,
				"dirty_region_reroute": 23,
				"sealed": 37
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 50.0,
			"tower_count": 8191
		},
		{
			"actual_fill_pct": 75.003052130387,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 16384.0,
				"max": 16384,
				"median": 16384,
				"min": 16384,
				"p95": 16384
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 10.6779833333333,
				"max": 21.941,
				"median": 10.21,
				"min": 6.55,
				"p95": 14.102
			},
			"legal_count": 180,
			"mode": "full",
			"pair_count": 1,
			"reason_counts": {
				"full_search": 180,
				"sealed": 60
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 75.0,
			"tower_count": 12287
		},
		{
			"actual_fill_pct": 75.003052130387,
			"board_size": "128x128",
			"cells_scanned": {
				"avg": 4100.6375,
				"max": 16406,
				"median": 1,
				"min": 1,
				"p95": 16402
			},
			"connectivity": "4-orthogonal",
			"elapsed_ms": {
				"avg": 2.36876666666667,
				"max": 14.466,
				"median": 0.001,
				"min": 0.0,
				"p95": 11.14
			},
			"legal_count": 180,
			"mode": "incremental",
			"pair_count": 1,
			"reason_counts": {
				"current_path_untouched": 180,
				"sealed": 60
			},
			"sample_count": 240,
			"scenario": "benchmark_128x128",
			"target_fill_pct": 75.0,
			"tower_count": 12287
		}
	],
	"config": {
		"benchmark_board_size": "128x128",
		"connectivity": "4-orthogonal",
		"fill_levels_pct": [
			0,
			25,
			50,
			75
		],
		"pair_count": 1,
		"playable_board_size": "20x14"
	},
	"generated_utc": "2026-06-24T10:46:15",
	"godot_version": "4.7-stable (official)",
	"measurement_scope": "Single-pair 4-connected tower-defense path validation. Playable HUD uses cells scanned on 20x14; benchmark JSON records ms on 128x128 for timing credibility.",
	"os_name": "Windows",
	"pathfinder_note": "Custom A* uses a linear-scan open list. Treat absolute ms as this demo's naive implementation cost; use full-vs-incremental ratios and cells scanned for the validation claim, not as production pathfinder throughput.",
	"processor_name": "AMD Ryzen 5 2600X Six-Core Processor",
	"run_profile": "full"
}