Skip to content

feat(class-meta-dto): D-CLS arc — classes as SoA-view with presence bitmask (FieldMask + ClassView + structural-signature + render)#441

Merged
AdaWorldAPI merged 10 commits into
mainfrom
claude/sleepy-cori-aRK2x
May 31, 2026
Merged

feat(class-meta-dto): D-CLS arc — classes as SoA-view with presence bitmask (FieldMask + ClassView + structural-signature + render)#441
AdaWorldAPI merged 10 commits into
mainfrom
claude/sleepy-cori-aRK2x

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented May 31, 2026

Copy link
Copy Markdown
Owner

The class-meta-DTO: classes-as-SoA-view with presence bitmask (D-CLS arc)

Implements the cognitive-risc-classes.md v0.2 "Jinja = classes + presence bitmask" pattern: the class flies as a meta-DTO above an agnostic SoA, so the SoA stays label-free and the class shape (fields, labels, template, DOLCE category) resolves late from the OGIT cache — never hand-rolled onto the row (classes.md:39 "the meta-DTO resolves; it does not store"; core invariant #1 "nothing semantic in the register file").

This is the contract-foundation work the merged plan #440 (odoo-classes-bitmask-render-v1) called for — built after a council + brutal-honest review of that plan caught 3 P0 factual errors (recorded in EPIPHANIES), so these slices sidestep them by construction (reuse the existing class_id, resolve DOLCE from the cache, scope to the curated corpus).

The XML-parse framing it realizes

  SoA row     = XML document   (agnostic bytes: class_id + presence bits only)
  ObjectView  = XSD schema     (the per-class ordered field set — already existed)
  ClassView   = parser+schema  (projects row → typed view, late-bound)
  FieldMask   = which optional elements are present  (structural, C2)
  render_rows = the XSLT output rows  (off-bits skipped)

Slices (5)

  • D-CLS-FM (contract/class_view.rs) — FieldMask(u64) presence bitmask + ClassView resolver trait + ClassProjection. ClassId = u16 (reuses the existing soa_view::class_id width). Extends ontology::ObjectView/FieldRef/DisplayTemplate; does not duplicate. Zero-dep.
  • D-CLS-RES (ontology/class_resolver.rs) — RegistryClassView impls ClassView over the live OntologyRegistry; DOLCE resolved late via classify_odoo(ogit_uri) (OD-DOLCE "use the cache"). Per-class memo over the O(n) registry scan (the underlying by_entity_type_id index is a documented deferred slice).
  • D-CLS-SIG (ontology/odoo_blueprint/class_signature.rs) — deterministic signature(&OdooEntity) (FNV-1a over kind + field/method-kind histograms + state-machine; name-independent) + object_view() deriving the real field-set bit-basis. The honest group-by-on-structural-hash (classes.md:43), not Aerial+ clustering (that entry point does not exist — confirmed in review).
  • D-CLS-AUDITcurated_entities() (all 15 l-lanes, 64 consts) + a falsifiable test that the real corpus collapses entities → fewer shape-families (classes.md:42 confirmed on data, not asserted).
  • D-CLS-RENDERClassView::render_rows + RenderRow (off-bits-skipped, C2 presence-only). The render logic; the askama engine is a deferred crate-Wave.

Invariants honoured

  • C2 — bitmask is presence, NEVER semantics (enforced by the type: render_rows yields a row iff its bit is set; never branches on meaning).
  • N3 — stable append-only bit positions (field position i = declared-field i).
  • Zero-dep contract preserved; dependency-inversion (contract owns the trait, ontology owns the answers — like MailboxSoaView).
  • Reuses the existing class_id (no colliding newtype); DOLCE from the cache (no canonical-enum contest).

Verification

  • cargo test -p lance-graph-contract497 pass; -p lance-graph-ontology240 pass (+8 new teeth-tests across the arc, incl. the falsifiable corpus collapse + the C2 off-bits-skip).
  • clippy -D warnings clean on all new files (two doc/import lints caught + fixed pre-push); rustfmt clean.
  • Purely additive — 973 insertions, 0 deletions; no existing type renamed or removed.

Deferred (follow-ups, not this PR)

The askama render crate (engine), the registry by_entity_type_id O(1) index, naming the discovered shape-families (Wave-2 human step), and Wikidata-HHTL (the classes.md-N4 second-domain falsifier that reuses FieldMask/signature/ClassView).

Board hygiene (same commits): STATUS_BOARD D-CLS-* rows + EPIPHANIES findings (the review verdict, the OD ratifications, each slice).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R


Generated by Claude Code

Summary by CodeRabbit

  • Documentation

    • Added a dated epiphany and expanded deliverable tracking for the D-CLS arc; review verdict set to HOLD pending correction of P0 issues.
  • New Features

    • Added a typed class-view projection with presence-only rendering, stable field ordering, and late-resolved labels via the ontology registry.
    • Added deterministic structural-signature auditing and corpus grouping for entity analysis.
  • Chores

    • Added registry-backed resolution, render/projection plumbing, and audit/corpus utilities.

claude added 7 commits May 31, 2026 00:53
…D, 3 P0 errors + D-CLS-3 vaporware

5-savant council + 3-brutal review (plan's own §2 + user requested) BEFORE agent spawn.
Doctrine sound (classes.md verbatim) but factual errors vs source: (1) 381 OdooEntity consts
not 66 (64 curated + 317 EXT_*); (2) class_id already exists (soa_view.rs:61, N1 hook #437) —
D-CLS-5 would collide; (3) canonical DolceCategory has 6 variants not 4 (AbstractObject/Region/
Other, no 'Abstract') — D-CLS-1 From-test won't compile. D-CLS-3 vaporware: aerial mine()s rules
not clusters entities — downgrade to deterministic group-by-on-structural-hash. Iron-rule
YIELDS-WITH-AP: presence!=facet-code wall holds; AP2 — FieldPositionTable must freeze append-only
(not recompute from union). Shippable-once-ratified: D-CLS-2(fix count)/4/5(after reconcile). 4 OD
gates still blocking. No agent spawns until P0 fixed + OD ratified.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
… 6v4), ClassId u16 reuse-existing, kind+class_id both DTO-views, askama

Spec-owner ratification. Two answers reframe not just answer: OD-DOLCE dissolved (DOLCE
is a resolved attribute of the OGIT class in the ontology cache, not a canonical contract
enum to pick among 4 -> the 6-vs-4 P0-3 mismatch evaporates; 4 enums become cache consumers).
OD-CLASSID-VS-ENTITYKIND dissolved (meta-DTO resolves both kind+class_id as views over the
row; Odoo becomes a custom view). OD-CLASSID-WIDTH u16 reuse soa_view::class_id (not a 2nd
newtype). OD-TEMPLATE askama. Unifying: meta-DTO resolves, doesn't store (classes.md:39). All
4 gates resolved; still gated on P0 fixes (381 entities, group-by not aerial-cluster, AP2
position-freeze) before Wave-1 spawn.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…; class flies ABOVE the agnostic SoA)

The XML-parse framing: OGIT today = hashtable single lookups (uri->row); the class = a
META lookup (class_id->shape) composing them. SoA row=XML doc, ObjectView=XSD, ClassView=
parser+schema, FieldMask=present optional elements, askama=XSLT. Classes fly as a meta-DTO
ABOVE the SoA so the SoA stays agnostic: zero labels in the bytes, labels/template/DOLCE
resolved LATE from the OGIT cache at projection (classes.md:39 resolve-not-store; core inv #1).
C2 free: bit=presence (SoA), bit->label=resolution (above). Zero-dep: ClassId(u16, reuses
soa_view::class_id) + FieldMask(u64) + ClassView trait (fields/template/dolce_category_id/
project) extending ontology::ObjectView/FieldRef/DisplayTemplate (not duplicating). Dep-inversion
like MailboxSoaView. 3 teeth-tests + 496 contract lib green; clippy+fmt clean. Board: STATUS_BOARD
D-CLS-FM + EPIPHANIES. Deferred: ontology impl, group-by audit (64 curated), askama render crate.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…lassView over the live OGIT cache)

Makes the contract ClassView trait live: the OGIT-hashtable-single-lookup -> class-meta-
lookup upgrade. RegistryClassView<'a> resolves class_id -> shape over a borrowed
OntologyRegistry; DOLCE resolved LATE (enumerate_first_with_entity_type_id -> MappingRow ->
ogit_uri -> classify_odoo), never stored on the row (OD-DOLCE cache-resolves). dolce_id u8
consts = the stable ids the trait returns. Dep-inversion (ontology already deps contract).
Honest scope: field-SET supplied (ObjectView bit-basis), not enumerated — MappingRow has no
field-list; enumeration = deferred D-CLS audit, nothing fabricated. /code-review caught the
O(n)-scan+full-clone in registry::enumerate_first_with_entity_type_id called per render ->
fixed at my layer with a per-class RefCell memo (DOLCE stable per class) + documented the
deferred by_entity_type_id index. 4 teeth-tests + 234 ontology lib green; clippy+fmt clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…-hash shape-family audit; fills the D-CLS-RES bit-basis)

The honest D-CLS-2/3: classes.md:43 discovered-taxonomy via deterministic
group-by-on-structural-hash (NOT aerial-cluster vaporware — aerial mines rules not
clusters, brutal-review confirmed). signature(&OdooEntity)->u32 FNV-1a over
[kind, field-kind-hist x6, method-kind-hist x5, has_state_machine] (mirrors
style_recipe::fnv1a_recipe), deterministic + name-independent. object_view(&OdooEntity)
derives the real ObjectView field-set (field i = stable FieldMask bit i, N3) -> FILLS the
supplied-placeholder class_resolver (D-CLS-RES) took, so the slices compose. shape_families
+ audit. 4 teeth-tests over real l1::ENTITIES; 238 ontology lib green; clippy+fmt clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ses.md:42 falsifiably confirmed) + clippy fix

curated_entities() concats all 15 l-lanes (64 consts); corpus_summary() + the falsifiable
test discovered_taxonomy_collapses_entities_to_fewer_families asserts family_count <
entity_count over the REAL curated corpus -> classes.md:42 confirmed on data not fixture.
Review->fix: clippy -D warnings flagged unused FieldMask import at class_resolver.rs:32
(D-CLS-RES, test-only use) -> moved into the test module (would have failed CI). 6
class_signature + 240 ontology lib green; my files clippy-clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…ed render surface) + Wikidata-HHTL plan

render_rows(class,mask)->Vec<RenderRow{label,predicate}>: the C2 presence-only render
surface (classes.md:49), template-agnostic (askama engine deferred to its crate-Wave).
Completes the contract side of the XML-parse stack. Review->fix: clippy -D warnings caught
a doc-list-indent lint -> reflowed. 497 contract lib green; clippy+fmt clean. Also records
the Wikidata-HHTL plan as the next arc: the classes.md-N4 second-domain falsifier that
reuses FieldMask/signature/ClassView; smallest slice = HHTL 16^n nibble router + OWL/DOLCE
facet template + mask-inherits-as-delta (defer the 115M streaming load).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
@coderabbitai

coderabbitai Bot commented May 31, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a9aa33af-c10c-4f62-a04f-014c0f180675

📥 Commits

Reviewing files that changed from the base of the PR and between 21c37eb and 67903a8.

📒 Files selected for processing (1)
  • .claude/board/EPIPHANIES.md
✅ Files skipped from review due to trivial changes (1)
  • .claude/board/EPIPHANIES.md

📝 Walkthrough

Walkthrough

Adds D-CLS: a ClassView contract (ClassId, FieldMask, projection/render_rows), an ontology-backed RegistryClassView with DOLCE memoization, deterministic structural-signature auditing over curated Odoo entities, and accompanying status/epiphany documentation entries.

Changes

D-CLS: Class-View Projection and Audit System

Layer / File(s) Summary
ClassView contract abstractions
crates/lance-graph-contract/src/class_view.rs, crates/lance-graph-contract/src/lib.rs
Defines ClassId (u16), FieldMask(u64) presence-bit helpers, ClassView resolver trait, RenderRow<'a> output, and ClassProjection<'a> iterator. Unit tests verify bitmask semantics, label/presence separation, out-of-range handling, and render-row field skipping. Re-exports the module from the crate root.
Ontology-backed ClassView resolver
crates/lance-graph-ontology/src/class_resolver.rs, crates/lance-graph-ontology/src/lib.rs
Implements RegistryClassView<'a> using an OntologyRegistry and per-class ObjectView views; defines dolce_id constants and dolce_to_id, computes and memoizes dolce_category_id, and provides defaults for unknown classes. Tests cover field/template retrieval, mask-based projection, DOLCE fallback/memoization, and mapping stability.
Structural signature and corpus audit
crates/lance-graph-ontology/src/odoo_blueprint/class_signature.rs, crates/lance-graph-ontology/src/odoo_blueprint/mod.rs
Implements StructuralSignature(u32) via 32-bit FNV-1a over canonical structural tuple (kind, field/method histograms, state-machine presence), derives ObjectView from declared fields (order-preserving, capped), selects DisplayTemplate by field count, and sets primary_label. Provides AuditRow, audit(), shape_families(), curated_entities() (lanes l1–l15), and corpus_summary(). Includes deterministic grouping and corpus-collapse tests.
Planning and status documentation
.claude/board/EPIPHANIES.md, .claude/board/STATUS_BOARD.md
EPIPHANIES.md records 2026-05-31 D-CLS entries (FM, RES, SIG, AUDIT, RENDER), ratified OD gates, and a HOLD review verdict listing P0 factual errors. STATUS_BOARD.md appends five D-CLS deliverables marked In PR.

Sequence Diagram

sequenceDiagram
  participant Client
  participant ClassViewImpl
  participant OntologyRegistry
  Client->>ClassViewImpl: project/render_rows(mask, class_id)
  ClassViewImpl->>ClassViewImpl: fields() / field_label() (late-resolve)
  ClassViewImpl->>OntologyRegistry: lookup class OGIT / classify_odoo
  OntologyRegistry-->>ClassViewImpl: DolceCategory
  ClassViewImpl->>ClassViewImpl: dolce_to_id + memoize
  ClassViewImpl-->>Client: iterator / RenderRow items
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • AdaWorldAPI/lance-graph#412: RegistryClassView's DOLCE classification wiring depends on the classification logic introduced in this PR.

Poem

A rabbit hops through presence bits,
Late labels bloom where masks admit,
Signatures hash each Odoo name,
Registry whispers DOLCE, then we memo the same,
Bits, masks, and tests all play the game. 🐰✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title directly and accurately describes the main deliverable: the D-CLS arc implementing classes as SoA-view with FieldMask, ClassView, structural-signature, and render functionality.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/sleepy-cori-aRK2x

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

@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: 5aaefd59ea

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

let mut bits = 0u64;
let mut i = 0;
while i < positions.len() {
bits |= 1u64 << (positions[i] as u64 & 63);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reject out-of-range field positions

When a caller passes a position outside the advertised MAX_FIELDS range, the & 63 mask aliases it back onto a valid bit instead of rejecting or ignoring it; for example from_positions(&[64]) sets bit 0, and a custom ClassView with a 65th field would make render_rows treat field 0 as present. Since the mask is the persistence/render presence contract, this silently corrupts which fields are rendered for invalid or oversized class shapes rather than enforcing the 64-field limit.

Useful? React with 👍 / 👎.

…Codex P2 #441)

from_positions/with/has used & 63, which ALIASED an out-of-range position onto a valid
bit (pos 64 -> bit 0) — silently corrupting the presence contract for a >64-field class
(the N3 'old masks misread' failure class). Now positions >= MAX_FIELDS(64) are ignored
(from_positions/with no-op; has -> false), preserving the no-panic property without
misrepresenting presence. Teeth-test: pos 64 does NOT alias to bit 0, in-range bit 0
unaffected. 497 contract lib green; clippy+fmt clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/board/STATUS_BOARD.md:
- Around line 571-575: The D-CLS rows (D-CLS-FM, D-CLS-RES, D-CLS-SIG,
D-CLS-AUDIT, D-CLS-RENDER) currently reference PR `#440` in their "PR / Evidence"
column but the change set belongs to PR `#441`; edit each of those entries to
replace "`#440`" with "`#441`" so the PR/evidence column matches the actual PR
number for traceability.

In `@crates/lance-graph-ontology/src/odoo_blueprint/class_signature.rs`:
- Around line 73-135: Refactor the free functions signature(entity: &OdooEntity)
and object_view(entity: &OdooEntity) into inherent methods on OdooEntity (impl
OdooEntity { pub fn signature(&self) -> StructuralSignature { ... } pub fn
object_view(&self) -> ObjectView { ... } }), replacing references to entity with
&self and iterating self.fields/self.methods by reference (avoid consuming),
keep return types and internal helpers (fnv1a, FieldMask, FieldRef,
DisplayTemplate, StructuralSignature) unchanged, preserve visibility (pub) as
needed, and then update all call sites to use entity.signature() and
entity.object_view() rather than free-function calls.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 19aa0093-a36d-430e-9ba0-7161b2009a52

📥 Commits

Reviewing files that changed from the base of the PR and between 743bb83 and 5aaefd5.

📒 Files selected for processing (8)
  • .claude/board/EPIPHANIES.md
  • .claude/board/STATUS_BOARD.md
  • crates/lance-graph-contract/src/class_view.rs
  • crates/lance-graph-contract/src/lib.rs
  • crates/lance-graph-ontology/src/class_resolver.rs
  • crates/lance-graph-ontology/src/lib.rs
  • crates/lance-graph-ontology/src/odoo_blueprint/class_signature.rs
  • crates/lance-graph-ontology/src/odoo_blueprint/mod.rs

Comment thread .claude/board/STATUS_BOARD.md Outdated
Comment thread crates/lance-graph-ontology/src/odoo_blueprint/class_signature.rs Outdated
claude added 2 commits May 31, 2026 01:52
…ew as OdooEntity carrier methods

Two valid CodeRabbit findings:
1. STATUS_BOARD D-CLS rows referenced the plan PR #440; the change set is #441 — updated
   the 5 mutable PR/Evidence cells (sanctioned: that column is the mutable field).
2. signature(&OdooEntity)/object_view(&OdooEntity) were free functions over the carrier;
   CLAUDE.md 'The Click' litmus says method-on-the-carrier. Refactored into
   ; bodies unchanged
   (entity->self), all 7 call sites -> e.signature()/e.object_view(). 240 ontology lib
   green; clippy+fmt clean.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
…-AST, not the AST itself

Research answer to 'can arm-discovery be the SPO-AST?': NO as the AST (it's the upstream
ArmDiscovered proposer emitting flat CandidateRules via lossy codebook-probe; no AST node
type; using it as the hub conflates proposer<->hub and pushes similarity into addressing,
violating the faiss-homology iron rule). YES as a feeder: CandidateRule -> ruff_spo_triplet
Triple (needs Implies, D-ARM-SYN-1) = one input stream to the hub. The guarded-rewrite SPO-AST
node type doesn't exist yet; it'd be CAM-addressable in contract and consume candidates from
{arm-discovery, AstWalker, LLM, LogicalOperator} tagged by discovery_origin.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
@AdaWorldAPI AdaWorldAPI merged commit a77e119 into main May 31, 2026
6 checks passed
AdaWorldAPI pushed a commit that referenced this pull request May 31, 2026
Mandatory post-merge board update (merge a77e119):
- STATUS_BOARD: 5 D-CLS rows In PR -> Shipped
- PR_ARC_INVENTORY: prepend #441 entry (Added/Locked/Deferred/Docs/Confidence) —
  records the class-flies-above-SoA invariant, C2/N3, FieldMask-no-fold (Codex P2),
  carrier-methods (CodeRabbit), DOLCE-from-cache + class_id-reuse decisions
- LATEST_STATE: prepend Contract-Inventory blockquote (class_view + class_resolver +
  class_signature surface, so a new session does not re-derive them)

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
AdaWorldAPI pushed a commit that referenced this pull request May 31, 2026
…FieldMask::inherit (Wikidata-HHTL slice 1)

The downstream 16^n Abstammung bucket router #438 (D-ARM-14 P1) names but did not build:
subClassOf nibble path, bit-shift O(1) addressing (root/child/basin/parent/is_ancestor_of).
DOLCE-agnostic by construction (basin: u8 = dolce_id 0..3 resolved THROUGH the ontology cache
per OD-DOLCE b31464d — never an embedded enum; matches both #441 dolce_id and #438 basin()
orderings). + FieldMask::inherit (mask-inherits-as-delta; multi-parent = orthogonal facet bit
in the same mask, NOT a 2nd path). Reuses #441 FieldMask; zero-dep preserved.

The N4 second-domain falsifier for the D-CLS machinery: the Wikidata D-CLS triple
(class_id, shape_hash, presence_bitmask) = (ClassId, StructuralSignature, FieldMask) — all #441.
Convergent with D-ARM-14, firewall preserved (aerial = zero-dep proposer; contract/ontology = hub).

4 teeth-tests (bit-shift round-trip, depth cap + out-of-range nibble ignored, prefix reachability,
multi-parent-is-a-facet-bit); 501 contract lib green; clippy -D warnings + fmt clean. Board: FINDING
D-CLS<->D-ARM-14 reconciliation (EPIPHANIES) + D-WIKI-HHTL-1 row.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
AdaWorldAPI pushed a commit that referenced this pull request May 31, 2026
…a-DTO generalises to Wikidata)

The N4 second-domain falsifier (cognitive-risc-classes.md): routes a curated set of REAL
Wikidata classes (Q5 human, Q215627 person, Q515 city, Q11424 film, Q5398426 tv-series,
Q1656682 event) through the SAME machinery the D-CLS arc built for Odoo — proving the
Wikidata D-CLS triple (class_id, shape_hash, presence_bitmask) = (ClassId, StructuralSignature,
FieldMask) is domain-independent, not Odoo-overfit.

Reuses (not re-grows): contract::hhtl::NiblePath (routing, basin = cache-resolved dolce_id u8,
NO DOLCE enum on the path — OD-DOLCE), FieldMask (presence/facet-bitmask), StructuralSignature
+ contract::hash::fnv1a (shape-family key over the canonical property-set), and the #441
ClassView trait (WikidataClassView impls it unchanged).

Falsification CONFIRMED on data (5 teeth-tests): corpus collapses to fewer shape-families
(film ≡ tv-series share the AV-work shape), DOLCE→basin routing through the cache u8, triple
shape domain-independent, ClassView resolves a Wikidata class with render_rows off-bits-skip
(C2), subclass human⊂person inherits path (is_ancestor_of) + mask-as-delta. 245 ontology lib
green; clippy -D warnings + fmt clean. Firewall preserved (hub side; aerial untouched).

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
AdaWorldAPI pushed a commit that referenced this pull request May 31, 2026
…ecord #442 scale-freezes (D-ARM-14 review)

The D-ARM-14 session's review of #442 (merge-worthy verdict) flagged two non-blocking
'name the freeze' items; acting on both:

Flag 1 (the strong one) — NiblePath::child() saturated SILENTLY past MAX_DEPTH=16, so two
distinct deep P279 chains truncated at 16 would collide on one path (is_ancestor_of/basin
treat them as one). Same no-silent-aliasing class as the root()/FieldMask fixes. Added
is_full() (the depth_exhausted flag) + try_child() -> Option (returns None instead of
saturating), so the deferred 115M loader DETECTS the ceiling and switches to a ref instead
of colliding. child() stays the saturating convenience, now documented to gate on is_full().

Flag 2 + minors — recorded as TD-WIKI-SCALE (TECH_DEBT, append-only): StructuralSignature u32
birthday ceiling (~77k shape-families — a #441 contract decision to widen to u64, WITH the
deferred loader, not unilaterally here); signature() per-call Vec alloc; dolce_category_id
default-ENDURANT-on-unknown. All fine at curated/Odoo scale; bite only at the 115M load.
signature() doc now cites the u32 freeze.

503 contract + 246 ontology lib green; clippy -D warnings + fmt clean. Firewall preserved;
the proposer-side dolce_id alignment remains the D-ARM-14 session's lane.

https://claude.ai/code/session_01R9AWgFa65uPnLyS2my2d2R
AdaWorldAPI pushed a commit that referenced this pull request Jun 2, 2026
…perseded-by-#441 + EPIPHANY E-CHESS-IS-NOT-RETIREABLE + FINDING F-DIAGRAMS-450-CLOSES-LOOP

The parallel `claude/sleepy-cori-aRK2x` + `claude/jolly-cori-clnf9` sessions
shipped what my plan v1 (#440) was about to over-engineer. Reconciling my
branch's audit trail with their shipped reality.

STATUS_BOARD (status-flip per append-only doctrine; row content preserved
as audit trail of "approach considered, not shipped"):
- D-CLS-1 → Superseded (dissolved: DOLCE resolved late through cache,
  not consolidated; 4 enums coexist; OD-DOLCE-CANONICAL closed b31464d)
- D-CLS-2 → Superseded-by-D-CLS-SIG (Rust function, not static PSV)
- D-CLS-3 → Superseded-by-D-CLS-SIG (was VAPORWARE per #441 review;
  Aerial+ is for runtime data, not structural shapes)
- D-CLS-4 → Superseded (no new crate; trait in contract + impl in ontology)
- D-CLS-5 → Superseded-by-D-CLS-FM (reuses PR #437's MailboxSoaView class_id)
- D-CLS-6 → Superseded (dissolved: class derived from signature(),
  not stored; "meta-DTO resolves; it does not store")
- D-CLS-7 → Superseded-by-D-CLS-FM (FieldMask u64; position table
  IMPLICIT in OdooEntity.fields[] declaration order)
- D-CLS-8 → Superseded-by-D-CLS-RENDER (trait method; C2 enforced
  by the TYPE not docstring; askama engine deferred)
- D-CLS-9 → Superseded-by-D-CLS-AUDIT (falsifiable corpus-collapse;
  no 66-snapshot N4-freeze)

D-CHESS-BRINGUP-1 unchanged (Queued); my earlier chat-statement
proposing retirement was wrong and fully retracted (user: "retiring
chess is incompetence").

EPIPHANIES (prepended):
- F-DIAGRAMS-450-CLOSES-THE-LOOP — the two user-posted architecture
  diagrams (ODoo×OGIT+DOLCE+GoBD→Elixir/OTP; Dual Grammar §14) are now
  backed by shipped code via #450 panel-by-panel; board hygiene is
  training/seeding data for the panel-7 epiphany/fact/signal output
  loop, not human-only documentation
- E-CHESS-IS-NOT-RETIREABLE-PLURAL-FALSIFIERS — retracting my
  retire-proposal; plural falsifiers is the doctrine (Odoo
  business-richness, Wikidata open-world, Chess minimal-ISA-closure,
  future medicine SNOMED/finance FIBO/law per #443's
  owl-dolce-hhtl-compartments-aerial-fed.md); each domain hits the
  machinery from a different angle; substitution is the anti-pattern;
  "we're only touching X" is the diagnostic signature classes.md F4
  warned against

AGENT_LOG (prepended): full reconciliation entry — rebase audit (no
content deletions in any of my commits per `git show --stat`),
context (PRs #441..#450), discipline correction (the "I'll discard"
chat statement violated append-only as intent even though I committed
everything), next steps.

https://claude.ai/code/session_017gZ6sPRXYPj5n7uJ7NBtRv
AdaWorldAPI pushed a commit that referenced this pull request Jun 11, 2026
The review council's identity-scalar census left three "writable-now"
assertions unwritten; with niblepath_of landed, all three now pin:

- T3 guid_basin_equals_resolver_dolce_id: the GUID's routing basin (first
  nibble of the registry-paired path) == the resolver's dolce_id u8
  (cache-resolved, never an enum — OD-DOLCE #441).
- T5 guid_shape_hash_is_the_declared_truncation_of_structural_signature:
  pins the previously-unnamed StructuralSignature -> 22-bit shape_hash
  truncation, converting the NodeGuid compose-claim's weakest leg from
  doc-convention to test-pinned.
- T8 positional_helper_and_registry_mint_are_different_functions: the
  divergence pin — contract::ontology::entity_type_id (1-based positional,
  renumbers on reorder) vs the registry's global deduped counter (after one
  template reuse, Visit mints id 2 while sitting at row 3). Makes the
  two-mint divergence observable so the Phase-B move-4 gate has a witness.

254 ontology tests green; registry.rs clippy-clean; fmt clean.

https://claude.ai/code/session_012SorR8UbtEvYmbX8cXftj7
AdaWorldAPI pushed a commit that referenced this pull request Jun 13, 2026
…ensus tests

This branch's Phase-B paired mint (NiblePath-keyed dedup, append_mapping_with_path,
a minted_entity_types counter) was the SAME brick as main's f4cec3b D-IDENTITY-2,
shipped by a parallel session — a genuine duplication caught at rebase. The two
forked on the dedup key: main keys on the canonical class URI (template identity =
the URI, the literal DECISION-3 wording); this branch keyed on the routed NiblePath.
Main is merged + canonical, so the branch's duplicate registry implementation is
DROPPED (registry.rs is byte-identical to main) and the work composes on main's
shipped surface instead of racing a second mint.

Re-ported as ADDITIVE coverage against main's two-phase register_class_path API —
the identity-census assertions main's 5 DECISION-3 tests don't cover:
- T3 guid_basin_equals_resolver_dolce_id: the GUID routing basin == the resolver's
  cache-resolved dolce_id (OD-DOLCE #441), never an enum.
- T5 guid_shape_hash_is_the_declared_truncation_of_structural_signature: pins the
  StructuralSignature -> 22-bit shape_hash truncation (was doc-convention only).
- T7 guid_prefix_consistent_with_registry_path: a NodeGuid built from the registry's
  own pairing carries an exact entity_type and a <=4-nibble prefix that
  is_ancestor_of the registry's full minted path.
- T8 positional_helper_and_registry_mint_are_different_functions: the move-4 gate
  witness. Recomputed under main's rows.len()+1 URI-dedup mint — a same-URI reappend
  grows rows without minting, so Visit mints 3 (gap at 2) while the positional
  contract::ontology::entity_type_id helper calls it 2. The two mints diverge.

18 registry tests green (main's 14 + 4 re-ported); registry.rs fmt-clean, surgical
+131/-0; the crate's 12 pre-existing clippy errors (owl/ttl_parse/odoo_blueprint)
untouched. The identity plan carries a convergence note; AGENT_LOG prepends the
rebase entry.

https://claude.ai/code/session_012SorR8UbtEvYmbX8cXftj7
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