code wiki / (root) / nx_remedy_test.nx

nx_remedy_test.nx source

↩ module page · 114 lines · 5281 B

1// nx_remedy_test.nx -- smoke for the formalized self-remediation cycle. 2// Verifies each phase independently + the full-cycle runner end-to-end. 3 4import "syscalls.nx" 5import "nx_remedy.nx" 6import "nx_estimator_diagnostics.nx" 7 8func main() -> i64 { 9 // === phase 1: detect ===================================== 10 let report: *AnomalyReport = nx_anomaly_alloc() 11 // observed=100 vs baseline=50 with 100k ppb (0.01%) tolerance 12 // -> diff is 100% of baseline, vastly exceeds tolerance. 13 nx_remedy_detect(100, 50, 100000, 0, report, 7) 14 if report.kind != NX_ANOMALY_TOLERANCE_EXCEEDED { return 11 } 15 if report.cell_id != 7 { return 12 } 16 17 // observed=51 vs baseline=50, tolerance 50% (500000000 ppb) -- within tol. 18 let report2: *AnomalyReport = nx_anomaly_alloc() 19 nx_remedy_detect(51, 50, 500000000, 0, report2, 1) 20 if report2.kind != NX_ANOMALY_NONE { return 13 } 21 22 // regression detect: observed=120 vs prior=100 -> REGRESSION. 23 let report3: *AnomalyReport = nx_anomaly_alloc() 24 nx_remedy_detect(120, 100, 500000000, 100, report3, 1) 25 if report3.kind != NX_ANOMALY_REGRESSION { return 14 } 26 27 // === phase 2: diagnose =================================== 28 let diag: *DiagnosisReport = nx_diag_report_alloc() 29 nx_remedy_diagnose(report, NX_DIAG_VERDICT_HIGHER_BIAS_LOWER_VAR, diag) 30 if diag.rc_code != NX_RC_STALE_CALIBRATION { return 21 } 31 32 let diag2: *DiagnosisReport = nx_diag_report_alloc() 33 nx_remedy_diagnose(report, NX_DIAG_VERDICT_LOWER_BIAS_HIGHER_VAR, diag2) 34 if diag2.rc_code != NX_RC_SAMPLE_VARIANCE_TOO_HIGH { return 22 } 35 36 let diag3: *DiagnosisReport = nx_diag_report_alloc() 37 nx_remedy_diagnose(report, NX_DIAG_VERDICT_BOTH_WORSE, diag3) 38 if diag3.rc_code != NX_RC_ESTIMATOR_MISMATCH { return 23 } 39 40 // === phase 3: propose ==================================== 41 let props: *FixProposal = (sys_mmap(96)) as *FixProposal 42 let n1: i64 = nx_remedy_propose(NX_RC_NUMERIC_OVERFLOW, props, 3) 43 if n1 != 3 { return 31 } 44 let p0: *FixProposal = nx_remedy_fp_at(props, 0) 45 if p0.fx_code != NX_FX_ESCALATE_TIER { return 32 } 46 47 let props2: *FixProposal = (sys_mmap(96)) as *FixProposal 48 let n2: i64 = nx_remedy_propose(NX_RC_STALE_CALIBRATION, props2, 3) 49 if n2 != 2 { return 33 } 50 let p2_0: *FixProposal = nx_remedy_fp_at(props2, 0) 51 if p2_0.fx_code != NX_FX_RECALIBRATE_TABLE { return 34 } 52 53 let props3: *FixProposal = (sys_mmap(96)) as *FixProposal 54 let n3: i64 = nx_remedy_propose(NX_RC_SAMPLE_VARIANCE_TOO_HIGH, props3, 3) 55 if n3 != 2 { return 35 } 56 let p3_0: *FixProposal = nx_remedy_fp_at(props3, 0) 57 if p3_0.fx_code != NX_FX_ENSEMBLE { return 36 } 58 59 // === phase 4: apply (plan emission) ===================== 60 let plan: *ActionPlan = nx_plan_alloc() 61 nx_remedy_apply_plan(p0, plan) 62 if plan.fx_code != NX_FX_ESCALATE_TIER { return 41 } 63 if plan.payload_a != 2 { return 42 } // target N2 tier 64 65 // === phase 5: A/B verify ================================ 66 let before: *EstimatorDiag = nx_diag_alloc() 67 before.mse = 1000 68 let after_worked: *EstimatorDiag = nx_diag_alloc() 69 after_worked.mse = 200 // 5x reduction 70 // improvement_thresh = 100M ppb (10%) means after must be < 900. 71 let v_w: i64 = nx_remedy_ab_verify(before, after_worked, 100000000, 100000000) 72 if v_w != NX_APPLY_WORKED { return 51 } 73 74 let after_regr: *EstimatorDiag = nx_diag_alloc() 75 after_regr.mse = 1500 // 50% worse 76 let v_r: i64 = nx_remedy_ab_verify(before, after_regr, 100000000, 100000000) 77 if v_r != NX_APPLY_REGRESSION { return 52 } 78 79 let after_same: *EstimatorDiag = nx_diag_alloc() 80 after_same.mse = 1000 // unchanged 81 let v_n: i64 = nx_remedy_ab_verify(before, after_same, 100000000, 100000000) 82 if v_n != NX_APPLY_NO_CHANGE { return 53 } 83 84 // === phase 6: generalize ================================ 85 // Build 3 cells. Cell 0 & 2 IMPROVE, cell 1 REGRESSES. 86 let bef0: *EstimatorDiag = nx_diag_alloc(); bef0.mse = 1000 87 let bef1: *EstimatorDiag = nx_diag_alloc(); bef1.mse = 1000 88 let bef2: *EstimatorDiag = nx_diag_alloc(); bef2.mse = 1000 89 let aft0: *EstimatorDiag = nx_diag_alloc(); aft0.mse = 500 90 let aft1: *EstimatorDiag = nx_diag_alloc(); aft1.mse = 2000 // regress 91 let aft2: *EstimatorDiag = nx_diag_alloc(); aft2.mse = 800 92 93 let bef_arr: **EstimatorDiag = (sys_mmap(24)) as **EstimatorDiag 94 bef_arr[0] = bef0 95 bef_arr[1] = bef1 96 bef_arr[2] = bef2 97 let aft_arr: **EstimatorDiag = (sys_mmap(24)) as **EstimatorDiag 98 aft_arr[0] = aft0 99 aft_arr[1] = aft1 100 aft_arr[2] = aft2 101 102 let failed: *i64 = (sys_mmap(8)) as *i64 103 let gv: i64 = nx_remedy_generalize(bef_arr, aft_arr, 3, 100000000, failed) 104 if gv != NX_GEN_FAILS_AT_CELL { return 61 } 105 if failed[0] != 1 { return 62 } 106 107 // Same setup but cell 1 also improves -> PASSES. 108 aft1.mse = 600 109 let gv2: i64 = nx_remedy_generalize(bef_arr, aft_arr, 3, 100000000, failed) 110 if gv2 != NX_GEN_PASSES { return 63 } 111 if failed[0] != -1 { return 64 } 112 113 return 0 114}