You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Preserve committed ticket writes during SQLite index contention (ticket-258) - #319
A ticket update can commit to authoritative YAML/evidence and then return HTTP500 when its disposable SQLite projection is locked. Defer only post-commit SQLITE_BUSY/SQLITE_LOCKED, persist an atomic invalidation token in freshness checks across processes, and let the normal index rebuild recover. Other index errors and all pre-write failures still propagate.
Regression coverage uses real SQLite writer contention for flat and sharded create/update/delete/move/evidence operations, HTTP acknowledgements, a separate reader process with a warm signature cache, evidence replay/conflict, stale CAS, actual SQLITE_LOCKED and extended error codes. It also checks that an invalidation-filesystem failure stays visible.
Ticket: ticket-258
Refs #316 (PLF-20365), parent PLF-20347. Native runtime rollout remains separately owned by #317/#313; this source PR does not modify a live package, data or lock.
Validation: 142 affected tests passed through Testless with outcome accounting and coverage; 28 new regression cases. Ruff and managed governance passed.
Key detail: this is the 3.10.20 leg. On the current interpreter the same suite is green here (1937+ passed, GOV-PASS), so whatever differs is version-sensitive in the rendered advisory text — the actual value ends with **markdown** and two trailing spaces where the expected value ends with ge authority.. That smells like line wrapping or trailing-whitespace handling in the advisory body, not the index-contention logic this PR is about.
Two things worth checking in that order:
Reproduce with 3.10 explicitly: /opt/planfile-procache94cb311-3.10.20/bin/python -m pytest -q tests/test_ticket_radar.py::test_creation_persists_advisory_before_journal. If the advisory is built with textwrap or an f-string spanning lines, 3.10 and 3.13 can differ.
Print the two values side by side in the test failure rather than relying on the truncated diff — the assertion is currently cutting both strings at the same prefix, so the first differing character is invisible in the log.
I did not touch the branch or the tests. Nothing was merged.
For comparison, semcod/planfile#318 passed the same gate yesterday (6 local test gates against main ff2193f), so the gate itself works for this repository — worth re-running once before assuming the branch is at fault.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A ticket update can commit to authoritative YAML/evidence and then return HTTP500 when its disposable SQLite projection is locked. Defer only post-commit SQLITE_BUSY/SQLITE_LOCKED, persist an atomic invalidation token in freshness checks across processes, and let the normal index rebuild recover. Other index errors and all pre-write failures still propagate.
Regression coverage uses real SQLite writer contention for flat and sharded create/update/delete/move/evidence operations, HTTP acknowledgements, a separate reader process with a warm signature cache, evidence replay/conflict, stale CAS, actual SQLITE_LOCKED and extended error codes. It also checks that an invalidation-filesystem failure stays visible.
Ticket: ticket-258
Refs #316 (PLF-20365), parent PLF-20347. Native runtime rollout remains separately owned by #317/#313; this source PR does not modify a live package, data or lock.
Validation: 142 affected tests passed through Testless with outcome accounting and coverage; 28 new regression cases. Ruff and managed governance passed.