test(temporal_spine): G5 determinism + ablation-green evidence (#1064) - #1087
Conversation
Pins the temporal-spine flip gate's final criterion (G5) in the pytest matrix, both halves stdlib-only and wall-clock-free: - two-build byte-identity: the same fixed corpus fed to two independent stores yields a byte-identical TEMPORAL_NEXT table (compared in stored/rowid order so any ordering non-determinism, created_at tie-break included, would fail); a re-backfill changes zero bytes. - ablation green: a gold belief with zero lexical overlap with the query is unreachable lane-off and reachable lane-on via one TEMPORAL_NEXT hop, scored through the bench's own CoverageAccumulator (0.0 -> 1.0) and RankInvarianceAccumulator (core-prefix invariant, 0 displacements) -- the ablation mechanism the bench measures, green on a controlled corpus without LoCoMo.
G1, G2 (both halves), G3, and G5 are now DONE; the default-ON flip is blocked only on G4 (the auto-vs-prompted backfill decision, an operator call). Records what test_temporal_spine_repro.py pins.
There was a problem hiding this comment.
Sorry @robotrocketscience, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
|
Warning Review limit reached
Next review available in: 41 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
PR-size soft capThis PR is over the advisory size threshold:
Bigger PRs collide with more open work, which under the parallel-session workflow tends to produce repeated This is advisory only — nothing is blocked. If the size is intentional (large refactor, module removal, generated code), apply the |
|
[claim:review:Setr:2026-07-05T05:52:54Z] |
|
Review: APPROVE — test + doc only, high-confidence. Verified every symbol the test binds against HEAD on this branch:
Half 1 (byte-identity) is well-constructed: a deliberate Half 2 (ablation-green) drives the real Deterministic, stdlib-only, no wall-clock assertion (correctly avoids the #739/#754 latency flake). CI green on 3.12/3.13; both commits signed; FF-clean. The doc change accurately flips G5 → DONE in the flip gate, leaving only G4 (the backfill auto-vs-prompted call, an operator decision). Heads-up: this edits |
|
merge-train: merged 69417ce → |
G4 migration resolved (auto-once backfill + spine clear); the only remaining evidence gate is G5 (in review, PR #1087). Once it lands, all gates are done and only the operator flip itself remains.
G4 migration resolved (auto-once backfill + spine clear); the only remaining evidence gate is G5 (in review, PR #1087). Once it lands, all gates are done and only the operator flip itself remains.
G5 — determinism / repro (the last evidence gate before the temporal-spine flip)
Advances #1064. Completes G5, the final pre-registered evidence gate in the temporal-spine flip criteria (§ Flip gate). With this, G1, G2 (both halves), G3, and G5 are DONE; the default-ON flip is blocked only on G4 — the auto-vs-prompted backfill decision, an operator call. This PR does not flip anything and does not close #1064.
What G5 asks for
Both halves are pinned in
tests/test_temporal_spine_repro.py, stdlib-only and wall-clock-free, so they run in the ordinary pytest matrix (latency/full-bench gates stay run-on-demand — they flake on shared runners, #739/#754).Half 1 — two-build byte-identity
The backfill writer is stdlib-only and sampling-free (#605), so a fixed corpus in a fixed insertion order must produce the same
TEMPORAL_NEXTtable every build.test_two_build_byte_identityfeeds the identical corpus to two independent stores and asserts the serialized spine tables are byte-identical — compared in stored/rowid order, not sorted, so any ordering non-determinism (thecreated_attie-break case is in the fixture) would fail.test_rebuild_on_built_store_is_byte_identicalasserts a re-backfill changes zero bytes.Half 2 — ablation bench green
The full ablation (
benchmarks/temporal_spine_ablation.py) scores gold-set coverage on LoCoMo and stays run-on-demand. This pins the mechanism the bench measures on a controlled fixture, driving the realretrieve_v2lane through the bench's own scoring accumulators (CoverageAccumulator,RankInvarianceAccumulator): a gold belief with zero lexical overlap with the query is unreachable lane-off and reachable lane-on via oneTEMPORAL_NEXThop → coverage0.0 → 1.0, core-prefix invariant, 0 top-rank displacements, lane non-vacuous (candidates ≥ 1).Verification
pytest tests/test_temporal_spine*.py→ 54 passed locally.