Skip to content

contract: FMA_ANATOMY → V3 classid + causal-edge warning cleanup#665

Merged
AdaWorldAPI merged 4 commits into
mainfrom
claude/v3-substrate-migration-review-o0yoxv
Jul 8, 2026
Merged

contract: FMA_ANATOMY → V3 classid + causal-edge warning cleanup#665
AdaWorldAPI merged 4 commits into
mainfrom
claude/v3-substrate-migration-review-o0yoxv

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

What

Two independent follow-ups after #663 (ISS-V1-TAIL-RESIDUE) merged:

350f6bed — FMA_ANATOMY domain → V3 class

  • soa_graph.rsFMA_ANATOMY.classidCLASSID_FMA_V3 (cfg-selected; V1 CLASSID_FMA fallback under --no-default-features), matching the q2 /helix body-anatomy substrate which already renders V3. The nearest_anchor_ranks_by_hhtl_hop_count test is cfg-branched: V3 depth 26/32, V1 depth 18/24.
  • Mirrors the same one-line domain-constant fix that contract: resolve ISS-V1-TAIL-RESIDUE — un-gate mint_for, default-on guid-v3-tail, aiwar mints V3 #663 applied to OSINT_GOTHAMproject_snapshot filters rows by exact classid, so a V1-pinned domain constant silently drops V3-minted rows. The read path (family_of/identity_of) was already tail-aware; only the constant lagged.

774d34fc — causal-edge v1/v2 warning cleanup

Per-site #[allow(deprecated)] / #[allow(dead_code)] on the v1 accessor paths that stay live under one feature config and deprecated/dead under the other. No semantics change — the mantissa-bug fix (v2 signed 4-bit read via from_mantissa; pack writes to_mantissa) is untouched. This only quiets the noise so downstream crates vendoring causal-edge build clean.

Site Attribute Rationale
edge.rs from_bits dead_code v1-only decode; v2 uses from_mantissa
edge.rs PLAST_SHIFT dead_code v1 bit pos; v2 uses crate::layout::PLAST_SHIFT
edge.rs compose t_out deprecated v1 temporal read; pack() drops it under v2
edge.rs compose resolved_infer v1 arm deprecated v1 3-bit inference read
edge.rs Debug fmt deprecated v1 diagnostic dump of inference_type/temporal
network.rs evidence_trail sort deprecated v1 temporal ordering

Verification

  • causal-edge: warning-free under both default (v2) and --no-default-features (v1); 48/48 tests green.
  • Contract crate: FMA V3 flip verified against the cfg-branched hop-count assertions.

Note

This branch was previously used for #663 (merged). These two commits were rebased fresh onto main (9a79920f) — they are new work, not a re-open of #663.

🤖 Generated with Claude Code


Generated by Claude Code

claude added 4 commits July 8, 2026 06:05
… body substrate

q2's osint-bake/body (the /helix body.soa substrate) already mints
CLASSID_FMA_V3, so lance-graph's V1-pinned FMA_ANATOMY domain was the
inconsistency. Flip it to CLASSID_FMA_V3 (cfg-selected, V1 fallback under
--no-default-features), mirroring OSINT_GOTHAM.

The routing was already tail-aware: `hhtl_path` dispatches V3 classids to
`from_guid_prefix_v3` (folds HEEL·HIP·TWIG·LEAF, classid NOT folded) and
`nearest_anchor` uses it. So the anchor hop depths legitimately change under
V3 (the classid_lo tier drops out of the fold): the `nearest_anchor` test now
asserts the V3 values (lcp 3 ⇒ 26, lcp 0 ⇒ 32) under the feature and keeps the
V1 values (18/24) under --no-default-features. Ordering is invariant either way.

(An earlier revert of this flip was wrong — it mistook the correct V3 fold
depth for a degraded fallback; the operator corrected it: q2 /helix is V3.)

PROJECT/ERP stay V1 — no CLASSID_*_V3 registered for them yet.

Verification: default 854 lib tests green (V3, 26/32); --no-default-features
anchor test green (V1, 18/24); fmt clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLBnPuScZy6w9di2QEjsXM
Per-site #[allow(deprecated)] / #[allow(dead_code)] on the v1 accessor
paths that remain live under one feature config and deprecated under the
other. No semantics change — the mantissa-bug fix (v2 signed 4-bit read
via from_mantissa; pack writes to_mantissa) is untouched; this only quiets
the noise so consumers vendoring causal-edge build clean.

- edge.rs from_bits / PLAST_SHIFT: dead under v2 (superseded by mantissa
  decode / crate::layout::PLAST_SHIFT), live under v1 → #[allow(dead_code)].
- edge.rs compose t_out + resolved_infer v1 arm: v1 reads deprecated under
  v2 layout; the pack() below already drops temporal → per-arm allow.
- edge.rs Debug fmt / network.rs evidence_trail sort: v1 diagnostic/ordering
  views, deprecated but harmless under v2 → #[allow(deprecated)].

Verified warning-free for both default (v2) and --no-default-features (v1);
48/48 tests green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLBnPuScZy6w9di2QEjsXM
… to V3

Adds CLASSID_PROJECT_V3 (0x0101_1000) / CLASSID_ERP_V3 (0x0202_1000) +
_LEGACY pre-flip aliases (0x1000_0100 / 0x1000_0200), mirroring the exact
CLASSID_OSINT_V3/CLASSID_FMA_V3 encoding: canon-HIGH domain:appid byte pair,
fixed 0x1000 V3-generation marker in the custom-LOW half. Registers
ReadMode::PROJECT_V3/ERP_V3 (same Cognitive value model as their V1
read-modes) in BUILTIN_READ_MODES, both new-form and legacy-alias keys.

Encoding-verification finding: the existing V3 consts' custom/low u16 does
NOT carry an AppPrefix render-lens value (render_classid's concept-HIGH /
app-prefix-LOW composition) — it carries the fixed 0x1000 marker, with the
appid instead packed into the canon-HIGH half's low byte alongside the
domain (q2 = 0x01 for OSINT/FMA/CPIC). Per the operator's ruling that
PROJECT/ERP own their own appid (OpenProject=0x01, Odoo=0x02, not q2's
0x01), those bytes are substituted into the SAME canon-HIGH position:
0x01<<8|0x01 = 0x0101 (PROJECT), 0x02<<8|0x02 = 0x0202 (ERP) — verified
against the already-existing test fixtures
canonical_concept_domain(0x0101)==ProjectMgmt / (0x0206)==Commerce, which
independently confirm the domain-byte-only routing these canon halves need.

Flips soa_graph::PROJECT/ERP DomainSpecs to the new V3 classids under the
same #[cfg(feature = "guid-v3-tail")] / --no-default-features V1-fallback
pattern already used for OSINT_GOTHAM/FMA_ANATOMY. Both domains have empty
anchor_families, so no nearest_anchor hop-value test needed cfg-branching.

Tests: cargo test -p lance-graph-contract — 854 passed (default), 840
passed (--no-default-features); no new/changed test assertions needed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Board hygiene only, no code change in this repo. woa-rs's ERP account-GUID
minter (src/erp/canon.rs::make_account_guid_bytes) was migrated to the V3
tail today (2026-07-08, operator ruling) in the sibling woa-rs repo:
leaf(u16)/family(u16)/identity(u16) byte-identical to new_v2/mint_for(V3);
Personenkonten trailing digits (SKR03 70000-99999) now a real LEAF
(part_of:is_a) rail via skr_leaf() instead of the old V1 family-hash
stuffing; Parallelbetrieb invariant pinned (MySQL ORM stays authoritative,
identity = MySQL row id, u16-by-signature with a loud try_from at call
sites, never a silent alias). 11/11 tests green in woa-rs.

Prepended as a new dated entry (this file's own discipline: newest first,
double-entry, no deletions) — this is a THIRD residue arm under the
ISS-V1-TAIL-RESIDUE umbrella, alongside the two lance-graph-contract mint
sites resolved 2026-07-07 (ocr.rs/aiwar.rs, below).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@AdaWorldAPI, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 10 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2b6b5e83-6866-4ace-a652-45afe577dca0

📥 Commits

Reviewing files that changed from the base of the PR and between 8109742 and 8f48ba1.

📒 Files selected for processing (5)
  • .claude/board/ISSUES.md
  • crates/causal-edge/src/edge.rs
  • crates/causal-edge/src/network.rs
  • crates/lance-graph-contract/src/canonical_node.rs
  • crates/lance-graph-contract/src/soa_graph.rs

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

Comment @coderabbitai help to get the list of available commands.

@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_fd0c2cf1-0df8-4694-9aee-7d0b9a2a4ab3)

@AdaWorldAPI AdaWorldAPI merged commit 26d2cf5 into main Jul 8, 2026
7 checks passed
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