Skip to content

D-TGL-PUB steps 1-2: BindStore::check_route, lab WalSink; codegraph stale-closure fix; post-merge record for #1924 - #1925

Merged
AdaWorldAPI merged 8 commits into
mainfrom
claude/clone-repositories-71a5sw
Nov 2, 2026
Merged

AdaWorldAPI merged 8 commits into
mainfrom
claude/clone-repositories-71a5sw

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

Summary

This PR carries steps 1 and 2 of the G10 × G11 lab spec (g10-g11-atomic-publication-lab-v1.md, D-TGL-PUB), the fix for the Codex P2 finding on the merged #1924, and the post-merge record for #1924. #1924 merged at 7625567f9, before these commits. The branch merges current main and rewrites no history.

Step 1: BindStore::check_route(&self, position, class) -> Result<(), Refusal>

  • It is the read-only form of route: the same two refusals (UnknownClass, OutsideReservation), no route event, and no new RouteVersion.
  • route runs this exact check before it writes (route_identity → RouteLog::check).
  • A checked intent stays valid, because classes are only ever added (D5) and the answer does not read the route log.

Step 2: lab WalSink (crates/lance-graph-codegraph/src/lab_wal.rs, test-only)

An in-memory WalSink that follows the production writer contract:

  • it returns Fenced against the head and writes nothing;
  • each commit publishes exactly one version;
  • a re-submitted (cycle, batch_hash) reconciles;
  • another batch for an already durable cycle returns HashConflict;
  • scan_sealed returns no payload.

It adds two lab seams:

  • injected faults: I/O before publish, and Ambiguous after publish (crash boundary B3);
  • image(cycle), the durable payload read that recovery must use.

Dependencies:

  • lance-graph-planner, lance-graph-contract and tokio (rt) are dev-dependencies only.
  • The crate's own workspace patches the ndarray git coordinate to the sibling checkout, as the root workspace does. cargo tree -i ndarray shows a single package. The CI test job already checks out ndarray as a sibling.

Stale closure cache between prepare and commit (Codex P2 on #1924)

A read between prepare_refresh and commit_refresh could fill a closure cache from the pre-commit edges, and commit_refresh kept it. When the batch changes edges, commit now drops every cache it has no prepared refresh for.

Test Plan

  • dt64:

    • check_route agrees with route on 5 cases;
    • it writes nothing; a twin test shows that route does write;
    • a checked intent stays valid as the store grows;
    • 3 disables, each red.
  • Lab WalSink: 4 tests:

    • a stale base is fenced;
    • a commit publishes one version, and the payload is only in the image;
    • a re-submit reconciles, and a different batch conflicts;
    • a fault before publish and one after publish leave different durable states.

    Four disables, each red on its own test: dropping the fence, leaking the payload through scan, skipping the reconcile lookup, and making Ambiguous publish nothing.

  • Stale-closure fix: lifecycle::a_closure_cached_between_prepare_and_commit_is_not_served_stale. The disable is red in both debug and release.

  • Results:

    • codegraph suites green (12 lib tests); dt64 suites green (25 + 29);
    • clippy -D warnings and fmt clean;
    • board gates pass.

Not implemented here: the L1–L6 test (step 3). EXO-148 stays locked. Not to be merged automatically.

🤖 Generated with Claude Code

https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX

…step 1)

check_route applies route's two refusals (UnknownClass, OutsideReservation)
without a route event or a new RouteVersion. route runs the same check
before it writes (RouteLog::check), so the two cannot disagree. A checked
intent stays valid: classes are only added and the answer does not read
the route log.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
…merge point

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 66c185fd-db8b-4944-a032-e0e26b1f9e23
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

Share

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-02T14:53:44.457798Z 7b58c93 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

…mmit (codex P2 on #1924)

A read between prepare_refresh and commit_refresh (impact, closure take
&self) can fill a closure cache the preparation did not see. It was built
from the pre-commit edges, and commit kept it, so impact answered from
the old graph. When the batch changes edges, commit now drops every cache
it has no prepared refresh for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
…nd commit)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
@AdaWorldAPI AdaWorldAPI changed the title dt64: BindStore::check_route (D-TGL-PUB step 1); post-merge record for #1924 dt64: BindStore::check_route (D-TGL-PUB step 1); codegraph stale-closure fix (codex on #1924); post-merge record for #1924 Nov 2, 2026
…tep 2)

An in-memory WalSink, test-only, that honours the production writer
contract: fence against the head (Fenced, nothing written), one version
per commit, reconcile a re-submitted (cycle, batch_hash), HashConflict for
another batch of a durable cycle, payload-free scan_sealed. Lab seams:
injected faults (I/O before publish, Ambiguous after publish) and a read
of the durable image, where recovery must find land records.

lance-graph-planner is a dev-dependency only. The crate's own workspace
patches the ndarray git coordinate to the sibling checkout, as the root
workspace does, so the graph keeps one ndarray package.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
@AdaWorldAPI AdaWorldAPI changed the title dt64: BindStore::check_route (D-TGL-PUB step 1); codegraph stale-closure fix (codex on #1924); post-merge record for #1924 D-TGL-PUB steps 1-2: BindStore::check_route, lab WalSink; codegraph stale-closure fix; post-merge record for #1924 Nov 2, 2026
@AdaWorldAPI
AdaWorldAPI merged commit e89e617 into main Nov 2, 2026
13 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Nov 2, 2026
AdaWorldAPI added a commit that referenced this pull request Nov 2, 2026
…1a5sw

D-TGL-PUB step 3: G10 × G11 publication lab, falsifiers L1–L6; post-merge record for #1925
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants