2026-07-17 — XP-138 sessions read-path Promise.all
What shipped
Section titled “What shipped”packages/service/src/sessions/get-session.ts— studentresolveSesiPriceEstimate+ tutorresolvePriceOriginnow fire together viaPromise.allon thedeps.dbpool (genuine two-connection parallelism). Tutor-origin ternary preserved.packages/service/src/sessions/preview-freeze-delta.ts— approve-audit metadata SELECT +freezeSesiPricinglive re-resolve now parallel inside the existing read-onlytx.packages/service/src/sessions/substitute-candidates.ts— candidate-list query + system-wideavailability_recordedEXISTS flag now parallel on the pool.
Key decisions
Section titled “Key decisions”- Behavior-preserving reorder only, no new tests: identical output/response shape, guarded by the existing sessions unit + integration suites (XP-132 substitute flow stays green).
- File 2’s pair shares ONE
txconnection, so its win is postgres-js pipelining, not true concurrency (smaller than the pool-based wins in files 1 & 3) — accepted, matches the ticket’s “run independent reads in parallel” intent.
Gotchas / lessons
Section titled “Gotchas / lessons”preview-freeze-deltaruns inside a read-onlydb.transaction; theassertSessionTransitionguard still runs BEFORE the parallel pair, so a bad-status session short-circuits before either query fires.freezeSesiPricingconfirmed write/lock-free (no.for("update")) — required to keep preview from taking a row lock (sesi-concurrency-row-lock.md).
Reference changes
Section titled “Reference changes”None. No canonical doc (plans/ARCHITECTURE.md, plans/scope/*.md, .claude/rules/*.md) changed.