From 8f9522b1f9c998bee6f5af5e102c0b57f5186f72 Mon Sep 17 00:00:00 2001 From: cesnimda Date: Wed, 11 Nov 2026 12:48:33 +0100 Subject: [PATCH] docs(perf): preserve failed settings save qualification --- docs/performance/RULES_FAILED_SAVE.md | 9 +++++++++ .../evidence/rules-failed-save/RECEIPT.json | 11 +++++++++++ .../evidence/rules-failed-save/RESTORE.txt | 4 ++++ .../evidence/rules-failed-save/TESTS.txt | 11 +++++++++++ .../rules-failed-save/failed-save.trx.gz | Bin 0 -> 2403 bytes 5 files changed, 35 insertions(+) create mode 100644 docs/performance/RULES_FAILED_SAVE.md create mode 100644 docs/performance/evidence/rules-failed-save/RECEIPT.json create mode 100644 docs/performance/evidence/rules-failed-save/RESTORE.txt create mode 100644 docs/performance/evidence/rules-failed-save/TESTS.txt create mode 100644 docs/performance/evidence/rules-failed-save/failed-save.trx.gz diff --git a/docs/performance/RULES_FAILED_SAVE.md b/docs/performance/RULES_FAILED_SAVE.md new file mode 100644 index 00000000..52ac9dcc --- /dev/null +++ b/docs/performance/RULES_FAILED_SAVE.md @@ -0,0 +1,9 @@ +# Rules settings failed-save verification + +11 November 2026. Baseline `d027754d15fadd945e0d9d38e6ca85b50d8dc885`; branch `codex/perf-rules-failed-save`; test source `9f63cff3c89a2eb1f576df16e9a44bf79dc69c84`. + +The additional real-SQLite case warms owner A/B application decisions, then injects a SaveChanges failure while changing A's follow-up threshold. It verifies that A's tracked proposed value differs from the committed value, the shared RulesEngine read still returns committed settings even in that failed writer context, and both owners retain their previous decisions. Allowing a later save through the same writer updates A's existing reader while B remains unaffected. + +All nine RuleSettingsFreshnessTests passed with zero failures/skips. Eight existing cases overlap the previous 35-case regression and are not added to that total. The native TRX, compressed/raw hashes and command log are retained under `evidence/rules-failed-save/`. Dependency restore used only the existing local NuGet cache. No application or dependency source changed. + +The injected exception occurs before database save. This verifies committed-read behaviour after that failure and subsequent successful retry. Mid-transaction connection loss, MariaDB, multi-process load, latency, operational restore and release qualification remain separate. diff --git a/docs/performance/evidence/rules-failed-save/RECEIPT.json b/docs/performance/evidence/rules-failed-save/RECEIPT.json new file mode 100644 index 00000000..6fc7e8c7 --- /dev/null +++ b/docs/performance/evidence/rules-failed-save/RECEIPT.json @@ -0,0 +1,11 @@ +{ + "testSourceCommit": "9f63cff3c89a2eb1f576df16e9a44bf79dc69c84", + "rawSha256": "7a8d4ade19612005c7f8fe648f973e646044d559b624bc15daa3230084648200", + "compressedSha256": "50ed32b4eb8539ddc34b70e37a376be8482b5c207fa8207ae47b8d4237d51ee3", + "rawBytes": 15156, + "compressedBytes": 2403, + "total": 9, + "passed": 9, + "failed": 0, + "skipped": 0 +} diff --git a/docs/performance/evidence/rules-failed-save/RESTORE.txt b/docs/performance/evidence/rules-failed-save/RESTORE.txt new file mode 100644 index 00000000..20467bc2 --- /dev/null +++ b/docs/performance/evidence/rules-failed-save/RESTORE.txt @@ -0,0 +1,4 @@ + Determining projects to restore... + Restored C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi.Tests\PdfBrowserStub\PdfBrowserStub.csproj (in 65 ms). + Restored C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi\JobTrackerApi.csproj (in 278 ms). + Restored C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi.Tests\JobTrackerApi.Tests.csproj (in 287 ms). diff --git a/docs/performance/evidence/rules-failed-save/TESTS.txt b/docs/performance/evidence/rules-failed-save/TESTS.txt new file mode 100644 index 00000000..4733c394 --- /dev/null +++ b/docs/performance/evidence/rules-failed-save/TESTS.txt @@ -0,0 +1,11 @@ + JobTrackerApi -> C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi\bin\Debug\net9.0\JobTrackerApi.dll + PdfBrowserStub -> C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi.Tests\PdfBrowserStub\bin\Debug\net9.0\PdfBrowserStub.dll + JobTrackerApi.Tests -> C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll +Test run for C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll (.NETCoreApp,Version=v9.0) +VSTest version 17.14.1 (x64) + +Starting test execution, please wait... +A total of 1 test files matched the specified pattern. +Results File: C:\Users\Connor\.codex\worktrees\perf-rules-failed-save\Job tracker\JobTrackerApi.Tests\TestResults\failed-save.trx + +Passed! - Failed: 0, Passed: 9, Skipped: 0, Total: 9, Duration: 2 s - JobTrackerApi.Tests.dll (net9.0) diff --git a/docs/performance/evidence/rules-failed-save/failed-save.trx.gz b/docs/performance/evidence/rules-failed-save/failed-save.trx.gz new file mode 100644 index 0000000000000000000000000000000000000000..00551058e7b45f0f47c71f3806495e75123167f9 GIT binary patch literal 2403 zcmV-p37qyHiwFP!000023hkR;kJ~m9z~2kpcMyC)(W0PDiho3Ill0PTQnYAuMRt>y z+rps8VWO)ox%#u&e71YIk91$*Mv}dDl66*goQn@#U>~&7kQ&YWG&3T{|M}Oy?|pYQ zpGB8YR#}nXAF(kVMUcC~XZg$fqoxi-kG^~GmoM&}LsdU(@+k8tCE_$NW(cH45dl&X zBdj9YNu|7{hH5s7ayy6nqen%a7v#(W|;%oJ=P3%#}q|gnI0X`J{5MU~a3)i>zww?5u8lR!q*p z&Rbn4F=cdwnn%&S^K1@P_Ak@s(uA@~nFGo~Xo&W5u~(nyy4AOV#mF&Y-SQmuhKI55YFGdepgsvtZJY zNWvflB76X1xr&KREVWwski??50#0@ci&^nz4td>LeEr|EqNrD%nyx%GT`M_d@l=Ru z>#3z$lTE$)Q_rA6t*X_%p66NJG1Hxn;0j#RTK`8>TKJT+lv^SNbwsdOkTkKVG+!~`}|a-=cRSOL-}x#jawb6 z@v~+ID|MfgP`%2bs`^W3_7eQGc%4HztzWg*ikYvbwuI?rR%Pi7rbUidV4A~KJw=H8 zS5;F6>)<5%@{gvdznx`O-5-5Dijd4jQ$yJ+v$EzW@=dwKkJ6LwZ;bB|MH4IuYAL;$ zH!ZbbGFhPkxxYi5YI zgdDSIJZFhl_zWVXl;CS1NZ=x+X_|U4evMGdlGwT=Cfb;U(AYb|gG7!*Y^e9rs)T=D zggn$Xo9zP;HHI>6J_J!0U#Q@*km@#wHe{2dglL%O2SMbGvlNn)XlYOt$rLf3VFV4F z+tkETB*_{gp|TR&+;|`BjTn?#CWN-c03<{?z_=F}B_?Jb6xL$Ut_1AO&kwUAwX+ z?L~wq*x4+_Nv3I2Z!iT{i&^HfdI?u?31yji*fsD_{J6Xo9HC>4^}!%;-jO{jaE5t% z5IAwlbr3O-L~y`7=O!6&7v)tLoKLZAq15LkUVWfMg~aN#}z zoG17(b)CIBeAb+xHRoAfZQObp9jy{tJ(YKFObweq;R&e$!Fo5F#mD7}>Hpr_?N$2{Z|zPl z8jL&Dh3i&VFUGF$aCPyzD1Wa@fa+oaWgy)YBy>TGv@=}%vq+=5*SS4j9$HktwS0Av zX8DDOw0U`vLv6W8Ci%PY|L)xW!;)w$zwUY8kM?{KY7z1gu%e$PJq-M0EB+qE3liM?m5_rbIr*6O=w zFY&>&9M(v>XQ%4nY&ob+anC-;gK0Ue5pK^;yTjRXP`lNh{agpra#(NAp3OstdwT}8 zjO^KyvX7R1@ZXH{o!0GCZ-xE##4;x>dm*ByMIB{%WTW<4Uoh-ppN)wh&Sufi1*R|` zE$`9K%8cMlVph?TBTaE^@yMes1b_ghkU{(Q^Q_fh{zB}mna?fy;ku<{xit>{`gdxN ziYCWAUqy9M+u8k*S@{8c_s^nhLg^0sLIYicB4t^W-BF#*0jKYdZCaG|QXblKL2#=RuWgxkKNqBZr%(4h%X|J> z7B8__sQNoX?pK1>#{YX$FPeH?ex21GPd)g@Ra+d4v5JY-y+QQ1Xnp#{SywGT?CYZF zG9K%3{Eafk3n4AD(N_vndR9l{r;pDgtgXh(eEsELuTH=H;-<-U{2Si>w0*csC{fLm z=!RNp+jusnY;!#LlW3puXKmM0ck^hc@qC=N0!~)KQR8@WNGD9A-3U!Rg=*Y V)%NGFlVx4`;J^J=Y%Mf9007`4#~lCw literal 0 HcmV?d00001