Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .claude/board/LATEST_STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@

---

## 2026-07-06 — MERGED #651 (merge `16c9e0c`) — `contract::class_view::WideFieldMask`: backward-compatible >64-field masks (canonical form, repr-independent Eq/Hash)

(Post-merge inventory entry, L-1 of the criticals wave — operator ruling (c), 2026-07-06. Also records: the `claude/classview-unified-render` work in the entry below MERGED as **PR #650**, merge `598f872` — its "not yet a PR" line is superseded.)

### Current Contract Inventory — new entry

- **`class_view::WideFieldMask`** (NEW, additive sibling type; **`FieldMask` is byte-for-byte untouched** — `Copy`/const-fn/u64 semantics intact; the enum-repr-inside-`FieldMask` alternative was evaluated and REJECTED because `ClassProjection::next`/`from_positions` rely on `FieldMask: Copy`). Widens the field-mask ceiling past 64 **without touching the existing type**: `Repr::Small(u64)` (bit-identical to `FieldMask`, allocation-free) promotes once to `Repr::Wide(Box<[u64]>)` at position ≥ 64; bit N = the same logical N3 field across both reprs; lossless `From<FieldMask>`, deliberately NO lossy reverse (a fallible `TryFrom` for the ≤64 case is the named follow-up for RBAC `PermissionSpec::projection`). **Canonical form (V-L P0, found + fixed pre-merge):** `intersect`/`union` trim trailing zero chunks and demote to `Small` when they fit; `PartialEq`/`Eq`/`Hash` are hand-written over a trimmed chunk view, so **semantically equal masks are equal and hash identically regardless of representation** (the adversarial review reproduced `a.intersect(&b) != from_positions(same set)` before merge; regression test pins it). No version split needed (`0x1000→0x1001` reserved as last resort, unused); zero-dep promise held (std only). **Unblocks X7/F14** — `account.move` has 109 declared fields; everything past bit 63 previously dropped silently. Doctrine guard: `FIELD_MASK_CAP = MAX_SIBLINGS_PER_TIER` (256) still caps meaningful masks — a ≥256-field class is an `OGAR-SOC` split signal, NOT a mask-widening use case; `WideFieldMask::full_for(field_count)` is the class-conditioned shape the OGAR bitmask doc always named as the eventual expansion. Verification: contract 829 green (+7 tests: u64-pin, >64 representable, no-alloc small path, cross-tier intersect/union, full_for, lossless promote, canonical-form regression); clippy `-D warnings` clean; consumers (`lance-graph-rbac`, `lance-graph-ontology`, arm-discovery) green with ZERO source changes. Cross-repo: OGAR interim loud-fail guard in `ogar-render-askama` (>64 fields + partial `FieldMask` → `Err` instead of silent drop) ships separately in the criticals wave; OGAR `WideFieldMask` adoption follows as O-2-adjacent work.

## 2026-07-06 — branch `claude/classview-unified-render` — `contract::class_view` unified ClassView render: facet value rows + is_a-walk resolution

(Per APPEND-ONLY rule: new top-of-inventory entry. Branch work, not yet a PR — records the contract types so a new session does not re-derive them. Operator-ratified this session: any app calls the SAME unified projection — resolve (is_a rail) → carve (FieldMask) → emit — with routes as thin per-app skins.)
Expand Down