jgrusewski
71a0275f54
test(sp5): Task A3 — assert budget sum-to-1 invariant
...
Code-quality review caught that the two Pearl 2 unit tests verified each
output (c51, iqn, cql, ens) against its analytical expected value within
1% relative tolerance, but did NOT assert the structural invariant
`c51 + iqn + cql + ens ≈ 1.0` that the kernel maintains by construction
(`ens = max(0, 1 - iqn - c51 - cql)`).
A coefficient typo (e.g. BASE_IQN=0.111 instead of 0.11) would produce
individually-plausible per-component values that all still pass the
relative checks while quietly summing to 0.97 or 1.04. The sum check
catches that class of regression.
Adds `assert!((c51+iqn+cql+ens - 1.0).abs() < 1e-4)` inside both
per-branch loops in the flat-regime and sharp-regime tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-01 21:46:40 +02:00
..
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-04-11 11:54:09 +02:00
2026-03-29 21:32:04 +02:00
2026-03-15 12:00:13 +01:00
2026-03-13 10:30:51 +01:00
2026-03-15 12:00:13 +01:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-15 12:00:13 +01:00
2026-04-11 11:54:09 +02:00
2026-03-19 10:02:26 +01:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-19 10:02:26 +01:00
2026-04-28 18:54:00 +02:00
2026-04-27 17:52:23 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 08:55:55 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-04-24 01:55:14 +02:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-04-01 01:13:19 +02:00
2026-03-25 09:45:54 +01:00
2026-04-28 18:54:00 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-31 01:30:33 +02:00
2026-03-31 01:30:33 +02:00
2026-04-24 01:55:14 +02:00
2026-04-28 18:54:00 +02:00
2026-04-11 11:54:09 +02:00
2026-03-19 10:02:26 +01:00
2026-04-28 18:54:00 +02:00
2026-04-11 11:54:09 +02:00
2026-03-16 21:01:28 +01:00
2026-03-16 21:01:28 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-04-11 15:21:21 +02:00
2026-03-31 10:56:20 +02:00
2026-04-28 18:54:00 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-25 09:45:54 +01:00
2026-03-29 21:32:04 +02:00
2026-03-15 12:00:13 +01:00
2026-03-31 01:30:33 +02:00
2026-04-20 15:29:05 +02:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-04-23 11:36:34 +02:00
2026-04-10 18:52:21 +02:00
2026-04-20 15:29:05 +02:00
2026-03-25 09:45:54 +01:00
2026-03-19 10:02:26 +01:00
2026-03-31 10:56:20 +02:00
2026-03-31 01:30:33 +02:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 10:02:26 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 08:59:52 +01:00
2026-03-20 15:41:42 +01:00
2026-03-19 10:02:26 +01:00
2026-03-18 00:53:47 +01:00
2026-03-19 10:02:26 +01:00
2026-04-01 01:13:19 +02:00
2026-03-15 12:00:13 +01:00
2026-04-28 09:10:31 +02:00
2026-03-15 12:00:13 +01:00
2026-04-28 09:23:32 +02:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-04-20 15:29:05 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-19 10:02:26 +01:00
2026-03-19 08:59:52 +01:00
2026-03-19 10:02:26 +01:00
2026-04-11 15:21:21 +02:00
2026-03-19 10:02:26 +01:00
2026-03-19 10:02:26 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-04-23 08:44:05 +02:00
2026-04-23 08:44:05 +02:00
2026-04-02 14:21:45 +02:00
2026-04-11 11:54:09 +02:00
2026-03-19 08:59:52 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 10:02:26 +01:00
2026-04-11 11:54:09 +02:00
2026-04-28 18:54:00 +02:00
2026-03-19 10:02:26 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 08:55:55 +01:00
2026-03-15 12:00:13 +01:00
2026-04-11 11:54:09 +02:00
2026-03-19 10:02:26 +01:00
2026-04-28 18:54:00 +02:00
2026-03-19 10:02:26 +01:00
2026-05-01 12:41:29 +02:00
2026-05-01 21:46:40 +02:00
2026-03-19 10:02:26 +01:00
2026-03-21 09:14:53 +01:00
2026-04-10 18:52:21 +02:00
2026-03-19 08:59:52 +01:00
2026-03-19 10:02:26 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 08:44:50 +01:00
2026-03-19 10:02:26 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 08:44:50 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 10:02:26 +01:00
2026-03-19 08:44:50 +01:00
2026-03-19 08:59:52 +01:00
2026-03-16 16:11:48 +01:00
2026-03-14 11:35:15 +01:00
2026-04-11 15:21:21 +02:00
2026-04-11 11:54:09 +02:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-04-04 10:02:37 +02:00
2026-04-11 11:54:09 +02:00
2026-04-11 11:54:09 +02:00
2026-03-15 12:00:13 +01:00
2026-03-15 12:00:13 +01:00
2026-03-19 10:02:26 +01:00