feat(temporal_spine): flip ingest writer default ON, hold lane (#1064) - #1111
Conversation
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: 21 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 (5)
✨ 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 |
Flip is_temporal_spine_write_enabled default False -> True. Every pre-registered flip gate passed (G1 +14.6pp LoCoMo, G2 trim survival + top-rank invariance, G3 latency, G5 determinism) and the G4 auto-once backfill (#1090) is on main, so fresh ingests chain TEMPORAL_NEXT edges by default and existing stores backfill on first `aelf setup` after upgrade. Per-flag opt-out unchanged (AELFRICE_TEMPORAL_SPINE_WRITE=0 / [ingest] write_temporal_spine=false). The retrieval lane (is_temporal_spine_enabled) stays default-OFF: it is wired into retrieve_v2 only and is inert on the production retrieve() hook path until the #1107 cutover. Flipping the writer now lets stores accumulate a dense, production-proven spine ahead of that read-side flip. Tests updated to the default-on contract: resolver default, ingest path, and the G4 auto-backfill gate now assert default-on, with explicit opt-out (env/TOML off) coverage added for each; the non-decisive env / malformed-TOML tests assert against the explicit=False lower rung so they still isolate non-decisiveness. Full suite 5826 passed.
Reconcile the design doc Status line + flip-gate section, CONFIG.md (inline [ingest] sample and the write_temporal_spine reference), and the CHANGELOG [Unreleased] entry to the split posture: the ingest writer is default-ON as of the v4.0 #1064 flip, while the retrieval lane (use_temporal_spine) stays default-off until the retrieve_v2 production cutover (#1107, its Phase 2). Correct the stale 'both flags flip together at release time' claim in CONFIG.md.
52bbb16 to
64f345c
Compare
|
[claim:review:garsecg:2026-07-06T22:46:54Z] |
|
Review: APPROVE (operator-authorized writer-half flip confirmed). Reviewed all axes:
Blast radius contained: retrieval unchanged for live hosts; writer starts chaining |
|
[release:review:garsecg:2026-07-06T22:49:54Z] |
|
merge-train: merged 64f345c → |
The #1107 lane graduations and the #769/#1111 flips left pre-flip prose in the resolvers' own docstrings and CONFIG.md: temporal-spine writer + lane (temporal_spine.py module/resolver/backfill docstrings, CONFIG.md use_temporal_spine self-contradiction), entity-persist demotion (flag comment + 'reachable only from retrieve_v2' claim, contradicted by the #1107 shim), and type-aware compression (flag comment + retrieve()/ retrieve_with_tiers docstrings, default True since #769). Only the default/reachability claims change; what each flag does is untouched.
What
Flip the ingest-time temporal-spine writer default from OFF to ON
(
is_temporal_spine_write_enabledFalse → True). The retrieval lane(
is_temporal_spine_enabled) is deliberately left default-OFF.Operator-directed (2026-07-06): the temporal-spine flip (#1064) was split
so the write-side ships now while the read-side waits for the retrieval
cutover.
Why split the flip
Per #1107, the staged lanes — including
use_temporal_spine— are wiredinto
retrieve_v2()only; the productionretrieve()hook path does notexpose them until the cutover (garsecg's #1107, Phase 2). So flipping the
lane on now would change bench/eval consumers but not what a live
host retrieves.
The writer, by contrast, is on the live ingest path
(
ingest.py→write_temporal_spine), so flipping it default-ON:TEMPORAL_NEXTedges on every ingest, andfirst
aelf setupafter upgrade.Flipping the writer now lets stores accumulate a dense, production-proven
spine ahead of the read-side flip, de-risking #1107 Phase 2 (temporal
spine is its pilot lane). No retrieval behaviour changes for live hosts
until that cutover.
Gates
Every pre-registered #1064 flip gate is satisfied: G1 (+14.6pp LoCoMo
coverage), G2 (production-budget trim survival + 1986/1986 top-rank
invariance), G3 (latency in-band), G5 (two-build determinism), and G4
migration (#1090, on
main).Blast radius
The writer flip is contained: a store with no
TEMPORAL_NEXTedges isunaffected, and the retrieval lane stays off so no ranking changes. Full
suite 5826 passed / 71 skipped / 75 xfailed. Per-flag opt-out
unchanged (
AELFRICE_TEMPORAL_SPINE_WRITE=0/[ingest] write_temporal_spine = false).Tests updated to the default-on contract (resolver, ingest path, G4
auto-backfill gate), each with explicit opt-out coverage added; the
non-decisive env / malformed-TOML tests now assert against the
explicit=Falselower rung so they still isolate non-decisiveness.Relationship to #1092
This carves the writer half out of #1092 (the "flip both" HOLD draft).
After this merges, #1092 reduces to the lane-only flip, which folds
into #1107 Phase 2. Coordination note posted on #1092 and #1064.
Refs #1064. Does not close the umbrella (lane flip + #1107 cutover remain).