code wiki / (root) / nx_maint_asset_test.nx

nx_maint_asset_test.nx source

↩ module page · 112 lines · 4895 B

1// nx_maint_asset_test.nx -- gate for the maintenance spine. 2// 3// Proves the PLATFORM THESIS measurably: one verdict engine + per-asset spec 4// DATA judges different assets correctly, and the SAME temperature trace gets 5// DIFFERENT correct verdicts under different specs (so the envelope is data, 6// not code). Also proves honest NOT_IMPLEMENTED for declared-but-unbuilt 7// kernels (never a fabricated verdict). 8// 9// Coverage: 10// - sealed-enum validity (class + kernel) 11// - A HVAC efficient recovery under the HVAC spec 12// - B KILLER: a water-heater recovery trace (120 mC/min) -> EFFICIENT under 13// the WATER_HEATER spec (normal for a slow tank) but DEGRADED under the 14// HVAC spec (too slow for forced air). Same bytes, two correct answers. 15// - C sediment-fouled water heater (60 mC/min) -> DEGRADED under its OWN spec 16// - D rotating-machine kernel (declared, unbuilt) -> NOT_IMPLEMENTED (honest) 17// - E invalid kernel -> BAD_SPEC 18// 19// expect_exit: 0 20// 21// license_tier: ORIGINAL 22 23import "nx_syscalls_x86_64.nx" 24import "nx_maint_asset.nx" 25 26func main() -> i64 { 27 if nx_maint_kernel_is_valid(NX_MAINT_KERNEL_THERMAL_RESPONSE) != 1 { return 1 } 28 if nx_maint_kernel_is_valid(NX_MAINT_KERNEL_N) != 0 { return 2 } 29 if nx_maint_class_is_valid(NX_MAINT_CLASS_WATER_HEATER) != 1 { return 3 } 30 if nx_maint_class_is_valid(-1) != 0 { return 4 } 31 32 let t: *i64 = sys_mmap(128) as *i64 33 let val: *i64 = sys_mmap(128) as *i64 34 let amb: *i64 = sys_mmap(128) as *i64 35 let on: *i64 = sys_mmap(128) as *i64 36 let out: *HvacEff = sys_mmap(128) as *HvacEff 37 38 // ---- HVAC asset spec (furnace envelope) ---- 39 let hvac: *AssetSpec = sys_mmap(64) as *AssetSpec 40 hvac.asset_class = NX_MAINT_CLASS_HVAC 41 hvac.kernel = NX_MAINT_KERNEL_THERMAL_RESPONSE 42 hvac.target_mC = 21000 43 hvac.mode = NX_HVAC_MODE_HEAT 44 hvac.max_cph_x10 = 35 45 hvac.min_resp_mC_per_min = 150 46 hvac.max_overshoot_mC = 600 47 48 // ---- Water-heater asset spec (slow tank envelope = DIFFERENT data) ---- 49 let wh: *AssetSpec = sys_mmap(64) as *AssetSpec 50 wh.asset_class = NX_MAINT_CLASS_WATER_HEATER 51 wh.kernel = NX_MAINT_KERNEL_THERMAL_RESPONSE 52 wh.target_mC = 49000 // ~120 F tank setpoint 53 wh.mode = NX_HVAC_MODE_HEAT 54 wh.max_cph_x10 = 200 // tanks cycle slowly -> lenient ceiling 55 wh.min_resp_mC_per_min = 100 // 0.1 degC/min floor (electric tanks ARE slow) 56 wh.max_overshoot_mC = 2000 // stratification tolerance 57 58 // ===== A: HVAC efficient recovery under the HVAC spec =========== 59 t[0]=0; val[0]=19000; amb[0]=5000; on[0]=1 60 t[1]=600; val[1]=21000; amb[1]=5000; on[1]=1 61 t[2]=660; val[2]=21100; amb[2]=5000; on[2]=0 62 t[3]=1800; val[3]=20300; amb[3]=5000; on[3]=0 63 nx_maint_analyze(hvac, t, val, amb, on, 4, out) 64 if out.verdict != NX_HVAC_EFFICIENT { return 10 } 65 66 // ===== B: KILLER -- same WH trace, two specs, two correct verdicts = 67 t[0]=0; val[0]=45000; amb[0]=20000; on[0]=1 68 t[1]=600; val[1]=46200; amb[1]=20000; on[1]=1 69 t[2]=1200; val[2]=47400; amb[2]=20000; on[2]=1 70 t[3]=1800; val[3]=48600; amb[3]=20000; on[3]=1 71 nx_maint_analyze(wh, t, val, amb, on, 4, out) 72 if out.verdict != NX_HVAC_EFFICIENT { return 20 } // normal for a tank 73 if out.resp_mC_per_min != 120 { return 21 } 74 nx_maint_analyze(hvac, t, val, amb, on, 4, out) 75 if out.verdict != NX_HVAC_DEGRADED_CAPACITY { return 22 } // too slow for HVAC 76 if out.resp_mC_per_min != 120 { return 23 } 77 78 // ===== C: sediment-fouled water heater (60 mC/min) under WH spec = 79 t[0]=0; val[0]=45000; amb[0]=20000; on[0]=1 80 t[1]=600; val[1]=45600; amb[1]=20000; on[1]=1 81 t[2]=1200; val[2]=46200; amb[2]=20000; on[2]=1 82 t[3]=1800; val[3]=46800; amb[3]=20000; on[3]=1 83 nx_maint_analyze(wh, t, val, amb, on, 4, out) 84 if out.verdict != NX_HVAC_DEGRADED_CAPACITY { return 30 } 85 if out.resp_mC_per_min != 60 { return 31 } 86 87 // ===== D: declared-but-unbuilt kernel -> NOT_IMPLEMENTED (honest) = 88 let rot: *AssetSpec = sys_mmap(64) as *AssetSpec 89 rot.asset_class = NX_MAINT_CLASS_TOOL 90 rot.kernel = NX_MAINT_KERNEL_ROTATING_MACHINE 91 rot.target_mC = 0 92 rot.mode = NX_HVAC_MODE_HEAT 93 rot.max_cph_x10 = 0 94 rot.min_resp_mC_per_min = 0 95 rot.max_overshoot_mC = 0 96 nx_maint_analyze(rot, t, val, amb, on, 4, out) 97 if out.verdict != NX_MAINT_NOT_IMPLEMENTED { return 40 } 98 99 // ===== E: invalid kernel -> BAD_SPEC ============================ 100 let bad: *AssetSpec = sys_mmap(64) as *AssetSpec 101 bad.asset_class = NX_MAINT_CLASS_HVAC 102 bad.kernel = 99 103 bad.target_mC = 21000 104 bad.mode = NX_HVAC_MODE_HEAT 105 bad.max_cph_x10 = 35 106 bad.min_resp_mC_per_min = 150 107 bad.max_overshoot_mC = 600 108 nx_maint_analyze(bad, t, val, amb, on, 4, out) 109 if out.verdict != NX_MAINT_BAD_SPEC { return 50 } 110 111 return 0 112}