Repository navigation
dt64+report: one field basis for the lane socket; test-only scope admission (D-LANESOCK-3) - #1970
Conversation
…ong lane DT64 validates ClassView A; AbiLanes resolves its own ClassView B (same class, revision and field count, first two fields swapped). The bind succeeds and A's revenue field borrows B's region lane. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAqKMMJzKZrYnckXRC8x2U
…idated LaneSource::lane_of now takes the basis entry DT64 resolved through the ClassView it checked; AbiLanes drops its own ClassView and maps that field's predicate through the Catalog. A check through a reordered ClassView (same class, revision, count) now refuses MappingChanged instead of returning another lane. The unwitnessed-scope constructor and its suite move into a crate-local #[cfg(test)] module; the public test feature is removed, so no build of the library can construct an AbiLanes. Implementers updated: dt64's test source and the dir-sim lab (both ignore the basis; they map by position in a single-view world). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAqKMMJzKZrYnckXRC8x2U
…r contract handoff STATUS_BOARD marks D-LANESOCK-2 Shipped (#1969) and adds D-LANESOCK-3. PR_ARC_INVENTORY records #1969. LATEST_STATE records main after #1969 and this branch. Spec: lane_of carries the validated basis (amendment) and §8 hands off the Cockpit/Hub/Matrix consumer chain and the reader-scope witness inventory, without wiring either. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAqKMMJzKZrYnckXRC8x2U
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Hardens D-LANESOCK-2 (#1969, merged
53e849a) in two places. It also reconciles the board after #1969 and hands off the consumer contract the report-rs surfaces will eventually use. DT64 stays the only BindStore.A. One field basis
RED (
49d11c2,a_disagreeing_field_basis_never_returns_the_wrong_lane): DT64 validated ClassView A, whileAbiLanesresolved its own ClassView B. B has the same class, revision and field count as A, but its first two fields are swapped. The bind succeeded, and A'srevenuefield borrowed B'sregionlane, which holds a different, nonzero value:DT64's basis check compares only the field count, so it cannot see a reorder.
Fix: the smallest contract delta.
LaneSource::lane_ofgains one parameter,basis: &FieldRef. This is the entry DT64 resolved at that position through the ClassView it validated, and DT64 passes it at bind and on everycheck. A source maps that field, never a position.AbiLanesno longer holds a ClassView, so it cannot disagree with DT64.All three existing implementers are updated:
AbiLanes;basis).After the fix:
checkorlanethrough B refuses withMappingChanged.LaneBinding::checkturns the test red.B. Structural test-only admission
AbiLanes::unwitnessedtakes the reader scope from the caller. It is now#[cfg(test)] pub(crate), and its suite has moved fromtests/lane_socket.rsinto a crate-local unit module (src/lane_source/tests.rs). Theunwitnessed-scopefeature and its[[test]]gate are removed. No build of the library, including one with--all-features, can construct anAbiLanes.The counting allocator needs
unsafe. The crate therefore forbidsunsafe_codeoutside tests and only denies it in tests, where the allocator has one#[allow].All earlier tests are kept, now 11 in the module: the original nine, the column cap, and the basis test. Pointer equality, scalar parity, the generation and route refusals, and zero hot allocations are unchanged. The report crate runs 55 tests, and the plain CI line now covers the lane-socket suite.
C. Consumer contract with report-rs #43 (handoff only)
Spec §8 in
.claude/plans/d-lanesock-dr-dt64-lane-socket-v1.mdrecords the chain the Cockpit, Hub and Matrix would consume:It adds no lens-specific binding, KPI evaluator, SoA or storage. It also inventories the reader-scope authority, read in code:
RbacAuthority→RbacBinding;lance-graph-rbac::authorize_scoped/authorize_memberships, which return a decision, a row scope and a field mask;ogar_rbac::authorize_identity.The missing seam is a witness that seals such a decision into
dr::Scope. The section states the rules that witness must keep:Scopeauthorizes nothing by itself;scope: Noneis never widened automatically into customer-wide access;RoleScopeAuthorityare a downstream integration point, not a second upstream authority;D. Board
mainafter report: AbiBatch lanes through the DT64 lane socket (D-LANESOCK-2) #1969 and this branch.epiphany_provenancerefuses on this shallow clone because its baseline commit is unreachable; CI runs it with full history.Still closed
RegistryClassViewDOLCEentity_type_iddefect.There is no production admission: this remains a read adapter with a test-only constructor. report-rs #33 and the #43 Cockpit are untouched.
Verification
cargo testfor lance-graph-report (55), lance-graph-dt64 and lance-graph-dir-sim;cargo clippy --all-targets -D warningsfor report (default and--all-features), dt64 and dir-sim;cargo fmt --check.Generated by Claude Code