fix(stage0): require Windows native smoke
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s
Test / Lint (push) Failing after 2m1s
Test / Test (push) Skipped
Test / Render parity (push) Skipped

This commit is contained in:
2026-07-18 05:53:45 +04:00
parent 3c44a12fc4
commit fd4be6c825
4 changed files with 64 additions and 90 deletions
@@ -32,7 +32,9 @@ impl VulkanInstanceConfig {
Self { Self {
application_name: application_name.into(), application_name: application_name.into(),
required_extensions: Vec::new(), required_extensions: Vec::new(),
enable_portability_enumeration: cfg!(target_os = "macos"), // The runtime is Windows-only, so portability enumeration is not part of
// the supported instance contract.
enable_portability_enumeration: false,
enable_validation: false, enable_validation: false,
} }
} }
+9 -11
View File
@@ -815,8 +815,6 @@ impl AtomicWindowPhase {
fn actual_platform() -> &'static str { fn actual_platform() -> &'static str {
match std::env::consts::OS { match std::env::consts::OS {
"macos" => "macos",
"linux" => "linux",
"windows" => "windows", "windows" => "windows",
other => other, other => other,
} }
@@ -1071,11 +1069,11 @@ mod tests {
schema_version: SCHEMA_VERSION, schema_version: SCHEMA_VERSION,
commit_sha: "0123456789abcdef0123456789abcdef01234567".to_string(), commit_sha: "0123456789abcdef0123456789abcdef01234567".to_string(),
git_dirty: false, git_dirty: false,
runner_identity: "github-actions/12345/stage0-macos".to_string(), runner_identity: "windows-local/stage0".to_string(),
runner_architecture: "aarch64", runner_architecture: "x86_64",
rust_toolchain: "1.97.1".to_string(), rust_toolchain: "1.97.1".to_string(),
target_triple: "aarch64-apple-darwin".to_string(), target_triple: "x86_64-pc-windows-msvc".to_string(),
platform: "macos", platform: "windows",
status: "passed", status: "passed",
failure_reason: None, failure_reason: None,
frames: 300, frames: 300,
@@ -1092,7 +1090,7 @@ mod tests {
window_status: "created", window_status: "created",
vulkan_surface_status: "created", vulkan_surface_status: "created",
vulkan_device_status: "selected", vulkan_device_status: "selected",
vulkan_device_name: "Apple GPU", vulkan_device_name: "Windows test GPU",
vulkan_logical_device_status: "created", vulkan_logical_device_status: "created",
vulkan_logical_device_graphics_queue_family: 0, vulkan_logical_device_graphics_queue_family: 0,
vulkan_logical_device_present_queue_family: 0, vulkan_logical_device_present_queue_family: 0,
@@ -1101,15 +1099,15 @@ mod tests {
vulkan_swapchain_width: 960, vulkan_swapchain_width: 960,
vulkan_swapchain_height: 540, vulkan_swapchain_height: 540,
vulkan_swapchain_image_count: 3, vulkan_swapchain_image_count: 3,
vulkan_portability_enumeration: true, vulkan_portability_enumeration: false,
vulkan_portability_subset_enabled: true, vulkan_portability_subset_enabled: false,
}) })
.expect("smoke report should serialize"); .expect("smoke report should serialize");
assert!(json.contains("\"schema_version\": \"fparkan-native-smoke-v1\"")); assert!(json.contains("\"schema_version\": \"fparkan-native-smoke-v1\""));
assert!(json.contains("\"validation_vuids\": [")); assert!(json.contains("\"validation_vuids\": ["));
assert!(json.contains("\"vulkan_device_name\": \"Apple GPU\"")); assert!(json.contains("\"vulkan_device_name\": \"Windows test GPU\""));
assert!(json.contains("\"runner_architecture\": \"aarch64\"")); assert!(json.contains("\"runner_architecture\": \"x86_64\""));
} }
#[test] #[test]
+8 -8
View File
@@ -1,7 +1,7 @@
# Acceptance coverage manifest. # Acceptance coverage manifest.
# Format: <acceptance-id>\t<covered|covered-planning|covered-stub|covered-gpu|partial|blocked|omitted>\t<evidence> # Format: <acceptance-id>\t<covered|covered-planning|covered-stub|covered-gpu|partial|blocked|omitted>\t<evidence>
# Scope note: Stage 0 is closed for the macOS/codebase review scope. # Scope note: Stage 0 native runtime acceptance is Windows-only.
# Scope note: cross-platform native runtime and hosted CI evidence remain deferred. # Scope note: Linux/macOS and hosted CI are outside the project scope.
L0-COPYRIGHT-001 covered cargo test -p fparkan-corpus --offline report_json_contains_metrics_and_hashes_not_paths_or_payloads L0-COPYRIGHT-001 covered cargo test -p fparkan-corpus --offline report_json_contains_metrics_and_hashes_not_paths_or_payloads
L0-P1-001 covered cargo test -p fparkan-corpus --offline licensed_part1_manifest_profile_and_counts_match_baseline L0-P1-001 covered cargo test -p fparkan-corpus --offline licensed_part1_manifest_profile_and_counts_match_baseline
L0-P1-002 covered cargo test -p fparkan-corpus --offline licensed_part1_has_no_casefold_relative_path_collisions L0-P1-002 covered cargo test -p fparkan-corpus --offline licensed_part1_has_no_casefold_relative_path_collisions
@@ -17,7 +17,7 @@ S0-ARCH-007 covered cargo xtask ci runs fmt, policy, workspace test, clippy, rus
S0-ARCH-008 covered cargo xtask policy rejects moving Rust toolchains and workspace rust-version drift S0-ARCH-008 covered cargo xtask policy rejects moving Rust toolchains and workspace rust-version drift
S0-ARCH-009 covered .github/workflows/ci.yml runs a pinned MSRV backend-neutral crate job S0-ARCH-009 covered .github/workflows/ci.yml runs a pinned MSRV backend-neutral crate job
S0-ARCH-010 covered cargo xtask acceptance audit emits measured commit_sha, git_dirty, runner_identity, rust_toolchain, and msrv metadata into the JSON artifact S0-ARCH-010 covered cargo xtask acceptance audit emits measured commit_sha, git_dirty, runner_identity, rust_toolchain, and msrv metadata into the JSON artifact
S0-ARCH-011 covered .github/workflows/ci.yml runs cargo run -p fparkan-vulkan-smoke --locked -- --out target/fparkan/native-smoke/macos.json and cargo xtask native-smoke audit enforces a passed macOS 300-frame report with measured resize/recreate, validation=0, clean git provenance, exact commit SHA shape, and a platform-consistent target triple S0-ARCH-011 covered cargo xtask native-smoke audit requires a passed Windows 300-frame report with measured resize/recreate, validation=0, clean git provenance, exact commit SHA shape, and a Windows target triple
S0-DIAG-001 covered cargo test -p fparkan-diagnostics --offline diagnostic_chain_preserves_context S0-DIAG-001 covered cargo test -p fparkan-diagnostics --offline diagnostic_chain_preserves_context
S0-DIAG-002 covered cargo test -p fparkan-diagnostics --offline json_is_stable S0-DIAG-002 covered cargo test -p fparkan-diagnostics --offline json_is_stable
S0-CORPUS-001 covered cargo test -p fparkan-corpus --offline deterministic_traversal_is_creation_order_independent S0-CORPUS-001 covered cargo test -p fparkan-corpus --offline deterministic_traversal_is_creation_order_independent
@@ -302,8 +302,8 @@ S3-VK-DRAW-MODEL-001 blocked awaits Stage 3 real Vulkan indexed model draw path
S3-VK-DRAW-TERRAIN-001 blocked awaits Stage 3 terrain Vulkan draw path S3-VK-DRAW-TERRAIN-001 blocked awaits Stage 3 terrain Vulkan draw path
S3-VK-PIXEL-CAPTURE-001 blocked awaits Stage 3 fixed-camera pixel capture approval flow S3-VK-PIXEL-CAPTURE-001 blocked awaits Stage 3 fixed-camera pixel capture approval flow
S3-VK-VALIDATION-001 blocked awaits Stage 3 validation-clean GPU frame execution S3-VK-VALIDATION-001 blocked awaits Stage 3 validation-clean GPU frame execution
S3-GL-001 omitted permanent macOS Desktop GL 3.3 adapter is not implemented; historical CGL probe is retained as external evidence only S3-GL-001 omitted legacy OpenGL adapters are outside the Windows-only Vulkan renderer scope
S3-GL-002 omitted outside the current macOS-focused goal scope; GLES2 remains documented for portable/non-macOS targets S3-GL-002 omitted GLES2 and portable-device targets are outside the Windows-only Vulkan renderer scope
S3-GL-003 blocked legacy fparkan-render-gl adapter removed while Vulkan renderer path is being brought in as the stage-3 backend S3-GL-003 blocked legacy fparkan-render-gl adapter removed while Vulkan renderer path is being brought in as the stage-3 backend
S3-VIEWER-001 covered cargo test -p fparkan-viewer --offline model_fixture_uses_viewer_service_and_render_commands S3-VIEWER-001 covered cargo test -p fparkan-viewer --offline model_fixture_uses_viewer_service_and_render_commands
S4-ANIM-001 covered cargo test -p fparkan-animation --offline anim_key24_decodes_signed_quaternion S4-ANIM-001 covered cargo test -p fparkan-animation --offline anim_key24_decodes_signed_quaternion
@@ -314,7 +314,7 @@ S4-ANIM-005 covered cargo test -p fparkan-animation --offline exact_key_time_ret
S4-ANIM-006 covered cargo test -p fparkan-animation --offline pose_track_blends_translation_and_rotation S4-ANIM-006 covered cargo test -p fparkan-animation --offline pose_track_blends_translation_and_rotation
S4-ANIM-007 covered cargo test -p fparkan-animation --offline quaternion_shortest_path_sign_flip_is_stable S4-ANIM-007 covered cargo test -p fparkan-animation --offline quaternion_shortest_path_sign_flip_is_stable
S4-ANIM-008 covered cargo test -p fparkan-animation --offline zero_or_degenerate_key_interval_is_rejected S4-ANIM-008 covered cargo test -p fparkan-animation --offline zero_or_degenerate_key_interval_is_rejected
S4-ANIM-009 omitted current sampler is a portable reference path; runtime-captured x87 parity vectors are not implemented in the macOS-focused scope S4-ANIM-009 omitted current sampler is a portable reference path; runtime-captured x87 parity vectors are not implemented
S4-ANIM-010 omitted current sampler accepts the profile marker but does not implement an independent x87 compatibility path S4-ANIM-010 omitted current sampler accepts the profile marker but does not implement an independent x87 compatibility path
S4-ANIM-011 covered cargo test -p fparkan-animation --offline blend_optional_pose_uses_valid_side S4-ANIM-011 covered cargo test -p fparkan-animation --offline blend_optional_pose_uses_valid_side
S4-ANIM-012 covered cargo test -p fparkan-animation --offline hierarchy_evaluates_parent_before_child_and_rejects_cycles S4-ANIM-012 covered cargo test -p fparkan-animation --offline hierarchy_evaluates_parent_before_child_and_rejects_cycles
@@ -443,5 +443,5 @@ L5-P1-HEADLESS-001 covered cargo test -p fparkan-runtime --offline selected_is_a
L5-P2-HEADLESS-001 covered cargo test -p fparkan-runtime --offline selected_is_and_is2_missions_execute_10000_deterministic_ticks L5-P2-HEADLESS-001 covered cargo test -p fparkan-runtime --offline selected_is_and_is2_missions_execute_10000_deterministic_ticks
L5-P1-RENDER-001 covered-planning cargo test -p fparkan-game --offline selected_is_and_is2_missions_produce_approved_render_captures L5-P1-RENDER-001 covered-planning cargo test -p fparkan-game --offline selected_is_and_is2_missions_produce_approved_render_captures
L5-P2-RENDER-001 covered-planning cargo test -p fparkan-game --offline selected_is_and_is2_missions_produce_approved_render_captures L5-P2-RENDER-001 covered-planning cargo test -p fparkan-game --offline selected_is_and_is2_missions_produce_approved_render_captures
L3-DEVICE-001 omitted outside the current macOS-focused goal scope; RG40XX-capable device/profile evidence remains documented for the portable target scope L3-DEVICE-001 omitted RG40XX and portable-device profiles are outside the Windows-only runtime scope
L5-RG40-001 omitted outside the current macOS-focused goal scope; RG40XX 640x480 on-device mission smoke/performance/memory evidence remains documented for the portable target scope L5-RG40-001 omitted RG40XX 640x480 on-device mission smoke/performance/memory evidence is outside the Windows-only runtime scope
1 # Acceptance coverage manifest.
2 # Format: <acceptance-id>\t<covered|covered-planning|covered-stub|covered-gpu|partial|blocked|omitted>\t<evidence>
3 # Scope note: Stage 0 is closed for the macOS/codebase review scope. # Scope note: Stage 0 native runtime acceptance is Windows-only.
4 # Scope note: cross-platform native runtime and hosted CI evidence remain deferred. # Scope note: Linux/macOS and hosted CI are outside the project scope.
5 L0-COPYRIGHT-001
6 L0-P1-001
7 L0-P1-002
17 S0-ARCH-008
18 S0-ARCH-009
19 S0-ARCH-010
20 S0-ARCH-011
21 S0-DIAG-001
22 S0-DIAG-002
23 S0-CORPUS-001
302 S3-VK-DRAW-TERRAIN-001
303 S3-VK-PIXEL-CAPTURE-001
304 S3-VK-VALIDATION-001
305 S3-GL-001
306 S3-GL-002
307 S3-GL-003
308 S3-VIEWER-001
309 S4-ANIM-001
314 S4-ANIM-006
315 S4-ANIM-007
316 S4-ANIM-008
317 S4-ANIM-009
318 S4-ANIM-010
319 S4-ANIM-011
320 S4-ANIM-012
443 L5-P2-HEADLESS-001
444 L5-P1-RENDER-001
445 L5-P2-RENDER-001
446 L3-DEVICE-001
447 L5-RG40-001
+44 -70
View File
@@ -41,7 +41,8 @@ const CI_ACCEPTANCE_REPORT: &str = "target/fparkan/acceptance/stage-0-audit.json
const SHADER_MANIFEST_REPORT: &str = "adapters/fparkan-render-vulkan/shaders/manifest.json"; const SHADER_MANIFEST_REPORT: &str = "adapters/fparkan-render-vulkan/shaders/manifest.json";
const STAGE_PACKAGE_MANIFEST: &str = "fixtures/acceptance/stage_packages.toml"; const STAGE_PACKAGE_MANIFEST: &str = "fixtures/acceptance/stage_packages.toml";
const SUPPLY_CHAIN_POLICY_CONFIG: &str = "deny.toml"; const SUPPLY_CHAIN_POLICY_CONFIG: &str = "deny.toml";
const REQUIRED_NATIVE_SMOKE_PLATFORMS: &[&str] = &["macos"]; /// Windows is the only supported native runtime platform.
const REQUIRED_NATIVE_SMOKE_PLATFORMS: &[&str] = &["windows"];
const APPROVED_REGISTRY_SOURCE: &str = "registry+https://github.com/rust-lang/crates.io-index"; const APPROVED_REGISTRY_SOURCE: &str = "registry+https://github.com/rust-lang/crates.io-index";
const SUPPLY_CHAIN_BANNED_PACKAGES: &[&str] = &["native-tls", "openssl", "openssl-sys"]; const SUPPLY_CHAIN_BANNED_PACKAGES: &[&str] = &["native-tls", "openssl", "openssl-sys"];
const PINNED_RUST_TOOLCHAIN: &str = "1.97.1"; const PINNED_RUST_TOOLCHAIN: &str = "1.97.1";
@@ -2160,22 +2161,6 @@ fn validate_native_smoke_runtime_fields(
2, 2,
failures, failures,
); );
if platform == "macos" {
expect_bool_field_value(
platform,
report,
"vulkan_portability_enumeration",
true,
failures,
);
expect_bool_field_value(
platform,
report,
"vulkan_portability_subset_enabled",
true,
failures,
);
}
} }
fn expect_string_field( fn expect_string_field(
@@ -2260,8 +2245,6 @@ fn expect_target_triple_matches_platform(
return; return;
}; };
let matches_platform = match platform { let matches_platform = match platform {
"macos" => target_triple.contains("apple-darwin"),
"linux" => target_triple.contains("linux"),
"windows" => target_triple.contains("windows"), "windows" => target_triple.contains("windows"),
_ => true, _ => true,
}; };
@@ -2280,10 +2263,7 @@ fn expect_runner_architecture_matches_platform(
let Ok(runner_architecture) = json_string_field(report, "runner_architecture") else { let Ok(runner_architecture) = json_string_field(report, "runner_architecture") else {
return; return;
}; };
let matches_platform = match platform { let matches_platform = !runner_architecture.trim().is_empty();
"macos" => runner_architecture == "aarch64",
_ => !runner_architecture.trim().is_empty(),
};
if !matches_platform { if !matches_platform {
failures.push(format!( failures.push(format!(
"{platform}: runner_architecture {runner_architecture:?} does not match platform policy" "{platform}: runner_architecture {runner_architecture:?} does not match platform policy"
@@ -3157,7 +3137,7 @@ mod tests {
let mut audit = AcceptanceAudit { let mut audit = AcceptanceAudit {
commit_sha: "0123456789abcdef0123456789abcdef01234567".to_string(), commit_sha: "0123456789abcdef0123456789abcdef01234567".to_string(),
git_dirty: false, git_dirty: false,
runner_identity: "github-actions/12345/stage0-macos".to_string(), runner_identity: "windows-local/stage0".to_string(),
rust_toolchain: PINNED_RUST_TOOLCHAIN.to_string(), rust_toolchain: PINNED_RUST_TOOLCHAIN.to_string(),
msrv: WORKSPACE_MSRV.to_string(), msrv: WORKSPACE_MSRV.to_string(),
required_total: 1, required_total: 1,
@@ -3183,7 +3163,7 @@ mod tests {
assert!(json.contains("quoted \\\"value\\\"")); assert!(json.contains("quoted \\\"value\\\""));
assert!(json.contains("\"commit_sha\": \"0123456789abcdef0123456789abcdef01234567\"")); assert!(json.contains("\"commit_sha\": \"0123456789abcdef0123456789abcdef01234567\""));
assert!(json.contains("\"git_dirty\": false")); assert!(json.contains("\"git_dirty\": false"));
assert!(json.contains("\"runner_identity\": \"github-actions/12345/stage0-macos\"")); assert!(json.contains("\"runner_identity\": \"windows-local/stage0\""));
assert!(json.contains("\"rust_toolchain\": \"1.97.1\"")); assert!(json.contains("\"rust_toolchain\": \"1.97.1\""));
assert!(json.contains("\"msrv\": \"1.97\"")); assert!(json.contains("\"msrv\": \"1.97\""));
} }
@@ -3193,12 +3173,10 @@ mod tests {
let expected_commit = "0123456789abcdef0123456789abcdef01234567"; let expected_commit = "0123456789abcdef0123456789abcdef01234567";
let expected_shader_manifest_hash = let expected_shader_manifest_hash =
"dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c"; "dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c";
let reports = ["macos"] let reports = ["windows"]
.into_iter() .into_iter()
.map(|platform| { .map(|platform| {
let target_triple = match platform { let target_triple = match platform {
"macos" => "aarch64-apple-darwin",
"linux" => "x86_64-unknown-linux-gnu",
"windows" => "x86_64-pc-windows-msvc", "windows" => "x86_64-pc-windows-msvc",
_ => "unknown-target", _ => "unknown-target",
}; };
@@ -3208,8 +3186,8 @@ mod tests {
"schema_version": "fparkan-native-smoke-v1", "schema_version": "fparkan-native-smoke-v1",
"commit_sha": "0123456789abcdef0123456789abcdef01234567", "commit_sha": "0123456789abcdef0123456789abcdef01234567",
"git_dirty": false, "git_dirty": false,
"runner_identity": "github-actions/12345/stage0-macos", "runner_identity": "windows-local/stage0",
"runner_architecture": "aarch64", "runner_architecture": "x86_64",
"rust_toolchain": measured_rust_toolchain_version(), "rust_toolchain": measured_rust_toolchain_version(),
"target_triple": target_triple, "target_triple": target_triple,
"platform": platform, "platform": platform,
@@ -3234,8 +3212,8 @@ mod tests {
"vulkan_swapchain_width": 1280, "vulkan_swapchain_width": 1280,
"vulkan_swapchain_height": 720, "vulkan_swapchain_height": 720,
"vulkan_swapchain_image_count": 3, "vulkan_swapchain_image_count": 3,
"vulkan_portability_enumeration": true, "vulkan_portability_enumeration": false,
"vulkan_portability_subset_enabled": true "vulkan_portability_subset_enabled": false
}), }),
) )
}) })
@@ -3253,7 +3231,7 @@ mod tests {
let expected_shader_manifest_hash = let expected_shader_manifest_hash =
"dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c"; "dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c";
let reports = [( let reports = [(
"macos".to_string(), "windows".to_string(),
serde_json::json!({ serde_json::json!({
"schema_version": "fparkan-native-smoke-v1", "schema_version": "fparkan-native-smoke-v1",
"commit_sha": "unknown", "commit_sha": "unknown",
@@ -3262,7 +3240,7 @@ mod tests {
"runner_architecture": "x86_64", "runner_architecture": "x86_64",
"rust_toolchain": measured_rust_toolchain_version(), "rust_toolchain": measured_rust_toolchain_version(),
"target_triple": "x86_64-unknown-linux-gnu", "target_triple": "x86_64-unknown-linux-gnu",
"platform": "macos", "platform": "windows",
"status": "blocked", "status": "blocked",
"frames": 0, "frames": 0,
"resize_count": 0, "resize_count": 0,
@@ -3284,25 +3262,21 @@ mod tests {
let failures = let failures =
audit_native_smoke_reports(&reports, expected_commit, expected_shader_manifest_hash); audit_native_smoke_reports(&reports, expected_commit, expected_shader_manifest_hash);
assert!(
failures.contains(&"macos: status expected \"passed\", found \"blocked\"".to_string())
);
assert!(failures.contains(
&"macos: commit_sha must be a 40-character lowercase or uppercase hex string"
.to_string()
));
assert!(failures.contains(&"macos: git_dirty expected false, found true".to_string()));
assert!(failures.contains(&"macos: runner_identity must be non-empty".to_string()));
assert!(failures.contains(
&"macos: target_triple \"x86_64-unknown-linux-gnu\" does not match platform"
.to_string()
));
assert!(failures.contains(
&"macos: runner_architecture \"x86_64\" does not match platform policy".to_string()
));
assert!(failures.contains(&"macos: frames expected >= 300, found 0".to_string()));
assert!(failures assert!(failures
.contains(&"macos: validation_error_count must be an unsigned integer".to_string())); .contains(&"windows: status expected \"passed\", found \"blocked\"".to_string()));
assert!(failures.contains(
&"windows: commit_sha must be a 40-character lowercase or uppercase hex string"
.to_string()
));
assert!(failures.contains(&"windows: git_dirty expected false, found true".to_string()));
assert!(failures.contains(&"windows: runner_identity must be non-empty".to_string()));
assert!(failures.contains(
&"windows: target_triple \"x86_64-unknown-linux-gnu\" does not match platform"
.to_string()
));
assert!(failures.contains(&"windows: frames expected >= 300, found 0".to_string()));
assert!(failures
.contains(&"windows: validation_error_count must be an unsigned integer".to_string()));
} }
#[test] #[test]
@@ -3310,16 +3284,16 @@ mod tests {
let expected_shader_manifest_hash = let expected_shader_manifest_hash =
"dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c"; "dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c";
let reports = [( let reports = [(
"macos".to_string(), "windows".to_string(),
serde_json::json!({ serde_json::json!({
"schema_version": "fparkan-native-smoke-v1", "schema_version": "fparkan-native-smoke-v1",
"commit_sha": "fedcba98765432100123456789abcdef01234567", "commit_sha": "fedcba98765432100123456789abcdef01234567",
"git_dirty": false, "git_dirty": false,
"runner_identity": "github-actions/12345/stage0-macos", "runner_identity": "windows-local/stage0",
"runner_architecture": "aarch64", "runner_architecture": "x86_64",
"rust_toolchain": measured_rust_toolchain_version(), "rust_toolchain": measured_rust_toolchain_version(),
"target_triple": "aarch64-apple-darwin", "target_triple": "x86_64-pc-windows-msvc",
"platform": "macos", "platform": "windows",
"status": "passed", "status": "passed",
"frames": 300, "frames": 300,
"resize_count": 1, "resize_count": 1,
@@ -3332,7 +3306,7 @@ mod tests {
"window_status": "created", "window_status": "created",
"vulkan_surface_status": "created", "vulkan_surface_status": "created",
"vulkan_device_status": "selected", "vulkan_device_status": "selected",
"vulkan_device_name": "Apple GPU", "vulkan_device_name": "Windows test GPU",
"vulkan_logical_device_status": "created", "vulkan_logical_device_status": "created",
"vulkan_logical_device_graphics_queue_family": 0, "vulkan_logical_device_graphics_queue_family": 0,
"vulkan_logical_device_present_queue_family": 0, "vulkan_logical_device_present_queue_family": 0,
@@ -3341,8 +3315,8 @@ mod tests {
"vulkan_swapchain_width": 1280, "vulkan_swapchain_width": 1280,
"vulkan_swapchain_height": 720, "vulkan_swapchain_height": 720,
"vulkan_swapchain_image_count": 3, "vulkan_swapchain_image_count": 3,
"vulkan_portability_enumeration": true, "vulkan_portability_enumeration": false,
"vulkan_portability_subset_enabled": true "vulkan_portability_subset_enabled": false
}), }),
)] )]
.into_iter() .into_iter()
@@ -3355,7 +3329,7 @@ mod tests {
); );
assert!(failures.contains( assert!(failures.contains(
&"macos: commit_sha expected \"0123456789abcdef0123456789abcdef01234567\", found \"fedcba98765432100123456789abcdef01234567\"".to_string() &"windows: commit_sha expected \"0123456789abcdef0123456789abcdef01234567\", found \"fedcba98765432100123456789abcdef01234567\"".to_string()
)); ));
} }
@@ -3363,16 +3337,16 @@ mod tests {
fn native_smoke_audit_rejects_stale_shader_manifest_hash() { fn native_smoke_audit_rejects_stale_shader_manifest_hash() {
let expected_commit = "0123456789abcdef0123456789abcdef01234567"; let expected_commit = "0123456789abcdef0123456789abcdef01234567";
let reports = [( let reports = [(
"macos".to_string(), "windows".to_string(),
serde_json::json!({ serde_json::json!({
"schema_version": "fparkan-native-smoke-v1", "schema_version": "fparkan-native-smoke-v1",
"commit_sha": expected_commit, "commit_sha": expected_commit,
"git_dirty": false, "git_dirty": false,
"runner_identity": "github-actions/12345/stage0-macos", "runner_identity": "windows-local/stage0",
"runner_architecture": "aarch64", "runner_architecture": "x86_64",
"rust_toolchain": measured_rust_toolchain_version(), "rust_toolchain": measured_rust_toolchain_version(),
"target_triple": "aarch64-apple-darwin", "target_triple": "x86_64-pc-windows-msvc",
"platform": "macos", "platform": "windows",
"status": "passed", "status": "passed",
"frames": 300, "frames": 300,
"resize_count": 1, "resize_count": 1,
@@ -3385,7 +3359,7 @@ mod tests {
"window_status": "created", "window_status": "created",
"vulkan_surface_status": "created", "vulkan_surface_status": "created",
"vulkan_device_status": "selected", "vulkan_device_status": "selected",
"vulkan_device_name": "Apple GPU", "vulkan_device_name": "Windows test GPU",
"vulkan_logical_device_status": "created", "vulkan_logical_device_status": "created",
"vulkan_logical_device_graphics_queue_family": 0, "vulkan_logical_device_graphics_queue_family": 0,
"vulkan_logical_device_present_queue_family": 0, "vulkan_logical_device_present_queue_family": 0,
@@ -3394,8 +3368,8 @@ mod tests {
"vulkan_swapchain_width": 1280, "vulkan_swapchain_width": 1280,
"vulkan_swapchain_height": 720, "vulkan_swapchain_height": 720,
"vulkan_swapchain_image_count": 3, "vulkan_swapchain_image_count": 3,
"vulkan_portability_enumeration": true, "vulkan_portability_enumeration": false,
"vulkan_portability_subset_enabled": true "vulkan_portability_subset_enabled": false
}), }),
)] )]
.into_iter() .into_iter()
@@ -3408,7 +3382,7 @@ mod tests {
); );
assert!(failures.contains( assert!(failures.contains(
&"macos: shader_manifest_hash expected \"dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c\", found \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"".to_string() &"windows: shader_manifest_hash expected \"dd293e4ff08ffca1c037900d08b0ffd415db39f238b4fcdde46468fa049b679c\", found \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"".to_string()
)); ));
} }