Skip to content

xlog-relcomp-probe: execute on ndarray::simd; bind through lance-graph-dt64; pin the Epi5 reading - #1884

Merged
AdaWorldAPI merged 6 commits into
mainfrom
ccr-85acaff0-oszq40
Oct 31, 2026
Merged

AdaWorldAPI merged 6 commits into
mainfrom
ccr-85acaff0-oszq40

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Summary

The XLOG probe now runs its admitted query on the ndarray::simd polyfill and binds it through the production bind store (lance-graph-dt64). A new test states how XLOG results read in CausalEdge64 bits 59..63 (Epi5).

Execution on ndarray::simd (src/native.rs, new)

step function
a bound end (X == x, Z == z) eq_u32_to_mask
each side projected onto Y mask_scatter_or_u32, as the demanded result only
support mask_and
rows per Y on each side masked_group_count_u32
derivations per Y checked_binary_i64(I64Op::Mul), from ndarray #407; an overflow is refused
  • No 64-slot limit. The Y domain is DR's lance_graph_dt64::dr::LocalMap, 64 or 256 wide. A 200-Y fixture is answered that the 64-slot register refuses.
  • The count rule is admitted. admit_count accepts XLOG's compiled count rule and refuses any other aggregate (UnsupportedAggregate).
  • The register path stays as the differential. Every Gate B answer asserts that the native forward, backward and answer masks equal the register's. That covers the bound and unbound fixtures, both join orders and the 300-case differential.

Binding through lance-graph-dt64 (tests/dto_binding.rs, rewritten)

  • Routes the answer positions with BindStore::route and seals frames with dt64::dr::FrameStore.
  • Labels fields with field_view and admits the count by MethodRef (Population::Bag).
  • The count's steps name two polyfill words by position (mask-risc's keyed count, then the checked multiply); no word has a classid.
  • Refuses a stale frame (MapChanged) and a retracted position (Unrouted).
  • bind_dr64 still refuses Bag in the lab register. The native path is what answers it now.

Epi5 (tests/epi5_reading.rs, new)

XLOG result written as a CE64 edge Epi5 state
base fact Direct × Open
composed edge, Y retained IndirectKnown × Open
  • A join certifies nothing.
  • An unstamped composed edge reads as Direct, because raw5 == 0 means Direct × Open.
  • Projection refuses when the XLOG lens has no declaration, and under V1Legacy provenance.
  • Stamping moves only bits 59..63.

Docs and board

  • Plan d-xlog-native-v1.md:
    • Amendment A: a binding names mask-risc's op vocabulary; the Epi5 rule.
    • Amendment B: execution on ndarray::simd. The projected two-atom chain moves from NATIVE to INLINE.
  • Probe README updated.
  • STATUS_BOARD rows: D-XLOG-NATIVE-0 marked shipped, D-XLOG-NATIVE-5 and -6 added.
  • Two board entries; entries index regenerated.

New probe dependencies (the probe is its own workspace):

  • normal: ndarray (git master, std, the coordinate lance-graph-onnx uses) and lance-graph-dt64;
  • dev: causal-edge.

CubeCL was not needed as an intermediary: every function above is on the ndarray::simd facade.

Behaviour change: none outside the lab probe.

Validation

  • cargo test --release --manifest-path crates/xlog-relcomp-probe/Cargo.toml: all suites green.
    • gate_b: 18
    • litho: 11, plus 1 ignored (the register still carries no counts)
    • dto_binding: 4
    • epi5_reading: 4
    • gate_g: 3
  • cargo clippy --release --all-targets -- -D warnings and cargo fmt clean.
  • Disable runs, with each patch anchor asserted:
guard removed tests failing
mask_and (answer = forward) 5 in gate_b
multiply replaced by add 2 in litho
bound end ignored 5 in gate_b, 1 in litho
any aggregate admitted the_native_path_refuses_other_aggregates
frame check in bind dt64_does_not_bind_against_a_stale_frame
admitted Bag carried as Distinct executing_the_admitted_bag_method_is_refused_in_the_lab_register
composed edge stamped Direct base_facts_and_composed_edges_carry_different_topologies, an_unstamped_composed_edge_reads_as_direct
  • Not exercised: the multiply-overflow refusal. Per-side counts are bounded by the row count, so no fixture reaches i64.

Open (other owners)

  • Which type carries a method's identity: MethodSignature, MethodRef or Tract's MethodKey (EXO-50).
  • Whether a frame records the bind store's catalogue extent (D8).
  • Production classids for the XLOG and polyfill lenses, and the XLOG Epi5 declaration with its rail (OGAR).
  • Still NATIVE: a many-to-many join whose answer keeps both ends (X, Z), and chains of more than two atoms.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF

…n the Epi5 reading

tests/dto_binding.rs now routes the answer positions with BindStore::route,
seals frames with lance_graph_dt64::dr::FrameStore, labels R and S through
Resolved::field_view and admits the count by MethodRef (Population::Bag). The
count's steps name two words of one lab polyfill lens by position: mask-risc's
keyed count twice, then checked_binary_i64(Mul). Execution has no production
home; the admitted population is carried into the lab register, which still
refuses it (BagNeedsMultiplicity).

tests/epi5_reading.rs states how an XLOG result reads in CausalEdge64 bits
59..63: Direct x Open for a base fact, IndirectKnown x Open for a composed
edge with Y retained. A join certifies nothing. An unstamped composed edge
reads as Direct, and an undeclared lens or V1Legacy provenance is refused.

Plan Amendment A records the vocabulary rule (addenda 8 and 9) and the open
questions. STATUS_BOARD: D-XLOG-NATIVE-0 shipped (#1866), D-XLOG-NATIVE-5 in PR.

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

coderabbitai Bot commented Oct 31, 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: 9283abfd-2eb1-48bf-9f75-c8e7aa2e4e8f
  • 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

src/native.rs answers the admitted chain query with ndarray::simd functions:
eq_u32_to_mask for a bound end, mask_scatter_or_u32 onto Y and mask_and for
the support, and masked_group_count_u32 twice plus checked_binary_i64(Mul)
for the bag count. The Y domain is DR's lance_graph_dt64::dr::LocalMap, so
the native path is not limited to one 64-slot tile. admit_count admits XLOG's
compiled count rule (Count keyed by the answer column) and refuses any other
aggregate.

The DR64 register path stays as the differential: every Gate B answer now
asserts that native forward, backward and answer masks equal the register's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
@AdaWorldAPI AdaWorldAPI changed the title D-XLOG-NATIVE-5: bind the XLOG bag count through lance-graph-dt64; pin the Epi5 reading xlog-relcomp-probe: execute on ndarray::simd; bind through lance-graph-dt64; pin the Epi5 reading Oct 31, 2026
@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review October 31, 2026 09:20
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 31, 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-10-31T09:29:01.743195Z 5fc2327 Draft marked ready
ℹ️ 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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5fc23270a6

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/xlog-relcomp-probe/src/native.rs Resolved
XLOG's fact loader (load_grouped_facts_into_store at the pinned revision)
skips a row it has already seen, so a base relation is a set and a repeated
fact is not a second witness. facts() now drops repeats, so the native bag
count, the register and both oracles all read the same set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
A mapping file names each concern's sole owner, its basis, the symbols only
the owner names and what everyone else reaches it through. A syn-based symbol
fence and a cargo-metadata dependency fence report uses outside it; a two-way
ratchet baseline holds known violations. Report-only first, blocking once
the baseline is committed. Board rows D-SOC-FENCE-0..4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
…SQL endgame (plan only)

DuckDB's selection vector made explicit (mask + LocalMap pointer table, tile
width from survivor count), relations read per semiring on one address (B for
presence, N for bag multiplicity), the bag-op polyfill table with each word's
status, N-compose via ndarray::simd::matmul_i8_to_i32 as the candidate home
for the many-to-many join, frontends (XLOG, SQL, Cypher, Mistaber), the
PostgreSQL and Iceberg scoreboard protocol, waves D-DYNBAG-0..7. D-SOC-FENCE
gains the tuple-template concern.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
@AdaWorldAPI
AdaWorldAPI merged commit d3c2a29 into main Oct 31, 2026
13 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Oct 31, 2026
AdaWorldAPI pushed a commit that referenced this pull request Oct 31, 2026
…TIVE Amendment C

D-DYNBAG §17 adopts the operator's architecture (Quack/relalg describe,
mask-risc evaluates, ndarray::simd computes under mask-risc), diagrams
the merged #1884 flow against the target, lists the exact existing APIs,
labels seven missing integrations, and states the D-DYNBAG-0 gates.
D-XLOG-NATIVE's direct-ndarray rule is struck in place and superseded
by Amendment C. Docs only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
AdaWorldAPI added a commit that referenced this pull request Oct 31, 2026
board: record #1884 (PR_ARC, LATEST_STATE, D-XLOG-NATIVE-5/6 shipped)
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