Repository navigation
Carry explicit ownership through hydration and synchronous reads - #151
Merged
Merged
Conversation
Replace thread-based authoritative hydration permission with private operation steps while preserving transaction source and cache identity. Hold read admission across single-row lookup, buffered source loading, scalar execution and raw reader cleanup. Add eighteen regression and lifetime cases, record validation evidence, and retain the remaining outer invocation, async recovery, performance and SQLite acceptance gates.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Why
Authoritative hydration previously granted read permission to any caller on a recorded thread. A deterministic provider-command callback reproduced public
transaction.Query()succeeding while a mutation still owned execution. Ordinary synchronous read boundaries also checked the busy flag without owning the slot across provider work and cleanup.Changes
Validation
artifacts/w1-owned-read-before.json).Local summaries under
artifacts/w1-owned-read-*.jsonare modified-checkout development evidence, not a strict release capture. Exact-commit CI is recorded below.Boundaries
This continues W1.2 after merged #150; it does not finish W1. General LINQ/entity/projection/relation invocations may compose several reads: this PR protects the listed inner boundaries, not universal outer invocation/buffered-result lifetime. Async enumeration/handoff, overlapping enumerator-call rejection, helper draining, native lazy initialization and W1.3 recovery remain pending.
Gate release after cleanup failure does not establish provider connection trust. Primary/secondary failure composition and provider trust classification remain W1.3 work; existing synchronous failure behavior is retained.
Coordination allocations/locks still require measurement against W0. No public declarations, driver packages, pooling settings or package publication changed. W0-F1, official corrected SQLite adoption and release acceptance remain open. The 0.9.2 baseline and frozen W0 evidence are unchanged.
Exact-commit CI
Latest CI run 35245861732 passed on head
db51228799e471e7ba6f882139f398ae0631ffce: all 12 jobs, including Latest required gate, succeeded. This covers unit, generators, Memory, SQLite file/memory, MySQL 9.7 and MariaDB 12.3 compliance/provider suites, smoke and dependency audit. The PR remains open for review.