Skip to content

Commit 1c44ea5

Browse files
authored
Merge pull request #652 from AdaWorldAPI/claude/op-redmine-convergence-handover-m54i4j
board: post-merge inventory entry for #651 WideFieldMask (+ record #650 merged)
2 parents 16c9e0c + dd5ff37 commit 1c44ea5

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

.claude/board/LATEST_STATE.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@
1010
1111
---
1212

13+
## 2026-07-06 — MERGED #651 (merge `16c9e0c`) — `contract::class_view::WideFieldMask`: backward-compatible >64-field masks (canonical form, repr-independent Eq/Hash)
14+
15+
(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.)
16+
17+
### Current Contract Inventory — new entry
18+
19+
- **`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.
20+
1321
## 2026-07-06 — branch `claude/classview-unified-render``contract::class_view` unified ClassView render: facet value rows + is_a-walk resolution
1422

1523
(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.)

0 commit comments

Comments
 (0)