-
Notifications
You must be signed in to change notification settings - Fork 0
P0: Replace or remove flaky SQLite WAL performanceAssertionTest — microbench premise unsound on CI #96
Copy link
Copy link
Closed
Labels
fabrik:yoloAuto-advance all stages and auto-merge the PR at ValidateAuto-advance all stages and auto-merge the PR at Validatestage:Done:completeDone stage completed successfullyDone stage completed successfullystage:Implement:completeImplement stage completed successfullyImplement stage completed successfullystage:Plan:completePlan stage completed successfullyPlan stage completed successfullystage:Research:completeResearch stage completed successfullyResearch stage completed successfullystage:Review:completeReview stage completed successfullyReview stage completed successfullystage:Specify:completeSpecify stage completed successfullySpecify stage completed successfullystage:Validate:completeValidate stage completed successfullyValidate stage completed successfully
Metadata
Metadata
Assignees
Labels
fabrik:yoloAuto-advance all stages and auto-merge the PR at ValidateAuto-advance all stages and auto-merge the PR at Validatestage:Done:completeDone stage completed successfullyDone stage completed successfullystage:Implement:completeImplement stage completed successfullyImplement stage completed successfullystage:Plan:completePlan stage completed successfullyPlan stage completed successfullystage:Research:completeResearch stage completed successfullyResearch stage completed successfullystage:Review:completeReview stage completed successfullyReview stage completed successfullystage:Specify:completeSpecify stage completed successfullySpecify stage completed successfullystage:Validate:completeValidate stage completed successfullyValidate stage completed successfully
Summary
SQLiteStorageConcurrencyTests.performanceAssertionTest()was disabled on CI runners via@Test(.disabled(if: CI))because its assertion (tBoth < tRead + tWrite × 0.7) regularly fails at 4–7× the threshold on GitHub Actions, even though WAL concurrency is working correctly. The CI skip is a policy violation. This issue resolves it: either the test is rewritten so it passes reliably everywhere, or it is deleted with an ADR. The skip annotation must be gone either way.Requirements
.disabled(if: CI)annotation inSQLiteStorageConcurrencyTests.swiftmust be removed. "Skip on CI" is not an acceptable resolution.livenessTest()andsafariUnfuckerRegressionTest()together cover the actor-serialization regression the deleted test was meant to catch.@Test(.disabled(...)),XCTSkipIf(...),XCTSkipUnless(...),#if !CI, etc.) may be added to any test that previously ran.swift test(debug) andswift test -c releasejobs on the fix branch.main; (c) CI is green on both jobs.Scope
In scope:
performanceAssertionTest()inSQLiteStorageConcurrencyTests.swift— rewrite or deletionOut of scope:
livenessTest()(sibling test, separate issue)Prior Art / Context
tBoth < tRead + tWrite × 0.7usingasync let+ actor-hopping + SQLite I/O, median of 3 iterations (100 writes + one FTS read each).20c55c25(2026-05-06) acknowledged this directly: "the small-N async-let + actor + SQLite-IO pattern measures runner contention more than concurrency speedup."tBoth < tRead + tWritewithout the 0.7 factor), larger sample count (e.g. median-of-11), or a proper benchmark harness with warm-up and outlier rejection.livenessTest()andsafariUnfuckerRegressionTest()are the two coverage fallbacks if deletion is chosen.Risks / Dependencies